たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

Preemptible/Spotインスタンスで数日かかる機械学習Jobを走らせる

安いクラウドサービスを使って楽々機械学習!

まとめ

機械学習ジョブを停止有り格安インスタンスで回せるやつを使う。

@2020-11-17

service scheduling auto-scaling auto-retry preemptible e.g.
AWS Batch
AWS SageMaker
GCP AI Platform
kubeflow on GCP link

サービス概要まとめ

  • AWS
    • AWS Batch 1: Job実行サービス。追加料金無し(AWS Batch向け特別料金無し)

コンテナベースの学習を準備

  • データ
  • paramsの渡し方
  • checkpoints/resume

AWS-Batch GPU

タイプ GPU GPU メモリ vCPU メモリ 帯域
g4dn.xlarge 1 16 GiB 4 16 GiB 最大 25 Gbps

AWS-Batch環境@2020-12-30

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


  1. "AWS Batch Batch processing, ML model training, and analysis at any scale" official web