TensorFlow-modellek nagy léptékű betanítása az Azure Machine Learning SDK-val (v1)
A KÖVETKEZŐKRE VONATKOZIK: Python SDK azureml v1
Ebből a cikkből megtudhatja, hogyan futtathatja a TensorFlow-betanítási szkripteket nagy méretekben az Azure Machine Learning 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 egy meglévő modellt hoz a felhőbe, az Azure Machine Learning 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ószámozásához és monitorozásához.
Előfeltételek
Futtassa ezt a kódot a következő környezeteken:
Azure Machine Learning 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: Az Azure Machine Learning használatának első lépései 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ó
- Telepítse az Azure Machine Learning SDK-t (>= 1.15.0).
- Munkaterület konfigurációs fájljának létrehozása.
- Töltse le a példaszkriptfájlokat
tf_mnist.py
, ésutils.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 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 Learning-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()
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, FileDataset
az 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 Learning 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 Learning-környezet definiálásához definiálhat egyéni környezetet, vagy használhat egy Azure Machine Learning-válogatott környezetet.
Válogatott környezet használata
Az Azure Machine Learning 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 Learning 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 Learning 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 Learning-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 Learning-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 Learning 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 Learning a Microsoft Container Registryben (MCR) közzétett alaprendszerképek készletét tartja fenn, amelyeket használhat. További információt az Azure/AzureML-Containers GitHub adattárban talál.
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 Learningben.
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 Learning a teljes forráskönyvtár másolásával futtat 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 Learning-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 Learning 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_framework
model_framework_version
resource_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.py
egy 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)
Elosztott betanítás
Az Azure Machine Learning támogatja a többcsomópontos elosztott TensorFlow-feladatokat is, hogy skálázhassa a betanítási számítási feladatokat. Egyszerűen futtathat elosztott TensorFlow-feladatokat, és az Azure Machine Learning felügyeli a vezénylést.
Az Azure Machine Learning támogatja az elosztott TensorFlow-feladatok futtatását a Horovod és a TensorFlow beépített elosztott betanítási API-jával is.
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.
További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.
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ó részletesebben ismerteti az Azure Machine Learningben való üzembe helyezést.
Következő 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 Learningről további információt az alábbi cikkekben talál.