From 9e619d77d1cada1ece4595d66cc66b6a51770d00 Mon Sep 17 00:00:00 2001 From: oreoluwa212 Date: Thu, 19 Dec 2024 10:29:18 +0100 Subject: [PATCH] feat: phi-3 and .NET integration with daytona --- ...hi-3_and_dot_NET_Development_in_Daytona.md | 345 ++++++++++++++++++ articles/assets/20241219_Daytona_start.PNG | Bin 0 -> 36386 bytes .../20241219_definition_cloud_modeling.md | 16 + 3 files changed, 361 insertions(+) create mode 100644 articles/20241219_Using_Phi-3_and_dot_NET_Development_in_Daytona.md create mode 100644 articles/assets/20241219_Daytona_start.PNG create mode 100644 definitions/20241219_definition_cloud_modeling.md diff --git a/articles/20241219_Using_Phi-3_and_dot_NET_Development_in_Daytona.md b/articles/20241219_Using_Phi-3_and_dot_NET_Development_in_Daytona.md new file mode 100644 index 00000000..45775957 --- /dev/null +++ b/articles/20241219_Using_Phi-3_and_dot_NET_Development_in_Daytona.md @@ -0,0 +1,345 @@ +--- +title: "Using Phi-3 and .NET Development in Daytona" +description: "Learn how to configure and run Phi-3 Labs samples in a Daytona environment using .NET and devcontainer.json." +date: 2024-12-19 +author: "Oreoluwa Ajayi" +tags: ["Phi-3 Labs", "Daytona", ".NET", "AI Development", "devcontainer"] +--- + +# Using Phi-3 and .NET Development in Daytona: A Comprehensive Guide + +## Table of Contents + +- [Introduction](#introduction) +- [Overview of Daytona](#overview-of-daytona) +- [Prerequisites and Initial Setup](#prerequisites-and-initial-setup) +- [Setting Up the Development Environment](#setting-up-the-development-environment) +- [Configuring Phi-3.5 Labs](#configuring-phi-35-labs) +- [Running and Testing](#running-and-testing) +- [Advantages for Collaborative Development](#advantages-for-collaborative-development) +- [Best Practices](#best-practices) +- [Troubleshooting](#troubleshooting) +- [References](#references) +- [Conclusion](#conclusion) + +## Introduction + +With the release of Phi-3.5, the Phi-3 Labs project has introduced advanced features and enhancements for AI and machine learning applications. The Phi-3.5 update brings significant improvements over its predecessors, offering enhanced capabilities for researchers and developers working with language models. + +Daytona, a cloud-based development environment, provides a powerful platform for managing dependencies and configurations, making it ideal for developing, testing, and deploying AI models. This guide provides a comprehensive walkthrough for setting up and running Phi-3.5 Labs samples in a Daytona environment using .NET, ensuring a streamlined development experience. + +### TL;DR + +- **Set up Daytona with .NET**: Configure a complete Daytona development environment with .NET +- **Integrate Phi-3.5 Labs**: Incorporate the latest Phi-3.5 models into your development workflow. +- **Run and Test Samples**: Execute and test Phi-3.5 Labs samples within Daytona. +- **Best Practices**: Optimize your AI development workflow + +## Overview of Daytona + +Daytona is an open-source platform that transforms cloud-based development environments. It provides developers with consistent, reproducible, and efficient workspaces across various cloud providers. + +### Key Benefits of Daytona + +1. **Cloud Provider Flexibility** + + - Supports major cloud providers (AWS, GCP, Azure) + - Local development support + - Easy migration between providers + +2. **Development Environment Management** + + - Automated environment setup + - Consistent configurations across team members + - Version-controlled development environments + +3. **Resource Optimization** + + - Dynamic resource allocation + - Cost-effective cloud usage + - Efficient workspace management + +4. **Enhanced Collaboration** + - Shared development environments + - Real-time collaboration features + - Integrated version control + +## Prerequisites and Initial Setup + +### 1. Core Dependencies + +Before proceeding, ensure you have the following installed: + +```bash +# Verify Docker installation +docker --version + +# Verify Git installation +git --version +``` + +### 2. Daytona Installation and Configuration + +1. **Install Daytona CLI** + Follow the [Daytona Installation Guide](https://daytona.io/docs/getting-started/installation) for your operating system. + +2. **Configure Cloud Provider** + + ```bash + # Initialize Daytona with your preferred provider + daytona provider add aws # For AWS + # OR + daytona provider add azure # For Azure + # OR + daytona provider add gcp # For GCP + ``` + +3. **Set Up Workspace** + + ```bash + # Create a Daytona workspace + daytona workspace create phi3-workspace + + # List available workspaces + daytona workspace list + ``` + +4. **Verify Installation** + + ```bash + # Check Daytona status + daytona status + + # View available providers + daytona provider list + ``` + +## Setting Up the Development Environment + +### 1. Project Initialization + +```bash +# Create project directory +mkdir phi3-daytona-project +cd phi3-daytona-project + +# Initialize git repository +git init + +# Create .gitignore +echo "bin/ +obj/ +.vs/ +.vscode/" > .gitignore +``` + +### 2. Development Container Setup + +1. **Create Container Configuration Directory** + + ```bash + mkdir .devcontainer + cd .devcontainer + ``` + +2. **Create Configuration Files** + + ```bash + touch devcontainer.json + touch Dockerfile + ``` + +3. **Configure devcontainer.json** + + ```json + { + "name": "Daytona .NET Environment", + "dockerFile": "Dockerfile", + "customizations": { + "vscode": { + "extensions": [ + "ms-dotnettools.csharp", + "ms-vscode.vscode-node-azure-pack" + ], + "settings": { + "terminal.integrated.shell.linux": "/bin/bash" + } + } + }, + "postCreateCommand": "dotnet restore" + } + ``` + +4. **Create Dockerfile** + + ```dockerfile + FROM mcr.microsoft.com/dotnet/sdk:7.0 + WORKDIR /app + RUN apt-get update && apt-get install -y \ + python3 \ + python3-pip \ + git + COPY . . + RUN dotnet restore + ``` + +### 3. Launch Daytona Environment + +```bash +# Initialize Daytona project, e.g, +daytona create phi3-demo + +# Start the development environment +daytona serve +``` +Daytona will now be ready to manage the project. + +![Daytona Environment Launch](assets/20241219_Daytona_start.PNG) + +## Configuring Phi-3.5 Labs + +### 1. Create .NET Project + +```bash +# Create new .NET solution +dotnet new sln -n Phi3Demo + +# Create console project +dotnet new console -n Phi3Demo.Console +dotnet sln add Phi3Demo.Console/Phi3Demo.Console.csproj +``` + +### 2. Set Up Phi-3.5 Integration + +Create a basic C# program to test Phi-3.5: + +```csharp +using Microsoft.SemanticKernel; +using Microsoft.SemanticKernel.Connectors.AI.Phi; + +class Program +{ + static async Task Main(string[] args) + { + var kernelBuilder = new KernelBuilder(); + + // Configure Phi-3.5 + kernelBuilder.WithPhi35TextGeneration(new PhiConfig + { + ModelPath = "microsoft/phi-3.5" + }); + + var kernel = kernelBuilder.Build(); + + // Test prompt + var result = await kernel.RunAsync("Explain quantum computing in simple terms."); + Console.WriteLine(result); + } +} +``` + +## Running and Testing + +### 1. Build and Run + +```bash +cd Phi3Demo.Console +dotnet run +``` + +### 2. Testing Features + +```bash +# Run tests +dotnet test + +# Execute sample prompts +dotnet run -- --prompt "Explain artificial intelligence" +``` + + + +## Advantages for Collaborative Development + +### 1. Consistent Environments + +- Every team member works with identical configurations +- No "works on my machine" issues +- Simplified onboarding for new team members + +### 2. Resource Optimization + +- Cloud-based resources scale as needed +- No need for powerful local hardware +- Efficient model sharing and versioning + +### 3. Enhanced Collaboration + +- Real-time code sharing and pair programming +- Integrated version control +- Easy environment replication + +### 4. Streamlined Workflow + +- Automatic dependency management +- Integrated debugging tools +- Quick iteration cycles + +## Best Practices + +### 1. Resource Management + +- Monitor memory usage when running models +- Use appropriate instance sizes +- Clean up unused resources + +### 2. Version Control + +- Keep models and code versioned +- Document environment changes +- Use branching for experiments + +### 3. Security + +- Follow least privilege principle +- Secure API keys and credentials +- Regular security updates + +## Troubleshooting + +Common issues and solutions: + +### 1. Environment Creation Issues + +```bash +daytona doctor +# Follow recommended fixes +``` + +### 2. Model Loading Problems + +- Check memory allocation +- Verify model path +- Update dependencies + +### 3. Daytona Connection Issues + +```bash +# Restart Daytona service +daytona restart + +# Check provider status +daytona provider status +``` + +## References + +- [Daytona Documentation](https://daytona.io/docs) +- [Phi-3 Labs GitHub Repository](https://github.com/elbruno/phi3-labs) +- [.NET Installation Guide](https://learn.microsoft.com/en-us/dotnet/core/install/linux-ubuntu) +- [devcontainer.json Reference](https://code.visualstudio.com/docs/remote/devcontainerjson-reference) +- [Microsoft Phi-3.5 Documentation](https://learn.microsoft.com/en-us/ai/phi-3.5) + +## Conclusion + +Integrating Phi-3 Labs with a Daytona environment using .NET can significantly enhance your development experience. By leveraging the power of Daytona’s cloud-based development environment, you can streamline your AI projects, making it easier to manage dependencies and collaborate with team members. diff --git a/articles/assets/20241219_Daytona_start.PNG b/articles/assets/20241219_Daytona_start.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e58236df182e712f5b41657170e2becff1cc45f8 GIT binary patch literal 36386 zcmd43d0f(I+csWPljF3_=uEk#m8flI%7{B=o03~;<*p^E8Ja1QyH45Wh*IE&C{*r= znrn*Nlm=-CBkKlHf)DkopRW)VbkD-4I9UQ*aEylqImrRJZwZdSf1EW%1{{xo^1BB zu(jB*p&YYy<;wTKbJ?3#F31fVcC<+UZKMSiUfr-E=_Txx#f5Osslnz%4JReitZ4Vu zU$&yRmz+ybG%A0VD(|zkCY7vr`?z7BO~Br5iNO_*uk5*T`B(t=^2wGv@(-v*!QA(D z*~!cJ@iK09&dcX^sGi1{D6#*N&2S`>X?zi!waA(xIxTtyfnZn=tn+l0h4c{{>aLu! z{tB)7|IQ1qFpTCkwnW?!w}O$BYu9T?1aWIjgJ_gbr=yrD5t&B?odp70u70(PFfCb* zlgxZfGVqdcfXiRD1(dYt3fKC~m;KaQb*?a-B{P!M=9frSUR0nPvdOp8EOu4;%J9ni z-%x>m&v$qgVH-xQ)?#lC0}3q7n+08na`vCN^ancLLQ_~($XfJl zWYBkdCOps}La=d62xroZG#`MMlyKATYT{yAG>U!LK3+t04y4J?_aSM`A_ECGUEtj? z+u&Qurkg?3+0pLHA6V6I*`2G~nw*RKgLa!6Uz!M1oDoItarC>D&E{q`=d^y=R9ABu zJ&&X|?gQq`>^5ZSaGy#g-bdhJ&~i|Vp_#4&X;rbD_;6Hr;;Oud0Y9ZD_RoBh4x|U8 zco^llD?yMQIsaxi=Sa^;6xUP!_Cf|U9)S`7|CSE|?(_Q_xc%i}6af4Yr|4lF4 zJUWY{BS-8*sxc4SXCj8j<7c|ZS$@6@a3Pc3X@AR1S3nw3y<)`%uZ7<<)sYP`hT(w`O9AAwY=6pl8j`xOvURou_N79 zFX!9kPAf2%^e^#~2@qQ#YdCo^UV(*AX(zWTngM1fUyb(tAF@aZ0}c}EV%%)F9; z0B%8YD%+!BA#v6e9P3m-l`iMQhPK`E+)FmWbg*ZRa12{imhp zp_gtO4rzSri^n`-QL4$BaM)Z8q&vI1{ERhWrX(qn_!(>1ZS1C2?NK3(XkVLMnC-$R zg!^K&O1fyO&J$MUZ>a`TE$%~>C2$o!x{}P0LwZOi(=!pjj7Nr_XyVZaviVrxHKB8h`2sWd&(<@o=fiYNF*u75{=7q7PyyTjKNg&Yt zW8ucto?C89pG`ZVyp*d5Ze-8eL!ZD5C+!wiU6;8RUS9Ai5!yv#i6^rKN)ug2kyF#6 z5`={j4ZqmGx=nn=rip5x#ZX1qik&Ia$bA{nKXVMrXiJKVXHpFeL(0M!&((pOy1Q)q z+K+@$(5C3}1m7I|-6HQ6cmCW(`H_Gj5hED#KH3Lo8vB7~xPwJ)*KAmB_l@<L5gSfjmBHu#XjY?ruWvhhr_y^B`HiY zlW0_iZ{)E{PkZ3RrwRR*?~`??6YWeDLyqfI3C$p zx?^YipFltfU)nwOKw#LSNrZ~+ojb8o6G5c0z80V#-;!7zwpU+NkEdU+%{hs*%{dA_O*U^b=paw!Rkqs z4xv#Y@T=y^>P%dmfZe<%Ob0F0fd=D5@4SW>tBcK&7`H|E0%3TC+p*Jp<$ao&pBg_x zI&ezuvU!tat)rL}H=XA_5xpv0?ll;0NQ{|%^MJOezhFJOw=uT$<;lR9 z>`)S#lUJj41}ql07m2=L)49sQ%)qT-Vf~lT7JKAwOuYD@PSiy-@9Z@^8u&xsR|keB z&NyJNQEA&(eg1`_=HC|e1Md4<-?5K^j0T|38+=YVk14;tY~2gqWglOkJ5smo%(TXY zQHNhOJf=0Cj*DgnPh3@58ywM>Xx?;}*g8LNX?7Wx0gbdeoH2{rb_NR?|J=T@4TqbVc4{~N;_%A5G<`Y&-StPne0r`bLDZUI-nL@MP7$;w&Q|m>XD6MFhD(n)n~VJhGj^gL_6R@+ z--_bd_>)tJcl5e2!H6Mjn=b>gi}zTVGj`OG?e=(ubP z-i0tr)<*`>GwSktGj|3b$zGluPNZE{MYm+h<=9inLTVhmkXhF)_!KGsE|_b!=J5#F z+;39j@wtS852huWH3s8rbMJQYom$76TPYpB+V6bv#sMJO`jjDj+&a@b^rmL+YYn8x zYrT5gV3^#UI}~W` zT1Hz~d3V$?^Jy7z!EmN2MzD$V6EnQKz|Ks^6WQdC z3-OLFFdOE_900OP;sF^j%%BWL5gT*gdAQ`jKW-L5_sA%D0o4I(9Qv+kAFg*lhR9N0fK{BH! zj2=h-#E-QWbw+epdB0p3O}m*zuVly3EAHZr?0d2N;YIYjuy$uc>qKKaeufeG43Y}c4=C+hVL^ZuSCTqqVczG?&Xt|F z%`(LPK5?)5R9qj+ZiP&(m)?n*rP{QZ!Mtp;}=kax(gpY5^3Z`y8f7u6`kgtgEx-4 zIkoiiUQ{0AarjW}#>JiN%H$4VzQ@pSPi?(d>QAG^ps|#^8B-BcYz1uG{p%yqamewE z6)a_hvTyY`NLC!G=bb(y2(Nl`Ad3l z?Kly3ltop_Yt|(SpO?F)SC8on(d9N~yQWp<3YW@-A ziPDR?=$Y=0I(4L$U3OMfiKBclP#v?U*LGsZLGN=esNklfK`K$$8;@QL2Z@JRV{HZr zVKH;7zi;19Xwg-L6&9u^%{a0WK>7%z*NJ9DE%;-FP~`|}5$e4B2#6fbGnCy@u~F?C z)_UId=K;hc<7y^-A1z>oui}ze&OnzS3+%XH)|hbt2`|XBaJcyKsD~q~mLXr27ce7i z&p`L2l8jipSid3Y(Fz5c5#U8C8jtv+S~O`E_Srg4$M+@%{GiImlm4`nIT+JvqsTc& z;`GZD+Pg5e4w{`AhG&z8)SCvnD;825&JDS|j3c#dK` zl>4b`<0tiIQSa2!>?bhrZuCFBiw(qTeuaM@UA0nfZrSi=^Av}p51^LLr0em(Cjh&% z76Rl=;D5=8c!S%R#7k@Y^`*}{!ChN|PQ=z2z{nDx-YJgXi@2qc2Q`yQ3Z&|trIt=J zt~Uaq_Txn}Np3vpE|002mMpC;8=<}9aYzS`zZqkiQM!jb#@daJ23z~!0t8oi`_2FV*EFlMj$J%Bx{u~8x zNcLYiM2Q&CwIJlP10x_TYX=O-OqXk~XU@)j>nkp=ej%aY(C&Sg zm^g#oA#0yd+;hvBrzIRz@zUdsjMO!}JSQpW+07df>YGJXC)@p4Mm1b890Bb$*5SUm zrOjxdF(?MdBN$sb5gK;c)3K#7CHN^n1Qfg|po@RMg||F*tNnU(3N)l4)H7=*E!tjr z)VOTbDhU|QrGEoPdcP#ep4NV+nQk25S$W%*089?6y(U+?O=ha^Yw}nt?5v(nvbykE zx&jKT@*avhP`vtkl0Gfqtr|cvh2p)h|t(!5|O z4Ik^v1rv7W?s@(Ud|v{+)iqHJjd2T^r{?sP{2`Kmupg|0ccvR{8<%m9Odg#|ik3z<3>t>ZKp zzCi<3XVQNkg*ifUfxV#}SgUqeSt!mutR`~rH?1`C8>;eA?F+#0%By8*Ea!`2We(be ziU1&!o3%sDF>ZL11<4KZ!DI2mq%k}Y3I>({(lZ4)&{I?n%=8!PpY-VP4rNce`{ z8g*hXJV02fuh!)FAohBF^>T!N%yH5R;p7~lV2q<2434w+V?7Xjrp#r=4HpitnrHz@ z!+-2DWPA&uZ3QCe%T-=mn7il^*H_3+3ZY(B_vEuGDChINyy^9%%4}e z)sy_B@sVf)Oly8uTeGat)4ASLw-O4g!i{QeoH@3}(l;swn!rx*Es13;)Wp6NRtofW ziy5Ij$;Tl=XaQrDI}@+F8b=xS-UgYUw_RQd;MdOj#Gl<(v=vg;_Z4i z_hjA+Hp~y)_d7IwC1=N5WaLcN4tcg`Qe7e=;r$&dqAw&;CtT z8`VXmWPxYN_Tr~m)n^HLC_67_0uv4FM{Yy7?Gf6OX$6x=%m=|t&zIjaXOef8@x@@zQfu+6eqnz-lnxf;-EewP$6KL31lVGeEnmiehdi&s#)HX^pw@-Ix0_*GI<(IOEeQb+kext8pXOVcAmdb+_7-$FSKd zxkF|>oxb-=GUpE8ZR9)hkskHNRX#`EB)f>`*T*8Q-`mv)5s>`aFc%2iFqX6tng?E!I}T*SJ)K*C4+IufaNs%M0eFGECFu21V%y5;>(b}B ze)-#n?yelUiglK}d-0LRBtwPF_>k?+lF~_~xylBQK8^APv@-dmlfCp)E)Gg&R~Lgk zS67fazdG{xWy7>45!YifQ3q-|{T@2?CH`*8lD&CjgmCI*kY~(X+wzvLMF!SEJ^J*o zHc~1OSGK=TmChN!J{+IR%B`bXbapuUx0_2=JkXIU(i~^-Y$x`E_^QbiHp6^xu*+F@ z*yMpSdoNso#z?(y_JmbucKP+@hEh1^5^mb<5uz*ABOdlrI@`}w0yG9+b@_Wo;imJ} z%$FxUOjn`npAa!;qWNpY*{sp8nW#hFz;bWF1@Ax%v#F#~R8YdciAUyne-pf1SKB7}M&F7@;9xMhF=MS`yJ+6IeRT@RlRtLY{ zC4_v29l`IWJ&vrhMjOLUT_YI-s>$*1T6Ejq!l`EmQ%--5E>Ml}$;va1W;P(a+VQ9ib zH!grsMU4JT9S_H21;L)P8ORwRx=ClZ#Vc|v6xDe*`LRl>bgS82lD4(bEo*~e&34a_ zre}>3BF#!4&e%|35G!);N@blYZg3rO0Tmv!NxyDGjC_Gzl8mfk!dYzDe9OOK76OvK z_ta^NxKT1PnHBNfJ9#H>cgyyK9!N^Tutp{OmxF4YCmmQkLIupzU-0TF4~a>mGL^SA zoNv*E{YE2OPUH?Vh~?6?iA#;|%O!Z_o@rd+&gzbrPCd_C6XjhWFKg{nz{uK$!p;(} z`*7j_zJMT-@&%w$XbGRVauH-fC)Ci@6R6>;VA;3-Qpc6$dllW_x7iK1U)QS3nN9?h z>_Zt5@!*&c=A+-Zu<#i5yn5OhAj;M>aZU%Tj@fTq)>j^Kv{hdD!%iNPPu2~(o3}z= z4^Lhio-#;D6v(ZF8LUi=6;sx*m%Bmx;E%p`16oPbzT?fU)KdYP8(owUDQnblRx$Ou z2P=(DMwQ@Bl~QX0lJ0?C3`PR`0Yf)p{}z-xs#+XGz7SPv*(_`o&Z{YqPu(<@3o;yS50!I{;o05$%MRS74Qy} zT-mCFC%ovSUTRauOz(|%bmzJ=S&oc7b@^a~RU_W0U>N->+=bbFMcXLfBYS7rK~lE; zG0%wtl6zSRl9USZAI@g8oKuilfIe8yg>GKG$>`oQyxBO43=+XZyt1X`7N%CcY;Kj0 zJC1P(1|olaa}q|ecpcl^7vq+$H4GXOwk>XgJP-JT77m(yqN+S~)W6m@`z<#vaN7Ed z0q5!w2p^Vl=&!y$E}EAS>wu{nL!BmZ44st^!)&zv(b$6)QOV>t&VE$7^QWwd@V!4< zi&#nyfVer24>{uDn4I89q@W3Ncu}jN&IB7#kD3PiG7*7fa!(S1`3tTpxQz zszSwd_kXgzeA1@kxZFLrp(^YKA0o`IZ!`?0uOoZGNmH7lna7nIWMSSMfcUo{7Z)3e zoK1qfL&v1sZGKyo#rQ-x?vB08@0iWFn}QSqW+6-{t%l=@*Wx>SdPsF+v>%tQi8`4d zrP4?z_{0BFtqcfSua)oKF)xPsq_;9}@OX8vjBg2Z&4?4R(ggI!|GvKPd&ivX=k}m# zyF2fKDAU+E@WfXyr=H>bY~xl$qt$n!j9kJk_-p)H>8$k|;vraFeSMS(WbTZ$lRdj- zl`8zyA3Eko>2|h9nFGxP?9Hm0SB&uJ6-|-t9lEZAE^HBF-h|QC81#43-GZ{JEkZUc z#ws&2s)uC|2?)9Ka=%SH$_;jx=Yl6jC4Xq1`P|rTp9)QvsvFWTUGn6l|Cyy&e7JrW zBhG!3hu8Ey#88+Y2DNpu5*V&$!~aT|yjZe^O891 zz=n1^XN0P?h%ksJ{Q3*~2kN?=U*41sW&F)y88=wi*U-$~q1>n<2@@K%+a3@B ze!3oX&lwu4#!=oepKWl=!IK&13w;HA^SQw6WinpSuT)&aNy5*k!*80#9(tCjw&$?W zmz*6neOqH3&dtn^_GeVWuOMQ4XZ)lqsr}!T$h5xS*v{JT@(IQP3+F#(T`Xwf#vRnn z@^8L-Yu@&w)qacS?h(KD2s7+ftg2k*JTi>*Q_lkIQm4!ub>namZL!-rTP=2JWJ))t z!2HpMJUd3Z5$FRfBsCH!+uZW18ZZwE=Qj9K_Y+a04aXbjZU3nXvH)t0mx+e=M2_=r ze9m;Jf$)IL#?p%UY8K;bR|M#!fYagci)5uP^NdNGSAW(;zm&~SG_UnsTGp>}JJH;| z?}Gx)kb5FKPm9=4blj-ztQj{N(Wnb+>*7~y66^CPyT=mkk!>TNv7+)v_2TA z=4G8~RCQ_%(;N(#j_5xl_i9Vl_NYMQrR+bpud#4F)eCOd3^aF)V`hpfK`5&eRtsMa zAFv;`Mqbr^$jdNLF!b`y0*|#`S8k^nVQRRJdC};2h;;~%a2SZm=I8M8`*8Bv6K@^e zlj|NB`kFatt+Vbxbh=1SFgw(j;f6Zkc0&1UCeTXGu5W7Maia`dis>Og~cV=Vm!tFb^%PlP1&VHnriZo|S?VHqIxcCZ8sp`tB0aX5$6}oXBJ&YpK zuy7_U%k}GeCgqtov7Lvu{eXR(g6q~8`D8+?hN7%OuODf%YquaBl;NKwh)?~ZB41#N zQZxXtc0#ac_b~ErDjqAd4=Jmv^#L^!$0cO^rsS27=N0Jh&TJN_6eMj(t2tZH2 z$Z_2)UO$e|48Ghl{7(WnC?Sc54V5V`Ed_EhkT9?PSAJPq4*!*KzOwS>>OT|CcL1(g z&?3oOY1wIBT4 zmFdg>PBr&QqKZ5nS=zNV=_}o@^vmu6q2&7U)-YvFk?F^9E1DKug`$kyWt!SBEe$(e zRiY4Y3>pBIn#Q^+Zk3TH=OnkM9cEY5BJZ1wcpZIaj~pL_1r1rRUKmIEPa~{$_**}- zS_Ul_!k|9gaB}~e+yeTIqo1aUF4&JlUd=%!DDN^&$LW_6ur7X}X~d?gsERu*2=IE_LoP&6Wzp zo)eNv=Fpq2nN4!|yw+5$X1I51K`Shl@w^M>J(T+4M&L9eT*>;QZW{&^{*7g3JkCX$ zl2QcRjhr#{1ta2~!@Q5F-}6&35n#26pNe^Hgsnz#qqy%q;t-u-Nj_$CRZ)nTkey%6 z%KMYGzEtuz#opa#KcI+-=r*|I%ko1oqK+-P&nOI^@;-_OQ;pcS23I#F)9mkt&gQ`L zh`_{z#{awG_Z+t4Iyub;ZueJ%cqw}aVO6(05x-#FnU?#d~-WBc4^5}Xf^N42DF6` z>Rw{OboI>qtFVbsJ{ZhXG?Ee9#T5n}LnFCOm(3=kAF`2_jd6u7VPY%gTs!Pv{n(8Q zMj0?lgl%UwY10h$Mw63iTj`jV#$d{AcEDR0^g5w(0*wWs?JeNNtGlp|K?-~83hh@P zi5QyhRrX%`#MlXU@Pf0SFBy<}#|5Pg3CBODQ1EI(hh$KieoY=6w^3z!;iuyW!8Xd}n5_JixP*%vL?8$;E9G>o!4 z{|zJDq+fGS%!#<8ZxihsQ>*o`CpQg_9Z`WJVkjbXpkAz#7Oj#Ux;02CcxP9d{>aM1 z9^(}4B3>P8Is(2IK^<00Ho|nnnzPORDaya)ezy>kZY6yWYsm;09e4gmVbr|ta@yeq zWU&z&&MJrFsbhfj+~60-gV5kwV**@+YrYf+(Of$#3c7JCUb+R^|_(RzDWj1BMxoVc3Q16_0hTvaS!hUc#Le zcdQ@=@uz$P$>#w|+NDdW808Y@i8Q;OT?zFhVy+{1M6t9IZpn3nFg+~s=s8gg#JsbomjR^-0Er}pp7?R^s*&3W$(RoJaJeUG%m zp37Os88O5l&*i)Zs>1`JofkbU;N?AW9nne+w&2SuSg<^Typnxgu?C1eikq^W0PV75 zn9-ix@Q&g&+>hm(3VgqFc%Z9*ah^`9vi@eg+a$hH3bd11hEeNNN&WkxDfp+N`N|h* zMpaL+giQA3l038st9Ay>pq~Lc>vb=FYsOBP>*}?LV|FEpnLpsrKXXiIu!TPd<|xmY z!7Ah={Yq$&<1$?(#AeQw_tq7S^39DoHUs$YTuH7kOM5boQTxTeM;+m4)RFCP`LXYy?2k-}G}bHXZ+}yn z4gUXy_&=0i)U2Req=>kA!=urTH1frehse=|AV>pxxaL4Y6uODgum+GR{Ih02H_99&F7w{5E8dA=|C6U}Ajo@| z3ih2^+(>YT)WcO^0Wg)qlXHIt+h#BeagxKC3JHr2<`>28nai2RyTv>db$Y^UD-T^d ziFKA?G#}<1)UdyuKC}{k2!R}Wjmp<<3v-IiFF|AqGGJ#(IcAH@$B07!j@VtM^2k)n zzclz!sNh289Me2*caACz-s$l%=?f=z)AB3aRF$>&+V8eU34=;oA@5Sy1vg>$D-)o_ zJM5Kcpodo#^mkd}rgeXAS0U+%uGn!JN=J+|O)R-|CBgXp(#Zff_HVq|a?QagQ`)kW zZa2vJJHGcat{!NG=Ob(stdbGfn?P|4OoNP60Two;{v^T3_Klx~{sw9ZOvjsy+Z7G4 zKjlq7H=IAlxCa?0&4`vFiClR;u|iIbcd?{H#^^zc;LPjVrfw$A^J{LL&8-mV#i>mI z*O&Z;PXk>7Bex*i#FyPk&ThQ=1pUc=9bw%s%$0Psko{f~u5HMTg=Npb6W>faP(~|y zc?)wMv$Qmh(}f}>StwiiVPhS!ol77tL<)kU#x84)bNzp_FP56|npfsp#J>iMb#x)5 z04oGg>~Yq6AYFau3OZa+#sPoS-~ApumHxhz|1#Nf&ce(a{a9<{Aag0&z5^Y3$i7>~zQ>8lM4YN1nnR3;oA809kz)tU-C*?@!X2sM@>P~v}$Q9)2` z%sJwl+O?YaorvQq-LS?_Sw#l*_utMs1ZWdQ=gt5!bFePU3kS_O%*#evG7u_TyE%r4 z-;kK|>2oUTtDrU?dX^>N&wFe*?5KmtHg;qGfE5VJU2Q)i{AMdteMSA*|is1RmGyyWG-2P2E0| zF-g2w;Egneeo!i@9zIbY+_IBu-B8@(+={z-HJXtyO4z(la5kGFQd=(4J@=BZyRcbb z4XcQKHXq-A!@r{zG8p{=!q)ZVLw(7N0P_YKeC)T5#9l~yLbaEAWi zfRD6Rv>o!CqiJfNS>bP1Y}b94usv40I1MrlzGlGCYTGP3?~omgB+VAllz*g~2-+R> z+YP71zzD)rz|s-0&_<6goJ*Ula&xV$J{2BV3U6S=(4DjUV#7PCbJngkU|7KMh3y}z z%Yu3@cnm&|3TfEA%C7#w8#Nem)Eb_|ODNsWrz_1Gvu`h(k6r9%E5!Uh++anZHk zl#$8c<{ONJV0Uwej@b;uT-)Tw0idK;)x@tB-P$2IET(&l5$#tql@w4#89%3Df zf>A66f3(Mrl`L5_7%r&?<0l zBcaEDUb}-+T|`;tO(G~L&+HX5p*jzkbhV^q^Ep9ZM2KxjN3d-Zpu|ds7lv|8P`x+V zx+Fdit~frglVt zFIf@1IvV?F?aH9ua3tpYDP5```&dv_x9F-Jhel?X9<(}u2Nx0|W?);!3A!0tF~6@p z47SU%=E9EfPr6L`afv&{ex~g-gKY}~=9Z=7lM#8g{lM<_{C;Oz7p?tNz{>t1q|m)Z10q19vWdB<%vfe^Apb> z1f;`G%RH%z?P)*-?jgGEtMS3>`j~s7tS<(u>M}ROdiH{74H^%_ckUi%-oU; zx1mUR2TP?85CM>m4tXR<^?ys9u&XK)lHwN>TH{2xFTz^w|H*M5_l*PwuTO$u3X&znb# zQ4iUXkFN@KVFpu&xWWte^qJ}DA>yVvE?}C&vgDq*W89X%zlK0UU*|>*5u-Q`Y$@`K zy!k()lhD7=iSiXl>pD8wQiQvkt4a6kZj%h#pj)GgNQYvMcEs3bZ(S7_!^4DS_mF3t zZo$Z#c*Ci)Al$HV(>#|Z1xr8I%~14Wt}z>fi=@Umkl6tl5EGV(Pyr2^rsl5*n8R-h zX|qzVuDW=yV#!~`0_3%I!eQm>?GZ`@XDl|Liut?+$Nh^sztZijVoRZoLXf$`O3j+w z-xz!)BK*YF&eevDP$`4{`fpi<^^deC(Lj$zGaxWK=JPHW>)#o6l!%kRhsX4HSbi4# zl7)P7BuMUS3dS(#7c}yzt(X@DZ6X$kTB!yK4q;hN)eyB&6$gg0EJy4>x>ZEOt?BM- z7hR~{3CN#@yUNsX(H(R}H~uDucF>F8#X{B3D%4nH3EwqjNO3F2Il=LPejDb}sG+bX zluy^?Wg1t)OG2+(leNKd{Z9q`x>R7rOtL$M{Ttaz5 z35@2PmUIkASbkmE5Wk-B7j>RzPx$rgJoR7)?ZIrm7ul+yp5WRJh7RL?($L+<5Y1(Z z{VmN~jWlmRX?SKQRtxNq30s62_$WT0bYDp>0y7@W6tRUk@xjD$(sTpWI9iRCsoTY* zi$^oZT+izysIXror$Vf}U_a2xza&EWb$-Ndc;Iof%bDDP0(|D{b#7-FlK5D3HKw+JYMhg`J5Zqc-PHB{Rsk^TYs1(# z!{4{3=i0tx>^;+{B8c=qa;~Nt3d=AGN*3HdX**q9Ri-Q6e~EX0Iuc+nUZ6aIjoul* zZm~=3E=(Ubg#yP{JgU3Rn=fdurWz{u2gj>;V6g?~L3lq_Lgr1}=I)B?{z&uqTbyX@ z&Cvv3CqJ7FdQhR&vy3oqDkw=Wxjy##w(dQ&Z4*Hq5A@+XK!z!Krc-GwdhT*#mXm(X zK5EQ~=A1}oGROQ35acEHRe-CmVaa6e=C=Z>_TsJfe+tn9u^pJ;`TZ$Ufjhum@R9C^ zyJ6Zg?8#URcyX{;d1eRU=7co8Pz%dVdqz7p{0nw){~xeJPV;|a2PR8=Gi&(;v|2TZ zmkL372)I<1S*Fksd(0PFy_0)_Jhbcv?;!7-AY38O)=pmx3!;0LAxfVDsoL}Ize5Wt z-_XJttTNkrdb2idEm}_hM6LRL~VgN?uXL06JjoowRO%BK0+%v8Q@PLFpz*fAo zrihtqko`4kI;onE`fCT?l*qJ&%6&P1C>a(8l}k2*8Cdns7!(EZ=SB&w^-xjlBU^z2 z1{Bn{*UvHfR(3$C$>2(bzZYQ{TOP;lSsgfpw5xbD`UHxH2eexqozUfBjg87w*pd2M z#CCd{sdoG0OGJ-;%FCKjVXski0SFfDTlxlY@uT(OHKY>Z#sq_y^Tf4lxVh~~x)mf<`G&>EM7tM4A^EZ7i0;hEhC|9!it_bN_o83>PP@p29wa+F; zbJxrJt?B}s??_2a#0MZ34}7dP?8dq{KE4|`9`~Q>z>S^u$0H)!l{G!;Vw0iAl}f~=F#{%4g_px1@G5Yf+Dpsv%*(P?<6Hc+r^{r{`H zV6d!T@7?Vc9X{|hrvHPC?7>-5Y@}e~ zV-RrFC~k3VXKz-iM(IlaI0(10Fn;u)dGU_63o#+KgLxfs*t^wrKrwjJkZh_O2b{M1 z7#reAAE#@51>EgH%cq9+j!)c1Jyi{)%<+ykZ_E}Df@Ho9ARJLg>9^Uf zOF<iVd08nfW`?`zRPTj%-y152&w@hCL!utG~40=+UM}@Kx(mDjBOr zo?*aE*mG%z6%qFv+t7*n&9f_?+HUo0=*ImC1adv;`?l?4 z!lHwOU~gC?pdM&^P|*oo!)Ok|oADet_M-T+e}vO52-Ve99yGG#jGHzi!sk$1kwcV! z8GdSfNv=t_v9tm=c1!$7jfn-rG68mdxh&_e=ZAs?9khIZT<$d4n4@dx*}vk5nF9>{ zw~i%%j={>^fm^{=+HIa|Hybe zT{t2e7aO{lR%A&a?~Cctr_<(W_NM4rcm8vhObl0E=1E|Bbf8C9>q|yrljEh2xzW_g zEH>+rmZTN`aVhK$q|S+gI7=ov{$yXz=#Rc>5X>Z@8hw|g{k>(G)E;h{#P!!NZ-gzT zd&N38@3)g^P`SSm=Fbm~Iy^`c)RqH_h~SgVzn{s;>yY%uV)9}U*c0AT9^=)D)m|(2 z1Aft;pV&>j8EkQkY0{!9fo?yEp-y45j@ImAMjyzDqqf&7@XKIo^i%<(P90!l?zy*+ zKh)kA{brGEjylNH?X;IWL8V7rrMs#n2+V{PtfESk?RlEBaT$mLun~JLY|O!`U|#Tc z!Q$^TutL0!Pb)soU{`Q5zfK0#DY?eYWbxk^8WqeE%LF6Kthz8ZB3}(y8jU}!(=__9 zu-F|9))bNFET}$>loINAKOms8%^uJ+euAIOF7HYXPkOUHt^^GRmDmxbtyT0?yX`W= z2WETh(9ne^rU^e!)FS>X6H)9LUsX~Ddrh5d{l-NcRXjx{my^e9kHY7w0nX?nFoMiM z$ImX6$RXF0+&>X=7r53gVh|DeMGX6#%_)ot^?{pvkd`QIJ6Gf?({ zbb*ut!f96*>BbyxUE;T(`$mB?OB(tXn*-ChFz@5uc;hD+SMzTqM7;0|w^nAgi>9D; zi5-O?&zkDiz&@vFRlxQmLcH=~lC%f64j`+KmZf(ifuj_1?n8T@?O5E#`H4Sq6yWen z^li*n2EA25+2iIY3IZ?ye5>3j8>jB^*@UZ zKC=fK?CJQRZnLi34->2!=l+|_x6b-$qnK6=RCsnr%;~}Yv?l7>om{j)>*qq=MSj>6 zUwOktroB^*&j|l?!T1r{i z{6$�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 BTKWJ0 literal 0 HcmV?d00001 diff --git a/definitions/20241219_definition_cloud_modeling.md b/definitions/20241219_definition_cloud_modeling.md new file mode 100644 index 00000000..9cc866cd --- /dev/null +++ b/definitions/20241219_definition_cloud_modeling.md @@ -0,0 +1,16 @@ +--- +title: 'Cloud Modeling (C-Model)' +description: 'The practice of developing, managing, and running AI models in cloud environments, particularly in combination with cloud-based development platforms like Daytona. ' +date: 2024-12-19 +author: 'Oreoluwa Ajayi' +--- + +# Cloud Modeling (C-Model) + +## Definition + +C-Model refers to the process of utilizing cloud-based environments to configure, deploy, and manage AI models, such as Phi-3, alongside development tools like .NET. It involves the integration of cloud platforms, containerization (e.g., using devcontainers), and machine learning models to streamline development, testing, and deployment workflows. + +## Context and Usage + +C-Model is used in the context of AI and machine learning development when teams leverage cloud platforms like Daytona to run and experiment with AI models in a scalable and collaborative manner. The approach simplifies model management and fosters efficient workflows in cloud-based environments, improving collaboration, automation, and scalability.