チュートリアル:MNIST データと scikit-learn を使用して画像の分類モデルをトレーニングするTutorial: Train image classification models with MNIST data and scikit-learn

適用先: 有効Basic エディション 有効Enterprise エディション                    (Enterprise エディションにアップグレード)APPLIES TO: yesBasic edition yesEnterprise edition                    (Upgrade to Enterprise edition)

このチュートリアルでは、機械学習モデルのトレーニングをリモートのコンピューティング リソース上で行います。In this tutorial, you train a machine learning model on remote compute resources. Python Jupyter Notebook 内の Azure Machine Learning に関するトレーニングとデプロイのワークフローを使用します。You'll use the training and deployment workflow for Azure Machine Learning in a Python Jupyter notebook. それからノートブックをテンプレートとして使用し、独自のデータで独自の機械学習モデルをトレーニングできます。You can then use the notebook as a template to train your own machine learning model with your own data. このチュートリアルは、2 部構成のチュートリアル シリーズのパート 1 ですThis tutorial is part one of a two-part tutorial series.

このチュートリアルでは、Azure Machine Learning で MNIST データセットや scikit-learn を使用して、単純なロジスティック回帰をトレーニングします。This tutorial trains a simple logistic regression by using the MNIST dataset and scikit-learn with Azure Machine Learning. MNIST は、70,000 ものグレースケールのイメージから成る、人気のあるデータセットです。MNIST is a popular dataset consisting of 70,000 grayscale images. 各イメージは、0 から 9 までの数値を表す 28 x 28 ピクセルの手書き数字です。Each image is a handwritten digit of 28 x 28 pixels, representing a number from zero to nine. 多クラス分類子を作成して、特定のイメージが表す数字を識別することが目標です。The goal is to create a multi-class classifier to identify the digit a given image represents.

次の操作の実行方法を確認してください。Learn how to take the following actions:

  • 開発環境を設定する。Set up your development environment.
  • データにアクセスして検査する。Access and examine the data.
  • リモート クラスターで単純なロジスティック回帰モデルをローカルでトレーニングします。Train a simple logistic regression model on a remote cluster.
  • トレーニングの結果をレビューし、最適なモデルを登録する。Review training results and register the best model.

このチュートリアルのパート 2 では、モデルを選択してデプロイする方法を学習します。You learn how to select a model and deploy it in part two of this tutorial.

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin. 無料版または有料版の Azure Machine Learning を今すぐお試しください。Try the free or paid version of Azure Machine Learning today.

注意

この記事のコードは、Azure Machine Learning SDK バージョン 1.0.83 を使用してテストされています。Code in this article was tested with Azure Machine Learning SDK version 1.0.83.

前提条件Prerequisites

  • チュートリアル: 初めての Azure ML 実験の作成を開始する」を完了することで、以下の操作を行います。Complete the Tutorial: Get started creating your first Azure ML experiment to:

    • ワークスペースの作成Create a workspace
    • チュートリアル ノートブックをワークスペース内のフォルダーに複製します。Clone the tutorials notebook to your folder in the workspace.
    • クラウドベースのコンピューティング インスタンスを作成します。Create a cloud-based compute instance.
  • 複製した tutorials/image-classification-mnist-data フォルダーで、img-classification-part1-training.ipynb ノートブックを開きます。In your cloned tutorials/image-classification-mnist-data folder, open the img-classification-part1-training.ipynb notebook.

チュートリアルと付随する utils.py ファイルは、独自のローカル環境で使用する場合、GitHub から入手することもできます。The tutorial and accompanying utils.py file is also available on GitHub if you wish to use it on your own local environment. pip install azureml-sdk[notebooks] azureml-opendatasets matplotlib を実行して、このチュートリアルの依存関係をインストールします。Run pip install azureml-sdk[notebooks] azureml-opendatasets matplotlib to install dependencies for this tutorial.

重要

以降この記事には、ノートブックと同じ内容が記載されています。The rest of this article contains the same content as you see in the notebook.

コードを実行しながら読み進めたい方は、ここで Jupyter Notebook に切り替えてください。Switch to the Jupyter notebook now if you want to read along as you run the code. ノートブックで単一のコード セルを実行するには、そのコード セルをクリックして Shift + Enter キーを押します。To run a single code cell in a notebook, click the code cell and hit Shift+Enter. または、上部のツール バーから [すべて実行] を選択して、ノートブック全体を実行します。Or, run the entire notebook by choosing Run all from the top toolbar.

開発環境を設定するSet up your development environment

Python Notebook で、開発作業に関するすべての設定を行うことができます。All the setup for your development work can be accomplished in a Python notebook. 設定の一環として次のことを行います。Setup includes the following actions:

  • Python パッケージをインポートする。Import Python packages.
  • ローカル コンピューターがリモート リソースと通信できるように、ワークスペースに接続する。Connect to a workspace, so that your local computer can communicate with remote resources.
  • 実験を作成して、すべての実行を追跡する。Create an experiment to track all your runs.
  • リモート コンピューティング ターゲットを作成して、トレーニングに使用する。Create a remote compute target to use for training.

パッケージをインポートするImport packages

このセッションで必要な Python パッケージをインポートします。Import Python packages you need in this session. さらに、Azure Machine Learning の SDK のバージョンを表示します。Also display the Azure Machine Learning SDK version:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

import azureml.core
from azureml.core import Workspace

# check core SDK version number
print("Azure ML SDK Version: ", azureml.core.VERSION)

ワークスペースに接続するConnect to a workspace

既存のワークスペースからワークスペース オブジェクトを作成します。Create a workspace object from the existing workspace. Workspace.from_config() により、config.json ファイルが読み取られ、詳細情報が ws という名前のオブジェクトに読み込まれます。Workspace.from_config() reads the file config.json and loads the details into an object named ws:

# load workspace configuration from the config.json file in the current folder.
ws = Workspace.from_config()
print(ws.name, ws.location, ws.resource_group, sep='\t')

実験の作成Create an experiment

実験を作成して、ワークスペース内の実行を追跡します。Create an experiment to track the runs in your workspace. 1 つのワークスペースで複数の実験を保持できます。A workspace can have multiple experiments:

from azureml.core import Experiment
experiment_name = 'sklearn-mnist'

exp = Experiment(workspace=ws, name=experiment_name)

コンピューティング先の作成または既存のコンピューティング先のアタッチCreate or attach an existing compute target

マネージド サービスである Azure Machine Learning コンピューティングを使用することにより、データ サイエンティストは Azure 仮想マシンのクラスター上で機械学習モデルをトレーニングできます。By using Azure Machine Learning Compute, a managed service, data scientists can train machine learning models on clusters of Azure virtual machines. たとえば、GPU がサポートされている VM などです。Examples include VMs with GPU support. このチュートリアルでは、トレーニング環境として Azure Machine Learning コンピューティングを作成します。In this tutorial, you create Azure Machine Learning Compute as your training environment. その VM 上で実行する Python コードは、後でこのチュートリアルの中で送信します。You will submit Python code to run on this VM later in the tutorial.

以下のコードでは、まだワークスペース内にコンピューティング クラスターがない場合、それらが作成されます。The code below creates the compute clusters for you if they don't already exist in your workspace.

コンピューティング先の作成には約 5 分かかります。Creation of the compute target takes about five minutes. ワークスペース内にコンピューティング リソースが既にある場合は、それが使用され、作成プロセスはスキップされます。If the compute resource is already in the workspace, the code uses it and skips the creation process.

from azureml.core.compute import AmlCompute
from azureml.core.compute import ComputeTarget
import os

# choose a name for your cluster
compute_name = os.environ.get("AML_COMPUTE_CLUSTER_NAME", "cpucluster")
compute_min_nodes = os.environ.get("AML_COMPUTE_CLUSTER_MIN_NODES", 0)
compute_max_nodes = os.environ.get("AML_COMPUTE_CLUSTER_MAX_NODES", 4)

# This example uses CPU VM. For using GPU VM, set SKU to STANDARD_NC6
vm_size = os.environ.get("AML_COMPUTE_CLUSTER_SKU", "STANDARD_D2_V2")


if compute_name in ws.compute_targets:
    compute_target = ws.compute_targets[compute_name]
    if compute_target and type(compute_target) is AmlCompute:
        print('found compute target. just use it. ' + compute_name)
else:
    print('creating a new compute target...')
    provisioning_config = AmlCompute.provisioning_configuration(vm_size=vm_size,
                                                                min_nodes=compute_min_nodes,
                                                                max_nodes=compute_max_nodes)

    # create the cluster
    compute_target = ComputeTarget.create(
        ws, compute_name, provisioning_config)

    # can poll for a minimum number of nodes and for a specific timeout.
    # if no min node count is provided it will use the scale settings for the cluster
    compute_target.wait_for_completion(
        show_output=True, min_node_count=None, timeout_in_minutes=20)

    # For a more detailed view of current AmlCompute status, use get_status()
    print(compute_target.get_status().serialize())

これで、クラウドでモデルをトレーニングするために必要なパッケージとコンピューティング リソースが揃いました。You now have the necessary packages and compute resources to train a model in the cloud.

データの探索Explore data

モデルをトレーニングする前に、トレーニングに使用するデータを解釈する必要があります。Before you train a model, you need to understand the data that you use to train it. このセクションでは、次の方法について説明します。In this section you learn how to:

  • MNIST データセットをダウンロードする。Download the MNIST dataset.
  • いくつかのサンプル イメージを表示する。Display some sample images.

MNIST データセットのダウンロードDownload the MNIST dataset

Azure Open Datasets を使用して、未加工の MNIST データ ファイルを取得します。Use Azure Open Datasets to get the raw MNIST data files. Azure オープン データセットは選別されたパブリック データセットであり、機械学習ソリューションにシナリオ固有の機能を追加してモデルの精度を上げるために使用できます。Azure Open Datasets are curated public datasets that you can use to add scenario-specific features to machine learning solutions for more accurate models. 各データセットには、異なる方法でデータを取得するための対応するクラスがあります (ここでは MNIST)。Each dataset has a corresponding class, MNIST in this case, to retrieve the data in different ways.

このコードを使用すると、データが FileDataset オブジェクトとして取得されます (これは Dataset のサブクラスです)。This code retrieves the data as a FileDataset object, which is a subclass of Dataset. FileDataset によって、データストアまたはパブリック URL 内の 1 つまたは複数の任意の形式のファイルが参照されます。A FileDataset references single or multiple files of any format in your datastores or public urls. クラスには、データ ソースの場所への参照を作成することで、お使いのコンピューティングにファイルをダウンロードまたはマウントする機能が用意されています。The class provides you with the ability to download or mount the files to your compute by creating a reference to the data source location. さらに、トレーニング中に簡単に取得できるように、データセットをワークスペースに登録します。Additionally, you register the Dataset to your workspace for easy retrieval during training.

SDK でのデータセットとその使用方法の詳細については、方法のページを参照してください。Follow the how-to to learn more about Datasets and their usage in the SDK.

from azureml.core import Dataset
from azureml.opendatasets import MNIST

data_folder = os.path.join(os.getcwd(), 'data')
os.makedirs(data_folder, exist_ok=True)

mnist_file_dataset = MNIST.get_file_dataset()
mnist_file_dataset.download(data_folder, overwrite=True)

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

複数のサンプル イメージの表示Display some sample images

圧縮されたファイルを numpy 配列内に読み込みます。Load the compressed files into numpy arrays. それから matplotlib を使用して、ラベルがあるデータセットから 30 個のランダムなイメージをプロットします。Then use matplotlib to plot 30 random images from the dataset with their labels above them. この手順には、util.py ファイルに含まれている load_data 関数が必要です。This step requires a load_data function that's included in an util.py file. このファイルは、サンプル フォルダーに含まれています。This file is included in the sample folder. このノートブックと同じフォルダーに配置されていることを確認します。Make sure it's placed in the same folder as this notebook. load_data 関数は、圧縮ファイルを numpy 配列に解析するだけのものです。The load_data function simply parses the compressed files into numpy arrays.

# make sure utils.py is in the same directory as this code
from utils import load_data
import glob


# note we also shrink the intensity values (X) from 0-255 to 0-1. This helps the model converge faster.
X_train = load_data(glob.glob(os.path.join(data_folder,"**/train-images-idx3-ubyte.gz"), recursive=True)[0], False) / 255.0
X_test = load_data(glob.glob(os.path.join(data_folder,"**/t10k-images-idx3-ubyte.gz"), recursive=True)[0], False) / 255.0
y_train = load_data(glob.glob(os.path.join(data_folder,"**/train-labels-idx1-ubyte.gz"), recursive=True)[0], True).reshape(-1)
y_test = load_data(glob.glob(os.path.join(data_folder,"**/t10k-labels-idx1-ubyte.gz"), recursive=True)[0], True).reshape(-1)


# now let's show some randomly chosen images from the traininng set.
count = 0
sample_size = 30
plt.figure(figsize=(16, 6))
for i in np.random.permutation(X_train.shape[0])[:sample_size]:
    count = count + 1
    plt.subplot(1, sample_size, count)
    plt.axhline('')
    plt.axvline('')
    plt.text(x=10, y=-10, s=y_train[i], fontsize=18)
    plt.imshow(X_train[i].reshape(28, 28), cmap=plt.cm.Greys)
plt.show()

ランダムなイメージのサンプルは、以下のように表示されます。A random sample of images displays:

ランダムなイメージのサンプル

これで、これらのイメージの概観が頭に浮かんだり、予測結果を想定したりできるようになりました。Now you have an idea of what these images look like and the expected prediction outcome.

リモート クラスターでのトレーニングTrain on a remote cluster

このタスクでは、あらかじめ設定しておいたリモート トレーニング クラスターで実行するジョブを送信します。For this task, you submit the job to run on the remote training cluster you set up earlier. ジョブを送信するには、次のようにします。To submit a job you:

  • ディレクトリを作成するCreate a directory
  • トレーニング スクリプトを作成するCreate a training script
  • エスティメータ オブジェクトを作成するCreate an estimator object
  • ジョブを送信するSubmit the job

ディレクトリを作成するCreate a directory

必要なコードをコンピューターからリモート リソースに配信するためのディレクトリを作成します。Create a directory to deliver the necessary code from your computer to the remote resource.

import os
script_folder = os.path.join(os.getcwd(), "sklearn-mnist")
os.makedirs(script_folder, exist_ok=True)

トレーニング スクリプトを作成するCreate a training script

ジョブをクラスターに送信するには、まずトレーニング スクリプトを作成します。To submit the job to the cluster, first create a training script. 次のコードを実行して、作成したばかりのディレクトリ内に train.py と呼ばれるトレーニング スクリプトを作成します。Run the following code to create the training script called train.py in the directory you just created.

%%writefile $script_folder/train.py

import argparse
import os
import numpy as np
import glob

from sklearn.linear_model import LogisticRegression
import joblib

from azureml.core import Run
from utils import load_data

# let user feed in 2 parameters, the dataset to mount or download, and the regularization rate of the logistic regression model
parser = argparse.ArgumentParser()
parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point')
parser.add_argument('--regularization', type=float, dest='reg', default=0.01, help='regularization rate')
args = parser.parse_args()

data_folder = args.data_folder
print('Data folder:', data_folder)

# load train and test set into numpy arrays
# note we scale the pixel intensity values to 0-1 (by dividing it with 255.0) so the model can converge faster.
X_train = load_data(glob.glob(os.path.join(data_folder, '**/train-images-idx3-ubyte.gz'), recursive=True)[0], False) / 255.0
X_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-images-idx3-ubyte.gz'), recursive=True)[0], False) / 255.0
y_train = load_data(glob.glob(os.path.join(data_folder, '**/train-labels-idx1-ubyte.gz'), recursive=True)[0], True).reshape(-1)
y_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-labels-idx1-ubyte.gz'), recursive=True)[0], True).reshape(-1)

print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, sep = '\n')

# get hold of the current run
run = Run.get_context()

print('Train a logistic regression model with regularization rate of', args.reg)
clf = LogisticRegression(C=1.0/args.reg, solver="liblinear", multi_class="auto", random_state=42)
clf.fit(X_train, y_train)

print('Predict the test set')
y_hat = clf.predict(X_test)

# calculate accuracy on the prediction
acc = np.average(y_hat == y_test)
print('Accuracy is', acc)

run.log('regularization rate', np.float(args.reg))
run.log('accuracy', np.float(acc))

os.makedirs('outputs', exist_ok=True)
# note file saved in the outputs folder is automatically uploaded into experiment record
joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl')

以下の、スクリプトがデータを取得してモデルを保存する方法に注目してください。Notice how the script gets data and saves models:

  • トレーニング スクリプトで引数が読み取られ、データが含まれるディレクトリが検出されます。The training script reads an argument to find the directory that contains the data. 後でジョブを送信する際に、次のように、引数にデータストアを指定します。parser.add_argument('--data-folder', type=str, dest='data_folder', help='data directory mounting point')When you submit the job later, you point to the datastore for this argument: parser.add_argument('--data-folder', type=str, dest='data_folder', help='data directory mounting point')

  • トレーニング スクリプトでは、outputs という名前のディレクトリにモデルが保存されます。The training script saves your model into a directory named outputs. このディレクトリ内に書き込まれたものはすべてワークスペース内に自動的にアップロードされます。Anything written in this directory is automatically uploaded into your workspace. チュートリアルの後半で、このディレクトリからモデルにアクセスします。You access your model from this directory later in the tutorial. joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl')

  • このトレーニング スクリプトでは、データセットを正しく読み込むためにファイル utils.py が必要です。The training script requires the file utils.py to load the dataset correctly. 次のコードでは、utils.pyscript_folder にコピーして、リモート リソース上でトレーニング スクリプトと共にファイルにアクセスできるようにします。The following code copies utils.py into script_folder so that the file can be accessed along with the training script on the remote resource.

    import shutil
    shutil.copy('utils.py', script_folder)
    

推定を作成するCreate an estimator

実行の送信には、推定オブジェクトが使用されます。An estimator object is used to submit the run. Azure Machine Learning には、一般的な機械学習フレームワーク用に事前に構成された推定器と、汎用的な推定器があります。Azure Machine Learning has pre-configured estimators for common machine learning frameworks, as well as generic Estimator. 推定器は、次の情報を指定して作成します。Create an estimator by specifying

  • 推定オブジェクトの名前 estThe name of the estimator object, est.
  • スクリプトが含まれるディレクトリ。The directory that contains your scripts. このディレクトリ内のすべてのファイルは、実行のためにクラスター ノード内にアップロードされます。All the files in this directory are uploaded into the cluster nodes for execution.
  • コンピューティング ターゲット。The compute target. ここでは、作成した Azure Machine Learning コンピューティング クラスターを使用します。In this case, you use the Azure Machine Learning compute cluster you created.
  • トレーニング スクリプトの名前 train.pyThe training script name, train.py.
  • スクリプトの実行に必要なライブラリを含んだ環境。An environment that contains the libraries needed to run the script.
  • トレーニング スクリプトからの必須パラメーター。Parameters required from the training script.

このチュートリアルでは、このターゲットは AmlCompute です。In this tutorial, this target is AmlCompute. スクリプト フォルダー内のすべてのファイルは、実行のためにクラスター ノード内にアップロードされます。All files in the script folder are uploaded into the cluster nodes for run. データセットを使用するために data_folder が設定されます。The data_folder is set to use the dataset. まず、scikit-learn ライブラリ、azureml-dataprep (データセットにアクセスするために必要)、azureml-defaults (メトリックをログするための依存関係が含まれる) を含んだ環境を作成します。"First, create the environment that contains: the scikit-learn library, azureml-dataprep required for accessing the dataset, and azureml-defaults which contains the dependencies for logging metrics. azureml-defaults には、この後チュートリアルのパート 2 でモデルを Web サービスとしてデプロイするために必要な依存関係も含まれています。The azureml-defaults also contains the dependencies required for deploying the model as a web service later in the part 2 of the tutorial.

環境が定義されたら、それをチュートリアルのパート 2 で再利用するためにワークスペースに登録します。Once the environment is defined, register it with the Workspace to re-use it in part 2 of the tutorial.

from azureml.core.environment import Environment
from azureml.core.conda_dependencies import CondaDependencies

# to install required packages
env = Environment('tutorial-env')
cd = CondaDependencies.create(pip_packages=['azureml-dataprep[pandas,fuse]>=1.1.14', 'azureml-defaults'], conda_packages = ['scikit-learn==0.22.1'])

env.python.conda_dependencies = cd

# Register environment to re-use later
env.register(workspace = ws)

さらに、次のコードで推定を作成します。Then create the estimator with the following code.

from azureml.train.estimator import Estimator

script_params = {
    # to mount files referenced by mnist dataset
    '--data-folder': mnist_file_dataset.as_named_input('mnist_opendataset').as_mount(),
    '--regularization': 0.5
}

est = Estimator(source_directory=script_folder,
              script_params=script_params,
              compute_target=compute_target,
              environment_definition=env,
              entry_script='train.py')

ジョブをクラスターに送信するSubmit the job to the cluster

推定オブジェクトを送信して、実験を実行します。Run the experiment by submitting the estimator object:

run = exp.submit(config=est)
run

呼び出しは非同期なので、ジョブが開始されると即時に準備中または実行状態が返されます。Because the call is asynchronous, it returns a Preparing or Running state as soon as the job is started.

リモート実行を監視するMonitor a remote run

初回の実行は合計で約 10 分かかります。In total, the first run takes about 10 minutes. しかし、その後の実行では、スクリプトの依存関係が変わらなければ、同じイメージが再利用されます。But for subsequent runs, as long as the script dependencies don't change, the same image is reused. したがって、コンテナーの起動時間が大幅に短縮されます。So the container startup time is much faster.

待っている間に次のことが行われます。What happens while you wait:

  • イメージの作成:推定で指定されている Python 環境と一致する Docker イメージが作成されます。Image creation: A Docker image is created that matches the Python environment specified by the estimator. このイメージがワークスペースにアップロードされます。The image is uploaded to the workspace. イメージの作成とアップロードには約 5 分かかります。Image creation and uploading takes about five minutes.

    その後の実行のためにコンテナーがキャッシュに入れられるので、この段階は Python 環境ごとに 1 回行われます。This stage happens once for each Python environment because the container is cached for subsequent runs. イメージの作成中に、ログが実行履歴にストリーミングされます。During image creation, logs are streamed to the run history. これらのログを使用して、イメージの作成の進行状況を監視できます。You can monitor the image creation progress by using these logs.

  • 拡大縮小:リモート クラスターで、現在使用可能なノードよりも多くのノードを実行する必要がある場合、自動的にノードが追加されます。Scaling: If the remote cluster requires more nodes to do the run than currently available, additional nodes are added automatically. 通常、拡大縮小には約 5 分かかります。Scaling typically takes about five minutes.

  • [実行中] : この段階では、必要なスクリプトとファイルがコンピューティング先に送信されます。Running: In this stage, the necessary scripts and files are sent to the compute target. その後、データストアがマウントまたはコピーされます。Then datastores are mounted or copied. そして、entry_script が実行されます。And then the entry_script is run. ジョブの実行中に、stdout./logs ディレクトリが実行履歴にストリーミングされます。While the job is running, stdout and the ./logs directory are streamed to the run history. これらのログを使用して、実行の進行状況を監視できます。You can monitor the run's progress by using these logs.

  • 後処理:この実行の ./outputs ディレクトリがワークスペース内の実行履歴に上書きコピーされ、これらの結果にアクセスできるようになります。Post-processing: The ./outputs directory of the run is copied over to the run history in your workspace, so you can access these results.

複数の方法で、実行中のジョブの進行状況を確認できます。You can check the progress of a running job in several ways. このチュートリアルでは、Jupyter ウィジェットと wait_for_completion メソッドを使用します。This tutorial uses a Jupyter widget and a wait_for_completion method.

Jupyter ウィジェットJupyter widget

Jupyter ウィジェットを使用して、実行の進行状況を監視します。Watch the progress of the run with a Jupyter widget. 実行の送信と同様に、このウィジェットも非同期です。また、ジョブが完了するまで、10 秒から 15 秒ごとにライブ更新が提供されます。Like the run submission, the widget is asynchronous and provides live updates every 10 to 15 seconds until the job finishes:

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

トレーニングの最後には、ウィジェットは次のようになります。The widget will look like the following at the end of training:

Notebook のウィジェット

実行を取り消す必要がある場合は、これらの手順に従います。If you need to cancel a run, you can follow these instructions.

完了時にログの結果を取得するGet log results upon completion

モデルのトレーニングと監視は、バック グラウンドで行われます。Model training and monitoring happen in the background. モデルのトレーニングが完了するまで待ってから、さらにコードを実行します。Wait until the model has finished training before you run more code. wait_for_completion を使用して、モデルのトレーニングが完了する時点を表示します。Use wait_for_completion to show when the model training is finished:

run.wait_for_completion(show_output=False)  # specify True for a verbose log

実行結果を表示するDisplay run results

これで、リモート クラスター上のモデルのトレーニングが完了しました。You now have a model trained on a remote cluster. 次のようにして、モデルの精度を取得します。Retrieve the accuracy of the model:

print(run.get_metrics())

出力は、リモート モデルの精度が 0.9204 であることを示しています。The output shows the remote model has accuracy of 0.9204:

{'regularization rate': 0.8, 'accuracy': 0.9204}

次のチュートリアルで、このモデルについてさらに詳しく探索できます。In the next tutorial, you explore this model in more detail.

モデルの登録Register model

トレーニング スクリプトの最後のステップでは、outputs/sklearn_mnist_model.pkl ファイルが、ジョブの実行場所のクラスターの VM 内の outputs という名前のディレクトリ内に書き込まれました。The last step in the training script wrote the file outputs/sklearn_mnist_model.pkl in a directory named outputs in the VM of the cluster where the job is run. outputs は特別なディレクトリで、このディレクトリ内のすべてのコンテンツがワークスペースに自動的にアップロードされます。outputs is a special directory in that all content in this directory is automatically uploaded to your workspace. このコンテンツは、ワークスペースの実験内の実行レコード内に表示されます。This content appears in the run record in the experiment under your workspace. したがって、モデル ファイルはワークスペースでも使用できるようになっています。So the model file is now also available in your workspace.

この実行に関連付けられているファイルを表示できます。You can see files associated with that run:

print(run.get_file_names())

ワークスペース内でモデルを登録して、後で自分や他のコラボレーターがこのモデルのクエリ、検査、デプロイを行えるようにします。Register the model in the workspace, so that you or other collaborators can later query, examine, and deploy this model:

# register model
model = run.register_model(model_name='sklearn_mnist',
                           model_path='outputs/sklearn_mnist_model.pkl')
print(model.name, model.id, model.version, sep='\t')

リソースをクリーンアップするClean up resources

重要

作成したリソースは、Azure Machine Learning に関連したその他のチュートリアルおよびハウツー記事の前提条件として使用できます。The resources you created can be used as prerequisites to other Azure Machine Learning tutorials and how-to articles.

作成したリソースを今後使用する予定がない場合は、課金が発生しないように削除します。If you don't plan to use the resources you created, delete them, so you don't incur any charges:

  1. Azure Portal で、左端にある [リソース グループ] を選択します。In the Azure portal, select Resource groups on the far left.

    Azure portal で削除するDelete in the Azure portal

  2. 作成したリソース グループを一覧から選択します。From the list, select the resource group you created.

  3. [リソース グループの削除] を選択します。Select Delete resource group.

  4. リソース グループ名を入力します。Enter the resource group name. 次に、 [削除] を選択します。Then select Delete.

Azure Machine Learning コンピューティング クラスターだけを削除することもできます。You can also delete just the Azure Machine Learning Compute cluster. ただし、自動スケーリングが有効になっており、クラスターの最小値は 0 です。However, autoscale is turned on, and the cluster minimum is zero. そのため、この特定のリソースが使用中でないときの追加のコンピューティング料金はかかりません。So this particular resource won't incur additional compute charges when not in use:

# Optionally, delete the Azure Machine Learning Compute cluster
compute_target.delete()

次のステップNext steps

この Azure Machine Learning のチュートリアルでは、Python を使用して次の作業を行いました。In this Azure Machine Learning tutorial, you used Python for the following tasks:

  • 開発環境を設定する。Set up your development environment.
  • データにアクセスして検査する。Access and examine the data.
  • 人気のある scikit-learn 機械学習ライブラリを使用して、リモート クラスターで複数のモデルをトレーニングするTrain multiple models on a remote cluster using the popular scikit-learn machine learning library
  • トレーニングの詳細情報をレビューし、最適なモデルを登録する。Review training details and register the best model.

チュートリアル シリーズの次のパートの説明に従って、この登録済みのモデルをデプロイする準備ができました。You're ready to deploy this registered model by using the instructions in the next part of the tutorial series: