From db94b6124394b22d87f7786b0b6b6fee39d0531e Mon Sep 17 00:00:00 2001 From: Bogdan Tintor Date: Tue, 3 Sep 2024 10:56:04 +0200 Subject: [PATCH 1/2] Change of github logo to appropriate one in case browser is on "light" theme. --- README.md | 35 ++++++++++++++++++++--------------- docs_images/logo-classic.png | Bin 0 -> 40319 bytes 2 files changed, 20 insertions(+), 15 deletions(-) create mode 100644 docs_images/logo-classic.png diff --git a/README.md b/README.md index 85fc9343..d561d9ab 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,40 @@ -![](./docs_images/logo-dark.png) +![](./docs_images/logo-classic.png) --- +
[Coretex AI](https://www.coretex.ai) - Manage the complete lifecycle of your experiments and complex workloads, from project inception to production deployment and monitoring.
[![Linter code check](https://github.com/coretex-ai/coretexpylib/actions/workflows/linter-code-check.yml/badge.svg?branch=develop)](https://github.com/coretex-ai/coretexpylib/actions/workflows/linter-code-check.yml) -
+ ## What is Coretex? Coretex is a powerful MLOps platform designed to make AI experimentation fast and efficient. It contains multiple key features to help with that: + - [MLOps Workflow Management]() - Use powerful yet simple tools to optimize, build and run your ML Workflows - [Model Deployment](https://docs.coretex.ai/v1/getting-started/learn-basics/deployment) - Deploy your Model to production efforlessly with full tracking capabilities - [Task Library](https://github.com/coretex-ai/coretex-jobs) - Out-of-the-box support for common ML Tasks: - - LLM (Llama3) - - RAG - - Text-to-image (Stable Diffusion) - - Object Detection (YOLOv10) - - BioInformatics (Qiime2) - - and many others... + - LLM (Llama3) + - RAG + - Text-to-image (Stable Diffusion) + - Object Detection (YOLOv10) + - BioInformatics (Qiime2) + - and many others... - [Multi-language Support]() - You are not limited to just Python, with Coretex we support all of these: - - Python (including Notebooks) - - R - - Bash - - Docker - Define a custom Dockerfile which should be executed + - Python (including Notebooks) + - R + - Bash + - Docker - Define a custom Dockerfile which should be executed - [Parameter Optimization](https://docs.coretex.ai/v1/getting-started/learn-basics/project-and-task#parameter-optimization) - Define multiple values for parameters and Coretex will magically take care of performing grid search using those parameters - [Team Collaboration](https://docs.coretex.ai/v1/getting-started/learn-basics/organizations#collaboration-and-sharing) - Invite other people to collaborate with you on a Project by using a role-based access control (RBAC) for your Project - [Dataset Management](https://docs.coretex.ai/v1/getting-started/learn-basics/dataset) - Manage your Datasets by using multitude of features provided by Coretex such as: - - Support for annotatin images and IMU data directly on the platform - - Combine and duplicate functionality for re-using or merging existing Datasets - - Automatic Dataset lineage tracking which offers insight into how the Dataset was created + - Support for annotatin images and IMU data directly on the platform + - Combine and duplicate functionality for re-using or merging existing Datasets + - Automatic Dataset lineage tracking which offers insight into how the Dataset was created - [Real-time Experiment Tracking](#coretex-experiment-tracking) - Real-time tracking of Run metrics, Artifacts, stdout and stderr, etc... - [Infrastructure Setup](#infrastructure-setup) - Connect your own on-premise machines, or use dynamically scalable cloud machines @@ -47,6 +49,7 @@ Coretex helps you iterate faster and with more confidence. You get reproducibili ```bash $ pip3 install coretex ``` + ```bash $ pip install coretex ``` @@ -60,6 +63,7 @@ $ coretex run main.py ## Infrastructure Setup Connecting your own on-premise machines or your cloud machines to an MLOps platform has never been easier. This can be achieved by running one simple command: + ```bash $ coretex node start ``` @@ -67,6 +71,7 @@ $ coretex node start ## Coretex Experiment Tracking Coretex will automatically track: + - Source code and parameters - Artifacts - files which are generated as a result of execution - Console output - stdout and stderr diff --git a/docs_images/logo-classic.png b/docs_images/logo-classic.png new file mode 100644 index 0000000000000000000000000000000000000000..aae16f6cd2060005f04b3b17334cfc09cfe1d2bf GIT binary patch literal 40319 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

D0f#JS*Uf$ov1O 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�PDz^j5$)ta_Ot@z+FHTY5C6t<_GLjJ_b2fo zdLVm$R0#T@35&=nyP^M>=Sr#Y8a^)mb=Cf9qUW>Pt#XNtRFc-`L;&x3XhpqQ6W(Hz zGf%9`o)@}yY&n9DcLm$|o5XzuSp@lf`xQR5KWd6&cNQ|&3M})QcAh*u>x(cs!$ra4 z_9Jtu%t5gftx3CKjN4ps&1XUJ@`o{xgxqEtm~)C}#vRL}&_Ta}*r{sWTLpq^*4LYE z@Kb1Ze-F@L8`n8gDfo@^&hTazM91Hnk$GktaQ18VehXCipu?AnbecooyAC(geH?fa z%!d_+ByMaumcO_lv?k^pg3$0Q5s`F8g~<>~9bQY8w--0z9h#h!cARhIXK^ZvpND5h zTa-ANrfqb-_~pN){=^r~V}pjo(HP|iA^B>bjhMlkmSlXNWuKh;81NED_%~4@Ntz-ZNLG{W*A9d zk^CboJAaX{VK{Q87Yr0-qm#93p_gq9i%PBCVu|#i)bV zL4Dh(;=ogNSmJA7uvWqwiS}9 z#%k-BQwHF}CS6^zs%5XtUAUxGn%TDan>xZ!8M-^b)@4GLn-?OxHLq5b|Ms)bnCGu) z>3?0_Vj|yH5tJ^huS3QM9M2WUAgDjgV5`s;gU?=s_the}sJuV@IbLy(;#+m`L+FVe zfR9^X?{6};u6ih6eeYI*eTE;vN@vlMv&$g7rkTe>Y;pTls-LQ2pZ12NHmjJkf=Oi2 zamNv)cB>IMnZB5qUqNfhvAidgJ9#xM4qIpX3}5QpvW$%2kOvTp)1ax|Trxax;`a3O zHw@Ub@GneksZq(~T4<;<#3n^z3-?OIAx{h=H_Uh-uKE$SJf!e|{mKeRtY=7J zEKlGbs77Q`GSzImi?yiVn=m6{r8G#J?wQXZk*o?QwHbAF;7Cb-CczEu6;OdV*c7+s zvds-14%;wX;}&W^8?n-G8{%o8RR9lD0{oprMz+AwakeKW^^qe%DoDc4K?!R zY)Pch4EO9w34xP!HbOB+&mp)`m+fk((}y!P7RfaMzv^iQov+&VshHv{@m_gz)$OW~ zYffhS5pUUZ~78Kb0vj7`M(5^U(C790Px&C_xe|5rFRAafU`S| zc_eGIh3~#^YEP77a9~CsNJ88~QrSp3oWChq&e*nH$qc8};0xg7t==!mMaPHV<22`i z!X$s5_N-FvTshrLr(P;$%)_=vP^0K81mMpCDCbgE^TkCmzw*E^`tkM1&;9lV_ho>?=JN| zfDO7sD~Xp&DsFCNn6IdvUjdz?y9?O91G-W6ZJN!GB8`7PKqN}ElX4p5-8{vAYiI=| z49(D~Do)C%Zq?Je9cA-ajE)NAyz_0WRtGb592OK3Gx}X=gf^~5{ql!cT2^T$%h`33Xvin=C|4>3I zTXTih(xC*PVB$SA%#~9c+6oc)-FSJ;+5#1Roeyhuvlh?jZ9Pi`_$+{ETEpWP!ncZm(>Uq-20CE7^n&GB11DMB2-NtXIWvxP zMH}avKKS}urCzl!b4fQ2LF>FUf1^FiAUD~fF^ctl2Wr-!`im}PS+I+Xw5BshRJH)L z0@XTs72WUErCbtve`c#pSI9JT1=M`)0&+ZnB+?-6ol`e`EOyK-7CLNEO`Cq^BYEQE3gf1?2m{Gppz9KBm*3vqUC`mIsRevX4E2%DIR_~`yqr!!xTii@tM&g2J-MP=#M2(%K+cvFka_;j z*xQwu1}7Y;O+*J%FNjEEY}6U*moVw#J3GZmHVU3L#kSXaC$Mx49hZ1_w& zWKX()%~(*di+R74+a-ejVRFQ!&aj1umz`p#gSrR1lj%VJpJvE%3}}5l-N1kfY?u380y4a0Nwk0p+8XQ8rVGhB2%83?9ro^AlUU}iPMrhe%wiA)q^wm* ziz$bU@cJ>JQ_e-o-3RzlN?BQRG3(RIqDrN7!s?)OLIRtKPOo;kixFhI9A3P4Bx8r; z=*hX+XM9_Vh9HBCieg8hL}3!~g}H$5y##0HqD|ky^m?1NjpEYW&alU;4?!6?rnIw9 cMqo}T6S@BprlOZ~IF+EGs(T-G?@{>w0f}S=%m4rY literal 0 HcmV?d00001 From 450ff796aa33c68fe2d7d22d416f6a7c08ccd6af Mon Sep 17 00:00:00 2001 From: Bogdan Tintor Date: Tue, 3 Sep 2024 10:59:52 +0200 Subject: [PATCH 2/2] indentation changes revert --- README.md | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index d561d9ab..c76a2f03 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,38 @@ ![](./docs_images/logo-classic.png) --- -

[Coretex AI](https://www.coretex.ai) - Manage the complete lifecycle of your experiments and complex workloads, from project inception to production deployment and monitoring.
[![Linter code check](https://github.com/coretex-ai/coretexpylib/actions/workflows/linter-code-check.yml/badge.svg?branch=develop)](https://github.com/coretex-ai/coretexpylib/actions/workflows/linter-code-check.yml) -
+ ## What is Coretex? Coretex is a powerful MLOps platform designed to make AI experimentation fast and efficient. It contains multiple key features to help with that: - - [MLOps Workflow Management]() - Use powerful yet simple tools to optimize, build and run your ML Workflows - [Model Deployment](https://docs.coretex.ai/v1/getting-started/learn-basics/deployment) - Deploy your Model to production efforlessly with full tracking capabilities - [Task Library](https://github.com/coretex-ai/coretex-jobs) - Out-of-the-box support for common ML Tasks: - - LLM (Llama3) - - RAG - - Text-to-image (Stable Diffusion) - - Object Detection (YOLOv10) - - BioInformatics (Qiime2) - - and many others... + - LLM (Llama3) + - RAG + - Text-to-image (Stable Diffusion) + - Object Detection (YOLOv10) + - BioInformatics (Qiime2) + - and many others... - [Multi-language Support]() - You are not limited to just Python, with Coretex we support all of these: - - Python (including Notebooks) - - R - - Bash - - Docker - Define a custom Dockerfile which should be executed + - Python (including Notebooks) + - R + - Bash + - Docker - Define a custom Dockerfile which should be executed - [Parameter Optimization](https://docs.coretex.ai/v1/getting-started/learn-basics/project-and-task#parameter-optimization) - Define multiple values for parameters and Coretex will magically take care of performing grid search using those parameters - [Team Collaboration](https://docs.coretex.ai/v1/getting-started/learn-basics/organizations#collaboration-and-sharing) - Invite other people to collaborate with you on a Project by using a role-based access control (RBAC) for your Project - [Dataset Management](https://docs.coretex.ai/v1/getting-started/learn-basics/dataset) - Manage your Datasets by using multitude of features provided by Coretex such as: - - Support for annotatin images and IMU data directly on the platform - - Combine and duplicate functionality for re-using or merging existing Datasets - - Automatic Dataset lineage tracking which offers insight into how the Dataset was created + - Support for annotatin images and IMU data directly on the platform + - Combine and duplicate functionality for re-using or merging existing Datasets + - Automatic Dataset lineage tracking which offers insight into how the Dataset was created - [Real-time Experiment Tracking](#coretex-experiment-tracking) - Real-time tracking of Run metrics, Artifacts, stdout and stderr, etc... - [Infrastructure Setup](#infrastructure-setup) - Connect your own on-premise machines, or use dynamically scalable cloud machines @@ -49,7 +47,6 @@ Coretex helps you iterate faster and with more confidence. You get reproducibili ```bash $ pip3 install coretex ``` - ```bash $ pip install coretex ``` @@ -63,7 +60,6 @@ $ coretex run main.py ## Infrastructure Setup Connecting your own on-premise machines or your cloud machines to an MLOps platform has never been easier. This can be achieved by running one simple command: - ```bash $ coretex node start ``` @@ -71,7 +67,6 @@ $ coretex node start ## Coretex Experiment Tracking Coretex will automatically track: - - Source code and parameters - Artifacts - files which are generated as a result of execution - Console output - stdout and stderr