Įmonės vis dažniau naudoja dirbtinio intelekto (AI) infrastruktūrą, kad priglobtų ir valdytų savarankiškus darbo krūvius. Vadinasi,
Diegiant AI infrastruktūrą paprastai suteikiama pakankamai skaičiavimo galių dideliems duomenų rinkiniams vykdyti ir apdoroti. Dėl šių reikalavimų gali prireikti keičiamo dydžio metodų, leidžiančių dirbtinio intelekto modeliams veikti esant dideliam darbo krūviui nepakenkiant našumui.
Didėjantis duomenų kiekis AI sistemoms kelia susirūpinimą daugeliu aspektų. Dauguma AI modelių, ypač pagrįstų giliu mokymusi, labai priklauso nuo didelio duomenų kiekio mokymo ir išvadų metu. Tačiau be tinkamos keičiamo dydžio infrastruktūros, tokios apdorojimo ir interpretavimo
Keičiama AI aparatinė įranga palaiko patikimą ir stabilų veikimą, nepaisant drastiškai didelių skaičiavimo apkrovų. Naudojant „Kubernetes“, AI užduočių horizontalus mastelio keitimas yra paprastas, o dinamiškas kopijų numerių dydžio keitimas gali būti atliekamas kaip būtinybės funkcija. Priešingai, „Docker“ konteineriai palaiko ploną, izoliuotą aplinką AI modeliams paleisti, kur išteklių konfliktas nėra našumo kliūtis.
Efektyvus išteklių naudojimas yra raktas į ekonomišką ir tvarų AI diegimą. „Kubernetes“ išteklių užklausos ir apribojimai leidžia tiksliai valdyti procesoriaus ir atminties išteklius, išvengiant nepakankamo ir per didelio aprūpinimo. „Docker“ išteklių valdymas užpildo spragą išskirdamas konteinerio išteklius.
Konteineris yra vienas iš keičiamo dirbtinio intelekto infrastruktūros evoliucijos etapų. AI programos ir jos priklausomybių talpinimas „Docker“ konteineryje užtikrina nuoseklumą visose kūrimo, testavimo ir diegimo aplinkose.
Pirmiausia, norėdami įdiegti aplinką, turite apibrėžti Dockerfile. „Dockerfile“ yra instrukcijų, kaip sukurti „Docker“ vaizdą, serija. Jis deklaruoja pagrindinį vaizdą, reikalingas priklausomybes ir pradines sąrankos komandas, kurios taikomos jūsų programai. Toliau pateikiamas pagrindinis „Python“ mašininio mokymosi modelio „Docker“ failas:
# 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"]
Jei „Dockerfile“ yra paruoštas, galite sukurti „Docker“ vaizdą ir paleisti konteinerį. Vykdykite šias komandas:
# 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
Aukščiau pateiktame kodo fragmente parodyta, kaip įdiegti AI modelį, tačiau taip pat turite padaryti modelį prieinamą iš išorės. Turėsite jį atskleisti nustatydami Kubernetes paslaugą. Toliau pateikiamas service.yaml pavyzdys:
apiVersion: v1 kind: Service metadata: name: ml-model-service spec: selector: app: ml-model ports: - protocol: TCP port: 80 targetPort: 5000 type: LoadBalancer
Naudokite kubectl komandinės eilutės įrankį, kad pritaikytumėte diegimo ir paslaugų konfigūracijas:
# Deploy the application kubectl apply -f deployment.yaml # Expose the service kubectl apply -f service.yaml
„Kubernetes“ suteikia puikias DI aplinkos mastelio keitimo galimybes, maksimaliai padidindama išteklių panaudojimą ir našumą. Horizontalus mastelio keitimas atliekamas pridedant papildomų konteinerių, o vertikalus mastelio keitimas apima papildomų išteklių, pvz., CPU arba atminties, pridėjimą prie konteinerio.
Horizontalus mastelio keitimas naudojamas siekiant padidinti AI sistemos kopijų (Pod) skaičių, kad būtų galima atlikti didesnį darbo krūvį. Procesui reikia įjungti dinaminį mastelio keitimą, atsižvelgiant į kopijų skaičių. Tokiam procesui įjungti naudojama komanda yra „kubectl scale“. Konkreti komanda naudojama nustatant diegimą, kad jis veiktų ne daugiau kaip penkiose kopijose:
„kubectl scale --replicas=5 deployment/ml-model-deployment“.
Komanda padidina ml-model-deployment mastelį, kad būtų naudojamos penkios mašininio mokymosi modelio konteinerio kopijos. Sistema dinamiškai aprūpina daugiau Pod, kad vėliau atitiktų reikiamą skaičių.
„Kubernetes“ palengvina automatinį mastelio keitimą naudojant „Horizontal Pod Autoscaler“ (HPA). HPA dinamiškai koreguoja kopijų skaičių pagal išteklių naudojimą, ty procesorių arba atmintį, atsižvelgiant į nustatytas ribas. Žemiau parodyta YAML konfigūracija yra tinkamas HPA pavyzdys, kuris dinamiškai keičiamas pagal ml modelio diegimą, atsižvelgiant į procesoriaus naudojimą:
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
Šioje sąrankoje scaleTargetRef naudojamas apibrėžiant dislokavimo mastelį, ty ml-model-deployment. Minimalus kopijų skaičius nustatomas naudojant MinReplicas, o didžiausias kopijų skaičius valdomas naudojant maxReplicas. Be to, procesoriaus panaudojimo procentas nustatomas naudojant targetCPUUtilizationPercentage, ty iki 50%.
CPU panaudojimas daugiau nei 50 % visuose poduose automatiškai padidina kopijų skaičių iki 10. Kai tik procesoriaus panaudojimas nukrenta žemiau nustatyto procento, „Kubernetes“ automatiškai sumažina kopijų skaičių, kad atlaisvintų išteklius.
Horizontalus mastelio keitimas daugiausia skirtas didesniam srautui susidoroti, o vertikalus mastelio keitimas suteikia daugiau išteklių (pvz., CPU arba atminties) esamiems konteineriams. Procesas yra padidinti arba sumažinti išteklių užklausas ir apribojimus „Kubernetes“ diegime. Norint padidinti ml-model-deployment procesoriaus ir atminties ribas, reikia atidaryti failą 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"
Šioje atnaujintoje konfigūracijoje: