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


Migrálás a Batch AI-ből az Azure Machine Learning szolgáltatásba

A Azure Batch AI szolgáltatás márciusban megszűnik. A Batch AI nagy léptékű betanítási és pontozási képességei mostantól elérhetők az Azure Machine Learning szolgáltatásban, amely 2018. december 4-én általánosan elérhetővé vált.

Az Azure Machine Learning szolgáltatás számos más gépi tanulási képesség mellett egy felhőalapú felügyelt számítási célt is tartalmaz a gépi tanulási modellek betanításához, üzembe helyezéséhez és pontozásához. Ezt a számítási célt Azure Machine Learning Compute-nek nevezzük. Kezdje el a migrálást és a használatát még ma. Az Azure Machine Learning szolgáltatással a Python SDK-kkal, a parancssori felülettel és a Azure Portal keresztül kommunikálhat.

Az előzetes Batch AI-ről a GA'ed Azure Machine Learning szolgáltatásra való frissítés jobb élményt nyújt az olyan fogalmak révén, amelyek könnyebben használhatók, például az Estimatorok és az Adattárak. Emellett ga szintű Azure-szolgáltatási SLA-kat és ügyfélszolgálatot is garantál.

Az Azure Machine Learning szolgáltatás olyan új funkciókat is kínál, mint az automatizált gépi tanulás, a hiperparaméterek finomhangolása és az ML-folyamatok, amelyek a legtöbb nagy méretű AI-számítási feladatban hasznosak. A betanított modellek külön szolgáltatásra váltás nélkül történő üzembe helyezése segít az adatelemzési ciklusnak az adatelőkészítésből (a Data Prep SDK használatával) történő kiépítéséből egészen az üzembe helyezésig és a modell monitorozásig.

Migrálás indítása

Az alkalmazásokkal kapcsolatos fennakadások elkerülése és a legújabb funkciók előnyeinek kihasználása érdekében 2019. március 31-e előtt hajtsa végre a következő lépéseket:

  1. Hozzon létre egy Azure Machine Learning szolgáltatás-munkaterületet, és ismerkedjen meg az első lépéssel:

  2. Telepítse az Azure Machine Learning SDK-t és a Data Prep SDK-t.

  3. Azure Machine Learning Compute beállítása modellbetanításhoz.

  4. Frissítse a szkripteket az Azure Machine Learning Compute használatára. Az alábbi szakaszok bemutatják, hogy milyen gyakori kódot használ a Batch AI-térképekhez az Azure Machine Learning kódjához.

Munkaterületek létrehozása

A munkaterületnek a configuration.json használatával történő inicializálásának fogalma Azure Batch AI-térképekben hasonlóan, mint egy konfigurációs fájl használata az Azure Machine Learning szolgáltatásban.

A Batch AI esetében a következő módon tette:

sys.path.append('../../..')
import utilities as utils

cfg = utils.config.Configuration('../../configuration.json')
client = utils.config.create_batchai_client(cfg)

utils.config.create_resource_group(cfg)
_ = client.workspaces.create(cfg.resource_group, cfg.workspace, cfg.location).result()

Azure Machine Learning szolgáltatás, próbálkozzon a következőkkel:

from azureml.core.workspace import Workspace

ws = Workspace.from_config()
print('Workspace name: ' + ws.name, 
      'Azure region: ' + ws.location, 
      'Subscription id: ' + ws.subscription_id, 
      'Resource group: ' + ws.resource_group, sep = '\n')

Emellett közvetlenül is létrehozhat munkaterületet az olyan konfigurációs paraméterek megadásával, mint a

from azureml.core import Workspace
# Create the workspace using the specified parameters
ws = Workspace.create(name = workspace_name,
                      subscription_id = subscription_id,
                      resource_group = resource_group, 
                      location = workspace_region,
                      create_resource_group = True,
                      exist_ok = True)
ws.get_details()

# write the details of the workspace to a configuration file to the notebook library
ws.write_config()

További információ az Azure Machine Learning Workspace osztályról az SDK referenciadokumentációjában.

Számítási fürtök létrehozása

Az Azure Machine Learning több számítási célt is támogat, amelyek némelyikét a szolgáltatás felügyeli, mások pedig a munkaterülethez csatolhatók (pl. HDInsight-fürt vagy távoli virtuális gép. További információ a különböző számítási célokról. A Azure Batch AI számítási fürt létrehozásának fogalma AmlCompute-fürt létrehozásához az Azure Machine Learning szolgáltatásban. Az Amlcompute létrehozása a paraméterek Azure Batch AI-ben való átadásához hasonló számítási konfigurációt vesz igénybe. Fontos megjegyezni, hogy az automatikus skálázás alapértelmezés szerint be van kapcsolva az AmlCompute-fürtön, míg a Azure Batch AI alapértelmezés szerint ki van kapcsolva.

A Batch AI esetében a következő módon tette:

nodes_count = 2
cluster_name = 'nc6'

parameters = models.ClusterCreateParameters(
    vm_size='STANDARD_NC6',
    scale_settings=models.ScaleSettings(
        manual=models.ManualScaleSettings(target_node_count=nodes_count)
    ),
    user_account_settings=models.UserAccountSettings(
        admin_user_name=cfg.admin,
        admin_user_password=cfg.admin_password or None,
        admin_user_ssh_public_key=cfg.admin_ssh_key or None,
    )
)
_ = client.clusters.create(cfg.resource_group, cfg.workspace, cluster_name, parameters).result()

Az Azure Machine Learning szolgáltatás esetében próbálkozzon a következőkkel:

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

# Choose a name for your CPU cluster
gpu_cluster_name = "nc6"

# Verify that cluster does not exist already
try:
    gpu_cluster = ComputeTarget(workspace=ws, name=gpu_cluster_name)
    print('Found existing cluster, use it.')
except ComputeTargetException:
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6',
                                                           vm_priority='lowpriority',
                                                           min_nodes=1,
                                                           max_nodes=2,
                                                           idle_seconds_before_scaledown='300',
                                                           vnet_resourcegroup_name='<my-resource-group>',
                                                           vnet_name='<my-vnet-name>',
                                                           subnet_name='<my-subnet-name>')
    gpu_cluster = ComputeTarget.create(ws, gpu_cluster_name, compute_config)

gpu_cluster.wait_for_completion(show_output=True)

További információ az AMLCompute osztályról az SDK referenciadokumentációjában. Vegye figyelembe, hogy a fenti konfigurációban csak vm_size és max_nodes kötelező, és a többi tulajdonság, például a virtuális hálózatok csak a speciális fürtbeállításhoz használhatók.

A fürt állapotának figyelése

Ez egyszerűbb az Azure Machine Learning szolgáltatásban, ahogy alább látni fogja.

A Batch AI esetében a következő módon tette:

cluster = client.clusters.get(cfg.resource_group, cfg.workspace, cluster_name)
utils.cluster.print_cluster_status(cluster)

Az Azure Machine Learning szolgáltatás esetében próbálkozzon a következőkkel:

gpu_cluster.get_status().serialize()

Tárfiókra mutató hivatkozás lekérése

A blobhoz hasonló adattárolás fogalma egyszerűbbé válik az Azure Machine Learning szolgáltatásban a DataStore objektum használatával. Alapértelmezés szerint az Azure Machine Learning szolgáltatás munkaterülete létrehoz egy tárfiókot, de a munkaterület létrehozásakor saját tárterületet is csatolhat.

A Batch AI esetében a következő módon tette:

azure_blob_container_name = 'batchaisample'
blob_service = BlockBlobService(cfg.storage_account_name, cfg.storage_account_key)
blob_service.create_container(azure_blob_container_name, fail_on_exist=False)

Az Azure Machine Learning szolgáltatás esetében próbálkozzon a következőkkel:

ds = ws.get_default_datastore()
print(ds.datastore_type, ds.account_name, ds.container_name)

További információ a további tárfiókok regisztrálásáról, vagy egy másik regisztrált adattárra való hivatkozás lekéréséről az Azure Machine Learning szolgáltatás dokumentációjában.

Adatok letöltése és feltöltése

Bármelyik szolgáltatással egyszerűen feltöltheti az adatokat a tárfiókba a fenti adattár-referenciával. A Azure Batch AI esetében a betanítási szkriptet is üzembe helyezzük a fájlmegosztás részeként, bár látni fogja, hogyan adhatja meg a feladatkonfiguráció részeként az Azure Machine Learning szolgáltatás esetében.

A Batch AI esetében a következő módon tette:

mnist_dataset_directory = 'mnist_dataset'
utils.dataset.download_and_upload_mnist_dataset_to_blob(
    blob_service, azure_blob_container_name, mnist_dataset_directory)

script_directory = 'tensorflow_samples'
script_to_deploy = 'mnist_replica.py'

blob_service.create_blob_from_path(azure_blob_container_name,
                                   script_directory + '/' + script_to_deploy, 
                                   script_to_deploy)

Az Azure Machine Learning szolgáltatás esetében próbálkozzon a következőkkel:

import os
import urllib
os.makedirs('./data', exist_ok=True)
download_url = 'https://s3.amazonaws.com/img-datasets/mnist.npz'
urllib.request.urlretrieve(download_url, filename='data/mnist.npz')

ds.upload(src_dir='data', target_path='mnist_dataset', overwrite=True, show_progress=True)

path_on_datastore = ' mnist_dataset/mnist.npz' ds_data = ds.path(path_on_datastore) print(ds_data)

Kísérletek létrehozása

Ahogy fentebb említettük, az Azure Machine Learning szolgáltatás a Azure Batch mesterséges intelligenciához hasonló kísérlet fogalmával rendelkezik. Ezután minden kísérlet rendelkezhet egyéni futtatással, hasonlóan ahhoz, ahogyan a feladatok Azure Batch AI-ben vannak. Az Azure Machine Learning szolgáltatás azt is lehetővé teszi, hogy az egyes gyermekfuttatások esetében hierarchia legyen az egyes szülőfuttatások alatt.

A Batch AI esetében a következő módon tette:

experiment_name = 'tensorflow_experiment'
experiment = client.experiments.create(cfg.resource_group, cfg.workspace, experiment_name).result()

Az Azure Machine Learning szolgáltatás esetében próbálkozzon a következőkkel:

from azureml.core import Experiment

experiment_name = 'tensorflow_experiment'
experiment = Experiment(ws, name=experiment_name)

Feladatok elküldése

A kísérlet létrehozása után többféleképpen is elküldheti a futtatást. Ebben a példában egy mélytanulási modellt próbálunk létrehozni a TensorFlow használatával, és ehhez egy Azure Machine Learning-szolgáltatásbecslőt fogunk használni. A Becslő egyszerűen egy burkolófüggvény a mögöttes futtatási konfiguráción, amely megkönnyíti a futtatások elküldését, és jelenleg csak a Pytorch és a TensorFlow esetében támogatott. Az adattárak fogalmán keresztül azt is látni fogja, hogy milyen egyszerűvé válik a csatlakoztatási útvonalak megadása

A Batch AI esetében a következő módon tette:

azure_file_share = 'afs'
azure_blob = 'bfs'
args_fmt = '--job_name={0} --num_gpus=1 --train_steps 10000 --checkpoint_dir=$AZ_BATCHAI_OUTPUT_MODEL --log_dir=$AZ_BATCHAI_OUTPUT_TENSORBOARD --data_dir=$AZ_BATCHAI_INPUT_DATASET --ps_hosts=$AZ_BATCHAI_PS_HOSTS --worker_hosts=$AZ_BATCHAI_WORKER_HOSTS --task_index=$AZ_BATCHAI_TASK_INDEX'

parameters = models.JobCreateParameters(
     cluster=models.ResourceId(id=cluster.id),
     node_count=2,
     input_directories=[
        models.InputDirectory(
            id='SCRIPT',
            path='$AZ_BATCHAI_JOB_MOUNT_ROOT/{0}/{1}'.format(azure_blob, script_directory)),
        models.InputDirectory(
            id='DATASET',
            path='$AZ_BATCHAI_JOB_MOUNT_ROOT/{0}/{1}'.format(azure_blob, mnist_dataset_directory))],
     std_out_err_path_prefix='$AZ_BATCHAI_JOB_MOUNT_ROOT/{0}'.format(azure_file_share),
     output_directories=[
        models.OutputDirectory(
            id='MODEL',
            path_prefix='$AZ_BATCHAI_JOB_MOUNT_ROOT/{0}'.format(azure_file_share),
            path_suffix='Models'),
        models.OutputDirectory(
            id='TENSORBOARD',
            path_prefix='$AZ_BATCHAI_JOB_MOUNT_ROOT/{0}'.format(azure_file_share),
            path_suffix='Logs')
     ],
     mount_volumes=models.MountVolumes(
            azure_file_shares=[
                models.AzureFileShareReference(
                    account_name=cfg.storage_account_name,
                    credentials=models.AzureStorageCredentialsInfo(
                        account_key=cfg.storage_account_key),
                    azure_file_url='https://{0}.file.core.windows.net/{1}'.format(
                        cfg.storage_account_name, azure_file_share_name),
                    relative_mount_path=azure_file_share)
            ],
            azure_blob_file_systems=[
                models.AzureBlobFileSystemReference(
                    account_name=cfg.storage_account_name,
                    credentials=models.AzureStorageCredentialsInfo(
                        account_key=cfg.storage_account_key),
                    container_name=azure_blob_container_name,
                    relative_mount_path=azure_blob)
            ]
        ),
     container_settings=models.ContainerSettings(
         image_source_registry=models.ImageSourceRegistry(image='tensorflow/tensorflow:1.8.0-gpu')),
     tensor_flow_settings=models.TensorFlowSettings(
         parameter_server_count=1,
         worker_count=nodes_count,
         python_script_file_path='$AZ_BATCHAI_INPUT_SCRIPT/'+ script_to_deploy,
         master_command_line_args=args_fmt.format('worker'),
         worker_command_line_args=args_fmt.format('worker'),
         parameter_server_command_line_args=args_fmt.format('ps'),
     )
)

A feladat beküldése Azure Batch AI-ben a create függvényen keresztül történik.

job_name = datetime.utcnow().strftime('tf_%m_%d_%Y_%H%M%S')
job = client.jobs.create(cfg.resource_group, cfg.workspace, experiment_name, job_name, parameters).result()
print('Created Job {0} in Experiment {1}'.format(job.name, experiment.name))

A betanítási kódrészlet (beleértve a fenti fájlmegosztásra feltöltött mnist_replica.py fájlt is) teljes információ megtalálható a Azure Batch AI-mintajegyzetfüzet github-adattárában.

Az Azure Machine Learning szolgáltatás esetében próbálkozzon a következőkkel:

from azureml.train.dnn import TensorFlow

script_params={
    '--num_gpus': 1,
    '--train_steps': 500,
    '--input_data': ds_data.as_mount()

}

estimator = TensorFlow(source_directory=project_folder,
                       compute_target=gpu_cluster,
                       script_params=script_params,
                       entry_script='tf_mnist_replica.py',
                       node_count=2,
                       worker_count=2,
                       parameter_server_count=1,   
                       distributed_backend='ps',
                       use_gpu=True)

Ennek a betanítási kódrészletnek (beleértve a tf_mnist_replica.py fájlt) teljes információja megtalálható az Azure Machine Learning szolgáltatás mintajegyzetfüzetében, a GitHub-adattárban. Maga az adattár csatlakoztatható az egyes csomópontokhoz, vagy a betanítási adatok magukra a csomópontra tölthetők le. Az adattárra való hivatkozással kapcsolatos további részletek az Azure Machine Learning szolgáltatás dokumentációjában találhatók.

A futtatás elküldése az Azure Machine Learning szolgáltatásban a submit függvényen keresztül történik.

run = experiment.submit(estimator)
print(run)

A futtatás paramétereit egy másik módon is megadhatja, futtatási konfiguráció használatával – különösen hasznos egyéni betanítási környezetek definiálására. További részleteket ebben az AmlCompute-mintajegyzetfüzetben talál.

Futtatások monitorozása

A futtatás elküldése után megvárhatja, amíg befejeződik, vagy figyelheti azt az Azure Machine Learning szolgáltatásban a jól használható Jupyter-vezérlők használatával, amelyeket közvetlenül a kódból hívhat meg. Az előző futtatások kontextusát úgy is lekérheti, hogy végighalad a munkaterületen végzett különböző kísérleteken, és az egyes kísérleteken belül futtatja az egyes futtatásokat.

A Batch AI esetében a következő módon tette:

utils.job.wait_for_job_completion(client, cfg.resource_group, cfg.workspace, 
                                  experiment_name, job_name, cluster_name, 'stdouterr', 'stdout-wk-0.txt')

files = client.jobs.list_output_files(cfg.resource_group, cfg.workspace, experiment_name, job_name,
                                      models.JobsListOutputFilesOptions(outputdirectoryid='stdouterr')) 
for f in list(files):
    print(f.name, f.download_url or 'directory')

Az Azure Machine Learning szolgáltatás esetében próbálkozzon a következőkkel:

run.wait_for_completion(show_output=True)

from azureml.widgets import RunDetails
RunDetails(run).show()

Íme egy pillanatkép arról, hogy a widget hogyan töltődik be a jegyzetfüzetbe a naplók valós idejű megtekintéséhez: Widgetfigyelési diagram

Fürtök szerkesztése

A fürt törlése egyszerű. Az Azure Machine Learning szolgáltatás emellett lehetővé teszi, hogy frissítse a fürtöt a jegyzetfüzetből arra az esetre, ha nagyobb számú csomópontra szeretné skálázni, vagy növelni szeretné a tétlen várakozási időt a fürt leskálázása előtt. Nem engedélyezzük magának a fürtnek a virtuálisgép-méretét, mivel hatékonyan kell üzembe helyezést igényelnie a háttérrendszerben.

A Batch AI esetében a következő módon tette:

_ = client.clusters.delete(cfg.resource_group, cfg.workspace, cluster_name)

Az Azure Machine Learning szolgáltatás esetében próbálkozzon a következőkkel:

gpu_cluster.delete()

gpu_cluster.update(min_nodes=2, max_nodes=4, idle_seconds_before_scaledown=600)

Támogatás kérése

A Batch AI március 31-én megszűnik, és már blokkolja az új előfizetések regisztrációját a szolgáltatáson, hacsak nem engedélyezi a kivételt a támogatáson keresztül. Az Azure Machine Learning szolgáltatásba való migrálással kapcsolatban forduljon hozzánk a Azure Batch AI-betanítási előzetes verzióban.

Az Azure Machine Learning szolgáltatás egy általánosan elérhető szolgáltatás. Ez azt jelenti, hogy egy véglegesített SLA-val és különböző támogatási csomagokkal rendelkezik, amelyek közül választhat.

Az Azure-infrastruktúra Azure Batch AI-szolgáltatáson vagy az Azure Machine Learning szolgáltatáson keresztül történő használatának díjszabása nem változhat, mivel mindkét esetben csak az alapul szolgáló számítás árát számítjuk fel. További információt a díjkalkulátorban talál.

Tekintse meg a Azure Portal két szolgáltatása közötti regionális rendelkezésre állást.

Következő lépések