なぜAWSでmlflowサーバーを立ち上げようと思ったか
はじめまして,機械学習を勉強し始めて1年になるものです。
この度はkaggleに初参加してみようと思ったのですが,kaggle notebookの実行ログをmlflowで管理したかったので,AWSを使って無料の範囲内でサーバーを立ち上げようと思いました。ただ,ネットにその情報が上がっていなかったので,他の方のために,知識0の人間が四苦八苦しながらmlflow serverを立ち上げた際の手順を記事にします。
※セキュリティ的にはガバガバなので,今回立ち上げるサーバーに重要な情報をアップロードしないでください。
step1: アカウント作成とログイン
これは誰でもできるはずです。途中でクレジットカードの登録が必要です。
下のような画面が見えたら成功です。
step2: アクセスキーIDとシークレットアクセスキーを設定
- IAMを選択します。
- ユーザーを追加します。
- ユーザー名はお好きな名前を選択してください。これがあなたの名前になります。
- 「グループの作成」をクリックしユーザーが所属するグループを作成します。
- 下記の2つをアタッチします。
- グループが作成されていることを確認して,「次のステップ」へすすみます。
- そのまま次へ。
- どんどん次へ。
- csvを保存して閉じます。
step3: IMAロールの作成
- ロールの作成を選択します。
- EC2をユースケースとして選択して次へをクリックします。
- 「SSMF」などと入力して「AmazonSSMFullAccess」を選択して次へをクリックします。
- 管理しやすいようにタグを追加しない場合は,そのまま次へをクリックします。
- IAMロール名を適当に決めて次へをクリックします。
- 作成されていることを確認します。
step4: EC2インスタンスの起動
- EC2のサービスへ行きます。
- リージョンを東京にして(重要!!),インスタンスを起動します。
- 一番上の「Amazon Linux 2」が無料なのでこれを使います。
- 無料の
t2.micro
を選択して,**「次のステップ」**をクリックして次へ進みます。
- 先ほど作成したIAMロールを選択して,「次のステップ」を選択します。
- 30GBまで無料なので30に変更して「次のステップ」を選択します。
- 特にタグが必要なければそのまま「次のステップ」を選択します。
- 画像の順番で真似していきます。あとでSSH接続しない場合は,SSHはなくてもいいです。
5000番のポートを開けておくのを忘れないでやりましょう。
- 「起動」をクリック。
- SSHでアクセスするためのキーペアを作成します。作成したらローカルPCに保存しておいて,絶対に消さないでください。
- 起動が確認できたら,これでEC2インスタンスの作成は完了です。
step5: EC2インスタンスへ接続
step6: mlflow serverのインストールと起動
下記の手順で入力してください。
python3.7をインストールします。
sudo yum install python37
pipのためのpythonファイルをダウンロードします。
curl -O https://bootstrap.pypa.io/get-pip.py
pipをインストールします。
python3 get-pip.py --user
pathを追加します。
export PATH=~/.local/bin:$PATH
設定を反映します。
source ~/.bash_profile
mlflowをインストールします。
pip install mlflow
mlflowサーバーを立ち上げます。
立ち上げが終わったら。ブラウザのバツボタンを押して接続を切っても大丈夫です。
mlflow server --backend-store-uri ./mlruns --host 0.0.0.0
接続が切ったら先程控えておいたIPとポート番号をブラウザに入力します。
今回の例だと13.112.11.58:5000
とブラウザに入力すればmlflowの画面にたどり着きます。
課金されないために知っておきたいこと
-
Elastic IPを使うと,インスタンスを起動し直してもパブリックIPは変わらないのですが,Elastic IPはお金がかかってしまうため,今回は使用しませんでした。
-
無料EC2インスタンスは月に750時間稼働可能なのですが,EC2インスタンスを2つ以上起動しておくと750時間を超えてお金がかかります。ちなみにこの月750時間というのはAWSアカウントを作成してから1年間有効です。
-
最初はS3を使ってmlflowのartifactを保存しておきたかったのですが,5GBまでしか無料ではないので諦めました。
-
過剰請求されたときのためにAWS Budgetを使ってアラートを設定しておくといいと思います。詳しくはググれば出てきます。