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


TensorFlow-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 TensorFlow-betanítási szkripteket nagy méretekben az Azure Machine Tanulás használatával.

Ez a példa betanít és regisztrál egy TensorFlow-modellt a kézzel írt számjegyek mély neurális hálózat (DNN) használatával történő besorolásához.

Akár az alapoktól fejleszt TensorFlow-modellt, akár meglévő modellt hoz létre a felhőbe, az Azure Machine Tanulás használatával kibővítheti a nyílt forráskódú betanítási feladatokat az éles üzemű modellek létrehozásához, üzembe helyezéséhez, verziójához és monitorozásához.

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 kibontott jegyzetfüzetet a következő könyvtárra navigálva: how-to-use-azureml > ml-frameworks > tensorflow > train-hyperparameter-tune-deploy-with-tensorflow 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 urllib
import shutil
import azureml

from azureml.core import Experiment
from azureml.core import Workspace, Run
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()

Fájladatkészlet létrehozása

Egy FileDataset objektum egy vagy több fájlra hivatkozik a munkaterület adattárában vagy nyilvános URL-címeiben. A fájlok bármilyen formátumúak lehetnek, és az osztály lehetővé teszi a fájlok letöltését vagy csatlakoztatását a számításhoz. Egy, FileDatasetaz adatforrás helyére mutató hivatkozást hoz létre. Ha bármilyen átalakítást alkalmazott az adathalmazra, azokat az adathalmazban is tárolja a rendszer. Az adatok a meglévő helyen maradnak, így nincs többlet tárolási költség. A csomagról további információt Dataset a Regisztrációs adathalmazok létrehozása című cikkben talál.

from azureml.core.dataset import Dataset

web_paths = [
            'http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz'
            ]
dataset = Dataset.File.from_files(path = web_paths)

Ezzel a register() módszerrel regisztrálhatja az adatkészletet a munkaterületen, hogy megoszthassa őket másokkal, újra felhasználhatók legyenek a különböző kísérletekben, és a betanítási szkriptben név szerint hivatkozva hivatkozhassák rájuk.

dataset = dataset.register(workspace=ws,
                           name='mnist-dataset',
                           description='training and test dataset',
                           create_new_version=True)

# list the files referenced by dataset
dataset.to_path()

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

Hozzon létre egy számítási célt a TensorFlow-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.

cluster_name = "gpu-cluster"

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)

    compute_target = ComputeTarget.create(ws, cluster_name, compute_config)

    compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)

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. Az Azure Machine Tanulás számos, a TensorFlow különböző verzióinak megfelelő CPU- és GPU-környezettel rendelkezik a TensorFlow számára. Ennek a környezetnek a legújabb verzióját használhatja az @latest irányelv használatával. További információ: Azure Machine Tanulás Válogatott környezetek.

Ha válogatott környezetet szeretne használni, a kód a következő példához fog hasonlítani:

curated_env_name = 'AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu'
tf_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:


tf_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:


tf_env = Environment.from_conda_specification(name='AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-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:


tf_env = tf_env.clone(new_name='my-AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-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:
  - azureml-defaults
  - tensorflow-gpu==2.2.0

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óért tekintse meg az Azure/AzureML-Containers GitHub-adattárat.

tf_env = Environment.from_conda_specification(name='AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu', file_path='./conda_dependencies.yml')

# Specify a GPU base image
tf_env.docker.enabled = True
tf_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.

from azureml.core import ScriptRunConfig

args = ['--data-folder', dataset.as_mount(),
        '--batch-size', 64,
        '--first-layer-neurons', 256,
        '--second-layer-neurons', 128,
        '--learning-rate', 0.01]

src = ScriptRunConfig(source_directory=script_folder,
                      script='tf_mnist.py',
                      arguments=args,
                      compute_target=compute_target,
                      environment=tf_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 TensorFlow becslőt használta a TensorFlow 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(workspace=ws, name='Tutorial-TF-Mnist').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.

Nem kötelező: a paraméterek megadásával a kód nélküli modell üzembe helyezése elérhetővé válikmodel_frameworkmodel_framework_versionresource_configuration. Ez lehetővé teszi a modell webszolgáltatásként való közvetlen üzembe helyezését a regisztrált modellből, és az ResourceConfiguration objektum határozza meg a webszolgáltatás számítási erőforrását.

from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration

model = run.register_model(model_name='tf-mnist', 
                           model_path='outputs/model',
                           model_framework=Model.Framework.TENSORFLOW,
                           model_framework_version='2.0',
                           resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5))

A modell helyi másolatát a Run objektum használatával is letöltheti. A betanítási szkriptben tf_mnist.pyegy TensorFlow-mentési objektum egy helyi mappába (a számítási célhoz helyi) 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)
run.download_files(prefix='outputs/model', output_directory='./model', append_prefix=False)

Distributed training

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

Az Azure Machine Tanulás támogatja az elosztott TensorFlow-feladatok futtatását a Horovod és a TensorFlow beépített elosztott betanítási API-jával.

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

TensorFlow-modell üzembe helyezése

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.

(Előzetes verzió) Kód nélküli modell üzembe helyezése

Fontos

Ez a funkció jelenleg nyilvános előzetes verzióban érhető el. Ez az előzetes verzió szolgáltatásszintű szerződés nélkül érhető el, és éles számítási feladatokhoz nem javasoljuk. Előfordulhat, hogy néhány funkció nem támogatott, vagy korlátozott képességekkel rendelkezik.

For more information, see Supplemental Terms of Use for Microsoft Azure Previews.

A hagyományos üzembehelyezési útvonal helyett használhatja a Kód nélküli üzembe helyezés funkciót (előzetes verzió) a TensorFlow-hoz. Ha a modellt a fenti módon regisztrálja a model_framework, model_framework_versionés resource_configuration paraméterekkel, a deploy() statikus függvénnyel telepítheti a modellt.

service = Model.deploy(ws, "tensorflow-web-service", [model])

A teljes útmutató az Azure Machine-ben való üzembe helyezést Tanulás részletesebben ismerteti.

További lépések

Ebben a cikkben betanított és regisztrált egy TensorFlow-modellt, és megismerkedett az üzembe helyezési lehetőségekkel. Az Azure Machine Tanulás további információért tekintse meg ezeket a cikkeket.