AWS re:Invent 2022で面白かったセッションと所感
背景
機械学習エンジニア。お仕事で、GCPで機械学習基盤などを作成している。
AWSはそんなに詳しくない。急いでSolution Architect Associate Certificateを取得して、カンファレンスに現地参加した。
せっかく参加したので、忘れないうちに、面白かったセッションのまとめや所感を書く。
注意
- 英語が聞き取れない部分があった
- 一部、資料が公開されていない
- AWSに詳しいわけではない
そのため、情報が正しくない可能性があります
面白かったセッション
Data Analysis with Amazon EKS and AWS Batch
AWS Batch・EKSのざっくりした説明を行った後に、ハンズオン形式でAWSリソースなどの作成を行った。
ハンズオンでは、AWS Batchからジョブをキックして、EKS上で
- podにecho helloを出力させる
- S3から複数枚の画像を取得してGIFファイルにする
- モニタリングツールを入れてCPU負荷の高いジョブが実行されるのを確認する
を行った。AWS Batch+EKSは、一時的に高負荷のワークロードとなる機械学習のバッチなどに適しているとのことだった。
所感としては、ジョブ情報ファイル(EKSとAWS Batchを接続する & リソース情報を記載する)、ジョブキュー(複数キューを作成して優先順位度が低いキューはspot instanceなどを使うと良いらしい)の作成などは比較的簡単に作成できて、バッチの実行までがスムーズだった。また、ジョブのステータス情報がAWS Batchから簡単に確認できたり、ロギング周りが自動で行われていたのは良かった。
Build stateful K8s applications with ultra-fast amazon memoryDB for Redis
マネージドkubernetesサービスであるEKSやマネージドインメモリキャッシュであるMemoryDBのざっくりした説明を行ったあとに、ハンズオン形式でAWSリソースなどの作成を行った。
想定シチュエーションがあり、EC webサイトで、注文情報のリクエストを受け取るOrder apiと在庫情報の取得や更新を行うInventry apiがある。それぞれはマイクロサービスとして独立している
やったことは、
- Order apiとInventry apiへのAPIアクセスを行い、注文と在庫の更新の変化を確認した。
- その後、inventryにある以上のオーダーがあった場合、返金処理するスクリプトを追加したDockerimageをk8sにデプロイした。
- 在庫以上のオーダーを出した際の、memoryDBのステータス情報のレコードの変化などを確認した。
所感としては、普段使っているGCPのマネージドkubernetesサービスであるGKEと、結構違う部分があって面白かった。GCPは、terraformでCloud SQLなどのサービスを管理&デプロイし、GKEと通信を行うのがスタンダードだと思う。対して、AWS EKSは、EKSからMemoryDBなどをk8sのマニフェストとして定義し、デプロイができる。(ただし、k8sクラスタの権限が大きくなるから、そこは絶対的に良いというわけでもなさそう)
How Stable Diffusion was built: Tips and tricks to train large AI models
stabilityAI社のCEOが登壇していた。
内容は、stable diffusionを学習させたStabilityAI社のAWS機械学習基盤について
- s3
- Fsx
- EC2インスタンス
- AWS parallel Cluster
- EFA
などを利用して作成したとのこと。細かいことは別の記事にまとめる予定。
所感としては、GCPにはFsx for Lustreのようなものがないため、データを
- GCS → エフェメラルインスタンスのストレージ移動させて、ターミネートされたら、再度データを準備する (料金は安くなるが、ターミネートされるとデータの移動をやり直し)
- GCS → オンデマンドインスタンスのストレージに移動させる(データの移動をやり直す必要はないが、料金は高くなる)
- GCSをGCEインスタンスがマウントして使う (GCS↔GCEの通信がボトルネックになる)
という感じだと認識しており、大量のデータで学習をする際は結構辛い。
AWSが提供しているFsx for lustreみたいなサービスはGCPにもほしいなと思った。
Train&Deploy a Hugging Face NLP model with AWS Trainium & AWS Inferentia
機械学習の学習に特化したチップであるTrainiumの説明と、推論に特化したチップであるInferentiaの説明
その後、ハンズオン形式で、モデルの学習と推論を行った。
- Trainium編
-
まずは、普通にCPUでministで学習。2.4分くらい。
-
Neuron のシングルコアでministで学習。0.6分くらい
-
Neuron のマルチコアでministで学習。もっと早かった
-
hugginfaceのモデルでfine tune
- Inferentia編
-
NueronPerfでスループットやレイテンシなどのベンチマークを計測
-
デプロイしてエンドポイントで使えるようにする
TrainiumとInferentiaを使うには、どちらもpytorchのコードに、数行変更を加え、AWS Neuron SDKによって、モデルをコンパイルする必要がある。
所感としては、GPUではなく、専用のチップを利用できるのはGCPにはないと思うので、面白いなと思った。性能が良く、料金面も安い、そしてコードの変更は一部のみならば、使ってみるのもありかもしれないと思った。
Discussion