More Related Content
Similar to JAWSUG 20210128 (20)
JAWSUG 20210128
- 1. 機械学習×スポットインスタンス
2 0 2 1 . 1 . 2 8 オ ン ラ イ ン 開 催 来 栖 川 電 算 山 口 陽 平
J A W S - U G 名 古 屋 勉 強 会 い ろ い ろ な パ フ ォ ー マ ン ス を 学 ぶ # j a w s u g
- 4. 山口陽平 何でも学び何でもやる人
4
有限会社来栖川電算 創業者・取締役・最高技術責任者
職務 全体 ビジョン・ビジネス・資金・設備・人員・制
度・文化・パートナーシップの計画・遂行
個別 企画,調査,研究,開発,運用,指導,教育,
広報,採用,…
略歴 2001 名古屋工業大学 知能情報システム 卒業
2003 名古屋工業大学 電気情報工学 修士課程 修了
有限会社来栖川電算 設立
IPA 未踏ソフトウェア創造事業 採択
2012 名古屋工業大学 情報工学 博士課程 退学
2013 Mashup Awards 9 優秀賞 受賞
- 5. 仕事 = 趣味 何にでも面白みを見出す人
5
休日も論文読み・プログラミング・コミュニティ活動・講演・執筆
興味 ロボット,AI,UI,UX
専門 機械学習,信号処理,記号処理,プログラミング言
語,コンパイラ,データベース,ソフトウェアアー
キテクチャ,ソフトウェアプロセス
得意 分析,抽象化,高速化,省資源化,並列化,分散化
@melleo1978
- 9. ハイレベルな人材
• 最先端の AI・ML 技術
– 文字認識,物体認識,行動認識,空間復元
• 限界性能を引き出す優れた実装技術
– 機械学習・コンパイラ・データベースなどのアルゴリズムやバ
イナリハックを駆使した高精度化・高速化・省資源化・並列
化・分散化
• 高品質なソフトウェアを実現する技術
– アーキテクチャ・プロセスへの深い理解に基づく設計と計画
9
未踏採択者,コンテスト受賞者,MVP 受賞者,OSS 貢献者,…
- 11. 機械学習 名古屋
• 勉強会 開催:隔月 対象:初心者(非技術者も含む)
– アルゴリズム紹介・事例紹介・ハンズオン
• 研究会 開催:毎月 対象:研究者,技術者
– 機械学習関連の論文紹介・記事紹介
– 来栖川電算の研究者だけでなく日本各地の大学院生も参加
11
https://machine-learning.connpass.com/
宣伝
- 13. Managed Spot Training
• Amazon EC2 スポットインスタンス
– オンデマンドインスタンスの費用に対して最大 90% OFF
– 中断により計算結果が失われるリスクがある
• Amazon SageMaker : Managed Spot Training
– 中断されても再開できるようにすることで、スポットインスタ
ンスを使って訓練しても、中断しても計算結果が失われない
13
機械学習モデルの訓練にかかる費用を最大 90% OFF できる
- 14. やり方は簡単
• チェックポイントを /opt/ml/checkpoints に保存する
– SageMaker が保存されたものを S3 へ自動転送する
• チェックポイントから計算を再開できるようにする
– 典型的な深層学習スクリプトなら普通にやっている
• ジョブ作成時に次を設定する
– train_use_spot_instances = True
– train_max_wait = 訓練完了までに待ってもよい時間
14
典型的な深層学習スクリプトなら実質的に赤だけで OK
- 15. チェックポイントの保存
15
典型的な深層学習フレームワークなら簡単にできる
…
# チェックポイントの保存先 ※ “/opt/ml/checkpoints” になるように起動時の引数を設定すること
checkpoint_path = args.checkpoint_path
checkpoint_names = 'cifar10-'+model_type+'.{epoch:03d}.h5’
…
# チェックポイントを保存するためのコールバック処理
checkpoint_callback = ModelCheckpoint(filepath=f'{checkpoint_path}/{checkpoint_names}',
save_weights_only=False,
monitor='val_loss’)
…
# コールバックの設定
history = model.fit(train_dataset, steps_per_epoch=40000 // batch_size,
validation_data=val_dataset,
validation_steps=10000 // batch_size,
epochs=epochs,
initial_epoch=epoch_number,
callbacks=[checkpoint_callback])
…
https://github.com/shashankprasanna/sagemaker-spot-training/blob/master/code/cifar10-training-sagemaker.py
- 16. チェックポイントからの再開
16
典型的な深層学習フレームワークなら簡単にできる
…
def load_checkpoint_model(checkpoint_path):
# 最新のチェックポイントの検索
files = [f for f in os.listdir(checkpoint_path) if f.endswith(‘.’ + ‘h5’)]
epoch_numbers = [re.search(‘(?<=¥.)(.*[0-9])(?=¥.)’,f).group() for f in files]
max_epoch_number = max(epoch_numbers)
max_epoch_index = epoch_numbers.index(max_epoch_number)
max_epoch_filename = files[max_epoch_index]
...
# 最新のチェックポイントの読み込み
resume_model = load_model(f'{checkpoint_path}/{max_epoch_filename}')
return resume_model, max_epoch_number
…
https://github.com/shashankprasanna/sagemaker-spot-training/blob/master/code/cifar10-training-sagemaker.py
- 17. ジョブ作成
17
SageMaker でジョブ作成時に設定するだけ
…
output_path = f's3://{bucket_name}/jobs'
job_name = f'tensorflow-spot-{time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())}'
tb_config = TensorBoardOutputConfig(output_path)
# Managed Spot Training を有効化したジョブの作成
tf_estimator = TensorFlow(entry_point = 'cifar10-training-sagemaker.py',
source_dir = 'code',
output_path = f'{output_path}/',
code_location = output_path,
checkpoint_s3_uri = f'{output_path}/{job_name}/checkpoints’,
…
train_use_spot_instances = True,
train_max_wait = 7200,
…
tensorboard_output_config= tb_config)
…
https://github.com/shashankprasanna/sagemaker-spot-training/blob/master/tf-keras-cifar10-spot-training.ipynb
- 19. 初心者は g4dn.xlarge でいい
19
単価が安いグループの中では最もコスパ(単価 / TF)が良い
INSTANCE TYPE vCPU RAM GPU TYPE GPU RAM FP32 性能 FP16 性能 期待性能 単価 単価 / TF
p4d.24xlarge 96 1,152 GiB A100 × 8 320 GiB 156.0 TF 2,496.0 TF 1,788.0 TF 32.773 $/h 0.018 $/hTF
g4dn.xlarge 4 16 GiB T4 × 1 16 GiB 8.1 TF 65.0 TF 24.3 TF 0.526 $/h 0.022 $/hTF
g4dn.2xlarge 8 32 GiB T4 × 1 16 GiB 8.1 TF 65.0 TF 24.3 TF 0.752 $/h 0.031 $/hTF
g4dn.4xlarge 16 64 GiB T4 × 1 16 GiB 8.1 TF 65.0 TF 24.3 TF 1.204 $/h 0.050 $/hTF
g4dn.8xlarge 32 128 GiB T4 × 1 16 GiB 8.1 TF 65.0 TF 24.3 TF 2.176 $/h 0.090 $/hTF
g4dn.16xlarge 64 256 GiB T4 × 1 16 GiB 8.1 TF 65.0 TF 24.3 TF 4.352 $/h 0.179 $/hTF
g4dn.12xlarge 48 192 GiB T4 × 4 64 GiB 32.5 TF 260.0 TF 97.2 TF 3.912 $/h 0.040 $/hTF
g4dn.metal 96 384 GiB T4 × 8 128 GiB 65.0 TF 520.0 TF 194.4 TF 7.824 $/h 0.044 $/hTF
p3.2xlarge 8 61 GiB V100 × 1 16 GiB 14.9 TF 119.2 TF 44.7 TF 3.060 $/h 0.068 $/hTF
p3.8xlarge 32 244 GiB V100 × 4 64 GiB 59.6 TF 476.8 TF 178.8 TF 12.240 $/h 0.068 $/hTF
p3.16xlarge 64 488 GiB V100 × 8 128 GiB 119.2 TF 953.5 TF 357.6 TF 24.480 $/h 0.068 $/hTF
p3dn.24xlarge 96 768 GiB V100 × 8 256 GiB 119.2 TF 953.5 TF 715.2 TF 31.212 $/h 0.068 $/hTF
g3s.xlarge 4 31 GiB M60 × 1 8 GiB 4.8 TF 9.7 TF 4.8 TF 0.750 $/h 0.155 $/hTF
g3.4xlarge 16 122 GiB M60 × 1 8 GiB 4.8 TF 9.7 TF 4.8 TF 1.140 $/h 0.236 $/hTF
g3.8xlarge 32 244 GiB M60 × 2 16 GiB 9.7 TF 19.3 TF 9.7 TF 2.280 $/h 0.236 $/hTF
g3.16xlarge 64 488 GiB M60 × 4 32 GiB 19.3 TF 38.7 TF 19.3 TF 4.560 $/h 0.236 $/hTF
p2.xlarge 4 61 GiB K80 × 1 12 GiB 4.4 TF × 4.4 TF 0.900 $/h 0.206 $/hTF
p2.8xlarge 32 488 GiB K80 × 8 96 GiB 34.9 TF × 34.9 TF 7.200 $/h 0.206 $/hTF
p2.16xlarge 64 732 GiB K80 × 16 192 GiB 69.8 TF × 69.8 TF 14.400 $/h 0.206 $/hTF
※SageMaker から EC2 を使う場合は割増料金(+40%)がかかる ※期待性能は登壇者の独断と偏見で決定した
- 22. まとめ
• Managed Spot Training
– 待ち時間を許容できるなら、ほぼ手間をかけずに最大 90% OFF
• お勧めのスポットインスタンス
– g4dn.xlarge が圧倒的にコスパ(単価 / TF)が良い
• SageMaker の EC2 割増料金(+40%)を回避するには
– SageMaker を使わずに自前でスポットインスタンスを起動し、
チェックポイントの保存・復元をやればいい(難しくはない)
⇒もしくは AHAB(来栖川電算製の SageMaker みたいな奴)
22
機械学習とスポットインスタンスは相性がいい
- 27. 研究開発に対するニーズ
• こんな実験が “めっちゃ” たくさんある
– 複数の工程からなる微妙に設定が異なる実験
– デカくて時間がかかる実験
• こんなことが “よく” 起きる
– 手作業が挟まると取り違える。
– 後で確認(やり直し)したくなる。
– たまに死ぬので途中から再開したくなる。
⇒実験パイプラインのコード化が重要
27
たくさんの絡み合うデカい実験の信頼性・再現性を高めたい
- 49. DNN compiler
DNNの推論を 10 ~ 1000 倍も高速化
重みや活性の量子化・スパース化、計算の共有などの
様々な手法で DNN を近似し、高速化・省資源化され
た実行形式(Linux・Android・iOS)へ変換。
49
- 54. 役職 研究者 開発者 デザイナ アノテータ その他 合計
役員・正社員 11.2 % 11.1 % 0.1 % 3.0 % 1.4 % 26.7 %
アルバイト/即戦力枠 5.5 % 4.1 % 1.4 % 15.8 % 0.7 % 27.4 %
アルバイト/育成枠 0.7 % 0.7 % 0.0 % 0.0 % 0.0 % 1.4 %
アルバイト/試用枠 0.0 % 0.7 % 0.0 % 0.0 % 0.0 % 0.7 %
パートナー 0.0 % 4.1 % 0.0 % 39.0 % 0.7 % 43.8 %
合計 17.3 % 20.7 % 1.4 % 57.8 % 2.7 % 100.0 %
柔軟な体制
54
ワンストップ体制を支えるために様々な技術者がバランスよく在籍