Deep Learning on AWSのwhite paperを読んでみた
なんで今さら?感がありますが、Deep Learning on AWS
を読んでみたので自分の勉強がてら内容をまとめます (端折ったところとか意訳とかがある自己満仕様です)。
あくまでも自分なりのまとめですので、詳細は公式をみてください。
また、 Deep Learning on AWS
がそもそも古いホワイトペーパーなので、もっと新しいホワイトペーパーを見ることをおすすめします。
概要
AWS を活用して Deep Learning の分野についていかに貢献できるかを述べている。
- Deep Learning に関する作業がより生産的・アジャイル的に実践できる
- Deep Learning インフラ・プラットフォームの AWS へのオフロード
Deep Learning Landscape
AWS における Deep Learning の 5 つのドメインについて定義している。
- Machine Learning Process ... AWS における Deep Learning Project を 6 つのステップで説明
- Deep Learning Stack Layers ... AWS における Deep Learning Project をサポートする環境を説明
- Do it yourself on Amazon EC2 ... Deep Learning に必要なコンポーネントや機能を AWS のサービスを組み合わせて実現する説明
- Use Amazon SageMaker as an ML Platform ... タイトルのとおり
- ML/Infrastructure Experience Required ... タイトルのとおり
Deep Learning Process for Build, Train, and Deploy
Deep Learning を 6 つのプロセスで説明し、それに関わる AWS のサービスを紹介している。
1. Collect data
データの収集や加工の方法のやり方が既存の機械学習の手法と Deep Learning では異なってくる
データが十分にあるか?ラベルはあるか?データにノイズがあるか?などアセスメントを用意しているので詳細はそちらを参照(Figure 3: Data collection assessment)
Data Preprocessing
微妙なデータ、欠損値のあるデータ、ノイズがあるデータ、外れ値などのデータに対して、クリーニング、統合、変換、削減などを行う学習前の処理。
この処理については下記の AWS サービスを提供している。
AWS Glue, Amazon EMR, AWS Lambda, Amazon SageMaker, AWS Batch, AWS Marketplace。
これらのサービスの詳細については、Big Data Analytics options on AWSのホワイトペーパーを参照。
多くのオープンソースフレームワークに対応しているので、それらのフレームワークに対応したデータフォーマットを使うことが可能。
RecordIO, TFRecords, HDF5, pth, N5, LMDB。
2. Choose and Optimize Your Algorithm
Deep Learning のアーキテクチャやアルゴリズムについてはさまざまなものがあるので、よく使われるアルゴリズムを簡単に記載。
- アーキテクチャ
- Multilayer Perceptrons (Feedforwardneural networks)
- 表形式データ
- 分類、回帰
- Convolutional Neural Networks (CNN)
- 画像データ
- 分類、回帰
- Recurrent Neural Networks (RNN)
- テキストデータ、発音データ
- 分類、回帰
- アルゴリズム
- 最急降下法 (gradient descent)ベースの様々なアルゴリズム
- Momentum, AdaGrad, Adam, Gadam
3. Set up and Manage the Environment for Training
Deep Learning では大規模なデータセットや高速な計算環境が必要なので、これらに対応する AWS サービスを紹介している。
- AWS Deep Learning Amazon Machine Image (AWS DL AMI)
- ゼロから deep learning のモデルを作り上げたいとき
- TensorFlow, PyTorch, MXNet, Chainer, Cognitive Toolkit, Gluon, Horovod, Keras などのフレームワークが事前設定された環境
- AWS Deep Learning Containers (AWS DL Containers)
- 環境はゼロから作らなくて済み、場合によっては ML コンテナをそのままデプロイできる(ECS, EKS)
- 事前設定された Deep Learning フレームワーク
- Amazon SageMaker
- あとで出てくる
4. Train, Retrain and Tune the Models
学習には大量の計算リソースが必要なので、3 で話したような環境を利用する。
特に 2 の最適化アルゴリズムについて、適切なハイパーパラメータを使わないとモデルの精度がでないので、ハイパーパラメータチューニングは Amazon SageMakerを使って行う。
5. Deploy Models in Production
モデルを製品としてデプロイするときにはいくつかいくつかの考慮点がある。
- バッチ推論 or リアルタイム推論?
- バッチ推論 ... ある程度データが溜まったらバッチ的に非同期で推論
- リアルタイム推論 ... データが来るたびに同期的に推論
- どうやってモデルを再学習するのか?
- モデルを運用していくと、実際に推論するデータの分布が変わってきたりするので、モデルは継続的にデプロイされる必要がある
- 例えば、データの分布の変化を検知して定期的にモデルを再学習してデプロイできるようにするなど
- モデルのバージョン管理とスケーラブルなインフラはどうするか?
- このモデルはどの学習データを使ってどんな結果だったのか、そのトレーサビリティを確保する
- 過剰な設備投資にならないように、推論処理の計算リソースを動的に調整する必要がある
- モデルのパフォーマンス計測はどうするか?
- モデルを客観的に評価するために、メトリック、失敗検知、モデルの劣化度合いなどをしっかりと計測する
6. Scale and Manage the Production Environment
モデルの構築 ~ デプロイまでの機械学習システムは繰り返し実行されるプロセスなので、システムに変更を加える際の影響はアーキテクチャの拡張性に直接影響したり、チームの生産性に直接影響したりする。
AWS のサービスでは上記に対応できる ML ワークフローをカバーしている。
Challenges with Deep Learning Projects
Software Management
Deep Learning のプロジェクトはオープンソースな Deep Learning フレームワークに依存しており、それらのフレームワークに破壊的な変更が行われることもあるのでしっかりと管理する。
Performance Optimization
Deep Learning のプロセスにおけるレイヤごとに、処理の適切なファインチューニングが必要。ソフトウェアであったり、ネットワーク、CPU、I/O など。
Collaborative Development
Deep Learning のプロジェクトをチームでやるときに、メンバーの仕事について一定の標準化が必要。特に Deep Learning のプロセスとその結果については一貫性が必要で、誰がやっても再現可能でなければいけない。
Infrastructure Management
大規模なデータセットを使った並列計算などを実施する時、ジョブスケジューラやオーケストレーター、モニタリングツールなど IT チームに集中化して管理してもらうと良い。再学習のための DevOps チームからのサポートなども必要。
Scalability
特定のイベント期間のみにリクエストが多くなってしまう(スパイク)を計画・予測して、推論のワークロードをスケールできるようにしておく。
Highly Optimized AWS Technology Building Blocks for Deep Learning
Deep Learning における個々のレイヤについて AWS が提供しているサービスを紹介。
storage
- Amazon S3
- スケーラブル、高可用
- データ収集から ETL 後のデータなどいろんなデータを保管するオブジェクトストレージ
- 複数の Amazon EC2 から S3 の共通データをみて分散処理する、SageMaker の学習モデルの保管など
- Amazon FSx for Lustre
- スケーラブルでハイパフォーマンスな Deep Learning ワークロードに使用
- 複数のコンピュートクラスタを使っての学習、高い I/O スループット
- S3と連携してデータのlazy loading(ファイルのメタデータによるインデックスが作成されて、初回は S3 からファイル読み込みを行う。以降は Lustre に load されて、高速に使える)
- Amazon Elastic File System(Amazon EFS)
- スケーラブル、高可用
- 同時に複数の EC2 や SageMaker とマウントできるので、巨大なデータセットの共有やコード共有、分散学習のためのキャッシュレイヤに使用
- スケーラブル、高可用
Compute
- Amazon EC2(P3 instance)
- GPU を使った高速な Deep Learning ワークロード
- 100Gbps のネットワークスループットによる分散学習
- AWS Inferentia
- 低コスト・高パフォーマンスな推論に特化して設計されたチップ
- このチップを実装した Inf2 インスタンスなどは推論に特化したインスタンス
- Amazon EC2(G4)
- コストパフォーマンスに優れた Deep Learning ワークロード
Software
- AWS DL AMI
- CUDA, cuDNN, MKL, Anaconda, Deep Learning フレームワークなどが事前設定された AMI
- conda ami ... プレインストールされた Deep Learning フレームワークを仮想環境を分けて開発したい時
- base ami ... ゼロから作りたい時
- AWS DL Containers
- AWS DL AMI に似ているが、こちらは Docker Container として提供
Networking
- Enhanced Networking
- Elastic Network Adapter(ENA)を
- Placement Groups
- Elastic Fabric Adapter
- Amazon Elastic Inference
Solutions
- Amazon SageMaker Ground Truth for Data Labeling
- Amazon SageMaker Neo for Model Optimization
Code, Data, and Model Versioning
コードとデータと機械学習のモデルをバージョン管理するにはどうすればよいかを紹介。
Code
- Git-based なリポジトリとか AWS CodeCommit とか使う
- 学習とか前処理とか推論のスクリプトと一緒に学習パイプラインやモデルデプロイのコードも管理する
Data
- Amazon S3 を使って保管する
- データの命名ルールをちゃんとしたり、オブジェクトタグとかを適切に使用してデータセットを追跡する
- データの場所やその他のメタデータとかは Amazon DynamoDB を使い、実データを検索しやすいようにしておく
Model
- Amazon S3 を使って保管する
- モデルはパフォーマンスとかを別のモデルや前のモデルと比較することがあるため、バージョニングを有効化した S3 に保管する
Automation of Deep Learning Process for Retrain and Redeploy
製品として学習したモデルをエンドポイントを使って提供する場合は正確性、一貫性、信頼性が求められるので、ヒューマンエラーを起こさないように再学習・再デプロイを自動化する。ここではそのためのサービスを紹介している。あくまでも紹介なので、ユースケースとしてどのように利用するかを検討したいときは、AWS Summit でも紹介されていた事例から学ぶ MLOps 実装 Tips(AWS-42)のセッションがすごく参考になる。
- Amazon SageMaker Pipelines
- 古いため書かれていないけど、こちらも選択肢に上がってくるのでは
- AWS Step Functions for Amazon SageMaker
- Apache Airflow for Amazon SageMaker
- 古いため書かれていないけど、Amazon Managed Workflows for Apache Airflow (MWAA)を使おう
- Kubeflow Pipelines on Kubernetes
Patterns for Deep Learning at Scale
タイトルのとおり Deep Learning をスケールアウトさせるためのパターンが紹介されている。
Options for Deep Learning on AWS
Deep Learning を実現するに当たって Full managed な構成と DIY する構成が考えられるので、 DIY の場合どんなところに気をつけるべきか紹介して、その後それぞれの場合のソリューションを紹介している。
-
DIY で環境を作るときに、その環境を維持するために管理すべき運用上の問題
- 各種ドライバーのインストール
- 環境やパッケージのアップデートの調整
- ネットワークの故障
- 予定外の再起動
- 停電
- 機器の故障
- レスポンスの問題
- ディスク容量不足
- ケーブルの問題
- VPN 経由での環境への到達不能
- サーバーの物理的な周囲の安全性
-
Fully Managed Solution - Use Amazon SageMaker
- とにかく Managed に、スケーラブルにすべてやるならこれを使う
- Deep Learning に必要なドライバー、ライブラリ、フレームワークのインストール済み環境
- API による学習、推論環境の構築・実行、ワークフローへの組み込み
-
DIY Partially Managed Solution: Use Kubernetes with Kubeflow on AWS
- Kubernetes をインフラとして標準化して使っているようなところではこれ
- Kubernetes の面倒は大変なので、Amazon EKS を使って一部 Managed に管理する
- Kubeflow を使って学習や推論時に必要であればスケール、デプロイを行う
- ストレージでは Amazon S3 や Amazon EFS 、 Amazon FSx for Lustre を活用する
- もちろん Kubernetes ・ Kubeflow の一部に SageMaker を用いることも可能
-
DIY Self-Managed Solution: Use Amazon EC2
- 技術者のコンテナ活用が進んでいないなら EC2 を活用する
- 環境とかライブラリなどをお手々で最初から用意する必要があるので、1 回限りのプロジェクトとか特殊な要件がある環境でやったほうが良い
- AWS Parallel Cluster とか使ってスケールする
Advanced Use Cases: Use Amazon SageMaker with Other AWS Service
SageMaker と他の AWS サービスの組み合わせについて紹介している。
-
Orchestrate Your End-to-End Machine Learning Pipeline using AWS Step Functions
- AWS Step Functions を使うことで複雑な End-to-End のワークフローを構築できる
- 例えば
- S3 にデータが置かれた -> トレーニングジョブ開始 -> デプロイ -> デプロイ時にエラーが発生したらメール送信
-
Orchestrate Your Hyperscale Deep Learning jobs using AWS Batch with Amazon SageMaker as Backend in Multiple AWS Regions
- 大規模なデータセットをリージョンレベルでローカルな環境に持っているとき、SageMaker と AWS Batch を組み合わせてセントラルリージョンから複数リージョンのジョブを管理できる
-
Use Amazon S3 and Amazon DynamoDB to Build a Feature Store for Batch and Real-Time Inference and Training
- データレイクからどうやって Deep Learning に使用する特徴を取得するか
- プロジェクト間で再利用できる Feature Store を AWS のサービスでシンプルに構築するには下記のケイパビリティが必要
- 再利用: Feature Store のパイプラインを使って特徴量を再計算して新しく保管できる
- 保管: 特徴量のメタデータを保管できる
- 検索: メタデータが API で検索できる
- 統治: データ管理の機能があり、Feature Store のガバナンスとアクセスコントロールができる
- 消費: 特徴をクエリして利用、エクスポートできる
- Amazon S3 を Feature Store の唯一ソースとして利用
- メタデータは Amazon DynamoDB に保存
- メタデータは Amazon Elastic Search で検索 (現 Amazon OpenSearch Service)
AWS Guidance
いくつかのシナリオでどのように AWS サービスを利用できるか紹介している。
- スタートアップ企業の場合
- スモールチームなので、 Amazon SageMaker ですべて完結させる
- 新製品開発する研究開発者の場合
- 研究開発というところで色々チューニングするので、 DIY 的に Amazon EC2 とかを使う
- ただし、 Amazon SageMaker もハイパーパラメーターチューニングの自動化とかできるので要検討
- すでに顧客にデプロイされているモデルを使用しているチームの場合
- 再学習とかデプロイを行うので、 End-to-End の Deep Learning パイプラインを AWS Step Functions や Amazon SageMaker で実装する
- Deep Learning 導入を加速させる技術リーダーの場合
- 短い時間でインパクトを与えるためにも、Full managed な Amazon SageMaker を使う
- Kubernetes による標準化を図っている企業の場合
- Kubernetes をインフラとして使うので、 Amazon EKS や Kubeflow を使う
- 任意で Amazon SageMaker Ground Truth や Amazon SageMaker Neo を一緒に使う
最後に
最近、 AWS Certified Machine Learning - Specialty
を取得しようという機会があり、それならということでホワイトペーパーを読もうと思いました。今本的な概念とかポイントみたいなところは抑えることができたかなというところですが、やはり最新の情報をしっかりキャッチすることが重要なので、もっとどんどん読んでいきたいです。
Discussion