機械学習モデルの再トレーニングとデプロイRetrain and deploy a machine learning model

再トレーニングは、機械学習モデルが正確であり、利用できる最も関連性の高いデータに基づいている状態を確保するための 1 つの方法です。Retraining is one way to ensure machine learning models stay accurate and based on the most relevant data available. この記事では、Studio で新しい Web サービスとして機械学習モデルを再トレーニングし、デプロイする方法について説明します。This article shows how to retrain and deploy a machine learning model as a new web service in Studio. 従来の Web サービスを再トレーニングする方法については、こちらのハウツー記事を参照してください。If you're looking to retrain a classic web service, view this how-to article.

この記事では、予測 Web サービスが既にデプロイされていることを前提としています。This article assumes you already have a predictive web service deployed. 予測 Web サービスをまだ用意していない場合は、Studio Web サービスをデプロイする方法に関するこちらの記事を参照してください。If you don't already have a predictive web service, learn how to deploy a Studio web service here.

次の手順に従って、機械学習の新しい Web サービスを再トレーニングし、デプロイします。You'll follow these steps to retrain and deploy a machine learning new web service:

  1. 再トレーニング Web サービスをデプロイするDeploy a retraining web service
  2. 再トレーニング Web サービスを使用して新しいモデルをトレーニングするTrain a new model using your retraining web service
  3. 新しいモデルを使用するように既存の予測実験を更新するUpdate your existing predictive experiment to use the new model

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. AzureRM モジュールはまだ使用でき、少なくとも 2020 年 12 月までは引き続きバグ修正が行われます。You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az モジュールのインストール手順については、Azure PowerShell のインストールを参照してください。For Az module installation instructions, see Install Azure PowerShell.

Web サービスの再トレーニングをデプロイするDeploy the retraining web service

再トレーニング Web サービスを使用すると、新しいデータなど、新しい一連のパラメーターを指定してモデルを再トレーニングし、後の処理のために保存することができます。A retraining web service lets you retrain your model with a new set of parameters, like new data, and save it for later. [Web Service Output](Web サービス出力)[Train Model](モデルのトレーニング) に接続すると、トレーニング実験から自動的に新しいモデルが出力され、使用することができます。When you connect a Web Service Output to a Train Model, the training experiment outputs a new model for you to use.

次の手順を実行して、再トレーニング Web サービスをデプロイします。Use the following steps to deploy a retraining web service:

  1. [Web Service Input](Web サービス入力) モジュールをユーザーのデータ入力に接続します。Connect a Web Service Input module to your data input. 通常は、入力データが最初のトレーニング データと同じ方法で処理されるようにします。Typically, you want to ensure that your input data is processed in the same way as your original training data.

  2. [Web Service Output](Web サービス出力) モジュールを [Train Model](モデルのトレーニング) の出力に接続します。Connect a Web Service Output module to the output of your Train Model.

  3. [Evaluate Model](モデルの評価) モジュールがある場合は、 [Web Service Output](Web サービス出力) モジュールを接続して評価結果を出力することができます。If you have an Evaluate Model module, you can connect a Web Service Output module to output the evaluation results

  4. 実験を実行します。Run your experiment.

    実験を実行した後のワークフローは、次の画像のようになります。After running your experiment, the resulting workflow should be similar to the following image:

    結果のワークフロー

    以上の手順で、トレーニング済みのモデルとモデル評価結果を出力する再トレーニング Web サービスとして、トレーニング実験をデプロイしました。Now, you deploy the training experiment as a retraining web service that outputs a trained model and model evaluation results.

  5. 実験キャンバスの下部にある [Set Up Web Service](Web サービスの設定) をクリックします。At the bottom of the experiment canvas, click Set Up Web Service

  6. [Deploy Web Service [New]](Web サービスのデプロイ [新規]) を選択します。Select Deploy Web Service [New]. Azure Machine Learning Web サービスのポータルが [Web サービスのデプロイ] ページに表示されます。The Azure Machine Learning Web Services portal opens to the Deploy Web Service page.

  7. Web サービスの名前を入力し、支払プランを選択します。Type a name for your web service and choose a payment plan.

  8. [デプロイ] を選択します。Select Deploy.

モデルの再トレーニングRetrain the model

この例では、C# を使用して再トレーニング アプリケーションを作成します。For this example, we're using C# to create the retraining application. Python または R サンプル コードを使用してこのタスクを行うこともできます。You can also use Python or R sample code to accomplish this task.

次の手順を実行して、再トレーニング API を呼び出します。Use the following steps to call the retraining APIs:

  1. Visual Studio で、C# コンソール アプリケーションを作成します: [新規] > [プロジェクト] > [Visual C#] > [Windows Classic Desktop] > [コンソール アプリ (.NET Framework)]Create a C# console application in Visual Studio: New > Project > Visual C# > Windows Classic Desktop > Console App (.NET Framework).
  2. Machine Learning Web サービス ポータルにサインインします。Sign in to the Machine Learning Web Services portal.
  3. 使用する Web サービスをクリックします。Click the web service that you're working with.
  4. [Consume (使用)] をクリックします。Click Consume.
  5. [Consume (使用)] ページの下部の [Sample Code (サンプル コード)] セクションで [Batch] をクリックします。At the bottom of the Consume page, in the Sample Code section, click Batch.
  6. バッチ実行用 C# のサンプル コードをコピーして、Program.cs ファイルに貼り付けます。Copy the sample C# code for batch execution and paste it into the Program.cs file. 名前空間は変更しないように注意します。Make sure that the namespace remains intact.

コメントに示されているように Nuget パッケージ Microsoft.AspNet.WebApi.Client を追加します。Add the NuGet package Microsoft.AspNet.WebApi.Client, as specified in the comments. 参照を Microsoft.WindowsAzure.Storage.dll に追加するには、Azure Storage サービスのクライアント ライブラリのインストールが必要になる場合があります。To add the reference to Microsoft.WindowsAzure.Storage.dll, you might need to install the client library for Azure Storage services.

次のスクリーン ショットは、Azure Machine Learning Web サービス ポータルの [使用] ページです。The following screenshot shows the Consume page in the Azure Machine Learning Web Services portal.

[使用] ページ

ApiKey 宣言の更新Update the apikey declaration

ApiKey 宣言を見つけます。Locate the apikey declaration:

const string apiKey = "abc123"; // Replace this with the API key for the web service

[Consume](使用) ページの [Basic consumption info](基本的な実行情報) セクションで、主キーを探して apikey 宣言にコピーします。In the Basic consumption info section of the Consume page, locate the primary key, and copy it to the apikey declaration.

Azure Storage 情報を更新するUpdate the Azure Storage information

BES サンプル コードは、ファイルをローカル ドライブ ("C:\temp\CensusInput.csv" など) から Azure Storage にアップロードして処理し、その結果を Azure Storage に書き込みます。The BES sample code uploads a file from a local drive (for example, "C:\temp\CensusInput.csv") to Azure Storage, processes it, and writes the results back to Azure Storage.

  1. Azure portal にサインインするSign into the Azure portal
  2. 左側のナビゲーションで [その他のサービス] をクリックし、 [ストレージ アカウント] を探して選択します。In the left navigation column, click More services, search for Storage accounts, and select it.
  3. ストレージ アカウントの一覧から、再トレーニング済みのモデルを格納するいずれかのアカウントを選択します。From the list of storage accounts, select one to store the retrained model.
  4. 左側のナビゲーションで [アクセス キー] をクリックします。In the left navigation column, click Access keys.
  5. プライマリ アクセス キーをコピーして保存します。Copy and save the Primary Access Key.
  6. 左側のナビゲーション列で、 [BLOB] をクリックします。In the left navigation column, click Blobs.
  7. 既存のコンテナーを選択するか、コンテナーを新規作成して、名前を保存します。Select an existing container, or create a new one and save the name.

StorageAccountNameStorageAccountKey、および StorageContainerName 宣言を見つけて、ポータルから保存した値を更新します。Locate the StorageAccountName, StorageAccountKey, and StorageContainerName declarations, and update the values that you saved from the portal.

const string StorageAccountName = "mystorageacct"; // Replace this with your Azure storage account name
const string StorageAccountKey = "a_storage_account_key"; // Replace this with your Azure Storage key
const string StorageContainerName = "mycontainer"; // Replace this with your Azure Storage container name

また、入力ファイルがコードで指定した場所で有効であることを確認する必要があります。You also must ensure that the input file is available at the location that you specify in the code.

出力場所の指定Specify the output location

要求ペイロードで出力場所を指定する場合は、RelativeLocation で指定されたファイルの拡張子を ilearner として指定する必要があります。When you specify the output location in the Request Payload, the extension of the file that is specified in RelativeLocation must be specified as ilearner.

Outputs = new Dictionary<string, AzureBlobDataReference>() {
    {
        "output1",
        new AzureBlobDataReference()
        {
            ConnectionString = storageConnectionString,
            RelativeLocation = string.Format("{0}/output1results.ilearner", StorageContainerName) /*Replace this with the location you want to use for your output file and a valid file extension (usually .csv for scoring results or .ilearner for trained models)*/
        }
    },

再トレーニング出力の例を次に示します。Here is an example of retraining output:

再トレーニング出力

再トレーニングの結果を評価するEvaluate the retraining results

アプリケーションを実行すると、評価結果へのアクセスに必要な URL と Shared Access Signature トークンが出力に示されます。When you run the application, the output includes the URL and shared access signatures token that are necessary to access the evaluation results.

再トレーニング済みモデルのパフォーマンス結果を確認するには、output2 の出力結果の BaseLocationRelativeLocationSasBlobToken を組み合わせて、ブラウザーのアドレス バーに完全な URL を貼り付けます。You can see the performance results of the retrained model by combining the BaseLocation, RelativeLocation, and SasBlobToken from the output results for output2 and pasting the complete URL into the browser address bar.

この結果で、新しくトレーニングされたモデルのパフォーマンスが、既存のモデルよりも優れているかどうかを確認します。Examine the results to determine if the newly trained model performs better than the existing one.

出力結果の BaseLocationRelativeLocationSasBlobToken を保存します。Save the BaseLocation, RelativeLocation, and SasBlobToken from the output results.

予測実験を更新するUpdate the predictive experiment

Azure Resource Manager にサインインするSign in to Azure Resource Manager

最初に Connect-AzAccount コマンドレットを使用して、PowerShell 環境からご利用の Azure アカウントにサインインします。First, sign in to your Azure account from within the PowerShell environment by using the Connect-AzAccount cmdlet.

Web サービス定義オブジェクトを取得するGet the Web Service Definition object

次に、Get-AzMlWebService コマンドレットを呼び出して Web サービス定義オブジェクトを取得します。Next, get the Web Service Definition object by calling the Get-AzMlWebService cmdlet.

$wsd = Get-AzMlWebService -Name 'RetrainSamplePre.2016.8.17.0.3.51.237' -ResourceGroupName 'Default-MachineLearning-SouthCentralUS'

既存の Web サービスのリソース グループ名を決定するには、パラメーターを指定せずに Get-AzMlWebService コマンドレットを実行してご利用のサブスクリプションの Web サービスを表示します。To determine the resource group name of an existing web service, run the Get-AzMlWebService cmdlet without any parameters to display the web services in your subscription. Web サービスを見つけて、その Web サービス ID を確認します。Locate the web service, and then look at its web service ID. リソース グループの名前は ID の 4 番目の要素で、" resourceGroups " 要素の後にあります。The name of the resource group is the fourth element in the ID, just after the resourceGroups element. 次の例では、リソース グループ名は Default-MachineLearning-SouthCentralUS です。In the following example, the resource group name is Default-MachineLearning-SouthCentralUS.

Properties : Microsoft.Azure.Management.MachineLearning.WebServices.Models.WebServicePropertiesForGraph
Id : /subscriptions/<subscription ID>/resourceGroups/Default-MachineLearning-SouthCentralUS/providers/Microsoft.MachineLearning/webServices/RetrainSamplePre.2016.8.17.0.3.51.237
Name : RetrainSamplePre.2016.8.17.0.3.51.237
Location : South Central US
Type : Microsoft.MachineLearning/webServices
Tags : {}

または、既存の Web サービスのリソース グループ名を判断するには、Azure Machine Learning Web サービス ポータルにサインインします。Alternatively, to determine the resource group name of an existing web service, sign in to the Azure Machine Learning Web Services portal. Web サービスを選択します。Select the web service. リソース グループ名は Web サービスの URL の 5 番目の要素で、" resourceGroups " 要素の直後にあります。The resource group name is the fifth element of the URL of the web service, just after the resourceGroups element. 次の例では、リソース グループ名は Default-MachineLearning-SouthCentralUS です。In the following example, the resource group name is Default-MachineLearning-SouthCentralUS.

https://services.azureml.net/subscriptions/<subscription ID>/resourceGroups/Default-MachineLearning-SouthCentralUS/providers/Microsoft.MachineLearning/webServices/RetrainSamplePre.2016.8.17.0.3.51.237

Web サービス定義オブジェクトを JSON としてエクスポートするExport the Web Service Definition object as JSON

新しいトレーニング済みモデルを使用するようにトレーニング済みモデルの定義を変更するには、最初にこれを Export-AzMlWebService コマンドレットを使用して、JSON フォーマット ファイルにインポートする必要があります。To modify the definition of the trained model to use the newly trained model, you must first use the Export-AzMlWebService cmdlet to export it to a JSON-format file.

Export-AzMlWebService -WebService $wsd -OutputFile "C:\temp\mlservice_export.json"

ilearner BLOB への参照を更新するUpdate the reference to the ilearner blob

資産で、[<トレーニング済みモデル>] を見つけ、ilearner BLOB の URI で locationInfouri の値を更新します。In the assets, locate the [trained model], update the uri value in the locationInfo node with the URI of the ilearner blob. URI は BES 再トレーニング呼び出しの出力からの BaseLocationRelativeLocation を組み合わせて作成します。The URI is generated by combining the BaseLocation and the RelativeLocation from the output of the BES retraining call.

 "asset3": {
    "name": "Retrain Sample [trained model]",
    "type": "Resource",
    "locationInfo": {
      "uri": "https://mltestaccount.blob.core.windows.net/azuremlassetscontainer/baca7bca650f46218633552c0bcbba0e.ilearner"
    },
    "outputPorts": {
      "Results dataset": {
        "type": "Dataset"
      }
    }
  },

JSON を Web サービス定義オブジェクトにインポートするImport the JSON into a Web Service Definition object

Import-AzMlWebService コマンドレットを使用して、変更された JSON ファイルを予測実験の更新に使用できる Web サービス定義オブジェクトに変換します。Use the Import-AzMlWebService cmdlet to convert the modified JSON file back into a Web Service Definition object that you can use to update the predicative experiment.

$wsd = Import-AzMlWebService -InputFile "C:\temp\mlservice_export.json"

Web サービスを更新するUpdate the web service

最後に、Update-AzMlWebService コマンドレットを使用して、予測実験を更新します。Finally, use the Update-AzMlWebService cmdlet to update the predictive experiment.

Update-AzMlWebService -Name 'RetrainSamplePre.2016.8.17.0.3.51.237' -ResourceGroupName 'Default-MachineLearning-SouthCentralUS'

次の手順Next steps

Web サービスの管理または複数の実験の実行の追跡を行う方法については、次の記事を参照してください。To learn more about how to manage web services or keep track of multiple experiments runs, see the following articles: