Amazon SageMakerを利用して機械学習モデルのトレーニングを行ってきたものの、実験管理ツールとして用いていたWandBの接続が不安定な点に若干不便を感じていました。
そんな中、SageMaker StudioのExperiments機能ならこの問題を解消できそうだと思い、まずはStudioを導入してみることにしました。
Studioを構築するにあたって、VPCやサブネットなどの基本的なネットワーク構成を設定する必要があるのですが、私のようなクラウド素人にはかなりの手間だったので、初心者向けに導入手順をまとめました。
間違った点がありましたら、コメントでご指摘いただけますと幸いです。
構成
導入手順
以下の順番でネットワーク構成とSageMaker Studioの設定を行います。
- VPC
- プライベートサブネット
- VPCエンドポイント
- ルートテーブル
- セキュリティグループ
- SageMaker Studio ドメイン
- ユーザープロファイル
VPC
アプリケーションを展開している他のVPCと将来的にVPCピアリングで接続することを考慮し、互いのVPCのCIDRブロックが重複しないようにCIDRブロックを設定します。
プライベートIPv4アドレス空間には以下の3つの範囲が定義されているのですが(RFC 1918)、既存のVPCで10.0.0.0/16が使用済なので、今回は同じ10.0.0.0/8範囲内の異なるサブネット(10.1.0.0/24)を使用します。
- 10.0.0.0 - 10.255.255.255 (10.0.0.0/8)
- 172.16.0.0 - 172.31.255.255 (172.16.0.0/12)
- 192.168.0.0 - 192.168.255.255 (192.168.0.0/16)
※同じ10.0.0.0/8範囲内の異なるサブネットであれば、10.2.0.0/16などでも大丈夫です。
※別のプライベートアドレス範囲(172.16.0.0/16や192.168.0.0/16など)を使用しても大丈夫です。
10.1.0.0/16でもCIDRブロックの重複を避けられるのですが、SageMaker Studioを配置するには範囲が広すぎるので、今回はより限定された範囲の10.1.0.0/24(利用可能なIPアドレスは251個)を選択します。
プライベートDNSの有効化
後の手順でECR API用およびECR Docker Registry用にインターフェースVPCエンドポイントを作成するのですが、VPC内でプライベートDNSが有効になっていないと作成時にエラーが起こります。
VPC内でプライベートDNSを有効にするために、VPCの編集画面から以下のVPC属性を両方ともtrueに設定します。
- DNS解決を有効化(enableDnsSupport)
- DNSホスト名を有効化(enableDnsHostnames)

プライベートサブネット
VPCダッシュボードで、Studioを配置する新しいプライベートサブネットを作成します。
サブネットの範囲は10.1.0.0/25で指定します。

VPCエンドポイント
学習データの取得先およびモデルのアップロード先であるS3や、Dockerイメージの取得先であるECRとの接続を考慮し、それぞれのVPCエンドポイントをVPCダッシュボードから作成し、新しいプライベートサブネットと関連付けます。
S3用のゲートウェイVPCエンドポイント
VPCエンドポイントsagemaker-studio-s3
を作成します。
S3へのアクセスをVPC内からプライベートアクセスに制限するために、ゲートウェイVPCエンドポイントを使用します。
ゲートウェイVPCエンドポイントは、S3エンドポイントサービス(今回はcom.amazonaws.ap-northeast-1.s3)と関連付けられます。
S3用のゲートウェイVPCエンドポイントは、インターフェースVPCエンドポイントとは異なり、VPCにアタッチされます。
そのため、サブネットやセキュリティグループを直接関連付けることはありません。
その代わりに、ゲートウェイVPCエンドポイントは、VPCのルートテーブルにエントリを追加することで機能します。
ルートテーブルは後ほど設定するため、初期設定のチェックは空で大丈夫です。
また、同じ名前のサービスcom.amazonaws.ap-northeast-1.s3
が2つありますが、タイプ: Gateway
を選択してください。

ECR用のインターフェースVPCエンドポイント
VPCエンドポイントsagemaker-studio-ecr-api
sagemaker-studio-ecr-dkr
を作成します。
ECRでは、インターフェースVPCエンドポイントを使用します(ゲートウェイVPCエンドポイントをつかうサービスはS3とDynamoDB)。
インターフェースVPCエンドポイントは、ECRの2つのエンドポイントサービスと関連付けられます。
- ECR API用(com.amazonaws.ap-northeast-1.ecr.api)
- ECR Docker Registry用(com.amazonaws.ap-northeast-1.ecr.dkr)
インターフェースVPCエンドポイントの実体はENI(Elastic Network Interface)であるため、サブネット内で構成されます。
そのため、ゲートウェイVPCエンドポイントと異なり、初期設定でサブネットの選択も行う必要があります。
ルートテーブル
サブネットは一つのルートテーブルに関連付けられ、そのルートテーブルのルーティング設定に従ってトラフィックが転送されます。
今回、VPC内のサブネットは1つであるため、VPC外のネットワークへのトラフィックのルーティングを制御するための設定を行います。
インターフェースVPCエンドポイントの場合、ルートテーブルには、特別なルートを追加する必要はありません。
これは、インターフェースVPCエンドポイントがDNSを利用して対象のサービスとの通信を制御するためです。
AWSが提供するエンドポイントのサービス用に、プライベートDNSエントリが自動的に作成され、これを利用してサービスにアクセスします。
ゲートウェイVPCエンドポイントの場合、関連付けられたプライベートサブネットのルートテーブルには、エンドポイントサービスへのトラフィックがゲートウェイエンドポイントにルーティングされるように設定を追加します。

セキュリティグループ
ECR用のインターフェースVPCエンドポイントのセキュリティグループを新しく作成します。
エンドポイントの画面で作成したセキュリティグループをアタッチします。
SageMaker Studio ドメイン
AWSSageMakerFullAccessを含むロールをアタッチし、VPCとサブネットはこれまでに作成したものを選択します。
ユーザープロファイル
複数のユーザーがSageMaker Studioを使用する場合、それぞれのユーザーに対して個別のユーザープロファイルを作成することが推奨されます。
これにより、各ユーザーが独自のワークスペースとリソースにアクセスでき、他のユーザーとの競合が発生しにくくなります。
ユーザープロファイルを作成することで、以下の利点があります。
- 各ユーザーが独自の開発環境を持てる
- ユーザーごとにリソースの割り当てや使用制限を設定できる
- ユーザーごとにアクセス権限を管理できる