Amazon SageMakerをそれなりの人数で使うときの設定

AWS のマネージド Jupyter サービスである「Amazon SageMaker」を数十名規模で使う機会があったのでインフラ的に設定した内容などを書いておく。
SageMaker で何をしたかなどはいずれちゃんとした情報が出ると思う。 出ました!
=> Amazon SageMaker ハンズオンレポート

Amazon SageMaker とは?

AWS の WebUI でぽちぽちクリックしていくと Jupyter が起動する、そういうやつです。
SageMaker のオフィシャルサイトはこちら。
機械学習モデルとアルゴリズム | AWS での Amazon SageMaker

Amazon SageMaker の起動方法

まずアクセスすべきはこちら。
https://console.aws.amazon.com/sagemaker/home#/notebook-instances

「Create notebook instance」ボタンをクリックするとこのような画面になるので項目を埋めていく。

ある程度の人数で使う場合には以下のような項目を取り決めておくと良さそう。

  • Notebook instance name
    • 文字通り Notebook インスタンスの名前になるほか、Jupyter Notebook の URL の一部としても使われる
    • 誰が作ったかとか何の目的なのかとか命名ルールを決めておくと良さそう
  • Notebook instance type
    • いくつか選べる
    • Notebook インスタンスは純粋に Notebook であって、このインスタンスで job が動くわけではないのでそんなに強力なインスタンスでなくてもよい
    • なお実際に job を実行するインスタンスでは p2/p3 などの GPU インスタンスも選べる
  • IAM role(後述)
    • Notebook インスタンスに与える Role、この権限で job などのインスタンスを作ろうとする
    • Role を作成するか既存の Role から選択するかなどが選べる
    • チームやグループで使うのであればあらかじめ Role を作っておいて ARN を入力してもらう方が管理上よいと思う
  • Custom IAM role ARN
    • 前述の「IAM role」で既存の Role を選ぶことにすると表示される
    • 私はあらかじめ作っておいた Role を入力してもらうことにした
  • VPC

以上のような項目を埋めて、ページ下部の「Create notebook instance」ボタンをクリックすると Notebook インスタンスが準備されるので「InService」になるまで数分〜10 数分程度待つ。
案外時間がかかるが裏側でプロビジョニングなどを行なっているのでしょう。

「InService」になった Notebook インスタンスの詳細をみると右上に「Open」ボタンがあるのでクリックする。

そうすると別タブで見慣れた Jupyter Notebook の画面が開くので好きなように使う。

こんなに楽だと自分で Jupyter Notebook 立てるモチベーションがなくなって良いですね。

IAM Role/Group 作成

以下を用意した

  • IAM Role
    • 前述の、Notebook インスタンスに与える Role
    • 最小限 AmazonSageMakerFullAccess をアタッチしておけば良い
  • IAM Group
    • 今回は 1 つの AWS アカウントで数十名が同時に SageMaker を使うため、グループを作ってユーザーを紐づけることにした
    • 以下をアタッチした(もう少し絞り込めそうではある)
      • AmazonSageMakerFullAccess
      • AmazonEC2FullAccess
      • IAMReadOnlyAccess
      • IAMUserChangePassword (これは運用上必要だっただけ)
  • IAM User(s)
    • SageMaker を使う人全員分のユーザーを払い出し、前述のグループに紐付けた
    • 今回は初期パスワードを私の手元でコンソール出力し、各自初回ログイン時に変更してもらった

以上の設定を Terraform で行う .tf ファイルの例は次の通り。
内容はほぼそのまま、個々のユーザー名は別途変数から読んでいる。

AWS リソース上限緩和申請

AWS SA の方にご相談の上、SageMaker を利用する IAM User数 * n で事前にリソース上限の緩和申請を行なった。
デフォルト値はこちら。
AWS サービス制限 - アマゾン ウェブ サービス#Amazon SageMaker の制限

内容はざっと次の通り。
各ユーザーが Notebook インスタンスを 1 つ、学習と推論の job を 2 つずつ実行することを想定した。

  • SageMaker のホスト
    • インスタンス数: IAM User数 * 3
    • (使用するインスタンスタイプ): IAM User数 * 3
    • エンドポイントのインスタンス数: IAM User数 * 3
      • これは不要だったようだ
  • SageMaker のトレーニング
    • インスタンス数: IAM User数 * 3
    • トレーニングジョブのインスタンス数: IAM User数 * 3
    • (使用するインスタンスタイプ): IAM User数 * 3
  • SageMaker ノートブック
    • (使用するインスタンスタイプ): IAM User数 * 1.5
    • 実行中のノートブックインスタンスの数: IAM User数 * 1.5

一部 CloudTrail の上限に引っかかり同時実行できなかったりもしたが、概ねこれでユーザー全員が目的の操作を行えた。
AWS のリソース上限はなかなか難しいので AWS SA の方に相談するに限る 🙏

感想

プロビジョニングしてルールを決めておけば使いたい人にサクッと使ってもらえて大変便利。
各種セキュリティ担保の方法や込み入った使い方については今後使ってもらいながら工夫していきたい。