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:
Hozzon létre egy Azure Machine Learning szolgáltatás-munkaterületet, és ismerkedjen meg az első lépéssel:
Telepítse az Azure Machine Learning SDK-t és a Data Prep SDK-t.
Azure Machine Learning Compute beállítása modellbetanításhoz.
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:
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
Olvassa el az Azure Machine Learning szolgáltatás áttekintését.
Konfiguráljon egy számítási célt a modell betanításához az Azure Machine Learning szolgáltatással.
Tekintse át az Azure ütemtervét , és ismerje meg az Azure-szolgáltatás egyéb frissítéseit.