MLFlowとSageMakerのAWSサンプルをデプロイするときの注意点
MLOpsに興味があり、実験管理のためMLFlowを試してみたいと思っています。ちょうど、AWSでMLFlowを動かすサンプルが公開されていたので、これを動かしてみることにしました。サンプルをデプロイするまでに幾つか躓いたので、注意点をまとめたいと思います。
https://github.com/aws-samples/amazon-sagemaker-mlflow-fargate
Prerequisites
サンプルを動かすのに、パッケージをいくつかインストールする必要があります。
- pythonはこの方法でインストールしました(v3.9.7)。
https://www.python.jp/install/ubuntu/index.html - nodeはこの方法でインストールしました(v14.18.1)。
https://qiita.com/seibe/items/36cef7df85fe2cefa3ea - AWS CLIはこの方法でインストールしました。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-linux.html - AWS CDKはこの方法でインストールしました。
https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html
Deploying the stack
コマンドを幾つか実行する必要がありますが、一般ユーザでは権限エラーが発生するのでrootユーザで実行しました。そのため、AWSの認証ファイル(config, credentials)が/root/.awsに格納された状態でコマンドを実行することがポイントです。
ちなみに、このサンプルはDockerfileでコンテナをビルドします。DockerコンテナからDockerは利用できないので、Dockerコンテナ上でこの作業をすることはできません。私は最初Dockerコンテナ上で進めようとしていて、最後のcdk deployで下のようなエラーが発生してハマりました。
Error: write EPIPE at afterWriteDispatched (internal/stream_base_commons.js:156:25) at writeGeneric (internal/stream_base_commons.js:147:3) at Socket._writeGeneric (net.js:798:11) at Socket._write (net.js:810:8) at writeOrBuffer (internal/streams/writable.js:358:12) at Socket.Writable.write (internal/streams/writable.js:303:10) at /usr/local/lib/node_modules/aws-cdk/node_modules/cdk-assets/lib/private/shell.ts:28:19 at new Promise (<anonymous>) at Object.shell (/usr/local/lib/node_modules/aws-cdk/node_modules/cdk-assets/lib/private/shell.ts:26:10) at Docker.execute (/usr/local/lib/node_modules/aws-cdk/node_modules/cdk-assets/lib/private/docker.ts:75:13