ohs#7 学習api

13
ohs#7 学習API 2016/12/19 @task_woof

Upload: -

Post on 23-Jan-2018

326 views

Category:

Engineering


5 download

TRANSCRIPT

Page 1: Ohs#7 学習API

ohs#7 学習API

2016/12/19

@task_woof

Page 2: Ohs#7 学習API

学習API

• REST APIによる学習の実施

• 2タイプのタスクを想定

• 「バッチタスク」: バッチ形式で学習を実施する場合

• 「サービスタスク」: - 対話環境(Jupyter Notebook)で小規模の学習

- 推論サービスのデプロイ

バッチタスク

(ユースケース)

大規模な学習, 複数人環境での学習の実施

サービスタスク

(ユースケース)

実験的な学習や学習結果を用いた推論サービスのデプロイ

タスク 定義

Page 3: Ohs#7 学習API

前回お話したこと

1. 環境がバリエーションが多い

• CUDA, cuDNN, DLフレームワークの組み合わせ分の環境を用意する

→ 様々環境を使ってみたいという要望に対応するため

2. GPUリソースの管理が必要

• ジョブ管理

• リソース管理

CUDA7.5

cuDNN4

Caffe

CUDA8.0

cuDNN4

Caffe

CUDA7.5

cuDNN5

Caffe

CUDA8.0

cuDNN5

Caffe

CUDA7.5

cuDNN4

Chainer

CUDA8.0

cuDNN4

Chainer

CUDA7.5

cuDNN5

Chainer

...

使われなさそうな環境も用意しておく必要がある 排他など多重実行を抑制する

高頻度! 低頻度...

Page 4: Ohs#7 学習API

前回お話したこと

• 分散コンピューティングのための基盤ソフトウェア

• Mesosが提供するFrameworkをアプリ毎に用意することで、分散アプリ毎に

マシンを用意しなくてよくなる

• v1.0.0よりGPUサポート (2016/7/27)

Page 5: Ohs#7 学習API

前回お話したこと

Ref) http://mesos.apache.org/documentation/latest/architecture/

Marathon Chronos

サービスタスク の投入

バッチタスク の投入

• サービスタスクとしてMarathon、バッチタスクとしてChronosを利用する

ことで学習APIを実現

Page 6: Ohs#7 学習API

前回お話したこと

• DLフレームワークとJupyter Notebookを含むDockerイメージを用意

• データ取得機能、ネットワーク定義、学習実行スクリプトは、ユーザの

/homeに置いておく

• Dockerコンテナを起動し、学習実行スクリプトを叩く

Jupyter Notebook

DLフレームワーク

Page 7: Ohs#7 学習API

前回お話したこと

• いくつか課題がありました。

• Marathonはv1.3.0-RC1でGPU対応済み

• Dockerコンテナに対するGPUリソースの割当は未対応

• バッチタスクのFrameworkはChronosの後継が出たりと、まだデファ

クトは現れていない

Page 8: Ohs#7 学習API

Apache Mesos

タスクタイプ

Framework 特徴 ライセンス Docker対応 GPU指定対応

バッチ

Chronos - Cronを設定可能

- Docker対応 Apache License v2 ○ ×

Metronome - Chronosの後継といわれている

Apache License v2 ○ ×

Jenkins - Mesos-Pluginがある

Apache License v2 ○ ×

JobServer - 無料版と商用版がある

GramdLogic × ×

GoDocker - Docker上でバッチ/インタラクティ

ブな実行可能 IRISA ○ △

Cook - Sparkもサポートしているバッチスケジューラ

Apache License v2 △ ○

retz - ノーチラステクノロジーさん製のバッチフレームワーク

Apache License v2 ○ ○

サービス

Apahce

Aurora

- Docker Swarmに統合予定

- Cronも可能 Apache License v2 ○ ○

Marathon

- サービスに特化した

Framework - 開発は活発

Apache License v2 ○ ○

Singularity - 開発は活発

- バッチも可能 Apache License v2 ○ ×

Ref) Apache Mesos Framework Entering Into The Docker World: A Hitch-Hikers Guide To Clustering

• 下記のFrameworkは未評価。実現できるものもあるかも。

Page 9: Ohs#7 学習API

PBS Professional

• PBS Professionalについて

• CAE分野で多くの実績(社内で利用しているエンジニアが多い)

• 今年6月からOSS版がリリースされた

• 実現性の確認

GPUの指定が可能か?

社内で事例あり

Dockerを利用可能か?

フックスクリプトでDockerコンテナの起動およびコンテナにジョブ投入、コンテナの削除を実行

/homeをコンテナにマウント

実行ユーザ権限でDockerコンテナを起動

Masterノード Agentノード

PBS Server

PBS MoM

execjob_launch

execjob_end

1. コンテナを起動

2. ジョブ実行

3. コンテナを削除

REST

API 機能

Page 10: Ohs#7 学習API

PBS Professional

• 通常ジョブはDockerコンテナではなく、計算ノードで実行できること

• qsubコマンドの引数で制御する

Dockerイメージが指定されているか

GPUオプションが指定されているか

GPUオプションが指定されているか

ジョブ

投入

はい

いいえ

GPUを割り当てたDockerコンテナで

ジョブ実行

Dockerコンテナで ジョブ実行

GPUジョブの 実行

通常ジョブの 実行

Page 11: Ohs#7 学習API

PBS Professional

• 現時点の妥協点...

• DockerコンテナへのGPUリソース割当はNvidia-Dockerを利用

• Nvidia-DockerはisolationするGPUの指定が必要

• ngpusではGPUをどのGPUを利用すべきか指針がない

⇒割り当てるGPUを明に指定させる

• ユーザはどのようなGPUがあるかを取得

• どのGPUにジョブを投入するかを指定

$ nvidia-docker run -ti caffe /bin/bash # 全GPUをコンテナに見せる $ NV_GPU=‘0,1’ nvidia-docker run -ti caffe /bin/bash # GPU 0, 1のみDockerコンテナに見せる

PBS MoM

execjob_launch

execjob_end

1-1. コンテナを起動

2. ジョブ実行

3. コンテナを削除

gpu_id: gpu0 1-2. GPUを割当

Page 12: Ohs#7 学習API

PBS Professional

• Dockerコンテナがたまに起動しない

• “Remove In Progress”でDockerコンテナが起動後すぐに落ちる

• 今のところ再現性を確認できていない

• Docker Daemonを再起動する方法以外に回避できていない

Page 13: Ohs#7 学習API

これから

• まずは「ドッグフーディング」として社内リリース

• 改善、要望からサービスを強化していく

• やっぱりgpu数だけで指定したい → cgroup hook (NVIDIA docker使

用せず)

• 学習状況を取得したい → フレームワーク毎に差異があり、統一できるか