Azure

Azure ML マウントされたBlobを読み書きしてみる

投稿日:

Azure MLのHello World続き。
今回は、既存の環境を再利用してRunスクリプトを実行してみる。
また、Microsoftが公式で説明するBlobを介した入出力をしてみる。

Azure MLの最小のコード

AzureML上で既存のEnvironment上でExperimentを走らせるコードは以下。
たぶん AzureML上でコードを動かす最小構成。
既存のEnvironmentがなければ先に作る必要がある。

Azure MLが動作する仕組み

AzureMLが用意するパイプラインの仕組みに載せる場合は、StepとPipelineを定義していく。
Stepは独立した処理体系で、Stepごとに環境が用意されて、設定したスクリプトを実行できる。
Step毎にコンテナが作られ初期化処理が走る。

Compute,またはClusterとして指定したコンピュータの上で、
環境として指定したDockerコンテナとミドルウェア・ライブラリコードが動作し、
最終的に設定したスクリプト(Run)が動作する。

Azure ML Studio上のTerminalからComputeにログインできるが、
(恐らく…)ここからRunに指定したスクリプトを直接実行することができるため、
コンテナにログインしているものと思われる。

Azure ML Workspace内のストレージ

Azure MLにおいて、データの入力・出力をAzure Blobコンテナで行う。
Azure MLは、コンピュートとストレージを暗黙的に繋ぐ仕組みでもある。
具体的には、ワークスペースの中で、デフォルトの Blob, AKV, ACR等が設定される。
コンテナ内のコードは、Blobからデータを入力し、処理を行い、結果をBlobに書き戻す、
といった具合に動作する。

コンピュートからBlobにアクセスするのはかったるい、という感じがするが、
以下のドキュメントによると、入力はデータセット、出力はBlobとすることが推奨される。

Azure Machine Learning の実験でファイルを保存する場所と書き込む場所

それぞれ、コンテナ内のファイルシステムにマウントされる、という仕組み。
入力は、Datasetにデータをロードして渡すことが推奨されている。

入力のためのBlobマウント

Datasetにロードされたデータは、as_named_input()により指定した名前でアクセスできるようになる。
さらに、as_mount()によりコンピュートのローカルファイルシステムにマウントされる。
as_mount()はマウント先のパス名を返す。

早速、Titanicデータをマウントして読んでみる。

ここで指定するRunスクリプトは以下。

上手くいくと、Runスクリプトはマウント先パスとDataFrameのhead()を出力する。

出力のためのBlobマウント

Microsoft公式は、出力用にBlobをマウントする方法の例を書いている。
試しにWorkspaceと紐づくデフォルトBlobのコンテナをマウントしてみる。

get_default_datastore()により、デフォルトBlobを取得できる。

OutputFileDatasetConfig(name,destination) により、
Blobコンテナ以下にあるディレクトリをコンピュートファイルシステムのディレクトリにマウントする。
例えば、以下は、デフォルトBlob以下のikutyというディレクトリをコンピュートのresultsというディレクトリにマウントする。
戻り値はコンピュート上にマウントされたパス。

Runスクリプトに、datapath_outputという引数としてマウントされたパスを渡している。

Runスクリプトは以下。マウントされたBlobコンテナ以下のファイルが渡される。
同時に渡しているTitanicのCSVをBlobコンテナに書いてみる。

デフォルトBlobのコンテナの下にikutyというディレクトリが作成され、
その中にtitanic.csvというファイルが作られた。

ちなみに、OutputFileDatasetConfig()でマウントした出力先ディレクトリから入力する、
という荒技も出来てしまう。むしろ、その方が見通しが良くなる感じもする。

Microsoftは公式でそう説明していないし、 OutputFileDatasetConfig()という名前が
そもそも出力用を意味していて、やってはいけない感がある。

まとめ

Azure ML上で既存の環境を再利用してRunスクリプトを実行する最小コードを探ってみた。
Microsoftが紹介している入出力の方法を試してみた。
デフォルトBlobストアからファイルを入出力できることを確認した。

-Azure
-,

Copyright© ikuty.com , 2023 AllRights Reserved Powered by AFFINGER4.