こんにちは、Michaelです。
今回は、Azure Machine Learning (Azure ML)のWorkspaceを別リージョンに移行する方法として、Experimentのリージョン間コピーを検証します。
Experimentのリージョン間コピー方法
昨年2016年11月から東日本リージョンでもAzure MLが利用できるようになりました。従来、米国中南部など海外リージョンでしか利用できなかったAzure MLが国内リージョンでも使えるようになったことで、東日本リージョンに移行したいというようなニーズもあるかもしれません。
しかし、Azure MLでは、Workspaceをそのまま別リージョンへ移動、コピーすることができないため、別リージョンにWorkspaceを移行したい場合には、使用したいリージョンに新たなWorkspaceを作成し、Experimentをコピーする方法が現状では最善の方法となります。
また、Azure Machine Learning Studio (ML Studio)のコピー機能では、Experimentのリージョン間コピーに対応していないため、Experimentをリージョン間でコピーするには、下記のいずれかの方法を行わなければなりません。
・Cortana Intelligence Galleryの非公開ギャラリーへの発行
・PowerShellの「Azure MLPS」モジュールの使用
このうち、Cortana Intelligence Galleryを使用する方法では、ML Studio上でExperimentごとにギャラリー発行を繰り返す必要があり、多くのExperimentを持つWorkspaceを移行する場合には操作が大変になります。
そこで、今回はPowerShellの「Azure MLPS」モジュールを使用し、スクリプトでWorkspace上のExperimentをすべて別リージョンのWorkspaceにコピーする方法を試してみます。
Azure MLPSによるリージョン間コピー
今回は、米国中南部リージョンの既存Workspaceから、東日本リージョンに新たに作成したWorkspaceへのExperimentの移行を検証します。
Azure MLPSを使ったExperimentの移行に関しては、以下のような手順で行います。
1. 米国中南部Workspaceと東日本WorkspaceのWorkspace ID、Authorization Tokenを取得
2. 米国中南部Workspaceの全Experiment、Datasetの情報を取得 (Get-AmlExperiment)
3. Experimentの移行 (Copy-AmlExperiment)
それでは、Azure MLPSを使って、Workspaceの移行を試みます。
まず、Azure MLPSでWorkspaceの操作をするにあたり、Workspace ID、Authorization Tokenの情報を取得、設定します。Workspace ID、Authorization Tokenの取得は「AZURE MACHINE LEARNINGをPOWERSHELLで操作してみた」の手順に準じますが、今回は2つのWorkspaceを操作するため、米国中南部Workspaceと東日本Workspaceの両方について情報を取得しておきます。
取得したWorkspace ID、Authorization Tokenのうち移行元である米国中南部Workspaceの情報は、Azure MLPSのconfig.jsonに設定し、東日本Workspaceの情報については、PowerShellスクリプト上で$destinationの連想配列として設定しておきました。
・config.json (Azure MLPS用)
1 2 3 4 5 |
{ "Location": "South Central US", "WorkspaceId": "2402*************** {移行元Workspace ID}", "AuthorizationToken": "Pxa6****************** {移行元Authorization Token}" } |
・PowerShell
1 2 3 4 5 6 |
# 移行先Workspace情報 $destination = @{ wsId = '0f12*************** {移行先Workspace ID}'; authToken = 'qFJG****************** {移行先Authorization Token}'; location = 'Japan East' } |
続いて、米国中南部Workspaceの全Experimentの情報を取得します。Experimentの情報はGet-AmlExperimentコマンドレットで取得できます。
1 2 3 4 5 6 |
# Azure MLPSモジュールの読み込み Import-Module .\AzureMLPS.dll # 移行元Workspaceの全Experiment、Dataset情報の取得 $experiments = Get-AmlExperiment $datasets = Get-AmlDataset -Scope Workspace |
移行元Workspaceの全Experiment情報が取得できたら、 Copy-AmlExperimentコマンドレットを使用しExperimentのコピーを行います。コピーはExperimentごとに行われるため、ループ処理にて移行元Workspaceの全Experimentについてコピーを行います。
1 2 3 4 5 |
# Experimentの移行 foreach($exp in $experiments){ # Experimentのリージョン間コピー Copy-AmlExperiment -ExperimentId $exp.ExperimentId -DestinationWorkspaceId $destination.wsId -DestinationWorkspaceAuthorizationToken $destination.authToken -DestinationLocation $destination.location } |
以上の操作を1つのps1ファイルにまとめると以下のようになります。
・sample.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# モジュール読み込み Import-Module .\AzureMLPS.dll # 移行先Workspace情報 $destination = @{ wsId = '0f12*************** {移行先Workspace ID}'; authToken = 'qFJG****************** {移行先Authorization Token}'; location = 'Japan East' } # 移行元Workspaceの全Experiment情報の取得 $experiments = Get-AmlExperiment; # 移行先Dataset情報(Sample Dataset) $default_datasets = Get-AmlDataset -Scope Workspace -Location $destination.location -WorkspaceId $destination.wsId -AuthorizationToken $destination.authToken; # Experimentの移行 foreach($exp in $experiments){ # Experimentのリージョン間コピー Copy-AmlExperiment -ExperimentId $exp.ExperimentId -DestinationWorkspaceId $destination.wsId -DestinationWorkspaceAuthorizationToken $destination.authToken -DestinationLocation $destination.location } |
上記スクリプトを実行すると、順次Experimentが新しいWorkspaceにコピーされ、東日本リージョンのWorkspaceでコピーされたExperimentを確認することができました。
以上で、Experimentの移行は完了です。Dataset、Trained Model (学習済みモデル)もExperimentで使われているものであれば同時にコピーされるため、Experimentに欠損が生じるなどの心配もありませんでした。ただし、Classic Web Serviceのコピーには対応しないため、移行後にWeb Serviceの再発行やNew Web Serviceへの移行など追加の作業が必要になるようです。
今回は、Experimentのリージョン間コピーを試しましたが、わずかなスクリプトでWorkspace内すべてのExperimentを移行させることができました。Web Serviceのコピーに対応しないため、実運用に入っているシステムではなかなか手を付けにくい部分ですが、データ転送などで東日本リージョンへの移行を考えている方はぜひ試してみてください。
次回もお楽しみに!!