Zvýšení rychlosti kontrolních bodů a snížení nákladů pomocí mlhoviny
Zjistěte, jak zvýšit rychlost kontrolních bodů a snížit náklady na kontrolní body u velkých trénovacích modelů služby Azure Machine Learning pomocí nebula.
Přehled
Mlhovina je rychlý, jednoduchý nástroj kontrolního bodu bez disku pracující s modelem ve službě Azure Container for PyTorch (ACPT). Nebula nabízí jednoduché, vysokorychlostní kontrolní bodové řešení pro distribuované úlohy trénování modelů ve velkém měřítku pomocí PyTorchu. Využitím nejnovějších technologií distribuovaného computingu může Nebula zkrátit časy kontrolních bodů od hodin po sekundy – což může ušetřit 95 % až 99,9 % času. Velké úlohy trénování můžou výrazně těžit z výkonu Nebula.
Pokud chcete pro trénovací úlohy zpřístupnit nebula, naimportujte nebulaml
balíček Pythonu do skriptu. Mlhovina má plnou kompatibilitu s různými distribuovanými trénovacími strategiemi PyTorch, včetně PyTorch Lightning, DeepSpeed a dalších. Rozhraní Nebula API nabízí jednoduchý způsob, jak monitorovat a zobrazit životní cyklus kontrolních bodů. Rozhraní API podporují různé typy modelů a zajišťují konzistenci a spolehlivost kontrolních bodů.
Důležité
Balíček nebulaml
není k dispozici ve veřejném indexu balíčků pythonu PyPI. Je k dispozici pouze ve kurátorovaném prostředí Azure Container for PyTorch (ACPT) ve službě Azure Machine Learning. Pokud se chcete vyhnout problémům, nepokoušejte se nainstalovat nebulaml
z PyPI ani pomocí pip
příkazu.
V tomto dokumentu se dozvíte, jak pomocí nebula s ACPT ve službě Azure Machine Learning rychle zkontrolovat trénovací úlohy modelu. Kromě toho se dozvíte, jak zobrazit a spravovat data kontrolních bodů Nebula. Dozvíte se také, jak obnovit úlohy trénování modelu z posledního dostupného kontrolního bodu, pokud dojde k přerušení, selhání nebo ukončení služby Azure Machine Learning.
Proč je důležitá optimalizace kontrolních bodů pro trénování velkých modelů
S růstem objemů dat a složitějšími formáty dat jsou modely strojového učení také sofistikovanější. Trénování těchto složitých modelů může být náročné kvůli omezením kapacity paměti GPU a zdlouhavé trénování. V důsledku toho se distribuované trénování často používá při práci s velkými datovými sadami a komplexními modely. Distribuované architektury ale můžou mít neočekávané chyby a selhání uzlů, které se můžou stát stále problematickými při nárůstu počtu uzlů v modelu strojového učení.
Kontrolní body můžou tyto problémy zmírnit pravidelným uložením snímku kompletního stavu modelu v daném okamžiku. V případě selhání lze tento snímek použít k opětovnému sestavení modelu do jeho stavu v okamžiku snímku, aby se trénování z tohoto okamžiku obnovilo.
Když dojde k selhání nebo ukončení operací trénování velkých modelů, můžou datoví vědci a vědci obnovit proces trénování z dříve uloženého kontrolního bodu. Veškeré pokroky provedené mezi kontrolním bodem a ukončením se však ztratí, protože výpočty se musí znovu provést, aby se obnovily neuložené průběžné výsledky. Kratší intervaly kontrolních bodů můžou pomoct tuto ztrátu snížit. Diagram znázorňuje čas strávený mezi procesem trénování z kontrolních bodů a ukončením:
Proces ukládání kontrolních bodů samotný ale může generovat významnou režii. Uložení kontrolního bodu velikosti TB se často stává kritickým bodem v procesu trénování, přičemž synchronizovaný proces kontrolního bodu blokuje trénování po dobu hodin. Režie související s kontrolními body může v průměru zohledňovat 12 % celkové doby trénování a může se zvýšit až na 43 % (Maeng et al., 2021).
Aby bylo možné shrnout, správa kontrolních bodů velkého modelu zahrnuje náročné úložiště a režii na dobu obnovení úloh. Časté ukládání kontrolních bodů v kombinaci s obnovením trénovacích úloh z nejnovějších dostupných kontrolních bodů se stává velkou výzvou.
Mlhovina k záchraně
Pro efektivní trénování velkých distribuovaných modelů je důležité mít spolehlivý a efektivní způsob, jak ušetřit a obnovit průběh trénování, který minimalizuje ztrátu dat a plýtvání prostředky. Mlhovina pomáhá snížit časy úspory kontrolních bodů a hodinové požadavky GPU na úlohy trénování velkého modelu azure Machine Learning tím, že poskytuje rychlejší a jednodušší správu kontrolních bodů.
S mlhovinou můžete:
Zvyšte rychlost kontrolních bodů až o 1000krát pomocí jednoduchého rozhraní API, které funguje asynchronně s trénovacím procesem. Mlhovina může zkrátit časy kontrolních bodů z hodin na sekundy – potenciální snížení 95 % na 99 %.
Tento příklad ukazuje zkrácení doby trénování kontrolního bodu a kompletního trénování pro čtyři kontrolní body, které šetří trénovací úlohy GPT2 hugging Face GPT2, GPT2-Large a GPT-XL. U středně velkého kontrolního bodu Hugging Face GPT2-XL šetří (20,6 GB) mlhovina u jednoho kontrolního bodu 96,9 % času.
Zvýšení rychlosti kontrolního bodu se může stále zvětšovat s velikostí modelu a čísly GPU. Například testování kontrolního bodu trénovacího bodu šetří 97 GB na 128 A100 GPU NVIDIA může zmenšit z 20 minut na 1 sekundu.
Snižte celkový čas trénování a náklady na výpočty u velkých modelů minimalizací režijních nákladů kontrolních bodů a snížením počtu hodin GPU, které se při obnovení úloh ztrácely. Mlhovina ukládá kontrolní body asynchronně a odblokuje proces trénování, aby se zkrátil koncový čas trénování. Umožňuje také častější ukládání kontrolních bodů. Tímto způsobem můžete pokračovat v trénování z nejnovějšího kontrolního bodu po jakémkoli přerušení a ušetřit čas a peníze vyhazované na dobu obnovení úloh a trénování GPU.
Zajištění úplné kompatibility s PyTorchem. Nebula nabízí plnou kompatibilitu s PyTorchem a nabízí úplnou integraci s distribuovanými trénovacími architekturami, včetně DeepSpeed (>=0.7.3) a PyTorch Lightning (>=1.5.0). Můžete ho také použít s různými cílovými výpočetními objekty služby Azure Machine Learning, jako jsou výpočetní služby Azure Machine Learning nebo AKS.
Kontrolní body můžete snadno spravovat pomocí balíčku Pythonu, který pomáhá vypsat, získat, uložit a načíst kontrolní body. Pro zobrazení životního cyklu kontrolních bodů poskytuje Nebula také komplexní protokoly o studio Azure Machine Learning. Kontrolní body můžete uložit do místního nebo vzdáleného umístění úložiště.
- Azure Blob Storage
- Azure Data Lake Storage
- NFS
a přistupovat k nim kdykoli s několika řádky kódu.
Požadavky
- Předplatné Azure a pracovní prostor Azure Machine Learning. Další informace o vytváření prostředků pracovního prostoru najdete v tématu Vytvoření prostředků pracovního prostoru.
- Cílový výpočetní objekt služby Azure Machine Learning Další informace o vytváření cílového výpočetního objektu najdete v tématu Správa trénování a nasazování výpočetních prostředků.
- Trénovací skript, který používá PyTorch.
- Kurátorované prostředí ACPT (Kontejner Azure pro PyTorch). Informace o získání image ACPT najdete v kurátorovaných prostředích . Naučte se používat kurátorované prostředí.
Jak používat mlhovinu
Nebula poskytuje rychlé a snadné prostředí kontrolních bodů přímo ve stávajícím trénovacím skriptu. Mezi kroky pro rychlý start nebula patří:
- Použití prostředí ACPT
- Inicializace mlhoviny
- Volání rozhraní API pro ukládání a načítání kontrolních bodů
Použití prostředí ACPT
Azure Container for PyTorch (ACPT) – kurátorované prostředí pro trénování modelu PyTorch, zahrnuje mlhovinu jako předinstalovaný závislý balíček Pythonu. Další informace o imagi ACPT najdete v tématu Azure Container for PyTorch (ACPT) a povolení hlubokého učení pomocí služby Azure Container for PyTorch ve službě Azure Machine Learning .
Inicializace mlhoviny
Pokud chcete povolit nebula s prostředím ACPT, stačí upravit trénovací skript, který balíček naimportuje nebulaml
, a pak na příslušných místech volat rozhraní API pro nebula. Můžete se vyhnout úpravám sady Azure Machine Learning SDK nebo rozhraní příkazového řádku. Můžete se také vyhnout úpravám dalších kroků pro trénování velkého modelu na platformě Azure Machine Learning.
Mlhovina potřebuje inicializaci ke spuštění ve vašem trénovacím skriptu. Ve fázi inicializace zadejte proměnné, které určují umístění a frekvenci ukládání kontrolního bodu, jak je znázorněno v tomto fragmentu kódu:
import nebulaml as nm
nm.init(persistent_storage_path=<YOUR STORAGE PATH>) # initialize Nebula
Mlhovina byla integrována do DeepSpeed a PyTorch Lightning. V důsledku toho se inicializace stává jednoduchou a snadnou. Tyto příklady ukazují, jak integrovat nebula do trénovacích skriptů.
Důležité
Ukládání kontrolních bodů pomocí nebula vyžaduje pro ukládání kontrolních bodů určitou paměť. Ujistěte se, že je paměť větší než alespoň tři kopie kontrolních bodů.
Pokud paměť nestačí k uložení kontrolních bodů, doporučujeme nastavit proměnnou NEBULA_MEMORY_BUFFER_SIZE
prostředí v příkazu tak, aby při ukládání kontrolních bodů omezila využití paměti na každý uzel. Při nastavování této proměnné použije nebula tuto paměť jako vyrovnávací paměť k uložení kontrolních bodů. Pokud není využití paměti omezené, nebula použije paměť co nejvíce k uložení kontrolních bodů.
Pokud na stejném uzlu běží více procesů, maximální paměť pro ukládání kontrolních bodů bude polovina limitu děleného počtem procesů. Mlhovina použije druhou polovinu pro koordinaci více procesů. Pokud například chcete omezit využití paměti na každý uzel na 200 MB, můžete proměnnou prostředí nastavit jako export NEBULA_MEMORY_BUFFER_SIZE=200000000
(v bajtech, přibližně 200 MB) v příkazu. V tomto případě bude nebula používat pouze 200 MB paměti k uložení kontrolních bodů v každém uzlu. Pokud na stejném uzlu běží 4 procesy, bude mlhovina používat 25 MB paměti pro každý proces k uložení kontrolních bodů.
Volání rozhraní API pro ukládání a načítání kontrolních bodů
Nebula poskytuje rozhraní API pro zpracování ukládání kontrolních bodů. Tato rozhraní API můžete použít ve svých trénovacích skriptech, podobně jako rozhraní API PyTorch torch.save()
. Tyto příklady ukazují, jak používat mlhovinu ve trénovacích skriptech.
Zobrazení historie kontrolních bodů
Po dokončení trénovací úlohy přejděte do podokna Úloha Name> Outputs + logs
. Na levém panelu rozbalte složku Nebula a výběrem checkpointHistories.csv
zobrazíte podrobné informace o ukládání kontrolních bodů Nebula – doba trvání, propustnost a velikost kontrolního bodu.
Příklady
Tyto příklady ukazují, jak používat Nebula s různými typy rozhraní. Můžete zvolit příklad, který nejlépe vyhovuje vašemu trénovacímu skriptu.
Pokud chcete povolit úplnou kompatibilitu s trénovacími skripty založenými na PyTorchu, upravte trénovací skript podle potřeby.
Nejprve naimportujte požadovaný
nebulaml
balíček:# Import the Nebula package for fast-checkpointing import nebulaml as nm
Chcete-li inicializovat nebula, zavolejte
nm.init()
funkci vmain()
, jak je znázorněno zde:# Initialize Nebula with variables that helps Nebula to know where and how often to save your checkpoints persistent_storage_path="/tmp/test", nm.init(persistent_storage_path, persistent_time_interval=2)
Pokud chcete kontrolní body uložit, nahraďte původní
torch.save()
příkaz pro uložení kontrolního bodu sadou Nebula. Ujistěte se, že instance kontrolního bodu začíná na "global_step", například "global_step500" nebo "global_step1000":checkpoint = nm.Checkpoint('global_step500') checkpoint.save('<CKPT_NAME>', model)
Poznámka:
<'CKPT_TAG_NAME'>
je jedinečné ID kontrolního bodu. Značka je obvykle počet kroků, epocha nebo jakýkoli uživatelsky definovaný název. Volitelný<'NUM_OF_FILES'>
parametr určuje číslo stavu, které byste pro tuto značku uložili.Načtěte nejnovější platný kontrolní bod, jak je znázorněno tady:
latest_ckpt = nm.get_latest_checkpoint() p0 = latest_ckpt.load(<'CKPT_NAME'>)
Vzhledem k tomu, že kontrolní bod nebo snímek může obsahovat mnoho souborů, můžete je načíst podle názvu. S nejnovějším kontrolním bodem je možné stav trénování obnovit do stavu uloženého posledním kontrolním bodem.
Jiná rozhraní API můžou zpracovávat správu kontrolních bodů.
- Zobrazit seznam všech kontrolních bodů
- získání nejnovějších kontrolních bodů
# Managing checkpoints ## List all checkpoints ckpts = nm.list_checkpoints() ## Get Latest checkpoint path latest_ckpt_path = nm.get_latest_checkpoint_path("checkpoint", persisted_storage_path)