🍣

【環境構築】MLflow(cloud, wsl2+Docker)

2023/11/29に公開

はじめに

※この記事は参考記事や本記事を参照しつつ、手元の環境を再現するための備忘録です。お使いの環境に合わせて参考記事を参照することを推奨します。

参考記事
MLflow+AWS+SageMakerの環境を立ち上げる

概要

MLflowをAWSとSageMakerで利用するための環境構築手順のメモ。awsテンプレートを使用してローカル環境からクラウド(特にAWS)へテンプレートをデプロイし、SageMakerでの実験結果の確認方法をMLflowのトラッキングサーバで確認することをゴールとしています。

WSL, Python、Node.js、AWS CLI、AWS CDKのインストール

  • 記事に従ってwsl2をセットアップ
    • 再インストール時は画像のプログラムもアンインストール
wsl --update
wsl --install -d Ubuntu
  • 記事に従ってpyenvの導入
pyenv install 3.9.7
pyenv global 3.9.7
  • 参考記事に従ってPython、node、AWS CLI、AWS CDKをインストール
    • sudo nの部分だけ最新版をsudo n stableでインストール
    • sudo apt install unzipも実行

AWS設定ファイルの作成と編集

mkdir ~/.aws
touch ~/.aws/config 
touch ~/.aws/credentials

nano ~/.aws/config 
[default]
region = ap-northeast-1

nano ~/.aws/credentials

[default]
aws_access_key_id = XXXXX
aws_secret_access_key = XXXXX
  • 記事に従ってdockerをセットアップ

このコマンドシーケンスは、Amazon Web Services (AWS) の環境設定とCloud Development Kit (CDK) を使用してインフラストラクチャをデプロイするためのものです。それぞれのコマンドについて簡単に説明します:

GitHubリポジトリのクローンとセットアップ、ECRへのデプロイ

git clone https://github.com/aws-samples/amazon-sagemaker-mlflow-fargate.git
cd amazon-sagemaker-mlflow-fargate

# Pythonの仮想環境を作成します。この環境はプロジェクト固有の依存関係を隔離するために使用されます。
python3 -m venv .venv

# 作成した仮想環境をアクティベートします。
source .venv/bin/activate

# 仮想環境に必要なPythonパッケージをrequirements.txtファイルからインストールします。
pip3 install -r requirements.txt

# AWS Security Token Serviceを使用して現在のAWSアカウントIDを取得し、ACCOUNT_ID変数に格納します。
ACCOUNT_ID=$(aws sts get-caller-identity --query Account | tr -d '"')

# AWS CLIの設定から現在設定されているリージョンを取得し、AWS_REGION変数に格納します。
AWS_REGION=$(aws configure get region)

# AWS CDKのbootstrapコマンドを使用して、指定されたAWSアカウントとリージョンでCDKアプリケーションの準備をします。
cdk bootstrap aws://${ACCOUNT_ID}/${AWS_REGION}

# CDKを使用して、特定のパラメータ(この場合はProjectName=mlflow)でインフラストラクチャをデプロイします。承認は不要に設定されています。
cdk deploy --parameters ProjectName=mlflow --require-approval never

メモ cdk deploy コマンドの挙動

cdk deploy コマンドを実行した場合、CDK (AWS Cloud Development Kit) が関与するプロセスは主に以下のようになります:

  • cdk deploy コマンドはまず、CDKアプリケーションを定義するファイルを探す。今回はapp.py
  • app.pyでインスタンスを初期化
    • 予め必要なCDKスタック(VPC, IAM, S3,...)をクラスで定義
  • synth()でスタックを合成しCloudFormationテンプレートを./cdk.out以下に出力
  • これをCloudFormationにデプロイ

Discussion