😎

AWS re:Invent 2022で面白かったセッションと所感

2022/12/06に公開

背景

機械学習エンジニア。お仕事で、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がある。それぞれはマイクロサービスとして独立している

やったことは、

  1. Order apiとInventry apiへのAPIアクセスを行い、注文と在庫の更新の変化を確認した。
  2. その後、inventryにある以上のオーダーがあった場合、返金処理するスクリプトを追加したDockerimageをk8sにデプロイした。
  3. 在庫以上のオーダーを出した際の、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の説明

その後、ハンズオン形式で、モデルの学習と推論を行った。

  1. Trainium編
  • まずは、普通にCPUでministで学習。2.4分くらい。

  • Neuron のシングルコアでministで学習。0.6分くらい

  • Neuron のマルチコアでministで学習。もっと早かった

  • hugginfaceのモデルでfine tune

  1. Inferentia編
  • NueronPerfでスループットやレイテンシなどのベンチマークを計測

  • デプロイしてエンドポイントで使えるようにする

TrainiumとInferentiaを使うには、どちらもpytorchのコードに、数行変更を加え、AWS Neuron SDKによって、モデルをコンパイルする必要がある。

所感としては、GPUではなく、専用のチップを利用できるのはGCPにはないと思うので、面白いなと思った。性能が良く、料金面も安い、そしてコードの変更は一部のみならば、使ってみるのもありかもしれないと思った。

Discussion