機械学習モデルの再トレーニングとデプロイ

適用対象:適用対象。Machine Learning Studio (classic) 適用対象外。Azure Machine Learning

重要

Machine Learning Studio (クラシック) のサポートは、2024 年 8 月 31 日に終了します。 その日までに、Azure Machine Learning に切り替えすることをお勧めします。

2021 年 12 月 1 日以降、新しい Machine Learning Studio (クラシック) リソースは作成できません。 2024 年 8 月 31 日まで、既存の Machine Learning Studio (クラシック) リソースを引き続き使用できます。

ML Studio (クラシック) のドキュメントは廃止予定であり、今後更新されない可能性があります。

再トレーニングは、機械学習モデルが正確であり、利用できる最も関連性の高いデータに基づいている状態を確保するための 1 つの方法です。 この記事では、Studio (クラシック) で新しい Web サービスとして機械学習モデルを再トレーニングし、デプロイする方法について説明します。 従来の Web サービスを再トレーニングする方法については、こちらのハウツー記事を参照してください。

この記事では、予測 Web サービスが既にデプロイされていることを前提としています。 予測 Web サービスをまだ用意していない場合は、Studio (クラシック) Web サービスをデプロイする方法に関するこちらの記事を参照してください。

次の手順に従って、機械学習の新しい Web サービスを再トレーニングし、デプロイします。

  1. 再トレーニング Web サービスをデプロイする
  2. 再トレーニング Web サービスを使用して新しいモデルをトレーニングする
  3. 新しいモデルを使用するように既存の予測実験を更新する

注意

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を開始するには、Azure PowerShell のインストールに関する記事を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

Web サービスの再トレーニングをデプロイする

再トレーニング Web サービスを使用すると、新しいデータなど、新しい一連のパラメーターを指定してモデルを再トレーニングし、後の処理のために保存することができます。 [Web サービス出力][モデルのトレーニング] に接続すると、トレーニング実験から自動的に新しいモデルが出力され、使用することができます。

次の手順を実行して、再トレーニング Web サービスをデプロイします。

  1. [Web Service Input]\(Web サービス入力\) モジュールをユーザーのデータ入力に接続します。 通常は、入力データが最初のトレーニング データと同じ方法で処理されるようにします。

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

  3. [Evaluate Model]\(モデルの評価\) モジュールがある場合は、 [Web Service Output]\(Web サービス出力\) モジュールを接続して評価結果を出力することができます。

  4. 実験を実行します。

    実験を実行した後のワークフローは、次の画像のようになります。

    結果のワークフロー

    以上の手順で、トレーニング済みのモデルとモデル評価結果を出力する再トレーニング Web サービスとして、トレーニング実験をデプロイしました。

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

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

  7. Web サービスの名前を入力し、支払プランを選択します。

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

モデルの再トレーニング

この例では、C# を使用して再トレーニング アプリケーションを作成します。 Python または R サンプル コードを使用してこのタスクを行うこともできます。

次の手順を実行して、再トレーニング API を呼び出します。

  1. Visual Studio で、C# コンソール アプリケーションを作成します: [新規]>[プロジェクト]>[Visual C#]>[Windows クラシック デスクトップ]>[コンソール アプリ (.NET Framework)]
  2. Machine Learning Web サービス ポータルにサインインします。
  3. 使用する Web サービスをクリックします。
  4. [Consume (使用)] をクリックします。
  5. [Consume (使用)] ページの下部の [Sample Code (サンプル コード)] セクションで [Batch] をクリックします。
  6. バッチ実行用 C# のサンプル コードをコピーして、Program.cs ファイルに貼り付けます。 名前空間は変更しないように注意します。

コメントに示されているように Nuget パッケージ Microsoft.AspNet.WebApi.Client を追加します。 参照を Microsoft.WindowsAzure.Storage.dll に追加するには、Azure Storage サービスのクライアント ライブラリのインストールが必要になる場合があります。

次のスクリーンショットは、Machine Learning Web サービス ポータルの [使用] ページです。

[使用] ページ

ApiKey 宣言の更新

ApiKey 宣言を見つけます。

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

[Consume]\(使用\) ページの [Basic consumption info]\(基本的な実行情報\) セクションで、主キーを探して apikey 宣言にコピーします。

Azure Storage 情報を更新する

BES サンプル コードは、ファイルをローカル ドライブ ("C:\temp\CensusInput.csv" など) から Azure Storage にアップロードして処理し、その結果を Azure Storage に書き込みます。

  1. Azure portal にサインインする
  2. 左側のナビゲーションで [その他のサービス] をクリックし、 [ストレージ アカウント] を探して選択します。
  3. ストレージ アカウントの一覧から、再トレーニング済みのモデルを格納するいずれかのアカウントを選択します。
  4. 左側のナビゲーションで [アクセス キー] をクリックします。
  5. プライマリ アクセス キーをコピーして保存します。
  6. 左側のナビゲーション列で、 [BLOB] をクリックします。
  7. 既存のコンテナーを選択するか、コンテナーを新規作成して、名前を保存します。

StorageAccountNameStorageAccountKey、および StorageContainerName 宣言を見つけて、ポータルから保存した値を更新します。

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

また、入力ファイルがコードで指定した場所で有効であることを確認する必要があります。

出力場所の指定

要求ペイロードで出力場所を指定する場合は、RelativeLocation で指定されたファイルの拡張子を 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)*/
        }
    },

再トレーニング出力の例を次に示します。

再トレーニング出力

再トレーニングの結果を評価する

アプリケーションを実行すると、評価結果へのアクセスに必要な URL と Shared Access Signature トークンが出力に示されます。

再トレーニング済みモデルのパフォーマンス結果を確認するには、output2 の出力結果の BaseLocationRelativeLocationSasBlobToken を組み合わせて、ブラウザーのアドレス バーに完全な URL を貼り付けます。

この結果で、新しくトレーニングされたモデルのパフォーマンスが、既存のモデルよりも優れているかどうかを確認します。

出力結果の BaseLocationRelativeLocationSasBlobToken を保存します。

予測実験を更新する

Azure Resource Manager にサインインする

最初に Connect-AzAccount コマンドレットを使用して、PowerShell 環境からご利用の Azure アカウントにサインインします。

Web サービス定義オブジェクトを取得する

次に、Get-AzMlWebService コマンドレットを呼び出して Web サービス定義オブジェクトを取得します。

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

既存の Web サービスのリソース グループ名を決定するには、パラメーターを指定せずに Get-AzMlWebService コマンドレットを実行してご利用のサブスクリプションの Web サービスを表示します。 Web サービスを見つけて、その Web サービス ID を確認します。 リソース グループの名前は ID の 4 番目の要素で、" resourceGroups " 要素の後にあります。 次の例では、リソース グループ名は 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 サービスのリソース グループ名を判断するには、Machine Learning Web サービス ポータルにサインインします。 Web サービスを選択します。 リソース グループ名は Web サービスの URL の 5 番目の要素で、" resourceGroups " 要素の直後にあります。 次の例では、リソース グループ名は 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-AzMlWebService コマンドレットを使用して、JSON フォーマット ファイルにインポートする必要があります。

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

ilearner BLOB への参照を更新する

資産で、[<トレーニング済みモデル>] を見つけ、ilearner BLOB の URI で locationInfouri の値を更新します。 URI は BES 再トレーニング呼び出しの出力からの BaseLocationRelativeLocation を組み合わせて作成します。

"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-AzMlWebService コマンドレットを使用して、変更された JSON ファイルを予測実験の更新に使用できる Web サービス定義オブジェクトに変換します。

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

Web サービスを更新する

最後に、Update-AzMlWebService コマンドレットを使用して、予測実験を更新します。

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

次のステップ

Web サービスの管理または複数の実験の実行の追跡を行う方法については、次の記事を参照してください。