Azure

AzureML カスタムDockerイメージを使う

更新日:

Microsoftがキュレートしたイメージを使う他に、自分で作った勝手イメージを使うことができる。
今回は、勝手イメージを作ってHelloWorldしてみる。

AzureML上で動作するDockerイメージがMustで提供すべきもの

AzureML上で動作するDockerイメージは以下を提供する必要がある。
カスタム Dockerfile を使用する (省略可能)

  • Ubuntu 18.04 以上
  • Conda 4.7.# 以上
  • Python 3.6 以上
  • /bin/sh で入手可能な POSIX 準拠シェル

AnacondaとMiniconda

Python Software Foundationが運営するPythonパッケージ配布サービスであるPyPI。
pythonが使える環境からpipコマンドを使用してPyPIからパッケージをインストールする。

Condaは科学技術計算用パッケージのセットで、Python以外の何かも含む。
例えばプログラミング言語、パッケージ、統合開発環境、GUIなど。
そのため、PyPIではなくCondaが運営するパッケージシステムでパッケージを提供する。
pipではなくcondaコマンドを使用してパッケージをインストールする。

他のPythonパッケージ管理ツールと同様に、パッケージ管理ツールを併用することはできない…
ことになっているが、実際はcondaとpipをセットで使って必要なパッケージを揃えることになる。

Anacondaは、米Anaconda社が提供するPython/R言語用の配布。
Condaパッケージの全部入りで「Anacondaを入れておけば問題ない」と言われやすい。
全部入りで初期インストール時のサイズがとにかく大きい。
Anacondaリポジトリは2020年から商用利用が有償化されていて、もはや簡単には使えない。

Condaの必要最低限のセットがMiniconda。
Anacondaが有償である根拠となる条件に当てはまらないためMinicondaは商用でも無償。
必要なcondaパッケージをCLIで自力でインストールする必要がある。
ただ、そもそも”環境構築”とはそういうものなので、問題ない。
今回はMinicondaを使ってAzur MLが要求するConda環境を用意する。

Minicondaはこちら

Dockerfile

Minicondaのリポジトリから選んでインストールする。
今回、Miniconda3-py39_4.9.2-Linux-x86_64 を選んだ。

conda,pipパッケージの依存関係管理をAzureMLに任せることができるが、
今回は自力で必要なconda、pipパッケージをインストールする。
(azureml-*にpandasは含まれるなど、以下だと少し冗長。)

ACRに入れて使うためログインユーザのパスワードを変更しておく。

ビルドしてコンテナ内でバージョン確認してみる。

Azure MLの要件に合ったものが入った。

Azure Container Registry(ACR)に登録

作ったイメージをAzure Container Registryに登録してみる。
先にAzure PortalからACRのログインサーバURLを取得しておく。
例えば、zzzzzzz.azurecr.ioだったとする。

ACRにpushできた。

カスタムイメージを使ったEnvironmentの登録

まず、カスタムイメージを使ったEnvironmentを登録する。
ちなみにAzureMLがカスタムイメージにアクセスするためにイメージのユーザ/パスワードを渡す。
今回、Dockerfile内でrootユーザのパスワードをDocker!とかにしてある。
実際は、Azure Key Vault(AKV)で管理すると良さそう。

登録できた。

新しい環境でテストスクリプトを実行する

CondaのHelloWorldをしてみる。

ちなみに、run.py は以下

実行結果はstd_log.txtに出る。

カスタムコンテナにインストールしたpandasを使って出力された!

まとめ

Microsoftがキュレートするイメージではなく勝手イメージを作成し、
依存関係の解決を全て自力で行う方法を試してみた。

ベースイメージに対して pip や conda のパッケージを追加でインストールしないため高速。
パッケージ管理を AzureML から独立させることができるので見通しがよくなると思う。

-Azure
-,

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