V tej objavi prikazujemo, kako Kubeflow na AWS (distribucija Kubeflow, specifična za AWS), ki se uporablja z AWS posode za globoko učenje in Elastični datotečni sistem Amazon (Amazon EFS) poenostavlja sodelovanje in zagotavlja prilagodljivost pri usposabljanju modelov globokega učenja v obsegu na obeh Amazonski elastični kubernetes storitev (Amazon EKS) in Amazon SageMaker z uporabo pristopa hibridne arhitekture.
Razvoj strojnega učenja (ML) temelji na zapletenih in nenehno razvijajočih se odprtokodnih okvirih in kompletih orodij ter na kompleksnih in nenehno razvijajočih se ekosistemih strojne opreme. To predstavlja izziv pri prilagajanju razvoja ML na gručo. Vsebniki ponujajo rešitev, saj lahko v celoti enkapsulirajo ne samo učno kodo, ampak celoten sklad odvisnosti do knjižnic strojne opreme. To zagotavlja okolje ML, ki je dosledno in prenosljivo, ter olajša ponovljivost okolja za usposabljanje na vsakem posameznem vozlišču gruče za usposabljanje.
Kubernetes je splošno sprejet sistem za avtomatizacijo uvajanja infrastrukture, skaliranje virov in upravljanje teh kontejnerskih aplikacij. Vendar pa Kubernetes ni bil zgrajen z mislijo na ML, zato se podatkovnim znanstvenikom lahko zdi protisloven zaradi velike odvisnosti od datotek s specifikacijami YAML. Ni izkušnje z Jupyterjem in ni veliko zmogljivosti, specifičnih za ML, kot so upravljanje delovnih tokov in cevovodi, ter druge zmogljivosti, ki jih pričakujejo strokovnjaki za ML, kot je nastavitev hiperparametrov, gostovanje modela in druge. Takšne zmogljivosti je mogoče zgraditi, vendar Kubernetes ni bil zasnovan tako, da bi bil to glavni cilj.
Odprtokodna skupnost je opazila in razvila plast na vrhu Kubernetesa, imenovano Kubeflow. Cilj Kubeflowa je narediti uvajanje delovnih tokov ML od konca do konca v Kubernetes preprosto, prenosljivo in razširljivo. Kubeflow lahko uporabite za uvajanje najboljših odprtokodnih sistemov za ML v različne infrastrukture.
Kubeflow in Kubernetes zagotavljata prilagodljivost in nadzor skupinam podatkovnih znanstvenikov. Vendar je zagotavljanje visoke izkoriščenosti izobraževalnih grozdov, ki delujejo v velikem obsegu z zmanjšanimi operativnimi režijskimi stroški, še vedno izziv.
Ta objava prikazuje, kako lahko stranke, ki imajo lokalne omejitve ali obstoječe naložbe v Kubernetes, obravnavajo ta izziv z uporabo Amazon EKS in Kubeflow na AWS za implementacijo cevovoda ML za porazdeljeno usposabljanje, ki temelji na samoupravljanem pristopu, in uporabo popolnoma upravljanega SageMakerja za stroškovno optimizirano, v celoti upravljano in proizvodno izobraževalno infrastrukturo. To vključuje postopno implementacijo hibridne porazdeljene izobraževalne arhitekture, ki vam omogoča izbiro med obema pristopoma med izvajanjem, kar zagotavlja največji nadzor in prilagodljivost s strogimi potrebami za vaše uvedbe. Videli boste, kako lahko še naprej uporabljate odprtokodne knjižnice v svojem skriptu za usposabljanje za globoko učenje in ga še vedno naredite združljivega za izvajanje v Kubernetesu in SageMakerju na način, ki ni odvisen od platforme.
Kako pomaga Kubeflow na AWS in SageMaker?
Modeli nevronske mreže, zgrajeni z okviri globokega učenja, kot so TensorFlow, PyTorch, MXNet in drugi, zagotavljajo veliko večjo natančnost z uporabo bistveno večjih naborov podatkov za usposabljanje, zlasti v primerih uporabe računalniškega vida in obdelave naravnega jezika. Vendar pa pri velikih naborih podatkov za usposabljanje traja dlje, da se usposobijo modeli globokega učenja, kar na koncu upočasni čas do trženja. Če bi lahko razširili gručo in skrajšali čas usposabljanja modela s tednov na dneve ali ure, bi to lahko močno vplivalo na produktivnost in hitrost poslovanja.
Amazon EKS pomaga zagotoviti upravljano kontrolno ravnino Kubernetes. Amazon EKS lahko uporabite za ustvarjanje obsežnih vadbenih gruč z instancami CPU in GPE ter uporabite komplet orodij Kubeflow za zagotavljanje ML-ju prijaznih, odprtokodnih orodij in operacionalizacijo delovnih tokov ML, ki so prenosljivi in razširljivi, z uporabo Kubeflow Pipelines za izboljšanje produktivnosti vaše ekipe in zmanjšati čas do trga.
Vendar bi lahko pri tem pristopu obstajalo nekaj izzivov:
- Zagotavljanje maksimalne izkoriščenosti grozda med skupinami podatkovne znanosti. Na primer, primerke GPE bi morali zagotoviti na zahtevo in zagotoviti njihovo visoko izkoriščenost za zahtevna opravila proizvodnega obsega, kot je usposabljanje za poglobljeno učenje, in uporabiti primerke CPE za manj zahtevne naloge, kot je predprocesiranje podatkov.
- Zagotavljanje visoke razpoložljivosti težkih infrastrukturnih komponent Kubeflow, vključno z bazo podatkov, shranjevanjem in avtentikacijo, ki so nameščene v delovnem vozlišču gruče Kubernetes. Nadzorna ravnina Kubeflow na primer ustvarja artefakte (kot so primerki MySQL, dnevniki podov ali shramba MinIO), ki sčasoma rastejo in potrebujejo prostornine za shranjevanje, ki jih je mogoče spreminjati, z zmožnostmi stalnega spremljanja.
- Deljenje nabora podatkov za usposabljanje, kode in računalniških okolij med razvijalci, grozdi za usposabljanje in projekti je zahtevno. Na primer, če delate na lastnem naboru knjižnic in so te knjižnice močno medsebojno odvisne, postane resnično težko deliti in izvajati isti del kode med podatkovnimi znanstveniki v isti ekipi. Prav tako morate za vsako izvedbo vadbe prenesti nabor podatkov o vadbi in zgraditi sliko vadbe z novimi spremembami kode.
Kubeflow na AWS pomaga pri reševanju teh izzivov in zagotavlja delno upravljan izdelek Kubeflow za podjetja. S Kubeflow na AWS lahko zamenjate nekatere storitve nadzorne ravnine Kubeflow, kot so baza podatkov, shranjevanje, spremljanje in upravljanje uporabnikov, s storitvami, ki jih upravlja AWS, kot je Služba za relacijske baze podatkov Amazon (Amazon RDS), Preprosta storitev shranjevanja Amazon (Amazon S3), Elastični datotečni sistem Amazon (Amazon EFS), Amazon FSx, amazoncloudwatchin Amazon Cognito.
Zamenjava teh komponent Kubeflow loči kritične dele nadzorne ravnine Kubeflow od Kubernetesa, kar zagotavlja varno, razširljivo, prožno in stroškovno optimizirano zasnovo. Ta pristop prav tako sprosti vire za shranjevanje in računanje iz podatkovne ravnine EKS, ki jih morda potrebujejo aplikacije, kot je usposabljanje porazdeljenih modelov ali strežniki za prenosne računalnike uporabnikov. Kubeflow na AWS zagotavlja tudi izvorno integracijo prenosnikov Jupyter s slikami vsebnika za globoko učenje (DLC), ki so vnaprej zapakirane in konfigurirane z ogrodji za globoko učenje, optimizirana za AWS, kot sta PyTorch in TensorFlow, ki vam omogočajo, da takoj začnete pisati kodo za usposabljanje, ne da bi se ukvarjali z razrešitvami odvisnosti in optimizacijami ogrodja. Poleg tega vam integracija Amazon EFS z vadbenimi gručami in razvojnim okoljem omogoča skupno rabo kode in obdelanega nabora vadbenih podatkov, s čimer se izognete ustvarjanju slike vsebnika in nalaganju ogromnih naborov podatkov po vsaki spremembi kode. Te integracije s Kubeflow na AWS vam pomagajo pospešiti gradnjo modela in čas usposabljanja ter omogočajo boljše sodelovanje z enostavnejšo skupno rabo podatkov in kode.
Kubeflow na AWS pomaga zgraditi zelo razpoložljivo in robustno platformo ML. Ta platforma zagotavlja prilagodljivost za gradnjo in usposabljanje modelov globokega učenja ter omogoča dostop do številnih odprtokodnih kompletov orodij, vpogled v dnevnike in interaktivno odpravljanje napak za eksperimentiranje. Vendar pa doseganje maksimalne izkoriščenosti infrastrukturnih virov med usposabljanjem modelov globokega učenja na stotinah grafičnih procesorjev še vedno vključuje veliko operativnih režijskih stroškov. To bi lahko odpravili z uporabo SageMakerja, ki je v celoti upravljana storitev, oblikovana in optimizirana za upravljanje zmogljivih in stroškovno optimiziranih vadbenih gruč, ki so omogočeni le, ko je zahtevano, prilagojeni po potrebi in se samodejno zaustavijo, ko so opravila končana, s čimer zagotavljajo skoraj 100 % izkoriščenosti virov. SageMaker lahko integrirate s Kubeflow Pipelines z uporabo upravljanih komponent SageMaker. To vam omogoča operacionalizacijo delovnih tokov ML kot del cevovodov Kubeflow, kjer lahko uporabite Kubernetes za lokalno usposabljanje in SageMaker za usposabljanje na ravni izdelkov v hibridni arhitekturi.
Pregled rešitev
Naslednja arhitektura opisuje, kako uporabljamo cevovode Kubeflow za gradnjo in uvajanje prenosljivih in razširljivih delovnih tokov ML od konca do konca za pogojno izvajanje porazdeljenega usposabljanja v Kubernetesu z uporabo usposabljanja Kubeflow ali SageMaker na podlagi parametra časa izvajanja.
Usposabljanje Kubeflow je skupina operaterjev Kubernetes, ki dodajo Kubeflowu podporo za porazdeljeno usposabljanje modelov ML z uporabo različnih ogrodij, kot so TensorFlow, PyTorch in drugi. pytorch-operator
je Kubeflow izvedba Kubernetesa vir po meri (PyTorchJob) za izvajanje porazdeljenih izobraževalnih opravil PyTorch v Kubernetesu.
Komponento PyTorchJob Launcher uporabljamo kot del cevovoda Kubeflow za zagon porazdeljenega usposabljanja PyTorch med eksperimentalno fazo, ko potrebujemo prilagodljivost in dostop do vseh osnovnih virov za interaktivno odpravljanje napak in analizo.
Uporabljamo tudi komponente SageMaker za Kubeflow Pipelines za izvajanje našega usposabljanja modelov v proizvodnem obsegu. To nam omogoča, da izkoristimo zmogljive funkcije SageMaker, kot so popolnoma upravljane storitve, porazdeljena izobraževalna opravila z maksimalno uporabo GPE in stroškovno učinkovito usposabljanje prek Amazonski elastični računalniški oblak (Amazon EC2) Spot primeri.
Kot del postopka ustvarjanja poteka dela dokončate naslednje korake (kot je prikazano v prejšnjem diagramu), da ustvarite ta cevovod:
- Uporabite datoteko manifesta Kubeflow, da ustvarite nadzorno ploščo Kubeflow in dostopate do zvezkov Jupyter z osrednje nadzorne plošče Kubeflow.
- Uporabite Kubeflow pipeline SDK za ustvarjanje in prevajanje Kubeflow cevovodov s kodo Python. Cevovodno prevajanje pretvori funkcijo Python v vir poteka dela, ki je format YAML, združljiv z Argo.
- Uporabite odjemalca Kubeflow Pipelines SDK, da pokličete končno točko storitve cevovoda za zagon cevovoda.
- Cevovod ovrednoti pogojne spremenljivke časa izvajanja in se odloči med SageMakerjem ali Kubernetesom kot ciljnim okoljem izvajanja.
- Uporabite komponento Kubeflow PyTorch Launcher za izvajanje porazdeljenega usposabljanja v izvornem okolju Kubernetes ali uporabite komponento SageMaker za oddajo usposabljanja na upravljani platformi SageMaker.
Naslednja slika prikazuje komponente Kubeflow Pipelines, vključene v arhitekturo, ki nam dajejo prilagodljivost pri izbiri med porazdeljenimi okolji Kubernetes ali SageMaker.
Potek dela primera uporabe
Uporabljamo naslednji pristop po korakih za namestitev in izvajanje primera uporabe za porazdeljeno usposabljanje z uporabo Amazon EKS in SageMaker z uporabo Kubeflow na AWS.
Predpogoji
Za ta korak morate imeti naslednje predpogoje:
- An AWS račun.
- Stroj z Dockerjem in Vmesnik ukazne vrstice AWS (AWS CLI).
- Po želji lahko uporabite AWS Cloud9, integrirano razvojno okolje (IDE) v oblaku, ki omogoča dokončanje celotnega dela iz vašega spletnega brskalnika. Za navodila za nastavitev glejte Nastavite Cloud9 IDE. V okolju Cloud9 izberite znak plus in odprite nov terminal.
- Ustvari vlogo z imenom
sagemakerrole
. Dodajte upravljane pravilnikeAmazonSageMakerFullAccess
inAmazonS3FullAccess
da SageMakerju omogočite dostop do veder S3. To vlogo uporablja opravilo SageMaker, predloženo kot del koraka Kubeflow Pipelines. - Prepričajte se, da ima vaš račun omejitev vrste vira SageMaker Training za
ml.p3.2xlarge
povečana na 2 uporabi Konzola storitvenih kvot
1. Namestite Amazon EKS in Kubeflow na AWS
Za izdelavo gruče Kubernetes in uvajanje Kubeflowa lahko uporabite več različnih pristopov. V tem prispevku se osredotočamo na pristop, za katerega menimo, da prinaša preprostost v postopek. Najprej ustvarimo gručo EKS, nato pa na njej razmestimo Kubeflow na AWS v1.5. Za vsako od teh nalog uporabljamo ustrezen odprtokodni projekt, ki sledi načelom Naredi okvir. Namesto namestitve nabora predpogojev za vsako nalogo, gradimo vsebnike Docker, ki imajo vsa potrebna orodja in izvajajo naloge znotraj vsebnikov.
V tej objavi uporabljamo Do Framework, ki avtomatizira uvajanje Kubeflow z Amazon EFS kot dodatkom. Za uradne možnosti uvedbe Kubeflow na AWS za uvedbe v proizvodnji glejte Deployment.
Konfigurirajte trenutni delovni imenik in AWS CLI
Konfiguriramo delovni imenik, tako da se lahko nanj sklicujemo kot na izhodišče za naslednje korake:
Konfiguriramo tudi profil AWS CLI. Če želite to narediti, potrebujete ID ključa za dostop in skrivni ključ za dostop AWS upravljanje identitete in dostopa (JAZ SEM) uporabnik račun s skrbniškimi pravicami (priložite obstoječi upravljani pravilnik) in programskim dostopom. Oglejte si naslednjo kodo:
1.1 Ustvarite gručo EKS
Če že imate na voljo gručo EKS, lahko preskočite na naslednji razdelek. Za to objavo uporabljamo projekt aws-do-eks ustvariti naš grozd.
- Najprej klonirajte projekt v vaš delovni imenik
- Nato zgradite in zaženite
aws-do-eks
posoda:O
build.sh
skript ustvari sliko vsebnika Docker, ki ima vsa potrebna orodja in skripte za zagotavljanje in delovanje gruč EKS. Therun.sh
skript zažene vsebnik z uporabo ustvarjene slike Docker in ga vzdržuje, tako da ga lahko uporabljamo kot okolje za upravljanje EKS. Če želite videti stanje svojegaaws-do-eks
posodo, lahko tečete./status.sh
. Če je vsebnik v stanju Exited, lahko uporabite./start.sh
skript, da prikažete vsebnik ali znova zaženete vsebnik, lahko zaženete./stop.sh
čemur sledi./run.sh
. - Odprite lupino v teku
aws-do-eks
posoda: - Če želite pregledati konfiguracijo gruče EKS za našo uvedbo KubeFlow, zaženite naslednji ukaz:
Privzeto ta konfiguracija ustvari gručo z imenom
eks-kubeflow
vus-west-2
Regija s šestimi vozlišči m5.xlarge. Prav tako šifriranje nosilcev EBS ni privzeto omogočeno. Omogočite ga lahko z dodajanjem"volumeEncrypted: true"
v skupino vozlišč in bo šifrirala s privzetim ključem. Po potrebi spremenite druge nastavitve konfiguracije. - Če želite ustvariti gručo, zaženite naslednji ukaz:
Postopek zagotavljanja gruče lahko traja do 30 minut.
- Če želite preveriti, ali je bila gruča uspešno ustvarjena, zaženite naslednji ukaz:
Rezultat prejšnjega ukaza za gručo, ki je bila uspešno ustvarjena, izgleda kot naslednja koda:
Ustvarite nosilec EFS za učno opravilo SageMaker
V tem primeru uporabe pospešite usposabljanje SageMaker z usposabljanjem modelov globokega učenja iz podatkov, ki so že shranjeni v Amazon EFS. Prednost te izbire je neposredno zagon vaših izobraževalnih nalog iz podatkov v Amazon EFS brez premikanja podatkov, kar ima za posledico hitrejše začetne čase usposabljanja.
Ustvarimo nosilec EFS in uvedemo gonilnik EFS Container Storage Interface (CSI). To se doseže s skriptom za uvajanje, ki se nahaja v /eks/deployment/csi/efs
znotraj aws-do-eks
zabojnik.
Ta skript predvideva, da imate v svojem računu eno gručo EKS. Set CLUSTER_NAME=
v primeru, da imate več kot eno gručo EKS.
Ta skript zagotovi nosilec EFS in ustvari cilje vpetja za podomrežja gruče VPC. Nato uvede gonilnik EFS CSI in ustvari efs-sc
razred shranjevanja in efs-pv
trajna glasnost v gruči EKS.
Po uspešnem zaključku skripta bi morali videti izhod, kot je ta:
Ustvarite končno točko Amazon S3 VPC
Uporabljate zasebni VPC, do katerega imata dostop vaše delovno mesto za usposabljanje SageMaker in datotečni sistem EFS. Če želite vadbeni gruči SageMaker omogočiti dostop do veder S3 iz vašega zasebnega VPC, ustvarite končno točko VPC:
Zdaj lahko zapustite aws-do-eks
lupino vsebnika in nadaljujte z naslednjim razdelkom:
1.2 Namestite Kubeflow na AWS na Amazon EKS
Za uvedbo Kubeflow na Amazon EKS uporabljamo projekt aws-do-kubeflow.
- Klonirajte repozitorij z naslednjimi ukazi:
- Nato konfigurirajte projekt:
Ta skript odpre konfiguracijsko datoteko projekta v urejevalniku besedil. Pomembno je za AWS_REGION nastavljen na regijo, v kateri je vaša gruča, kot tudi AWS_CLUSTER_NAME da se ujema z imenom gruče, ki ste jo ustvarili prej. Privzeto je vaša konfiguracija že pravilno nastavljena, tako da, če vam ni treba narediti nobenih sprememb, samo zaprite urejevalnik.
O
build.sh
skript ustvari sliko vsebnika Docker, ki ima vsa potrebna orodja za uvajanje in upravljanje Kubeflowa v obstoječi gruči Kubernetes. Therun.sh
skript zažene vsebnik z uporabo slike Docker, skript exec.sh pa odpre ukazno lupino v vsebnik, ki ga lahko uporabimo kot okolje za upravljanje Kubeflow. Lahko uporabite./status.sh
skript, da preverite, ali jeaws-do-kubeflow
vsebnik deluje in deluje./stop.sh
in./run.sh
skripte za ponovni zagon po potrebi. - Ko imate odprto lupino v
aws-do-eks
vsebnika, lahko preverite, ali je konfiguriran kontekst gruče po pričakovanjih: - Če želite uvesti Kubeflow v gručo EKS, zaženite
deploy.sh
skript:Razmestitev je uspešna, ko vsi podi v imenskem prostoru kubeflow preidejo v stanje izvajanja. Tipičen izhod je videti kot naslednja koda:
- Če želite spremljati stanje podov KubeFlow, lahko v ločenem oknu uporabite naslednji ukaz:
- Pritisnite Ctrl + C ko se vsi sklopi izvajajo, izpostavite nadzorno ploščo Kubeflow zunaj gruče, tako da zaženete naslednji ukaz:
Videti bi morali izpis, ki je videti kot naslednja koda:
Ta ukaz posreduje storitev vhodnega prehoda Istio iz vaše gruče v vaša lokalna vrata 8080. Za dostop do nadzorne plošče Kubeflow obiščite http://localhost:8080 in se prijavite s privzetimi uporabniškimi poverilnicami (uporabnik@example.com/12341234). Če izvajate aws-do-kubeflow
vsebnik v AWS Cloud9, potem lahko izberete predogled, nato izberite Predogled zagnane aplikacije. Če uporabljate Docker Desktop, boste morda morali zagnati ./kubeflow-expose.sh
scenarij zunaj aws-do-kubeflow
zabojnik.
2. Nastavite Kubeflow v okolju AWS
Za nastavitev vašega Kubeflow v okolju AWS ustvarimo nosilec EFS in prenosnik Jupyter.
2.1 Ustvarite nosilec EFS
Če želite ustvariti nosilec EFS, izvedite naslednje korake:
- Na nadzorni plošči Kubeflow izberite Količine v podoknu za krmarjenje.
- Izbrala Nov zvezek.
- za Ime, vnesite
efs-sc-claim
. - za Velikost prostornine, vnesite
10
. - za Razred shranjevanja, izberite efs-sc.
- za Način dostopa, izberite ReadWriteOnce.
- Izberite ustvarjanje.
2.2 Ustvarite Jupyterjev zvezek
Če želite ustvariti nov zvezek, izvedite naslednje korake:
- Na nadzorni plošči Kubeflow izberite Prenosniki v podoknu za krmarjenje.
- Izberite Nov zvezek.
- za Ime, vnesite
aws-hybrid-nb
. - za Slika Jupyter Docket, izberite sliko
c9e4w0g3/notebook-servers/jupyter-pytorch:1.11.0-cpu-py38-ubuntu20.04-e3-v1.1
(najnovejša razpoložljiva slika DLC jupyter-pytorch). - za CPU, vnesite
1
. - za Spomin, vnesite
5
. - za Grafične kartice, pusti kot Noben.
- Ne delajte nobenih sprememb v Glasnost delovnega prostora oddelek.
- v Podatkovne količine oddelek, izberite Priložite obstoječi nosilec in razširite razdelek Obstoječi nosilec
- za Ime, izberite
efs-sc-claim
. - za Montažna pot, vnesite
/home/jovyan/efs-sc-claim
.
S tem se nosilec EFS priklopi na blok vašega prenosnega računalnika Jupyter in vidite mapoefs-sc-claim
v vašem vmesniku laboratorija Jupyter. Nabor podatkov o usposabljanju in kodo za usposabljanje shranite v to mapo, tako da lahko gruče za usposabljanje dostopajo do njih, ne da bi morali znova zgraditi slike vsebnika za testiranje. - Izberite Dovolite dostop do cevovodov Kubeflow v razdelku Konfiguracija.
- Izberite Zagon.
Preverite, ali je vaš zvezek uspešno ustvarjen (lahko traja nekaj minut). - o Prenosniki stran, izberite Connect za prijavo v okolje JupyterLab.
- o git izberite meni Klonirajte repozitorij.
- za Klonirajte repo, vnesite
https://github.com/aws-samples/aws-do-kubeflow
.
3. Zaženite porazdeljeno usposabljanje
Ko nastavite prenosni računalnik Jupyter, lahko zaženete celotno predstavitev z uporabo naslednjih korakov na visoki ravni iz mape aws-do-kubeflow/workshop
v kloniranem repozitoriju:
- Skript za usposabljanje PyTorch Distributed Data Parallel (DDP): Glejte skript za usposabljanje PyTorch DDP cifar10-distributed-gpu-final.py, ki vključuje vzorec konvolucijske nevronske mreže in logiko za distribucijo usposabljanja v gruči CPE in GPE z več vozlišči. (Za podrobnosti glejte 3.1)
- Namesti knjižnice: Zaženite zvezek
0_initialize_dependencies.ipynb
za inicializacijo vseh odvisnosti. (Za podrobnosti glejte 3.2) - Zaženite distribuirano delovno usposabljanje PyTorch na Kubernetesu: Zaženite zvezek
1_submit_pytorchdist_k8s.ipynb
za ustvarjanje in oddajo porazdeljenega usposabljanja na enem primarnem in dveh delovnih vsebnikih z uporabo datoteke YAML PyTorchJob po meri Kubernetes s kodo Python. (Za podrobnosti glejte 3.3) - Ustvarite hibridni cevovod Kubeflow: Zaženite zvezek
2_create_pipeline_k8s_sagemaker.ipynb
za ustvarjanje hibridnega cevovoda Kubeflow, ki izvaja porazdeljeno usposabljanje na SageMaker ali Amazon EKS z uporabo spremenljivke izvajalnega časatraining_runtime
. (Za podrobnosti glejte 3.4)
Prepričajte se, da ste zagnali zvezek 1_submit_pytorchdist_k8s.ipynb
preden začnete z beležnico 2_create_pipeline_k8s_sagemaker.ipynb
.
V naslednjih razdelkih podrobno razpravljamo o vsakem od teh korakov.
3.1 Skript za usposabljanje PyTorch Distributed Data Parallel (DDP).
V okviru porazdeljenega usposabljanja usposabljamo klasifikacijski model, ki ga ustvari preprosta konvolucijska nevronska mreža, ki deluje na podatkovnem nizu CIFAR10. Scenarij treninga cifar10-distributed-gpu-final.py
vsebuje samo odprtokodne knjižnice in je združljiv za izvajanje tako v vadbenih gručah Kubernetes kot SageMaker na napravah GPE ali instancah CPE. Oglejmo si nekaj pomembnih vidikov skripta za usposabljanje, preden zaženemo naše primere zvezkov.
Mi uporabljamo torch.distributed
modul, ki vsebuje podporo PyTorch in komunikacijske primitive za večprocesni paralelizem med vozlišči v gruči:
Ustvarjamo preprost model klasifikacije slik z uporabo kombinacije konvolucijskih, maksimalnih združevanja in linearnih plasti, za katere je uporabljena funkcija aktivacije relu v naprednem prehodu usposabljanja modela:
Uporabljamo torch DataLoader, ki združuje nabor podatkov in DistributedSampler
(naloži podnabor podatkov na porazdeljen način z uporabo torch.nn.parallel.DistributedDataParallel
) in zagotavlja enoprocesni ali večprocesni iterator nad podatki:
Če ima vadbena gruča GPU-je, skript izvaja usposabljanje na napravah CUDA in spremenljivka naprave vsebuje privzeto napravo CUDA:
Preden zaženete porazdeljeno usposabljanje z uporabo PyTorcha DistributedDataParallel
če želite zagnati porazdeljeno obdelavo na več vozliščih, morate inicializirati porazdeljeno okolje s klicem init_process_group
. To se inicializira na vsakem računalniku učne gruče.
Instanciramo model klasifikatorja in kopiramo model v ciljno napravo. Če je porazdeljeno usposabljanje omogočeno za izvajanje na več vozliščih, je DistributedDataParallel
razred se uporablja kot ovojni objekt okoli modela modela, ki omogoča sinhrono porazdeljeno usposabljanje na več strojih. Vhodni podatki so razdeljeni na serijsko dimenzijo in na vsak stroj in vsako napravo je nameščena replika modela.
3.2 Namestitev knjižnic
Namestili boste vse potrebne knjižnice za izvajanje primera distribuiranega usposabljanja PyTorch. To vključuje Kubeflow Pipelines SDK, Training Operator Python SDK, odjemalec Python za Kubernetes in Amazon SageMaker Python SDK.
3.3 Zaženite distribuirano delovno usposabljanje PyTorch na Kubernetesu
Zvezek 1_submit_pytorchdist_k8s.ipynb
ustvari datoteko YAML vira po meri Kubernetes PyTorchJob z uporabo usposabljanja Kubeflow in odjemalca Kubernetes Python SDK. Sledi nekaj pomembnih izrezkov iz tega zvezka.
Ustvarimo PyTorchJob YAML s primarnim in delovnim vsebnikom, kot je prikazano v naslednji kodi:
To je predloženo nadzorni ravnini Kubernetes z uporabo PyTorchJobClient
:
Oglejte si dnevnike usposabljanja Kubernetes
Dnevnike usposabljanja si lahko ogledate iz istega prenosnika Jupyter z uporabo kode Python ali iz odjemalske lupine Kubernetes.
3.4 Ustvarite hibridni cevovod Kubeflow
Zvezek 2_create_pipeline_k8s_sagemaker.ipynb
ustvari hibridni cevovod Kubeflow, ki temelji na pogojni izvajalni spremenljivki training_runtime
, kot je prikazano v naslednji kodi. Beležnica uporablja SDK za cevovode Kubeflow in je zagotovil nabor paketov Python za določanje in zagon cevovodov poteka dela ML. Kot del tega SDK-ja uporabljamo naslednje pakete:
- Okraševalec paketov domensko specifičnih jezikov (DSL).
dsl.pipeline
, ki okrasi funkcije Python za vrnitev cevovoda - O
dsl.Condition
paket, ki predstavlja skupino operacij, ki se izvajajo samo, ko je izpolnjen določen pogoj, kot je preverjanjetraining_runtime
vrednost kotsagemaker
orkubernetes
Glej naslednjo kodo:
Porazdeljeno usposabljanje SageMaker konfiguriramo z uporabo dveh primerkov ml.p3.2xlarge.
Ko je cevovod definiran, ga lahko prevedete v specifikacijo Argo YAML z uporabo kompleta za razvoj programske opreme Kubeflow Pipelines kfp.compiler
paket. Ta cevovod lahko zaženete z odjemalcem Kubeflow Pipeline SDK, ki pokliče končno točko storitve Pipelines in posreduje ustrezne glave za preverjanje pristnosti neposredno iz prenosnega računalnika. Oglejte si naslednjo kodo:
Če dobite sagemaker import
napaka, zaženite !pip namestite sagemaker in znova zaženite jedro (na Kernel izberite meni Ponovno zaženite jedro).
Izberite Podrobnosti o teku povezavo pod zadnjo celico za ogled cevovoda Kubeflow.
Ponovite korak ustvarjanja cevovoda z training_runtime='kubernetes'
za testiranje delovanja cevovoda v okolju Kubernetes. The training_runtime
spremenljivko lahko posredujete tudi v vašem cevovodu CI/CD v proizvodnem scenariju.
Oglejte si dnevnike izvajanja cevovoda Kubeflow za komponento SageMaker
Naslednji posnetek zaslona prikazuje podrobnosti našega cevovoda za komponento SageMaker.
Izberite korak usposabljanja in na Dnevniki izberite povezavo CloudWatch logs za dostop do dnevnikov SageMaker.
Naslednji posnetek zaslona prikazuje dnevnike CloudWatch za vsakega od dveh primerkov ml.p3.2xlarge.
Za ogled dnevnikov izberite katero koli od skupin.
Oglejte si dnevnike izvajanja cevovoda Kubeflow za komponento Kubeflow PyTorchJob Launcher
Naslednji posnetek zaslona prikazuje podrobnosti cevovoda za našo komponento Kubeflow.
Zaženite naslednje ukaze z uporabo Kubectl
na vaši odjemalski lupini Kubernetes, povezani z gručo Kubernetes, da vidite dnevnike (nadomestite svoj imenski prostor in imena podov):
4.1 Čiščenje
Če želite počistiti vse vire, ki smo jih ustvarili v računu, jih moramo odstraniti v obratnem vrstnem redu.
- Z zagonom izbrišite namestitev Kubeflow
./kubeflow-remove.sh
vaws-do-kubeflow
posoda. Prvi nabor ukazov je neobvezen in ga lahko uporabite, če še nimate ukazne lupine v svojemaws-do-kubeflow
posoda odprta. - Iz
aws-do-eks
vsebnik, odstranite nosilec EFS. Prvi niz ukazov je neobvezen in ga lahko uporabite, če še nimate ukazne lupine v svojemaws-do-eks
posoda odprta.Brisanje Amazon EFS je potrebno za sprostitev omrežnega vmesnika, povezanega z VPC, ki smo ga ustvarili za našo gručo. Upoštevajte, da brisanje nosilca EFS uniči vse podatke, ki so na njem shranjeni.
- Iz
aws-do-eks
posodo, zaženiteeks-delete.sh
skript za brisanje gruče in vseh drugih virov, povezanih z njo, vključno z VPC:
Povzetek
V tej objavi smo razpravljali o nekaterih tipičnih izzivih usposabljanja za porazdeljene modele in delovnih tokov ML. Zagotovili smo pregled distribucije Kubeflow na AWS in delili dva odprtokodna projekta (aws-do-eks in aws-do-kubeflow), ki poenostavljajo zagotavljanje infrastrukture in uvedbo Kubeflow na njej. Nazadnje smo opisali in prikazali hibridno arhitekturo, ki omogoča nemoteno prehajanje delovnih obremenitev med delovanjem na samoupravljani infrastrukturi Kubernetes in popolnoma upravljani infrastrukturi SageMaker. Spodbujamo vas, da to hibridno arhitekturo uporabite za lastne primere uporabe.
Lahko sledite Repozitorij AWS Labs za sledenje vsem prispevkom AWS v Kubeflow. Najdete nas tudi na Kubeflow #AWS Slack Channel; vaše povratne informacije nam bodo pomagale določiti prednost naslednjim funkcijam za prispevanje k projektu Kubeflow.
Posebna zahvala Sree Arasanagatta (vodja razvoja programske opreme AWS ML) in Suraj Kota (razvijalec programske opreme) za njuno podporo pri objavi te objave.
O avtorjih
Kanwaljit Khurmi je specialist za rešitve AI/ML pri Amazon Web Services. Sodeluje z izdelkom AWS, inženiringom in strankami, da bi zagotovil smernice in tehnično pomoč, ki jim pomaga izboljšati vrednost njihovih hibridnih rešitev ML pri uporabi AWS. Kanwaljit je specializiran za pomoč strankam z aplikacijami za vsebnike in strojnim učenjem.
Gautam Kumar je programski inženir z AWS AI Deep Learning. Razvil je AWS Deep Learning Containers in AWS Deep Learning AMI. Navdušen je nad gradnjo orodij in sistemov za AI. V prostem času rad kolesari in bere knjige.
Alex Iankoulski je arhitekt programske opreme in infrastrukture s polnim skladom, ki rad opravlja poglobljeno in praktično delo. Trenutno je glavni arhitekt rešitev za samoupravljano strojno učenje pri AWS. V svoji vlogi se osredotoča na pomoč strankam pri kontejnerizaciji in orkestraciji delovnih obremenitev ML in AI v storitvah AWS, ki jih poganja vsebnik. Je tudi avtor odprte kode Naredi okvir in kapitan Dockerja, ki obožuje uporabo tehnologij vsebnikov za pospešitev hitrosti inovacij ob reševanju največjih izzivov na svetu. V zadnjih 10 letih se je Alex ukvarjal z bojem proti podnebnim spremembam, demokratiziral AI in ML, naredil potovanja varnejša, zdravstveno varstvo boljše in energijo pametnejšo.
- Napredno (300)
- AI
- ai art
- ai art generator
- imajo robota
- Amazon Elastic File System (EFS)
- Amazonski elastični kubernetes storitev
- Amazon SageMaker
- Umetna inteligenca
- certificiranje umetne inteligence
- umetna inteligenca v bančništvu
- robot z umetno inteligenco
- roboti z umetno inteligenco
- programska oprema za umetno inteligenco
- AWS Cloud9
- Strojno učenje AWS
- blockchain
- blockchain konferenca ai
- coingenius
- pogovorna umetna inteligenca
- kripto konferenca ai
- Rešitve za stranke
- dall's
- globoko učenje
- strojno učenje
- platon
- platon ai
- Platonova podatkovna inteligenca
- Igra Platon
- PlatoData
- platogaming
- PyTorch na AWS
- lestvica ai
- sintaksa
- zefirnet