Tvrtke sve više koriste infrastrukturu umjetne inteligencije (AI) za smještaj i upravljanje autonomnim radnim opterećenjima. Posljedično,
Uvođenje infrastrukture umjetne inteligencije obično pruža odgovarajuću računsku snagu za izvršavanje i obradu velikih skupova podataka. Ovi zahtjevi mogu se pretvoriti u potrebu za skalabilnim metodama koje omogućuju AI modelima da rade na velikim radnim opterećenjima bez štete na performansama.
Sve veća količina podataka zabrinjava sustave umjetne inteligencije u mnogim aspektima. Većina modela umjetne inteligencije, posebno onih temeljenih na dubokom učenju, uvelike ovisi o velikim količinama podataka tijekom obuke i zaključivanja. Međutim, bez odgovarajuće skalabilne infrastrukture, obrade i tumačenja takvih
Skalabilni AI hardver podržava pouzdane i stabilne performanse unatoč drastično neodoljivom računskom opterećenju. Uz Kubernetes, horizontalno skaliranje AI poslova je lako, a dinamička promjena veličine brojeva replika može se izvršiti prema potrebi. Nasuprot tome, Docker spremnici podržavaju lean, izolirana okruženja za pokretanje AI modela gdje sukob resursa nije usko grlo izvedbe.
Učinkovito korištenje resursa ključ je za isplativu i održivu implementaciju umjetne inteligencije. Kubernetesovi zahtjevi za resursima i ograničenja dopuštaju fino upravljanje CPU-om i memorijskim resursima izbjegavajući premalo i prekomjerno davanje. Dockerovo upravljanje resursima popunjava prazninu izoliranjem resursa spremnika.
Kontejnerizacija je jedna od prekretnica u evoluciji skalabilne infrastrukture umjetne inteligencije. Kontejnerizacija AI aplikacije i njezinih ovisnosti u Docker spremniku osigurava dosljednost u cijelom okruženju razvoja, testiranja i implementacije.
Prvo morate definirati Dockerfile kako biste instalirali okruženje. Dockerfile je niz uputa o tome kako izgraditi Docker sliku. Deklarira osnovnu sliku, potrebne ovisnosti i početne naredbe za postavljanje koje se primjenjuju na vašu aplikaciju. Slijedi osnovna Docker datoteka za Python model strojnog učenja:
# Use an official Python runtime as a parent image FROM python:3.9-slim # Set the working directory in the container WORKDIR /usr/src/app # Copy the current directory contents into the container COPY . . # Install any needed packages specified in requirements.txt RUN pip install --no-cache-dir -r requirements.txt # Expose the port the app runs on EXPOSE 5000 # Define environment variable ENV NAME World # Run the app CMD ["python", "./app.py"]
Ako je Dockerfile spreman, tada možete izgraditi Docker sliku i pokrenuti spremnik. Pokrenite sljedeće naredbe:
# Build the Docker image docker build -t ml-model:latest . # Run the container docker run -p 5000:5000 ml-model:latest
apiVersion: apps/v1 kind: Deployment metadata: name: ml-model-deployment spec: replicas: 3 selector: matchLabels: app: ml-model template: metadata: labels: app: ml-model spec: containers: - name: ml-model-container image: ml-model:latest ports: - containerPort: 5000
Gornji isječak koda pokazuje kako implementirati model umjetne inteligencije, ali model također morate učiniti dostupnim izvana. Morat ćete ga izložiti definiranjem Kubernetes usluge. Service.yaml u nastavku ilustrira primjer:
apiVersion: v1 kind: Service metadata: name: ml-model-service spec: selector: app: ml-model ports: - protocol: TCP port: 80 targetPort: 5000 type: LoadBalancer
Upotrijebite alat naredbenog retka kubectl za primjenu konfiguracija implementacije i usluge:
# Deploy the application kubectl apply -f deployment.yaml # Expose the service kubectl apply -f service.yaml
Kubernetes pruža izvrsne mogućnosti skaliranja AI okruženjima, maksimizirajući korištenje resursa i performanse. Horizontalno skaliranje provodi se dodavanjem dodatnih spremnika, a okomito skaliranje uključuje dodavanje dodatnih resursa poput CPU-a ili memorije u spremnik.
Horizontalno skaliranje koristi se za povećanje broja replika (Pods) sustava umjetne inteligencije za podnošenje većeg radnog opterećenja. Proces zahtijeva omogućavanje dinamičkog skaliranja ovisno o broju replika. Naredba koja se koristi za omogućavanje takvog procesa je `kubectl scale`. Određena naredba koristi se za postavljanje implementacije da funkcionira do najviše pet replika:
`kubectl scale --replicas=5 implementacija/ml-model-deployment`
Naredba povećava ml-model-deployment za korištenje pet replika spremnika modela strojnog učenja. Sustav dinamički osigurava više Podova kako bi se kasnije zadovoljio potreban broj.
Kubernetes olakšava automatsko skaliranje pomoću Horizontal Pod Autoscaler (HPA). HPA dinamički prilagođava broj replika na temelju upotrebe resursa, tj. procesora ili memorije, u odnosu na postavljena ograničenja. YAML konfiguracija prikazana u nastavku relevantan je primjer HPA-a koji se dinamički skalira za ml-model-deployment kao odgovor na upotrebu CPU-a:
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: ml-model-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: ml-model-deployment minReplicas: 2 maxReplicas: 10 targetCPUUtilizationPercentage: 50
U ovoj postavci, scaleTargetRef se koristi za definiranje implementacije koja se skalira, tj. ml-model-deployment. Minimalni broj replika postavljen je pomoću MinReplicas, dok se maksimalni broj replika kontrolira pomoću maxReplicas. Nadalje, postotak iskorištenosti CPU-a postavlja se pomoću targetCPUUtilizationPercentage, tj. na 50%.
Iskorištenje CPU-a veće od 50% na svim Podovima rezultira automatskim povećanjem broja replika na maksimalno 10. Čim iskorištenost CPU-a padne ispod postavljenog postotka, Kubernetes automatski smanjuje broj replika kako bi oslobodio resurse.
Horizontalno skaliranje uglavnom služi za suočavanje s većim prometom, dok okomito skaliranje pruža više resursa (kao što je CPU ili memorija) postojećim spremnicima. Proces je povećanje ili smanjenje zahtjeva za resursima i ograničenja u Kubernetes implementaciji. Kako bi se povećala ograničenja CPU-a i memorije ml-model-deploymenta, potrebno je otvoriti datoteku deployment.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: ml-model-deployment spec: replicas: 3 selector: matchLabels: app: ml-model template: metadata: labels: app: ml-model spec: containers: - name: ml-model-container image: ml-model:latest ports: - containerPort: 5000 resources: requests: cpu: "1" memory: "2Gi" limits: cpu: "2" memory: "4Gi"
U ovoj ažuriranoj konfiguraciji: