Az Amazon SageMaker modell párhuzamos könyvtára akár 20%-kal is felgyorsítja a PyTorch FSDP munkaterhelését | Amazon webszolgáltatások

Az Amazon SageMaker modell párhuzamos könyvtára akár 20%-kal is felgyorsítja a PyTorch FSDP munkaterhelését | Amazon webszolgáltatások

Forrás csomópont: 3033172

A Large Language Model (LLM) képzés népszerűsége megnőtt az elmúlt évben számos népszerű modell megjelenésével, mint például a Llama 2, Falcon és Mistral. Az ügyfelek jelenleg 1 milliárdtól több mint 175 milliárd paraméterig terjedő LLM-eket előképzik és finomhangolják, hogy optimalizálják a modellek teljesítményét az iparágakban, az egészségügytől a pénzügyekig és a marketingig.

Az ilyen léptékű, teljesítőképes modellek képzése kihívást jelenthet. A rendkívül pontos LLM-eknek terabájt képzési adatra és több ezer vagy akár több millió óra gyorsító számítási időre van szükségük a célpontosság eléréséhez. A képzés befejezéséhez és a termékek időben történő bevezetéséhez az ügyfelek párhuzamossági technikákra támaszkodnak, hogy ezt a hatalmas munkaterhelést akár több ezer gyorsítóeszköz között is megosszák. Ezek a párhuzamosítási technikák azonban nehezen használhatók: a különböző technikák és könyvtárak csak bizonyos munkaterhelésekkel kompatibilisek, vagy csak bizonyos modellarchitektúrákra korlátozódnak, a képzési teljesítmény nagyon érzékeny lehet a homályos konfigurációkra, és a technika állása gyorsan fejlődik. Ennek eredményeként a gépi tanulással foglalkozó szakembereknek hetekig kell felkészülniük, hogy LLM-munkaterhelésüket a GPU-k nagy csoportjaira méretezzék.

Ebben a bejegyzésben az újdonságokat mutatjuk be Amazon SageMaker modell párhuzamos (SMP) könyvtár, amely leegyszerűsíti a nagy modell betanítási folyamatot, és segít az LLM-ek gyorsabb képzésében. Különösen az SMP-könyvtár új, egyszerűsített felhasználói élményével foglalkozunk, amely a nyílt forráskódú PyTorch Fully Sharded Data Parallel (FSDP) API-kra, a kibővített tenzorral párhuzamos funkcionalitásra, amely több százmilliárd paraméterrel rendelkező betanítási modelleket tesz lehetővé, valamint a modell betanítási idejét csökkentő teljesítményoptimalizálásra épül. és költsége akár 20%.

Ha többet szeretne megtudni a SageMaker modell párhuzamos könyvtáráról, lásd: SageMaker modell párhuzamossági könyvtár v2 dokumentáció. A mi oldalunkra is hivatkozhat példafüzetek az induláshoz.

Új funkciók, amelyek leegyszerűsítik és felgyorsítják a nagy modellek képzését

Ez a bejegyzés a SageMaker modell párhuzamos könyvtárának v2.0 kiadásában található legújabb funkciókat tárgyalja. Ezek a funkciók javítják a könyvtár használhatóságát, bővítik a funkcionalitást és felgyorsítják a képzést. A következő szakaszokban összefoglaljuk az új funkciókat, és megvitatjuk, hogyan használhatja a könyvtárat a nagy modellképzés felgyorsítására.

Az SMP és a nyílt forráskódú PyTorch összehangolása

2020-as indulása óta az SMP nagy teljesítményű, nagyszabású képzést tesz lehetővé a SageMaker számítási példányairól. Az SMP legújabb főverziójával a könyvtár leegyszerűsíti a felhasználói élményt azáltal, hogy az API-kat a nyílt forráskódú PyTorchhoz igazítja.

PyTorch kínál Teljesen megosztott adatok párhuzamossága (FSDP) mint fő módszer a nagy képzési munkaterhelés támogatására számos számítástechnikai eszközön. Amint azt a következő kódrészlet is bemutatja, az SMP frissített API-i olyan technikákhoz, mint a szilánkos adatok párhuzamossága, tükrözik a PyTorch technikáit. Egyszerűen futhatsz import torch.sagemaker és használja helyette torch.

## training_script.py
import torch.sagemaker as tsm
tsm.init()

# Set up a PyTorch model
model = ...

# Wrap the PyTorch model using the PyTorch FSDP module
model = FSDP(
model,
...
)

optimizer = ...
...

Az SMP API-jainak ezekkel a frissítéseivel a meglévő PyTorch FSDP oktatószkriptek átdolgozása nélkül is kihasználhatja a SageMaker és az SMP könyvtár teljesítménybeli előnyeit. Ez a paradigma azt is lehetővé teszi, hogy ugyanazt a kódbázist használja a helyszíni képzés során, mint a SageMakeren, leegyszerűsítve a felhasználói élményt azon ügyfelek számára, akik több környezetben edzenek.

További információért arról, hogyan engedélyezheti az SMP-t a meglévő PyTorch FSDP betanító parancsfájlokkal, tekintse meg a következőt: Kezdje el az SMP-t.

A tenzorpárhuzam integrálása a tömeges klasztereken való képzés lehetővé tételéhez

Az SMP ezen kiadása a PyTorch FSDP képességeit is kiterjeszti a tenzorpárhuzamossági technikákkal. A szilánkos adatok párhuzamos használatának egyik problémája az, hogy a fürt méretének növelése során konvergenciaproblémákba ütközhet. Ennek az az oka, hogy a paraméterek felosztása, a színátmenetek és az optimalizáló állapota az adatok párhuzamos rangsorai között is növeli a globális kötegméretet; nagy klasztereken ez a globális kötegméret túlléphető azon a küszöbértéken, amely alatt a modell konvergálna. Be kell építenie egy további párhuzamosítási technikát, amely nem igényli a globális kötegméret növelését a fürt méretezésekor.

A probléma enyhítése érdekében az SMP v2.0 bevezeti a szilánkos adatok párhuzamosságának tenzorpárhuzamba állítását. A tenzorpárhuzam lehetővé teszi a fürt méretének növelését anélkül, hogy a globális kötegméretet megváltoztatná vagy a modell konvergenciáját befolyásolná. Ezzel a funkcióval biztonságosan növelheti a betanítási sebességet a fürtök 256 vagy több csomóponttal való kiépítésével.

Ma a PyTorch FSDP tenzorpárhuzamossága csak az SMP v2-vel érhető el. Az SMP v2 lehetővé teszi, hogy engedélyezze ezt a technikát néhány soros kódváltással, és feloldja a stabil képzést még nagy klasztereken is. SMP v2 integrálható Transzformátor motor a tenzorpárhuzam megvalósításához, és kompatibilissé teszi a PyTorch FSDP API-kkal. Egyszerre is engedélyezheti a PyTorch FSDP és az SMP tenzor párhuzamosságot anélkül, hogy bármit is módosítana a PyTorch modellen vagy a PyTorch FSDP konfiguráción. A következő kódrészletek bemutatják, hogyan kell beállítani az SMP konfigurációs szótárt JSON formátumban és hozzáadni az SMP inicializálási modult torch.sagemaker.init(), amely elfogadja a konfigurációs szótárt a háttérben, amikor elindítja a betanítási feladatot, a képzési parancsfájlhoz.

Az SMP konfigurációja a következő:

{
"tensor_parallel_degree": 8,
"tensor_parallel_seed": 0
}

Az edzési szkriptben használja a következő kódot:

import torch.sagemaker as tsm
tsm.init()

from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_config(..)
model = tsm.transform(model)

Ha többet szeretne megtudni a tenzor párhuzamosság használatáról az SMP-ben, tekintse meg a tenzor párhuzamosság dokumentációnk részét.

Használjon speciális funkciókat a modellképzés akár 20%-os felgyorsításához

Amellett, hogy lehetővé teszi az elosztott képzést a több száz példányt tartalmazó fürtökön, az SMP olyan optimalizálási technikákat is kínál, amelyek akár 20%-kal is felgyorsíthatják a modell betanítását. Ebben a részben kiemelünk néhány ilyen optimalizálást. További információért tekintse meg a alapvető jellemzői dokumentációnk részét.

Hibrid szaggatás

A megosztott adatok párhuzamossága egy memóriakímélő elosztott betanítási technika, amely felosztja a modell állapotát (modellparaméterek, színátmenetek és optimalizáló állapotok) az eszközök között. Ez a kisebb memóriaterület lehetővé teszi, hogy nagyobb modellt illesszen be a fürtbe, vagy növelje a köteg méretét. A feldarabolt adatok párhuzamossága azonban megnöveli a képzési munka kommunikációs követelményeit is, mivel a feldarabolt modellműtermékeket gyakran gyűjtik össze különböző eszközökről a képzés során. Ily módon a felosztás mértéke fontos konfiguráció, amely csökkenti a memóriafelhasználást és a kommunikációs többletköltséget.

Alapértelmezés szerint a PyTorch FSDP szilánkokat modellezi a melléktermékeket a fürt összes gyorsítóeszközén. A képzési munkától függően ez a felosztási módszer növelheti a kommunikációs költségeket, és szűk keresztmetszetet okozhat. Ennek elősegítésére az SMP-könyvtár konfigurálható hibrid szilánkos adatpárhuzamot kínál a PyTorch FSDP-n felül. Ez a funkció lehetővé teszi, hogy beállítsa az edzési terhelésnek megfelelő felosztási fokot. Egyszerűen adja meg a felosztás mértékét egy konfigurációs JSON-objektumban, és vegye fel az SMP betanítási parancsfájljába.

Az SMP konfigurációja a következő:

{ "hybrid_shard_degree": 16 }

Ha többet szeretne megtudni a hibrid szilánkos adatok párhuzamosságának előnyeiről, lásd: A gigantikus modell-képzés közel lineáris skálázása AWS-en. További információ a hibrid felosztás megvalósításáról a meglévő FSDP képzési szkripttel: lásd hibrid megosztott adatok párhuzamossága dokumentációnkban.

Használja az AWS infrastruktúrára optimalizált SMDDP kollektív kommunikációs műveleteket

Használhatja az SMP könyvtárat a SageMaker elosztott adatpárhuzamosság (SMDDP) könyvtár hogy felgyorsítsa az elosztott edzési terhelést. Az SMDDP tartalmaz egy optimalizált AllGather kollektív kommunikációs művelet, amelyet a legjobb teljesítményre terveztek a SageMaker p4d és p4de gyorsított példányokon. Az elosztott képzés során kollektív kommunikációs műveleteket használnak a GPU-munkások közötti információk szinkronizálására. AllGather Az egyik alapvető kollektív kommunikációs művelet, amelyet általában a szilánkos adatok párhuzamosságában használnak a rétegparaméterek materializálására az előre és visszafelé irányuló számítási lépések előtt. A kommunikáció által szűk keresztmetszetű képzési munkáknál a gyorsabb kollektív műveletek csökkenthetik a képzési időt és költséget anélkül, hogy a konvergenciát befolyásolnák.

Az SMDDP-könyvtár használatához csak két sor kódot kell hozzáadnia a képzési szkripthez:

import torch.distributed as dist

# Initialize with SMDDP
import smdistributed.dataparallel.torch.torch_smddp
dist.init_process_group(backend="smddp") # Replacing "nccl"

# Initialize with SMP
import torch.sagemaker as tsm
tsm.init()

Az SMP mellett az SMDDP támogatja a nyílt forráskódú PyTorch FSDP-t és a DeepSpeed-et is. Ha többet szeretne megtudni az SMDDP könyvtárról, lásd: Futtasson elosztott képzést a SageMaker elosztott adatpárhuzamossági könyvtárral.

Aktiválási kirakodás

Általában a modell betanításának előrehaladása kiszámítja az aktiválásokat az egyes rétegeknél, és a GPU memóriájában tartja azokat, amíg a megfelelő réteg visszafelé lépése be nem fejeződik. Ezek a tárolt aktiválások jelentős GPU-memóriát fogyaszthatnak az edzés során. Az aktiválási tehermentesítés egy olyan technika, amely ehelyett ezeket a tenzorokat a CPU memóriájába helyezi át az előrehaladás után, majd később visszakéri őket a GPU-ra, amikor szükség van rájuk. Ez a megközelítés jelentősen csökkentheti a GPU memóriahasználatát az edzés során.

Bár a PyTorch támogatja az aktiválás lerakodását, megvalósítása nem hatékony, és a GPU-k tétlenségét okozhatja, miközben az aktiválások visszamenőleges továbbítás során visszamennek a CPU-ból. Ez jelentős teljesítménycsökkenést okozhat az aktiválási tehermentesítés használatakor.

Az SMP v2 optimalizált aktiválási tehermentesítési algoritmust kínál, amely javíthatja az edzési teljesítményt. Az SMP implementációja előre letölti az aktiválásokat, mielőtt szükség lenne rájuk a GPU-n, így csökkentve az üresjárati időt.

Mivel az SMP a PyTorch API-kra épül, az optimalizált aktiválási tehermentesítés lehetővé tételéhez mindössze néhány sornyi kódváltás szükséges. Egyszerűen adja hozzá a kapcsolódó konfigurációkat (sm_activation_offloading és a activation_loading_horizon paraméterek), és szerepeltesse őket a képzési szkriptben.

Az SMP konfigurációja a következő:

{
"activation_loading_horizon": 2,
"sm_activation_offloading": True
}

A képzési szkriptben használja a következő kódot:

import torch.sagemaker as tsm
tsm.init()

# Native PyTorch module for activation offloading
from torch.distributed.algorithms._checkpoint.checkpoint_wrapper import (
apply_activation_checkpointing,
offload_wrapper,
)

model = FSDP(...)

# Activation offloading requires activation checkpointing.
apply_activation_checkpointing(
model,
check_fn=checkpoint_tformer_layers_policy,
)

model = offload_wrapper(model)

Ha többet szeretne megtudni a nyílt forráskódú PyTorch ellenőrzőpont-eszközökről az aktiválás lerakodásához, tekintse meg a checkpoint_wrapper.py szkriptet a PyTorch GitHub tárolóban és Aktiválási ellenőrzőpont a PyTorch blogbejegyzésben Multimodális alapozási modellek méretezése a TorchMultimodalban a Pytorch Distributed segítségével. Ha többet szeretne megtudni az SMP optimalizált aktiválási tehermentesítési megvalósításáról, tekintse meg a aktiválás tehermentesítése dokumentációnk részét.

A hibrid felosztáson, az SMDDP-n és az aktiválási tehermentesítésen túlmenően az SMP további optimalizálásokat kínál, amelyek felgyorsíthatják a nagy modellképzési munkaterhelést. Ez magában foglalja az optimalizált aktiválási ellenőrzési pontot, a késleltetett paraméter-inicializálást és egyebeket. További információért tekintse meg a alapvető jellemzői dokumentációnk részét.

Következtetés

Ahogy az adatkészletek, a modellméretek és a képzési klaszterek folyamatosan növekszenek, a hatékony elosztott képzés egyre kritikusabb a modellek és termékek időben történő és megfizethető szállításához. A SageMaker modell párhuzamos könyvtárának legújabb kiadása segít elérni ezt a kódváltás csökkentésével és a PyTorch FSDP API-kkal való összehangolással, lehetővé téve a tömeges klasztereken való képzést tenzoros párhuzamosságon keresztül, valamint olyan optimalizációkat, amelyek akár 20%-kal csökkenthetik a betanítási időt.

Az SMP v2 használatának megkezdéséhez tekintse meg a mi dokumentáció és a mi mintafüzetek.


A szerzőkről

Robert Van Dusen az Amazon SageMaker vezető termékmenedzsere. Keretrendszereket, fordítókat és optimalizálási technikákat vezet a mélytanulási képzéshez.

Luis Quintela az AWS SageMaker modell párhuzamos könyvtárának szoftverfejlesztő menedzsere. Szabadidejében Harley-jével lovagol az SF Bay Area-ben.

Gautam Kumar AWS AI Deep Learning szoftvermérnök. Szenvedélye az AI eszközök és rendszerek építése. Szabadidejében szeret biciklizni és könyveket olvasni.

Rahul Huilgol vezető szoftverfejlesztő mérnök az Amazon Web Services Distributed Deep Learning területén.

Időbélyeg:

Még több AWS gépi tanulás