23
Docker ををををををを SoftLayer をををををををを をををををををををををををを TOMOYA KITAYAMA Head of Japan R&D http://alpaca.ai [email protected]

Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

Embed Size (px)

Citation preview

Page 1: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

Dockerを徹底活用した SoftLayer環境におけるディープラーニング開発環境の構築

T O M O YA K I TAYA M AHead of Japan R&D

http://alpaca.ai [email protected]

Page 2: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

• 本日話すこと• Alpacaの DockerとMakeを用いた開発環境• Dockerを徹底活用して SoftLayerの GPUベアメタルサーバに最高のディープラーニング開発環境を構築• Dockerをプロダクション環境に投入する話

Agenda 2

Page 3: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

• キャピタリコ (URL: https://www.capitalico.com/)という AIがトレーダーのアイデアをそのまま投資アルゴリズムにできるモバイルアプリを開発しています。• 明日リリース!を目標に絶賛作業中です。

Alpaca/ キャピタリコについて 3

Page 4: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

Input

LSTMLSTMLSTMLSTM

Fully Connected

Output

Fully Connected

Input

LSTMLSTMLSTMLSTM

Fully Connected

Output

Fully Connected

Input

LSTMLSTMLSTMLSTM

Fully Connected

Output

Fully Connected

Time

EXPERIMENTS DEEP LEARNING BASED APPROACH 4

• キャピタリコは個人の投資アイデア (認識したい値動きの時系列データ )を投資アルゴリズムにします。• これは具体的には、 Deep

Learningによって金融時系列データの認識機を作成しています。• よって、システム開発時にもモデル構築、動作時にも GPUが必要• エンジニア全員にどのように

GPU開発環境を安価にスケールする形で提供するかが経営課題

Page 5: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

• Alpacaでは原則枯れた技術を徹底的に使い倒す方針。• Dockerは完全に枯れてるとは言えないが、最新版は十分に安定しており、 Alpacaにとってはあまりにも有用なので採用せざるを得ない。

• なぜ Dockerなのか?• 科学計算な Pythonと GPU周りでは、(コミュニティが頑張っていますが)まだまだ開発環境のメンテナンスが難しいしスムーズさに掛ける• 開発環境による、動いた・動いていない。テストが通った、通らない、挙動が違うはスタートアップのスピード感において死活問題。• Dockerfileで実行環境を一意に設定できることが圧倒的なメリット

• しかし他の箇所ではブラックボックスなツールや枯れていないシステムを採用できない• だから誰でも知っているMakeと Dockerで開発環境を作る!

なぜ Docker なのか? 5

Page 6: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

• Makeがなぜ必要なのか• コマンドのディレクトリに対する再帰的な実行• 共通設定ファイルの管理 : Makefile.common

• ディレクトリ構成• dockerfilesというディレクトリにそれぞれの

Dockerfileとそれを制御するMakefileを設置• トップディレクトリで特定コマンドを打つと

Makeにより dockerfiles内のディレクトリに再帰的にMakeファイルのコマンドが実行されシステム全体の挙動が変更される• Docker Composer/Swarmでは実現できない、単純ゆえに圧倒的な柔軟性

なぜ Make が Docker と一緒に必要なのか? 6

Page 7: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

Make コマンド 7

make run システムの全コンテナを runする。 DB/Redis/nginxなどの各システムもこれで起動する

make rm システムの全コンテナを rm/killする。

make unittestテスト用のコンフィギュレーションでコンテナが runされ、 unittestを実施する。 DBのテスト用の設定で runされるなど、 Mockしなくてもそのままテスト可能。

make uitest テスト用コンフィギュレーションでコンテナが runされ、 uitestを実施する。make

resetdb/initdb/dumpdb/loaddb/migrate

DBのリセット、初期化、ダンプ、ロード、 DBのスキーマを最新状態にアップグレード

make fake_run 時系列データの加速度試験用の設定で全コンテナを runするmake build/pull/push docker build/pull/pushに割り当てられており、 dockerhubと連携

Page 8: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

CircleCI と開発フロー 8

GitHub CircleCI

Push

$ make pull$ make run$ make unitest

Docker Hub

SoftLayerdeploygit pull

docker push

docker pull

Page 9: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

• 本日話すこと• Alpacaの DockerとMakeを用いた開発環境• Dockerを徹底活用して SoftLayerの GPUベアメタルサーバに最高のディープラーニング開発環境を構築• Dockerをプロダクション環境に投入する話

Agenda 10

Page 10: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

• 2015/08までは AWSの g2.2xlargeを用いて各人がスポットインスタンスを用いて開発。スポットインスタンスはインスタンスの需要が逼迫した時にAWSから Killされてもよいかわりに格安で利用する仕組み。

• しかし、世界的に発生したディープラーニングブームによる g2インスタンスのスポットインスタンスの高騰。時間 7ドル!朝起きるとスポットインスタンスが死んでる。• このままだとサーバ代金で破産するので、早速代替手段の検討を開始!

History 1 11

Page 11: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

• 2015/09 SoftLayerのソリューションを知る• GPU Tesla K80を 2 台追加した GPUサーバを月額契約で利用可能!• 他に話していた事業者様だと GPUサーバは先方のハードウェアの減価償却のための年間契約になっていた。• 進歩の激しい GPU業界で年間契約はきつい。 1 年後に 5 倍の性能の GPUとかが平気ででる• 高機能・高速な GPUサーバ一台を全員で徹底活用しよう!

History 2 12

Page 12: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

• もし AWS g2.2xlargeを利用し続けたら• 月額だいたい $1000 x 7• GPU GRID K520 4GB Memory(およそ 4GBが一つのタスクに必要なので、同時に一つしか DLのタスクができない )

• SoftLayerに切り替えることで• 7人で K80を利用して $1350(およそ $5500の削減 )• GPU K80 24GB Memory( 同時に 6個の DLタスクを実行可能 )• さらにもしエンジニア数が増えても追加の $500で GPU K80を同一サーバに最大 4つまで追加可能!ベンチャーにとってクイックにスケールする開発環境は超重要。これはやるしかない!

圧倒的な経済効果 13

Page 13: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

• Alpacaでは Dockerを開発にも実運用にも徹底活用しているので、一台のサーバに全員がログインして Dockerをそれぞれ走らせるノウハウが必要。調査したところ、以下の課題を解決する必要がある。• 異なるユーザーが同一の名前を持つコンテナが同じサーバ上で runしても問題ないようにする。• 他のユーザーのコンテナ同士でネットワークのポートがバッティングしても問題ないようにする

• つまり、他のユーザーのコンテナ・ネットワークを全く気にせず 1 ホスト上で複数の Docker環境を構築できればよい。

Problems 14

Page 14: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

Docker In Docker 15

• 最初は Docker Deamonを複数サーバに Runして 3 ヶ月ほど運用し、実際かなり上手くワークしていました。• しかし、Multio Docker Deamonは、現在オフィシャルサポートされておらず、今後 Dockerに追加される様々な機能が単一の Docker

Deamonがホスト上で動作していることを前提として設計された場合、その恩恵を受けることができない可能性がありました。• そこで、公式に古くからサポートが宣言されている Docker-in-Dockerのソリューションを改めて設計することにしました。

Page 15: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

• 基本的な考え方• docker daemonをコンテナ内で走らせる• DOCKER_HOSTを指定することで任意の docker daemonを使用する

• 具体的には右の設定で各ユーザー用の dockerデーモンを Dockerコンテナとして docker runする。• dockerコンテナに IPを割り当てて外から通信できるようにするためには pipework(

https://github.com/jpetazzo/pipework) の仕組みを利用する• Box内のプライベートネットワーク構成を同一にする

docker-in-docker の基本コンセプト 16

# launch a docker daemondocker run \ -v ${{DOCKER_ROOT}}/sock:/sock \ -v ${{DOCKER_ROOT}}/lib/docker:/var/lib/docker \ -v /usr/local/cuda-7.5:/usr/local/cuda-7.5 \ ← cuda も使えるように! {workdirs} \ ← 作業用ボリュームをマップ --privileged \ --pid=host \ --name {name} \ -d \ {ports} \ ← ポートマッピング docker:1.10-dind docker daemon \ ← 既にイメージが用意されている ¦ -H unix:///sock/docker.sock \ ¦ -s aufs  ← パフォーマンスのためにとても大切

Page 16: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

• このコンテナ上で自由に起動・停止できる Docker 上の Dockerを Boxと命名して、 Boxの追加削除を管理する自社製スクリプト box.pyを作成• pyenvや perlbrewの docker版のようなものと考えていただければ OK• DOCKER_HOSTの環境変数の切り替えをやってくれる。

• コマンド• 作成: box.py create <boxname>• 削除: box.py delete <boxname>• 列挙: box.py list

• dockerの選択• 起動: /var/multi/<boxname>/up• 終了: /var/multi/<boxname>/down• アタッチ: source /var/multi/<boxname>/activate • デタッチ: source /var/multi/<boxname>/deactivate

• ユーザーごとに .bashrcで activateを sourceしておけばログインするだけで自分用の boxが使える

Box スクリプト 17

Page 17: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

まとめ 18

• Docker in Dockerは非常に上手く動作。 Boxスクリプトで気軽に他人のことを気にせずに Dockerデーモンを操作できる。• これで、各エンジニアがそれぞれ他のユーザーのことを何も気にせずディープラーニングの開発を単一サーバでできる最高の開発環境ができた。• 現在、make pull/make run/make resetdbで 5分で新規エンジニアの開発環境が整う。 GPUが足りなくなっても、サーバに増設するだけ!• 月額およそ $5500の削減はスタートアップには非常に大きい

Page 18: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

• 本日話すこと• Alpacaの DockerとMakeを用いた開発環境• Dockerを徹底活用して SoftLayerの GPUベアメタルサーバに最高のディープラーニング開発環境を構築• Dockerをプロダクション環境に投入する話

Agenda 19

Page 19: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

その後 20

• さて、ここまでは開発環境の話ですが、、、、 Alpacaでは、ここまでで培った Docker in Dockerの Boxをプロダクションに投入。分散システムの永遠の課題である複数ノードによる冗長性の問題に挑戦。• Boxをそもそも一つの物理的なノードと同等と定義して、その Box 同士がクラスタリングを組めば、単一サーバにもかかわらず複数ノードの開発・テストが可能になる。

• 現在、実際にシステムを稼働中!

Page 20: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

Box クラスタリング 21

• 考え方としては、以下のように Boxでクラスタリングを組めば、単一サーバで気軽に分散システムの開発・テストが可能。それをそのまま本番環境に。

Page 21: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

Conclusion 22

• Boxクラスタリングの何が嬉しいのか• これまでの分散システムの永遠の課題であった、分散ノードの開発環境のデバッグ、整備が Dockerデーモンを複数個立てることと同等となる。開発・テスト工数の圧倒的な削減。• これにより、ローカルテストと分散ノードの等価性がかなり保証されるので、makeコマンドで Dockerデーモンを操作することで、分散ノードの追加・障害テスト・分散効率のチェックがすべてmake x

Dockerのローカルなコマンドで実行可能となる。• 最高の開発環境が、そのまま最高の運用環境へ!

Page 22: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

Recruiting 23

• Alpacaでは「金融 × Deep Learningに挑戦したいエンジニア・サイエンティスト・デザイナー募集中!」です。特に丸の内オフィスでは、以下のメンバーを募集しています。Wantedlyで Alpacaを検索!• Dockerを徹底活用したい DevOps• 機械学習エンジニア• デザイナー• Deep Learningを用いてリアルな問題解決にチャレンジしたい学生インターン

Page 23: Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料

Empowering Professionals with AI Technology