SageMaker Training Job で VPC を指定する場合のメモ
こんにちは、初めましての方は初めまして。株式会社 Fusic の瓦です。2024 年も終わりが近づいてきたので掃除がてら色々整理していたら、今年初めにたてた「ダイエットをする!」という目標を書いた紙が出てきたのでそっと捨てました。
この記事では「SageMaker Training Job の作成の際に VPC を指定した場合、NAT Gateway を作成しないとインターネットへのアクセスが出来ない」という内容について書きます。最初に断っておくと、記事の内容はこれ以上でもこれ以下でもないので、とりあえず解決策を知りたい人はこれ以降は読まなくても大丈夫ですが、読んでもらえれば参考に出来る部分があるんじゃないかと思います。
SageMaker Training Job について
SageMaker Training Job (以降 Training Job と書きます) は機械学習の訓練が行えるサービスです。AWS 側で用意されているアルゴリズムや自分で用意したコードを使用して、指定したデータで学習し、学習後のモデルを S3 にアップロードまでしてくれます(訓練はコンテナで動きますが、モデルのアップロードはコンテナ終了後の処理になるので、万が一エラーで落ちてもモデルは S3 にアップロードされます。これ地味に嬉しいポイントだと思ってます)またハイパーパラメータを Training Job 作成時に渡すことが出来るので、外部で Optuna のようなハイパーパラメータを最適化してくれるライブラリを回してハイパーパラメータを探索することも可能です(SageMaker にもハイパーパラメータ探索を行うためのサービスがあります)
Training Job には様々な設定項目が存在し、そのうちの一つに VPC の設定があります。これを設定すると、あたかもその VPC 内で学習が出来ているような挙動が出来る[1]ので、セキュリティ的な理由で VPC 外に通信を出したくない場合にも対応できます。
今回起きた問題とその解決策
Training Job の設定項目で VPC の指定をするだけでは(パブリックサブネットがあろうとなかろうと)インターネットへアクセスすることが出来ません。 理由は単純で、Training Job が動くインスタンスにグローバル IP アドレスが付与されていないからです(僕はネットワークが分からなさ過ぎて、この原因にたどり着くまでに一日溶かしました…)
そこで、パブリックサブネットに NAT Gateway を作成し、インターネットへ接続する場合は NAT Gateway へルーティングするように設定することでインターネットへのアクセスが出来るようになります。 つまり、インターネットへのアクセスに必要となるのは
- NAT Gateway
- NAT Gateway へルーティングされているルートテーブル
- ルートテーブルがアタッチされているサブネット
- 外部への通信を許可しているセキュリティグループ
の四つです。インターネットへのアクセスが出来ない場合はこのどれかを疑うとよいと思います。
まとめ
この記事では SageMaker Training Job で VPC を指定した際にインターネットへのアクセスが出来ない問題と、その解決策について書きました。この記事では特に Training Job についてでしたが、参考にしたサイトなどを見るに恐らく SageMaker の他のリソースについても(Notebook インスタンスや Processing Job など)VPC を指定すると同じ現象が発生するのではないかと思います。解決策自体はとても単純ですが、ネットワークの知識がないと原因がそもそも分からないので、そのような方の解決の参考になれば幸いです(僕は VPC 外に通信が出てないかもしれないぞなんて微塵も疑っておらず、最初はアクセス先がおかしいんじゃないかと疑っていたので解決にめちゃくちゃ時間がかかりました…)
最後に宣伝になりますが、機械学習でビジネスの成長を加速するために、Fusic の機械学習チームがお手伝いたします。機械学習のPoCから運用まで、すべての場面でサポートした実績があります。もし、困っている方がいましたら、ぜひ Fusic にご相談ください。お問い合わせからでも気軽にご連絡いただけます。また Twitter の DM でのメッセージも大歓迎です。
-
実際には指定した VPC 内にリソースが配置されるわけではなく、SageMaker の管理する VPC 内に配置されるらしいです。(詳しくは https://aws.amazon.com/jp/blogs/news/internet-free-sagemaker/ や https://dev.classmethod.jp/articles/sagemaker-network-vpc-architecture-2022-04/ を参照してください) ↩︎
Discussion