AI-mallit ja alustat

Suurten kielen mallien käyttöönotto Kubernetesissa: Kattava opas

mm
Lisää Unite.AI suosikkilähteisiisi Google-palvelussa
Kubernetes and gpu Large Language Models: A Complete Guide

Suuret kielen mallit (LLM) pystyvät ymmärtämään ja generoimaan ihmisen kaltaista tekstiä, mikä tekee niistä arvokkaita monissa sovelluksissa, kuten chatboteissa, sisällön luonnissa ja kielentunnistuksessa.

Kuitenkin LLM-mallien käyttöönotto voi olla haasteellista niiden valtavan koon ja laskentavaatimusten vuoksi. Kubernetes, avoimen lähdekoodin konttien orkesterointijärjestelmä, tarjoaa voimallisen ratkaisun LLM-mallien käyttöönotolle ja hallinnolle suuressa mittakaavassa. Tässä teknisessä blogissa tutkimme LLM-mallien käyttöönoton prosessia Kubernetesissa, kattaen eri näkökohtia, kuten konttien luonnin, resurssien jakamisen ja skaalautuvuuden.

Ennen kuin ryhdytään LLM-mallien käyttöönottoon, on tärkeää ymmärtää, mitä LLM-mallit ovat ja miksi niistä on niin paljon puhuttu.

LLM-mallit ovat tietokoneen oppimismalleja, jotka on koulutettu valtavilla määrillä tekstidataa. Nämä mallit oppivat ymmärtämään ja generoimaan ihmisen kaltaista kieltä analysoimalla tekstin sisäisiä suhteita ja malleja. Joitain suosittuja LLM-malleja ovat GPT (Generative Pre-trained Transformer), BERT (Bidirectional Encoder Representations from Transformers) ja XLNet.

LLM-mallit ovat saavuttaneet merkittäviä tuloksia eri NLP-tehtävissä, kuten tekstin generoimisessa, kielentunnistuksessa ja kysymyksiin vastaamisessa. Kuitenkin niiden valtava koko ja laskentavaatimukset asettavat merkittäviä haasteita käyttöönotolle ja laskennalle.

Kubernetes on avoimen lähdekoodin konttien orkesterointijärjestelmä, joka automatisoi konttien käyttöönoton, skaalautuvuuden ja hallinnan. Se tarjoaa useita etuja LLM-mallien käyttöönotolle, kuten:

* Skaalautuvuus: Kubernetes mahdollistaa LLM-mallien käyttöönoton skaalautuvuuden vaakasuunnassa lisäämällä tai poistamalla laskentaresursseja tarpeen mukaan, varmistamalla optimaalisen resurssien käytön ja suorituskyvyn.
* Resurssien hallinta: Kubernetes mahdollistaa tehokkaan resurssien jakamisen ja eristämisen, varmistamalla, että LLM-mallien käyttöönotto on päässyt käyttämään tarvittavia laskenta-, muisti- ja GPU-resursseja.
* Korkean saatavuuden: Kubernetes tarjoaa sisäänrakennetut mekanismit itsestään korjaavalle, automaattisille päivityksille ja palautuksille, varmistamalla, että LLM-mallien käyttöönotto on korkean saatavuuden ja kestävä laskennalle.
* Siirrettävyys: Konttien sisään LLM-mallien käyttöönotto voidaan helposti siirtää eri ympäristöihin, kuten omiin datakeskuksiin tai pilvipalveluihin, ilman laajaa uudelleenkonfiguraatiota.
* Ekosysteemi ja yhteisön tuki: Kubernetesilla on suuri ja aktiivinen yhteisö, joka tarjoaa runsaasti työkaluja, kirjastoja ja resursseja monimutkaisten sovellusten, kuten LLM-mallien, käyttöönotolle ja hallinnolle.

Ennen kuin LLM-malli voidaan käyttöönottoon Kubernetesissa, on useita edellytyksiä, jotka on otettava huomioon:

* Kubernetes-klusteri: Tarvitaan toimiva Kubernetes-klusteri, joko omiin datakeskuksiin tai pilvipalveluihin.
* GPU-tuki: LLM-mallit ovat laskennallisesti vaativia ja vaativat usein GPU-kiihdytystä tehokkaalle laskennalle. Varmistetaan, että Kubernetes-klusteri on päässyt käyttämään GPU-resursseja joko fyysisesti tai pilvipohjaisesti.
* Konttirekisteri: Tarvitaan konttirekisteri LLM-mallien Docker-kuville. Suosittuja vaihtoehtoja ovat Docker Hub, Amazon Elastic Container Registry (ECR), Google Container Registry (GCR) ja Azure Container Registry (ACR).
* LLM-mallitiedostot: Hankitaan esikoulutetut LLM-mallitiedostot (painot, konfiguraatio ja tokenizer) vastaavasta lähteestä tai koulutetaan oma malli.
* Konttien luonti: Konttien luonti LLM-sovellukselle Dockerin tai vastaavan konttien ajamisen avulla. Tämä vaatii Dockerfile-n, joka pakkaa LLM-koodin, riippuvuudet ja mallitiedostot Docker-kuvaan.

Kun edellytykset on täytetty, voidaan jatkaa LLM-mallin käyttöönottoon Kubernetesissa. Käyttöönoton prosessi koostuu useista vaiheista:

* Docker-kuvan luonti: Luodaan Docker-kuva LLM-sovellukselle annetun Dockerfile-n avulla ja lähetetään se konttirekisteriin.
* Kubernetes-resurssien määrittely: Määritellään Kubernetes-resurssit, jotka tarvitaan LLM-mallin käyttöönotolle, kuten Deployments, Services, ConfigMaps ja Secrets. Nämä resurssit määritellään yleensä YAML- tai JSON-manifesteilla.
* Resurssien konfigurointi: Määritellään resurssien vaatimukset LLM-mallin käyttöönotolle, kuten CPU-, muisti- ja GPU-resurssit. Tämä varmistaa, että käyttöönotto on päässyt käyttämään tarvittavia laskentaresursseja tehokkaalle laskennalle.
* Käyttöönotto: Käytetään kubectl-komennolla tai Kubernetes-hallintatyökalulla (esim. Kubernetes Dashboard, Rancher tai Lens) sovellettavaksi Kubernetes-manifesteja ja käyttöönottoon LLM-sovellusta.
* Seuranta ja skaalautuvuus: Seurataan LLM-mallin käyttöönoton suorituskykyä ja resurssien käyttöä Kubernetes-seurantatyökaluilla, kuten Prometheus ja Grafana. Skaalautuvuus voidaan mukauttaa tarpeen mukaan.

Esimerkki käyttöönotosta: Otetaan esimerkiksi GPT-3-kielen mallin käyttöönotto Kubernetesissa esikoulutetun Docker-kuvan avulla Hugging Facelta. Oletetaan, että on toimiva Kubernetes-klusteri, joka on konfiguroitu GPU-tuen kanssa.

Docker-kuvan lataus:

“`
docker pull huggingface/text-generation-inference:1.1.0
“`

Kubernetes-käyttöönoton luonti: Luodaan tiedosto nimeltä gpt3-deployment.yaml seuraavalla sisällöllä:

“`
apiVersion: apps/v1
kind: Deployment
metadata:
name: gpt3-deployment
spec:
replicas: 1
selector:
matchLabels:
app: gpt3
template:
metadata:
labels:
app: gpt3
spec:
containers:
– name: gpt3
image: huggingface/text-generation-inference:1.1.0
resources:
limits:
nvidia.com/gpu: 1
env:
– name: MODEL_ID
value: gpt2
– name: NUM_SHARD
value: “1”
– name: PORT
value: “8080”
– name: QUANTIZE
value: bitsandbytes-nf4
“`

Tämä käyttöönotto määrittää, että haluamme ajaa yhden replikan gpt3-konttia käyttäen huggingface/text-generation-inference:1.1.0-Docker-kuva. Käyttöönotto myös määrittää ympäristömuuttujat, joita tarvitaan kontin lataamiseen GPT-3-mallia ja konfiguroimiseen inference-palvelimelle.

Kubernetes-palvelun luonti: Luodaan tiedosto nimeltä gpt3-service.yaml seuraavalla sisällöllä:

“`
apiVersion: v1
kind: Service
metadata:
name: gpt3-service
spec:
selector:
app: gpt3
ports:
– port: 80
targetPort: 8080
type: LoadBalancer
“`

Tämä palvelu paljastaa gpt3-käyttöönoton portilla 80 ja luo LoadBalancer-tyyppisen palvelun, jotta inference-palvelin on saatavilla Kubernetes-klusterin ulkopuolelta.

Käyttöönotto Kubernetesiin: Sovellutaan Kubernetes-manifesteja kubectl-komennolla:

“`
kubectl apply -f gpt3-deployment.yaml
kubectl apply -f gpt3-service.yaml
“`

Seuranta: Seurataan käyttöönoton etenemistä seuraavilla komennoilla:

“`
kubectl get pods
kubectl logs
“`

Kun podi on ajossa ja lokit osoittavat, että malli on ladattu ja valmis, voidaan hankkia ulkoinen IP-osoite LoadBalancer-palvelusta:

“`
kubectl get service gpt3-service
“`

Testaus: Voidaan nyt lähettää pyynnöt inference-palvelimelle ulkoisella IP-osoitteella ja portilla, jotka saatiin edellisestä vaiheesta. Esimerkiksi curl-komennolla:

“`
curl -X POST \
http://:80/generate \
-H ‘Content-Type: application/json’ \
-d ‘{“inputs”: “The quick brown fox”, “parameters”: {“max_new_tokens”: 50}}’
“`

Tämä pyynnössä pyydetään GPT-3-inference-palvelinta jatkamaan aloitusta “The quick brown fox” jopa 50:lle lisätokenille.

Edistyneet aiheet, joista tulisi olla tietoinen:

Kubernetes tukee vaakasuuntaista ja pystysuuntaista autoskaalautuvuutta, mikä voi olla hyödyllistä LLM-käyttöönotoille niiden muuttuvien laskennallisten vaatimusten vuoksi. Vaakasuuntainen autoskaalautuvuus mahdollistaa automaattisen replikoiden määrän skaalautuvuuden metriikkojen perusteella, kuten CPU- tai muistin käytön. Pystysuuntainen autoskaalautuvuus mahdollistaa dynaamisen resurssien pyynnön ja rajoitusten mukauttamisen kontteihin.

Voidaan käyttää Kubernetesin Horizontal Pod Autoscaler (HPA) ja Vertical Pod Autoscaler (VPA) -komponentteja autoskaalautuvuuden ottamiseen käyttöön. Nämä komponentit seuraavat käyttöönottoa ja skaalauttavat resursseja esimääritettyjen sääntöjen ja kynnysten perusteella.

GPU-ajon ja jakamisen tehokas käyttö on tärkeää tilanteissa, joissa useita LLM-käyttöönottoja tai muita GPU-intensiivisiä työkuormia ajetaan samalla Kubernetes-klusterilla. Kubernetes tarjoaa useita mekanismeja, joilla voidaan varmistaa reilu ja tehokas GPU-käyttö, kuten GPU-laite-liitännäiset, solmujen valitsimet ja resurssien rajoitukset.

Voidaan myös hyödyntää edistyneitä GPU-ajo-tekniikoita, kuten NVIDIA (NVDA ) Multi-Instance GPU (MIG) tai AMD Memory Pool Remapping (MPR), jotta GPU:t voidaan virtualisoida ja jakaa useiden työkuormien kesken.

Joissain tapauksissa LLM-mallit voivat olla liian suuria yhdelle GPU:lle tai jopa yhdelle solmulle. Tällöin voidaan käyttää mallin rinnakkaisuutta ja sharding-tekniikoita jakamaan malli useiden GPU:iden tai solmujen kesken.

Mallin rinnakkaisuus tarkoittaa mallin arkkitehtuurin jakamista eri osiin (esim. koodari, dekoodari) ja jakamista useiden laitteiden kesken. Sharding tarkoittaa mallin parametrejen jakamista useiden laitteiden tai solmujen kesken.

Kubernetes tarjoaa mekanismeja, kuten StatefulSets ja Custom Resource Definitions (CRD), joilla voidaan hallita ja orkesteroida jakautuneita LLM-käyttöönottoja, joissa on mallin rinnakkaisuus ja sharding.

Useissa tapauksissa esikoulutetut LLM-mallit vaativat hienosäätöä tai jatkuvaa koulutusta domain-kohtaisilla tiedoilla parantamaan suorituskykyä tiettyjen tehtävien tai alojen osalta. Kubernetes tarjoaa skaalautuvan ja kestävän alustan hienosäätö- ja jatkuvaan koulutukseen.

Voidaan hyödyntää Kubernetesin batch-käsittelykehyksiä, kuten Apache Spark tai Kubeflow, ajamaan hienosäätö- tai koulutustehtäviä LLM-malleilla. Lisäksi voidaan integroida hienosäädetyt tai jatkuvasti koulutetut mallit inference-käyttöönottoon Kubernetesin mekanismeja, kuten rolling-päivityksiä tai blue/green-käyttöönottoja, käyttämällä.

Seuranta ja havainnointi ovat tärkeitä osia tuotantokäyttöönottoa, myös LLM-käyttöönottoa. Kubernetes tarjoaa sisäänrakennetut seurantaratkaisut, kuten Prometheus, ja integraatiot suosittuihin havainnointialustoihin, kuten Grafana, Elasticsearch ja Jaeger.

Voidaan seurata eri metriikoita, jotka liittyvät LLM-käyttöönottoon, kuten CPU- ja muistin käyttö, GPU-käyttö, inference-viive ja läpäisy. Lisäksi voidaan kerätä ja analysoida sovelluksen lokit ja jäljitykset saadakseen tietoa LLM-mallien käyttäytymisestä ja suorituskyvystä.

Turvallisuus ja vaatimukset ovat tärkeitä LLM-käyttöönoton osia, erityisesti silloin, kun käsitellään arkaluontoisia tietoja. Kubernetes tarjoaa useita ominaisuuksia ja integraatioita, joilla voidaan parantaa turvallisuutta, kuten verkkopolitiikat, roolipohjainen käyttöoikeuden hallinta (RBAC), salaisuuksien hallinta ja integraatio ulkoisten turvallisuusratkaisujen kanssa, kuten HashiCorp (HCP ) Vault tai AWS Secrets Manager.

Lisäksi, jos LLM-käyttöönottoa tehdään säädellyissä aloissa, kuten terveydenhuollossa, rahoituksessa tai lainsäädännössä, on varmistettava, että käyttöönotto noudattaa asiaankuuluvia standardeja ja sääntöjä, kuten GDPR, HIPAA tai PCI-DSS.

Monipilvi- ja hybridikäyttöönotot: Vaikka tämä blogipostus keskittyy yhden Kubernetes-klusterin LLM-käyttöönottoon, voidaan joissain tapauksissa tarvita monipilvi- tai hybridikäyttöönottoja. Kubernetes tarjoaa yhdenmukaisen alustan sovellusten käyttöönotolle ja hallinnolle eri pilvipalveluiden ja omien datakeskusten välillä.

Voidaan hyödyntää Kubernetesin federaatiota tai moni-klusterin hallintatyökaluja, kuten KubeFed tai GKE Hub, hallinoidakseen ja orkesteroidakseen LLM-käyttöönottoja useiden Kubernetes-klusterien yli, jotka ulottuvat eri pilvipalveluihin tai hybridiympäristöihin.

Nämä edistyneet aiheet korostavat Kubernetesin joustavuutta ja skaalautuvuutta LLM-mallien käyttöönotossa ja hallinnassa.

Johtopäätös:
LLM-mallien käyttöönotto Kubernetesissa tarjoaa useita etuja, kuten skaalautuvuuden, resurssien hallinnan, korkean saatavuuden ja siirrettävyyden. Seuraamalla tässä blogipostukseen esitettyjä vaiheita voidaan konttien sisään LLM-sovelluksen, määritellä tarvittavat Kubernetes-resurssit ja käyttöönotto voidaan tehdä Kubernetes-klusteriin.

Kuitenkin LLM-mallien käyttöönotto Kubernetesissa on vain ensimmäinen askel. Kun sovellus kasvaa ja vaatimukset muuttuvat, voidaan tarvita edistyneiden aiheiden, kuten autoskaalautuvuuden, GPU-ajon, mallin rinnakkaisuuden, hienosäätöä, seurantaa, turvallisuutta ja monipilvi-käyttöönoton, tutkiminen.

Kubernetes tarjoaa vankkan ja laajennettavan alustan LLM-mallien käyttöönotolle ja hallinnolle, mahdollistaen luotettavien, skaalautuvien ja turvallisten sovellusten luomisen.

Olen viettänyt viimeiset viisi vuotta uppoutumalla kiinnostavaan koneoppimisen ja syvän oppimisen maailmaan. Minun intohimoni ja asiantuntemukseni ovat johtaneet minun osallistumiseen yli 50:een monipuoliseen ohjelmistosuunnitteluhankkeeseen, joissa on erityisesti painottunut AI/ML. Minun jatkuva uteliaisuuteni on myös ohjannut minun luontaisen kielen prosessoinnin pariin, jota haluan tutkia tarkemmin.