Trénování modelu PyTorch

Tento článek popisuje, jak použít komponentu Trénování modelu PyTorch v návrháři služby Azure Machine Learning k trénování modelů PyTorch, jako je DenseNet. Trénování probíhá po definování modelu a nastavení jeho parametrů a vyžaduje data s popisky.

V současné době trénování modelu PyTorch podporuje trénování s jedním uzlem i distribuované trénování.

Jak používat trénování modelu PyTorch

  1. Přidejte komponentu DenseNet nebo ResNet do konceptu kanálu v návrháři.

  2. Přidejte do kanálu komponentu Trénování modelu PyTorch . Tuto komponentu najdete v kategorii Trénování modelu . Rozbalte Train (Trénovat) a přetáhněte do kanálu komponentu Train PyTorch Model (Train PyTorch Model ).

    Poznámka

    Trénování komponenty modelu PyTorch je lepší spustit na výpočetních prostředcích typu GPU pro velkou datovou sadu, jinak kanál selže. Výpočetní prostředky pro konkrétní komponentu můžete vybrat v pravém podokně komponenty nastavením Použít jiný cílový výpočetní objekt.

  3. Na levém vstupu připojte netrénovaný model. Připojte trénovací datovou sadu a datovou sadu pro ověření k prostřednímu a pravému vstupu trénovacího modelu PyTorch.

    Pro netrénovaný model musí být model PyTorch jako DenseNet; v opačném případě bude vyvolán invalidModelDirectoryError.

    Pro datovou sadu musí být trénovací datová sada označená adresářem image. Postup získání adresáře obrázku s popiskem najdete v tématu Převod do adresáře obrázků. Pokud není označeno, vyvolá se chyba NotLabeledDatasetError.

    Trénovací datová sada a ověřovací datová sada mají stejné kategorie popisků, jinak se vyvolá Chyba InvalidDatasetError.

  4. V části Epochs určete, kolik epoch chcete trénovat. V každé epoše se iteuje celá datová sada, ve výchozím nastavení 5.

  5. V části Velikost dávky zadejte, kolik instancí se má v dávce trénovat, ve výchozím nastavení 16.

  6. V části Číslo kroku warmupu určete, kolik epoch chcete zahřátí trénování, pro případ, že počáteční rychlost učení je mírně příliš velká na to, aby se začala sbližovat, ve výchozím nastavení 0.

  7. V části Rychlost učení zadejte hodnotu pro rychlost učení a výchozí hodnota je 0,001. Rychlost učení řídí velikost kroku, který se používá v optimalizátoru, jako je sgd při každém testování a opravě modelu.

    Když nastavíte menší rychlost, testujete model častěji s rizikem, že byste se mohli zaseknout v místní plošině. Nastavením vyšší rychlosti můžete konvergovat rychleji s rizikem překročení skutečného minima.

    Poznámka

    Pokud během trénování dojde ke ztrátě trénování, což může být způsobeno příliš velkou mírou učení, může pomoct snížení rychlosti učení. Aby byl gradientní sestup stabilní, počítá se při distribuovaném trénování skutečná rychlost učení podle lr * torch.distributed.get_world_size() toho, že velikost dávky skupiny procesů je světovou velikostí krát velikostí jednoho procesu. Dochází k poklesu rychlosti polynomického učení, který může vést k lepšímu výkonu modelu.

  8. V části Náhodné počáteční zadejte volitelně celočíselnou hodnotu, která se použije jako počáteční. Pokud chcete zajistit reprodukovatelnost experimentu napříč úlohami, doporučujeme použít seed.

  9. V části Trpělivost určete, kolik epoch se má předčasně zastavit trénování, pokud se ztráta ověření nesnižuje postupně. ve výchozím nastavení 3.

  10. Jako Frekvence tisku zadejte frekvenci tisku trénovacího protokolu nad iteracemi v každé epochě, ve výchozím nastavení 10.

  11. Odešlete kanál. Pokud má vaše datová sada větší velikost, bude to chvíli trvat a doporučí se výpočetní prostředky GPU.

Distribuované trénování

Při distribuovaném trénování se úloha pro trénování modelu rozdělí a sdílí mezi několik miniprocesorů, označovaných jako pracovní uzly. Tyto pracovní uzly pracují paralelně, aby urychlily trénování modelu. V současné době návrhář podporuje distribuované trénování pro trénování komponenty PyTorch Model .

Doba trénování

Distribuované trénování umožňuje trénovat na velké datové sadě, jako je ImageNet (1 000 tříd, 1,2 milionu obrázků) během několika hodin pomocí Trénování modelu PyTorch. Následující tabulka ukazuje čas a výkon trénování během trénování 50 epoch Resnet50 na ImageNetu od začátku na základě různých zařízení.

Zařízení Doba trénování Propustnost trénování 1 nejvyšší přesnost ověření 5 nejvyšší přesnosti ověření
16 gpu V100 6h22min ~3200 obrázků/s 68.83% 88.84%
8 gpu V100 12h21min ~1670 obrázků za sekundu 68.84% 88.74%

Klikněte na tuto komponentu na kartu Metriky a podívejte se na trénovací grafy metrik, například trénování obrázků za sekundu a Nejvyšší přesnost 1.

Snímek obrazovky znázorňující metriky trénování

Povolení distribuovaného trénování

Pokud chcete povolit distribuované trénování pro komponentu Trénování modelu PyTorch , můžete nastavit v nastavení úlohy v pravém podokně komponenty. Pro distribuované trénování se podporuje jenom výpočetní cluster AML .

Poznámka

K aktivaci distribuovaného trénování je potřeba více GPU, protože back-endová komponenta Trénování PyTorch modelu NCCL používá cuda.

  1. Vyberte komponentu a otevřete pravý panel. Rozbalte část Nastavení úlohy .

    Snímek obrazovky ukazující, jak nastavit distribuované trénování v nastavení runsetting

  2. Ujistěte se, že jste pro cílový výpočetní objekt vybrali výpočetní prostředky AML.

  3. V části Rozložení prostředků musíte nastavit následující hodnoty:

    • Počet uzlů : Počet uzlů ve výpočetním cíli, které se používají k trénování. Měl by být menší nebo roven maximálnímupočtu uzlů výpočetního clusteru. Ve výchozím nastavení je to 1, což znamená úlohu s jedním uzlem.

    • Počet procesů na uzel: Počet procesů aktivovaných na uzel. Hodnota by měla být menší nebo rovnavýpočetní jednotce zpracování . Ve výchozím nastavení je to 1, což znamená jednu úlohu procesu.

    Maximální počet uzlů a jednotku zpracování výpočetních prostředků můžete zkontrolovat kliknutím na název výpočetního objektu na stránce podrobností o výpočetních prostředcích.

    Snímek obrazovky ukazující, jak zkontrolovat výpočetní cluster

Další informace o distribuovaném trénování ve službě Azure Machine Learning najdete tady.

Řešení potíží s distribuovaným trénováním

Pokud pro tuto komponentu povolíte distribuované trénování, budou k dispozici protokoly ovladačů pro každý proces. 70_driver_log_0 je určený pro hlavní proces. Podrobnosti o chybách jednotlivých procesů najdete v protokolech ovladačů na kartě Výstupy a protokoly v pravém podokně.

Snímek obrazovky s protokolem ovladače

Pokud distribuované trénování s povolenou komponentou selže bez protokolů 70_driver , můžete zkontrolovat 70_mpi_log podrobnosti o chybě.

Následující příklad ukazuje běžnou chybu, což je počet procesů na uzel větší než výpočetní jednotka zpracování .

Snímek obrazovky s protokolem mpi

Další podrobnosti o řešení potíží s komponentou najdete v tomto článku .

Výsledky

Pokud chcete po dokončení úlohy kanálu použít model pro vyhodnocování, připojte trénování modelu PyTorch k určení skóre obrázkového modelu, abyste předpověděli hodnoty pro nové vstupní příklady.

Technické poznámky

Očekávané vstupy

Název Typ Popis
Netrénovaný model UntrainedModelDirectory Netrénovaný model, vyžaduje PyTorch
Trénovací datová sada ImageDirectory Trénovací datová sada
Ověřovací datová sada ImageDirectory Ověřovací datová sada pro vyhodnocení každé epochy

Parametry komponent

Name Rozsah Typ Výchozí Popis
Epoch >0 Integer 5 Vyberte sloupec, který obsahuje sloupec popisku nebo výsledku.
Velikost dávky >0 Integer 16 Kolik instancí se má v dávce trénovat
Číslo kroku zahřívací aktivity >=0 Integer 0 Kolik epoch k zahřátí trénování
Rychlost učení >=double. Epsilon Float 0.1 Počáteční rychlost učení pro optimalizátor Stochastic Gradient Sestup.
Náhodné počáteční Všechny Integer 1 Počáteční hodnota generátoru náhodných čísel, který model používá.
Trpělivost >0 Integer 3 Kolik epoch k předčasnému zastavení trénování
Frekvence tisku >0 Integer 10 Trénování frekvence tisku protokolu přes iterace v každé epoše

Výstupy

Název Typ Popis
Trénovaný model Adresář modelů Trénovaný model

Další kroky

Podívejte se na sadu komponent dostupných pro Azure Machine Learning.