まとめ
機械学習ジョブを停止有り格安インスタンスで回せるやつを使う。
@2020-11-17
service | scheduling | auto-scaling | auto-retry | preemptible | e.g. |
---|---|---|---|---|---|
AWS Batch | ☑ | ☑ | ☑ | ☑ | |
AWS SageMaker | ☑ | ☑ | ☑ | □ | |
GCP AI Platform | ☑ | ☑ | ☑ | □ | |
kubeflow on GCP | ☑ | ☑ | ☑ | ☑ | link |
サービス概要まとめ
コンテナベースの学習を準備
- データ
- paramsの渡し方
- checkpoints/resume
AWS-Batch GPU
タイプ | GPU | GPU メモリ | vCPU | メモリ | 帯域 |
---|---|---|---|---|---|
g4dn.xlarge | 1 | 16 GiB | 4 | 16 GiB | 最大 25 Gbps |
AWS-Batch環境@2020-12-30
- HostOS: Amazon ECS GPU-optimized AMI version 20201209 @2020-12-30
- CUDA driver: 450.80.02 (CUDA Toolkit 11.1 compatible)
- Docker: 19.03.13-ce
- PyTorch image: 1.7.0-cuda11.0-cudnn8-runtime
- CUDA Toolkit: 11.0
- cuDNN: 8
GPUコンテナ詳細、compatibility等はGPU深層学習 in Container - たれぱんのびぼーろく
AWS Batch GPU
g4dn指定しておけば自動でAmazon ECS GPU-optimized AMI
で起動してくれる
In managed compute environments, if the compute environment specifies any p2, p3, g3, g3s, or g4 instance types or instance families, then AWS Batch uses an Amazon ECS GPU-optimized AMI.
GPU jobを扱うCompute environmentにはGPUインスタンスしか設定しちゃダメ.
All instance types in a compute environment that will run GPU jobs should be from the p2, p3, g3, g3s, or g4 instance families. https://docs.aws.amazon.com/batch/latest/userguide/gpu-jobs.html
割り当てメモリ量
インスタンスのメモリ量相当を指定するとsystemが占拠してて割り当てられない. この辺微妙なところらしく、手動で調べていい感じに設定するしかなさそう https://docs.aws.amazon.com/batch/latest/userguide/memory-management.html
AWS Batch auto-scaling
vCPU単位でコンピューティング環境を管理していて、裏で動いているインスタンス数はいい感じに調整してくれる
[最小 vCPU] では、ジョブキューの需要にかかわらず、コンピューティング環境で維持する EC2 vCPU の最小数を選択します。 https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/Batch_GetStarted.html
.
最小 vCPU: これを常に 0 に設定しておくことで、実行する作業がない場合にインスタンスが時間を浪費することを避けられます。これを 0 より上に設定すると、その数の vCPU を常に維持する必要があります。 from console
.
As demand decreases, AWS Batch can decrease the desired number of vCPUs in your compute environment and remove instances, down to the minimum vCPUs. https://docs.aws.amazon.com/batch/latest/userguide/create-compute-environment.html
.
マネージド型のコンピューティング環境を作成すると、環境内のインスタンスは、ユーザーの仕様に基づいて AWS Batch で管理できます。アンマネージド型のコンピューティング環境を作成すると、環境内のインスタンス設定はユーザーが処理します。
.
AWS Batch は、コンピューティング環境の作成時に定義するコンピューティングリソースの仕様に基づいて、環境内のコンピューティングリソースの容量とインスタンスのタイプを管理します。 https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/compute_environments.html
Batch auto-retry
retryStrategy: { attempts?: int (1<=x<=10) evaluateOnExit?: [ { "action"?: RETRY | EXIT, "onExitCode"?: glob, "onReason"?: glob, "onStatusReason"?: glob } ]
問答無用でリトライや、条件満たしたらExit|Retryみたいな制御が可能
ジョブの再試行の自動化 https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/job_retries.html
別方法
kubeflowを使う。終わり。
kubeflowはk8s Jobsベースの学習(PyTorchJob CRD)、Argoベースのworkflow/pipelines化といった感じ.
コンテナオーケストレーションに慣れてないと色々大変だとは思う。
references
- Google Cloud Japan Team. (2019). プリエンプティブル VM と GPU による ML ワークフローのコスト削減. Google Cloud.
- "AWS Batch Batch processing, ML model training, and analysis at any scale" official web↩