Az elosztott mély tanulási modell képzés egyre fontosabbá válik, mivel az adatok mérete számos iparágban növekszik. A számítógépes látás és a természetes nyelvi feldolgozás számos alkalmazása megköveteli a mély tanulási modellek képzését, amelyek összetettsége exponenciálisan növekszik, és gyakran több száz terabájtnyi adattal tanítják őket. Ezután fontossá válik egy hatalmas felhő-infrastruktúra használata az ilyen nagy modellek képzésének skálázásához.
A fejlesztők használhatják a nyílt forráskódú keretrendszereket, például a PyTorch-ot, hogy könnyen tervezzenek intuitív modellarchitektúrákat. Ezeknek a modelleknek a betanításának több csomóponton való skálázása azonban kihívást jelenthet a megnövekedett hangszerelési összetettség miatt.
Az elosztott modellképzés alapvetően két paradigmából áll:
- Modell párhuzamos – A modell párhuzamos betanításánál maga a modell akkora méretű, hogy egyetlen GPU memóriájába sem fér bele, a modell betanításához pedig több GPU szükséges. Jó példa erre az Open AI GPT-3 modellje 175 milliárd betanítható paraméterrel (kb. 350 GB méretű).
- Az adatok párhuzamosak – Az adatok párhuzamos betanítása során a modell elhelyezkedhet egyetlen GPU-ban, de mivel az adatok olyan nagyok, napokba vagy hetekbe telhet egy modell betanítása. Az adatok több GPU-csomópont közötti elosztása jelentősen csökkentheti a betanítási időt.
Ebben a bejegyzésben egy példaarchitektúrát mutatunk be a PyTorch modellek betanítására a Elosztott elasztikus zseblámpa keretrendszer elosztott adatok párhuzamos használatával Amazon Elastic Kubernetes szolgáltatás (Amazon EKS).
Előfeltételek
Az ebben a bejegyzésben közölt eredmények megismétléséhez az egyetlen előfeltétel egy AWS-fiók. Ebben a fiókban létrehozunk egy EKS-fürtöt és egy Amazon FSx Lusterhez fájlrendszer. A konténerképeket is továbbítjuk egy Amazon Elastic Container Registry (Amazon ECR) adattárat a fiókban. Ezen összetevők beállítására vonatkozó utasítások szükség szerint megtalálhatók a bejegyzésben.
EKS klaszterek
Az Amazon EKS egy felügyelt konténerszolgáltatás, amely Kubernetes-alkalmazásokat futtat és méretez az AWS-en. Az Amazon EKS segítségével hatékonyan futtathat elosztott képzési feladatokat a legújabb eszközökkel Amazon rugalmas számítási felhő (Amazon EC2) példányok saját vezérlősík vagy csomópontok telepítése, működtetése és karbantartása nélkül. Ez egy népszerű hangszerelő gépi tanuláshoz (ML) és AI munkafolyamatokhoz. Egy tipikus EKS-fürt az AWS-ben a következő ábra szerint néz ki.
Kiadtunk egy nyílt forráskódú projektet, AWS DevOps for EKS (aws-do-eks), amely könnyen használható és konfigurálható szkriptek és eszközök nagy gyűjteményét kínálja az EKS-fürtök létrehozásához és az elosztott képzési feladatok futtatásához. Ez a projekt az alapelvek szerint épül fel Végezze el a keretrendszert: Egyszerűség, rugalmasság és egyetemesség. A kívánt fürtöt a gombbal konfigurálhatja eks.conf fájlt, majd indítsa el a eks-create.sh forgatókönyv. A részletes utasításokat a GitHub repo.
Tanítsa a PyTorch modelleket a Torch Distributed Elastic használatával
A Torch Distributed Elastic (TDE) egy natív PyTorch-könyvtár nagyméretű mély tanulási modellek betanításához, ahol kritikus a számítási erőforrások dinamikus méretezése a rendelkezésre állás alapján. A TorchElastic vezérlő Kuberneteshez egy natív Kubernetes-implementáció a TDE számára, amely automatikusan kezeli a TDE képzéshez szükséges podok és szolgáltatások életciklusát. Lehetővé teszi a számítási erőforrások dinamikus skálázását edzés közben, szükség szerint. Hibatűrő képzést is biztosít azáltal, hogy helyreállítja a feladatokat a csomópont meghibásodásából.
Ebben a bejegyzésben a PyTorch betanításának lépéseit tárgyaljuk EfficientNet-B7 és a ResNet50 használó modellek ImageNet az adatokat elosztott módon TDE-vel. PyTorch-ot használunk DistributedDataParallel API-t és a Kubernetes TorchElastic vezérlőt, és futtassa tanítási feladatainkat egy több GPU-csomópontot tartalmazó EKS-fürtön. A következő diagram ennek a modelltanításnak az architektúráját mutatja be.
A TorchElastic for Kubernetes főként két összetevőből áll: a TorchElastic Kubernetes-vezérlőből (TEC) és a paraméterkiszolgálóból (stb.). A vezérlő felelős a betanítási feladatok figyeléséért és kezeléséért, a paraméterkiszolgáló pedig nyomon követi a dolgozó csomópontjait az elosztott szinkronizálás és a peer felderítés érdekében.
Ahhoz, hogy a tréning podok hozzáférjenek az adatokhoz, szükségünk van egy megosztott adatkötetre, amelyet minden podhoz fel lehet szerelni. Néhány lehetőség a megosztott kötetekhez Konténer tárolási felület (CSI) illesztőprogramokat tartalmaz AWS DevOps az EKS-hez faliórái Amazon elasztikus fájlrendszer (Amazon EFS) és FSx a Lusterhez.
Klaszter beállítása
Fürtkonfigurációnkban egy c5.2xlarge példányt használunk a rendszerdobozokhoz. Három p4d.24xlarge példányt használunk worker pod-ként az EfficientNet modell betanításához. A ResNet50 képzéshez p3.8xlarge példányokat használunk worker pod-ként. Ezenkívül egy FSx megosztott fájlrendszert használunk a képzési adatok és a modelltermékek tárolására.
Az AWS p4d.24xlarge példányok fel vannak szerelve Elasztikus szövetadapter (EFA) hálózatot biztosít a csomópontok között. Az EFA-ról bővebben a bejegyzés későbbi részében fogunk beszélni. Az EFA-n keresztüli kommunikáció engedélyezéséhez konfigurálnunk kell a fürtbeállítást egy .yaml fájlon keresztül. An példa fájl a GitHub adattárában található.
Miután ez a .yaml fájl megfelelően be van állítva, elindíthatjuk a fürtöt a GitHub-tárban található szkript segítségével:
Utal GitHub repo részletes útmutatásért.
Gyakorlatilag nincs különbség a p4d.24xlarge és a p3.8xlarge felületen futó jobok között. Az ebben a bejegyzésben leírt lépések mindkét esetben működnek. Az egyetlen különbség az EFA elérhetősége a p4d.24xlarge példányokon. Kisebb modelleknél, mint például a ResNet50, az EFA-hálózattal összehasonlítva a szabványos hálózat minimális hatással van az edzés sebességére.
FSx Luster fájlrendszerhez
Az FSx-et nagy teljesítményű számítási munkaterhelésekhez tervezték, és ezredmásodperc alatti késleltetést biztosít a szilárdtestalapú meghajtók tárolási köteteinek használatával. Azért választottuk az FSx-et, mert jobb teljesítményt nyújtott, mivel nagyszámú csomópontra méreteztük. Fontos megjegyezni, hogy az FSx csak egyetlen elérhetőségi zónában létezhet. Ezért az FSx fájlrendszerhez hozzáférő összes csomópontnak ugyanabban az elérhetőségi zónában kell lennie, mint az FSx fájlrendszernek. Ennek egyik módja az, hogy a fürt létrehozása előtt megadja a megfelelő Elérhetőségi zónát a fürt .yaml fájljában az adott csomópontcsoportokhoz. Alternatív megoldásként módosíthatjuk ezen csomópontok automatikus skálázási csoportjának hálózati részét a fürt beállítása után, és egyetlen alhálózat használatára korlátozhatjuk. Ez egyszerűen megtehető az Amazon EC2 konzolon.
Feltételezve, hogy az EKS-fürt működik és működik, és az elérhetőségi zóna alhálózati azonosítója ismert, beállíthatunk egy FSx fájlrendszert a szükséges információk megadásával a fsx.conf fájlban leírtak szerint readme és fut a telepíteni.sh forgatókönyv a FSX mappát. Ezzel beállítja a megfelelő házirendet és biztonsági csoportot a fájlrendszer eléréséhez. A szkript telepíti a CSI driver FSx-hez démonsetként. Végül létrehozhatjuk az FSx állandó kötetigénylést a Kubernetesben egyetlen .yaml fájl alkalmazásával:
Ez egy FSx fájlrendszert hoz létre a következőben megadott elérhetőségi zónában fsx.conf
fájlt, és állandó kötetkövetelést is létrehoz fsx-pvc
, amelyet a fürt bármelyik podjára fel lehet szerelni sok olvasható-írható (RWX) módban.
Kísérletünkben teljes ImageNet adatot használtunk, amely több mint 12 millió edzésképet tartalmaz 1,000 osztályra osztva. Az adatok letölthetők a ImageNet weboldal. Az eredeti TAR labdának több könyvtára is van, de a modellképzésünkre csak az érdekel minket ILSVRC/Data/CLS-LOC/
, amely magában foglalja a train
és a val
alkönyvtárak. Edzés előtt át kell rendeznünk a képeket a val
alkönyvtárat, hogy megfeleljen a PyTorch által megkövetelt könyvtárszerkezetnek ImageFolder osztály. Ez megtehető egy egyszerű Python szkript miután a következő lépésben az adatokat a tartós kötetre másolta.
Az adatok másolásához egy Amazon egyszerű tárolási szolgáltatás (Amazon S3) vödröt az FSx fájlrendszerhez, létrehozunk egy Docker-képet, amely tartalmazza a feladathoz szükséges szkripteket. Egy példa Dockerfile és egy shell script szerepel a csi mappát a GitHub tárhelyen belül. A képet a build.sh
szkriptet, majd tolja be az Amazon ECR-be a segítségével push.sh
forgatókönyv. Mielőtt ezeket a szkripteket használnánk, meg kell adnunk a megfelelő URI-t az ECR-tárhoz a .env
fájlt a GitHub-tárház gyökérmappájában. Miután továbbítottuk a Docker-képet az Amazon ECR-be, elindíthatunk egy pod-ot az adatok másolásához a megfelelő .yaml fájl alkalmazásával:
A pod automatikusan futtatja a szkriptet data-prep.sh hogy az adatokat az Amazon S3-ról a megosztott kötetre másolja. Mivel az ImageNet adatok több mint 12 millió fájlt tartalmaznak, a másolási folyamat néhány órát vesz igénybe. A Python szkript imagenet_data_prep.py is fut, hogy átrendezze a val
adatkészlet, ahogy azt a PyTorch elvárta.
Hálózati gyorsítás
Az Elastic Fabric Adaptert (EFA) együtt használhatjuk támogatott EC2 példánytípusok a fürt GPU-csomópontjai közötti hálózati forgalom felgyorsítására. Ez hasznos lehet nagy elosztott képzési feladatok futtatásakor, ahol a szabványos hálózati kommunikáció szűk keresztmetszetet jelenthet. Az EKS-fürtben az EFA-eszköz-bővítmény telepítéséhez és teszteléséhez használt szkriptek, amelyeket itt használunk, a efa-device-plugin mappát a GitHub-tárban. Az EFA-val való munka engedélyezéséhez az EKS-fürtben a szükséges hardverrel és szoftverrel rendelkező fürtcsomópontokon kívül az EFA eszközbővítményt is telepíteni kell a fürtre, és a feladattárolónak kompatibilis CUDA-val és NCCL-lel kell rendelkeznie. verzió telepítve.
Az NCCL-tesztek futtatásának demonstrálásához és az EFA teljesítményének kiértékeléséhez p4d.24xlarge példányokon először telepítenünk kell a Kubeflow MPI operátort a megfelelő telepíteni.sh forgatókönyv a mpi-operátor mappát. Ezután futtatjuk a telepíteni.sh szkriptet és frissítse a test-efa-nccl.yaml megnyilvánulnak, így korlátok és erőforrás-kérések vpc.amazonaws.com
A négy elérhető EFA-adapter a p4d.4xlarge csomópontokban össze van kötve a maximális átvitel érdekében.
futás kubectl apply -f ./test-efa-nccl.yaml
a teszt alkalmazásához, majd megjeleníti a tesztdoboz naplóit. A következő sor a naplókimenetben megerősíti, hogy EFA használatban van:
A teszteredményeknek a következő kimenethez hasonlóan kell kinézniük:
A teszteredményekben megfigyelhető, hogy a maximális átviteli sebesség körülbelül 42 GB/sec, az átlagos busz sávszélesség pedig körülbelül 8 GB.
Kísérleteket végeztünk egyetlen engedélyezett EFA adapterrel, valamint EFA adapterek nélkül. Az összes eredményt a következő táblázat foglalja össze.
EFA-adapterek száma | Net/OFI kiválasztott szolgáltató | Átl. Sávszélesség (GB/s) | Max. Sávszélesség (GB/s) |
4 | efa | 8.24 | 42.04 |
1 | efa | 3.02 | 5.89 |
0 | foglalat | 0.97 | 2.38 |
Azt is megállapítottuk, hogy az olyan viszonylag kis modelleknél, mint az ImageNet, a gyorsított hálózat használata csak 5–8%-kal csökkenti a korszakonkénti betanítási időt 64-es kötegméret esetén. , a gyorsított hálózat használatának nagyobb hatása van. Az 15. kötegmérettel rendelkező EfficientNet-B18 betanításánál a korszakos képzési idő 7–1%-os csökkenését figyeltük meg. Az EFA edzésre gyakorolt tényleges hatása a modell méretétől függ.
GPU figyelés
A betanítási munka lebonyolítása előtt beállíthatjuk is amazonfelhőóra mérőszámok a GPU kihasználtságának megjelenítéséhez a képzés során. Hasznos lehet tudni, hogy az erőforrásokat optimálisan használják-e fel, vagy potenciálisan azonosítja az erőforrások hiányát és a szűk keresztmetszeteket a képzési folyamatban.
A CloudWatch beállításához szükséges szkriptek itt találhatók gpu-metrics mappát. Először is létrehozunk egy Docker képet amazon-cloudwatch-agent
és a nvidia-smi
. Használhatjuk a Dockerfile-t a gpu-metrics
mappát a kép létrehozásához. Feltéve, hogy az ECR nyilvántartás már be van állítva a .env
fájlt az előző lépésből, a kép segítségével felépíthetjük és tolhatjuk build.sh
és a push.sh
. Ezt követően fut a deploy.sh
script automatikusan befejezi a beállítást. Ezzel elindít egy démont amazon-cloudwatch-agent
és különféle mutatókat küld a CloudWatch-nek. A GPU-metrikák a alatt jelennek meg CWAgent
névtér a CloudWatch konzolon. A fürt többi mutatója a alatt látható ContainerInsights
névtér.
Modellképzés
A PyTorch képzéshez szükséges összes szkript megtalálható a rugalmas munka mappát a GitHub-tárban. A képzési munka elindítása előtt le kell futtatnunk a etcd
szervert, amelyet a TEC a dolgozók felderítésére és paramétercserére használ. A telepíteni.sh forgatókönyv a elasticjob
mappa pontosan ezt teszi.
Az EFA előnyeinek kihasználásához p4d.24xlarge példányokban egy adott Docker-képet kell használnunk, amely elérhető a Amazon ECR Public Gallery amely támogatja az NCCL kommunikációt az EFA-n keresztül. Csak át kell másolnunk a képzési kódunkat erre a Docker-képre. A dockerfile alatt a minták mappa létrehoz egy képet, amelyet a képzési feladat futtatásakor használ a p4d példányokon. Mint mindig, most is használhatjuk a build.sh és a nyomja.sh szkriptek a mappában a kép létrehozásához és leküldéséhez.
A imagenet-efa.yaml fájl leírja a képzési munkát. Ez a .yaml fájl beállítja a betanítási feladat futtatásához szükséges erőforrásokat, és csatlakoztatja az állandó kötetet az előző szakaszban beállított betanítási adatokkal.
Itt érdemes kiemelni néhány dolgot. A replikák számát a fürtben elérhető csomópontok számára kell beállítani. Esetünkben ezt 3-ra állítottuk, mert három p4d.24xlarge csomópontunk volt. Ban,-ben imagenet-efa.yaml
fájl, a nvidia.com/gpu
paraméter a források és nproc_per_node
alatt args
A csomópontonkénti GPU-k számát kell beállítani, ami p4d.24xlarge esetén 8. A Python-szkriptre vonatkozó worker argumentum is beállítja a processzorok számát folyamatonként. Azért választottuk ezt a 4-et, mert kísérleteinkben ez optimális teljesítményt biztosít p4d.24xlarge példányokon. Ezek a beállítások szükségesek a fürtben elérhető összes hardvererőforrás maximalizálásához.
Amikor a feladat fut, megfigyelhetjük a GPU-használatot a CloudWatch-ban a fürt összes GPU-jára vonatkozóan. A következő egy példa az egyik képzési munkánkból három p4d.24xlarge csomóponttal a fürtben. Itt minden csomópontból kiválasztottunk egy GPU-t. A korábban említett beállításokkal a GPU-használat közel 100%-os az epocha betanítási szakaszában a fürt összes csomópontja esetében.
A p50xlarge példányokat használó ResNet3.8 modell betanításához pontosan ugyanazokra a lépésekre van szükségünk, mint a p4d.24xlarge használatával végzett EfficientNet képzésnél. Ugyanezt a Docker-képet is használhatjuk. Mint korábban említettük, a p3.8xlarge példányok nincsenek felszerelve EFA-val. A ResNet50 modell esetében azonban ez nem jelent jelentős hátrányt. A imagenet-fsx.yaml a GitHub-lerakatban biztosított szkript beállítja a betanítási feladatot a megfelelő erőforrásokkal a p3.8xlarge csomóponttípushoz. A feladat ugyanazt az adatkészletet használja az FSx fájlrendszerből.
GPU méretezés
Futtattunk néhány kísérletet annak megfigyelésére, hogy az EfficientNet-B7 modell betanítási időskálája a GPU-k számának növelésével hogyan lép fel. Ennek érdekében a replikák számát 1-ről 3-ra változtattuk a képzési .yaml fájlunkban minden edzési futáshoz. A teljes ImageNet adatkészlet használata közben csak egyetlen korszakban figyeltük meg az időt. A következő ábra a GPU skálázási kísérletünk eredményeit mutatja. A piros szaggatott vonal azt jelzi, hogy a GPU-k számának növelésével hogyan kell lecsökkennie a betanítási időnek egy 8 GPU-t használó futáshoz képest. Amint látjuk, a méretezés egészen közel áll az elvárthoz.
Hasonlóképpen megkaptuk a GPU skálázási diagramját a ResNet50 oktatásához p3.8xlarge példányokon. Ebben az esetben a .yaml fájl replikáit 1-ről 4-re változtattuk. A kísérlet eredményeit a következő ábra mutatja.
Tisztítsuk meg
A modell betanítása után fontos az erőforrások lebontása, hogy elkerülje a tétlen példányok futtatásával járó költségeket. Minden erőforrást létrehozó szkriptnél a GitHub repo megfelelő szkriptet biztosít ezek törléséhez. A beállítások megtisztításához törölnünk kell az FSx fájlrendszert a fürt törlése előtt, mivel az a fürt VPC-jében lévő alhálózathoz van társítva. Az FSx fájlrendszer törléséhez csak a következő parancsot kell futtatnunk (belülről FSX mappa):
Ne feledje, hogy ezzel nem csak az állandó kötetet törli, hanem az FSx fájlrendszert is, és a fájlrendszeren lévő összes adat elveszik. Ha ez a lépés befejeződött, törölhetjük a fürtöt a következő szkript használatával a volt mappa:
Ezzel törli az összes meglévő podot, eltávolítja a klasztert, és törli az elején létrehozott VPC-t.
Következtetés
Ebben a bejegyzésben részleteztük a PyTorch elosztott adatok párhuzamos modelljének EKS-fürtökön történő futtatásához szükséges lépéseket. Ez a feladat ijesztőnek tűnhet, de a AWS DevOps az EKS-hez Az AWS ML Frameworks csapata által létrehozott projekt minden szükséges szkriptet és eszközt biztosít a folyamat egyszerűsítéséhez és az elosztott modellképzés könnyen elérhetővé tételéhez.
Az ebben a bejegyzésben használt technológiákkal kapcsolatos további információkért látogasson el ide Amazon EX és a Elosztott elasztikus zseblámpa. Javasoljuk, hogy az itt leírt megközelítést alkalmazza saját elosztott képzési felhasználási eseteire.
Tudástár
A szerzőkről
Imran Younus az AWS ML Frameworks csapatának vezető megoldások építésze. A nagyszabású gépi tanulásra és a mély tanulási munkaterhelésre összpontosít az AWS-szolgáltatásokban, mint például az Amazon EKS és az AWS ParallelCluster. Nagy tapasztalattal rendelkezik a Deep Leaning in Computer Vision és Industrial IoT alkalmazásai terén. Imran nagyenergiájú részecskefizikából szerzett PhD fokozatot, ahol a kísérleti adatok petabájtos skálán történő elemzésében vett részt.
Alex Iankoulski egy full-stack szoftver és infrastruktúra építész, aki szeret mélyreható, gyakorlatias munkát végezni. Jelenleg az AWS-nél az önállóan menedzselt gépi tanulás fő megoldási építésze. Munkájában arra összpontosít, hogy segítse az ügyfeleket az ML és AI munkaterhelések konténerezésében és összehangolásában a konténeralapú AWS szolgáltatásokon. Ő a nyílt forráskód szerzője is Készíts keretet és egy Docker kapitány, aki szereti a konténertechnológiák alkalmazását az innováció ütemének felgyorsítására, miközben megoldja a világ legnagyobb kihívásait. Az elmúlt 10 évben Alex az éghajlatváltozás leküzdésén, a mesterséges intelligencia és az ML demokratizálásán, az utazás biztonságosabbá tételén, az egészségügy jobbá tételén és az energiaügyek okosabbá tételén dolgozott.
- AI
- ai művészet
- ai art generátor
- van egy robotod
- Amazon Elastic Kubernetes szolgáltatás
- mesterséges intelligencia
- mesterséges intelligencia tanúsítás
- mesterséges intelligencia a bankszektorban
- mesterséges intelligencia robot
- mesterséges intelligencia robotok
- mesterséges intelligencia szoftver
- AWS gépi tanulás
- blockchain
- blokklánc konferencia ai
- coingenius
- társalgási mesterséges intelligencia
- kriptokonferencia ai
- dall's
- mély tanulás
- google azt
- Közepes (200)
- gépi tanulás
- Plató
- plato ai
- Platón adatintelligencia
- Platón játék
- PlatoData
- platogaming
- skála ai
- szintaxis
- zephyrnet