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ó
- Telepítse az Azure Machine Tanulás SDK-t (>= 1.15.0).
- Munkaterület konfigurációs fájljának létrehozása.
- A mintaszkriptfájlok letöltése
pytorch_train.py
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.json
elő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.py
ré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.py
má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.py
a 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.