Megosztás a következőn keresztül:


PyTorch-modellek nagy léptékű betanítása az Azure Machine Tanulás SDK-val (v1)

ÉRVÉNYES:Python SDK azureml v1

Ebből a cikkből megtudhatja, hogyan futtathatja a PyTorch-betanítási szkripteket nagyvállalati szinten az Azure Machine Tanulás használatával.

A cikkben szereplő példaszkriptekkel csirke- és pulykarendszerképeket sorolunk be egy mélytanulási neurális hálózat (DNN) felépítéséhez a PyTorch átviteli tanulási oktatóanyaga alapján. A tanulás átadása olyan technika, amely az egyik probléma megoldásából nyert tudást egy másik, de kapcsolódó problémára alkalmazza. A tanulás átvitele lerövidíti a betanítási folyamatot azáltal, hogy kevesebb adatot, időt és számítási erőforrást igényel, mint az alapoktól való betanítás. Ha többet szeretne megtudni a transzfertanulásról, tekintse meg a mély tanulás és a gépi tanulás című cikket.

Akár az alapoktól tanít be mélytanulási PyTorch-modellt, akár meglévő modellt hoz a felhőbe, az Azure Machine Tanulás használatával rugalmas felhőbeli számítási erőforrások használatával skálázhatja fel a nyílt forráskódú betanítási feladatokat. Az Azure Machine Tanulás használatával éles üzemű modelleket hozhat létre, helyezhet üzembe, futtathat és monitorozhat.

Előfeltételek

Futtassa ezt a kódot a következő környezeteken:

  • Azure Machine Tanulás számítási példány – nincs szükség letöltésre vagy telepítésre

    • Végezze el a rövid útmutatót: Ismerkedés az Azure Machine Tanulás az SDK-val és a mintaadattárral előre betöltött dedikált jegyzetfüzet-kiszolgáló létrehozásához.
    • A jegyzetfüzet-kiszolgáló mintái mélytanulási mappájában keressen egy befejezett és bővített jegyzetfüzetet a következő könyvtárra navigálva: how-to-use-azureml > ml-frameworks > pytorch > train-hyperparameter-tune-deploy-with-pytorch mappa.
  • Saját Jupyter Notebook-kiszolgáló

    Az útmutató egy kész Jupyter Notebook-verzióját is megtalálhatja a GitHub-minták oldalán. A jegyzetfüzet bővített szakaszokat tartalmaz, amelyek az intelligens hiperparaméter-finomhangolást, a modell üzembe helyezését és a notebook widgeteket fedik le.

Ahhoz, hogy a cikkben szereplő kód futtatásával GPU-fürtöt hozzon létre, kvótanövelést kell kérnie a munkaterülethez.

A kísérlet beállítása

Ez a szakasz a szükséges Python-csomagok betöltésével, egy munkaterület inicializálásával, a számítási cél létrehozásával és a betanítási környezet meghatározásával állítja be a betanítási kísérletet.

Csomagok importálása

Először importálja a szükséges Python-kódtárakat.

import os
import shutil

from azureml.core.workspace import Workspace
from azureml.core import Experiment
from azureml.core import Environment

from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

Munkaterület inicializálása

Az Azure Machine Tanulás munkaterület a szolgáltatás legfelső szintű erőforrása. Központosított helyet biztosít a létrehozott összetevőkkel való munkához. A Python SDK-ban objektum létrehozásával érheti el a munkaterület összetevőit workspace .

Hozzon létre egy munkaterület-objektumot az config.jsonelőfeltételek szakaszban létrehozott fájlból.

ws = Workspace.from_config()

Az adatok lekérése

Az adatkészlet körülbelül 120 betanítási képből áll pulykák és csirkék esetében, és minden osztályhoz 100 érvényesítési kép tartozik. A betanítási szkript pytorch_train.pyrészeként letöltjük és kinyerjük az adathalmazt. A képek az Open Images v5 Dataset részhalmazai. A JSONL saját adatokkal való betanítása érdekében történő létrehozásával kapcsolatos további lépésekért tekintse meg ezt a Jupyter-jegyzetfüzetet.

Betanítási szkript előkészítése

Ebben az oktatóanyagban a betanítási szkript pytorch_train.pymár meg van adva. A gyakorlatban bármilyen egyéni betanítási szkriptet használhat, és futtathatja az Azure Machine Tanulás.

Hozzon létre egy mappát a betanítási szkript(ek)hez.

project_folder = './pytorch-birds'
os.makedirs(project_folder, exist_ok=True)
shutil.copy('pytorch_train.py', project_folder)

Számítási cél létrehozása

Hozzon létre egy számítási célt a PyTorch-feladat futtatásához. Ebben a példában hozzon létre egy GPU-kompatibilis Azure Machine-Tanulás számítási fürtöt.

Fontos

A GPU-fürt létrehozása előtt kvótanövelést kell kérnie a munkaterülethez.


# Choose a name for your CPU cluster
cluster_name = "gpu-cluster"

# Verify that cluster does not exist already
try:
    compute_target = ComputeTarget(workspace=ws, name=cluster_name)
    print('Found existing compute target')
except ComputeTargetException:
    print('Creating a new compute target...')
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6', 
                                                           max_nodes=4)

    # Create the cluster with the specified name and configuration
    compute_target = ComputeTarget.create(ws, cluster_name, compute_config)

    # Wait for the cluster to complete, show the output log
    compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)

Ha ehelyett cpu-fürtöt szeretne létrehozni, adjon meg egy másik virtuálisgép-méretet a vm_size paraméterhez, például STANDARD_D2_V2.

A számítási célokról további információt a számítási célokat ismertető cikkben talál.

A környezet meghatározása

A betanítási szkript függőségeit tartalmazó Azure Machine Tanulás-környezet meghatározásához definiálhat egyéni környezetet, vagy használhat egy Azure Machine Tanulás válogatott környezetet.

Válogatott környezet használata

Az Azure Machine Tanulás előre összeállított, válogatott környezeteket biztosít, ha nem szeretné definiálni a saját környezetét. A PyTorch számos, a PyTorch különböző verzióinak megfelelő CPU- és GPU-keretrendszert használ.

Ha válogatott környezetet szeretne használni, futtassa helyette a következő parancsot:

curated_env_name = 'AzureML-PyTorch-1.6-GPU'
pytorch_env = Environment.get(workspace=ws, name=curated_env_name)

A válogatott környezet csomagjainak megtekintéséhez írja ki a conda-függőségeket a lemezre:

pytorch_env.save_to_directory(path=curated_env_name)

Győződjön meg arról, hogy a válogatott környezet tartalmazza a betanítási szkripthez szükséges összes függőséget. Ha nem, módosítania kell a környezetet, hogy tartalmazza a hiányzó függőségeket. Ha a környezet módosul, új nevet kell adnia neki, mivel az "AzureML" előtag a válogatott környezetekhez van fenntartva. Ha módosította a conda dependencies YAML-fájlt, létrehozhat belőle egy új környezetet egy új névvel, például:

pytorch_env = Environment.from_conda_specification(name='pytorch-1.6-gpu', file_path='./conda_dependencies.yml')

Ha ehelyett közvetlenül módosította volna a válogatott környezeti objektumot, a környezetet új névvel klónozhatja:

pytorch_env = pytorch_env.clone(new_name='pytorch-1.6-gpu')

Egyéni környezet létrehozása

Létrehozhat saját Azure Machine Tanulás környezetet is, amely magában foglalja a betanítási szkript függőségeit.

Először is definiálja a conda-függőségeket egy YAML-fájlban; ebben a példában a fájl neve conda_dependencies.yml.

channels:
- conda-forge
dependencies:
- python=3.7
- pip=21.3.1
- pip:
  - azureml-defaults
  - torch==1.6.0
  - torchvision==0.7.0
  - future==0.17.1
  - pillow

Hozzon létre egy Azure Machine Tanulás környezetet ebből a Conda környezeti specifikációból. A környezet futásidőben egy Docker-tárolóba lesz csomagolva.

Ha nincs megadva alaprendszerkép, az Azure Machine Tanulás alapértelmezés szerint egy CPU-rendszerképet azureml.core.environment.DEFAULT_CPU_IMAGE használ alaprendszerképként. Mivel ez a példa egy GPU-fürtön futtat betanítást, meg kell adnia egy GPU-alaprendszerképet, amely tartalmazza a szükséges GPU-illesztőprogramokat és függőségeket. Az Azure Machine Tanulás a Microsoft Container Registryben (MCR) közzétett alaprendszerképek készletét tartja fenn, amelyeket használhat. További információ: AzureML-Containers GitHub-adattár.

pytorch_env = Environment.from_conda_specification(name='pytorch-1.6-gpu', file_path='./conda_dependencies.yml')

# Specify a GPU base image
pytorch_env.docker.enabled = True
pytorch_env.docker.base_image = 'mcr.microsoft.com/azureml/openmpi3.1.2-cuda10.1-cudnn7-ubuntu18.04'

Tipp.

Igény szerint egyszerűen rögzítheti az összes függőséget közvetlenül egy egyéni Docker-lemezképben vagy Dockerfile-ban, és ebből hozhatja létre a környezetét. További információ: Betanítása egyéni képpel.

További információ a környezetek létrehozásáról és használatáról: Szoftverkörnyezetek létrehozása és használata az Azure Machine Tanulás.

A betanítási futtatás konfigurálása és elküldése

ScriptRunConfig létrehozása

Hozzon létre egy ScriptRunConfig objektumot a betanítási feladat konfigurációs részleteinek megadásához, beleértve a betanítási szkriptet, a használandó környezetet és a futtatandó számítási célt. A betanítási szkripthez tartozó argumentumok parancssoron keresztül lesznek átadva, ha a arguments paraméter meg van adva. Az alábbi kód egy egycsomópontos PyTorch-feladatot konfigurál.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='pytorch_train.py',
                      arguments=['--num_epochs', 30, '--output_dir', './outputs'],
                      compute_target=compute_target,
                      environment=pytorch_env)

Figyelmeztetés

Az Azure Machine Tanulás a teljes forráskönyvtár másolásával futtatja a betanítási szkripteket. Ha olyan bizalmas adatokkal rendelkezik, amelyeket nem szeretne feltölteni, használjon .ignore fájlt , vagy ne vegye fel azokat a forráskönyvtárba. Ehelyett egy Azure Machine Tanulás adatkészlet használatával érheti el az adatokat.

A feladatok ScriptRunConfig használatával történő konfigurálásáról további információt a betanítási futtatások konfigurálása és elküldése című témakörben talál.

Figyelmeztetés

Ha korábban a PyTorch-becslőt használta a PyTorch betanítási feladatainak konfigurálásához, vegye figyelembe, hogy az estimatorok elavultak az 1.19.0 SDK-kiadástól. Az Azure Machine Tanulás SDK >= 1.15.0 használatával a ScriptRunConfig a betanítási feladatok konfigurálásának ajánlott módja, beleértve a mélytanulási keretrendszereket használókat is. Gyakori migrálási kérdésekért tekintse meg az Estimator to ScriptRunConfig migrálási útmutatót.

Futtatás elküldése

A Futtatás objektum biztosítja a futtatási előzmények felületét a feladat futtatása és befejezése után.

run = Experiment(ws, name='Tutorial-pytorch-birds').submit(src)
run.wait_for_completion(show_output=True)

Mi történik a futtatás végrehajtása során?

A futtatás végrehajtása során a következő szakaszokon megy keresztül:

  • Előkészítés: A rendszer létrehoz egy Docker-rendszerképet a megadott környezetnek megfelelően. A rendszerképet a rendszer feltölti a munkaterület tárolóregisztrációs adatbázisára, és gyorsítótárazza a későbbi futtatásokhoz. A naplók a futtatási előzményekbe is streamelhetők, és megtekinthetők a folyamat figyeléséhez. Ha ehelyett egy válogatott környezet van megadva, a rendszer a gyorsítótárazott rendszerképet fogja használni, amely a válogatott környezetet használja.

  • Skálázás: A fürt megkísérli a vertikális felskálázást, ha a Batch AI-fürtnek több csomópontra van szüksége a futtatás végrehajtásához, mint amennyi jelenleg elérhető.

  • Futtatás: A szkriptmappában lévő összes szkript fel lesz töltve a számítási célra, az adattárak csatlakoztatva vannak vagy másolódnak, és a rendszer végrehajtja azokat script . Az stdout és a ./logs mappa kimenetei a futtatási előzményekbe kerülnek, és a futtatás figyelésére használhatók.

  • Feldolgozás utáni: A futtatás ./outputs mappája át lesz másolva a futtatási előzményekbe.

Modell regisztrálása vagy letöltése

Miután betanította a modellt, regisztrálhatja a munkaterületen. A modellregisztráció lehetővé teszi a modellek munkaterületen való tárolását és verziószámozását a modellkezelés és az üzembe helyezés egyszerűsítése érdekében.

model = run.register_model(model_name='pytorch-birds', model_path='outputs/model.pt')

Tipp.

Az üzembe helyezési útmutató tartalmaz egy szakaszt a modellek regisztrálásáról, de közvetlenül átugorhat egy számítási cél üzembe helyezéséhez, mivel már rendelkezik regisztrált modellel.

A modell helyi másolatát a Run objektum használatával is letöltheti. A betanítási szkriptben pytorch_train.pya PyTorch mentési objektuma egy helyi mappában (a számítási cél helyi mappájában) tárolja a modellt. A Futtatás objektummal letölthet egy másolatot.

# Create a model folder in the current directory
os.makedirs('./model', exist_ok=True)

# Download the model from run history
run.download_file(name='outputs/model.pt', output_file_path='./model/model.pt'), 

Distributed training

Az Azure Machine Tanulás támogatja a többcsomópontos elosztott PyTorch-feladatokat is, így skálázhatja a betanítási számítási feladatokat. Egyszerűen futtathat elosztott PyTorch-feladatokat, és az Azure Machine Tanulás felügyeli a vezénylést.

Az Azure Machine Tanulás támogatja az elosztott PyTorch-feladatok futtatását a Horovod és a PyTorch beépített DistributedDataParallel moduljával.

Az elosztott betanítással kapcsolatos további információkért tekintse meg az elosztott GPU-betanítási útmutatót.

Exportálás ONNX-be

Az ONNX-futtatókörnyezettel való következtetés optimalizálásához konvertálja a betanított PyTorch-modellt ONNX formátumra. Az inferencia vagy a modell pontozása az a fázis, amelyben az üzembe helyezett modellt használják az előrejelzéshez, leggyakrabban az éles adatokon. Példa: Az exportálási modell a PyTorch-ból az ONNX-be oktatóanyag.

További lépések

Ebben a cikkben egy mélytanulási, neurális hálózatot képezett be és regisztrált a PyTorch használatával az Azure Machine Tanulás. A modell üzembe helyezéséről további információt a modell üzembe helyezéséről szóló cikkünkben talál.