Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,764 views

Published on

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

Published in: Engineering
  • Be the first to comment

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

  1. 1. Dockerを徹底活用したSoftLayer環境に おけるディープラーニング開発環境の構 築 T O M O Y A K I T A Y A M A Head of Japan R&D http://alpaca.ai info@alpacadb.com
  2. 2. • 本日話すこと • AlpacaのDockerとMakeを用いた開発環境 • Dockerを徹底活用してSoftLayerのGPUベアメタルサーバに最高のデ ィープラーニング開発環境を構築 • Dockerをプロダクション環境に投入する話 Agenda 2
  3. 3. • キャピタリコ(URL: https://www.capitalico.com/)というAIがトレーダー のアイデアをそのまま投資アルゴリズムにできるモバイルアプリを開 発しています。 • 明日リリース!を目標に絶賛作業中です。 Alpaca/キャピタリコについて 3
  4. 4. Input LSTM LSTM LSTM LSTM Fully Connected Output Fully Connected Input LSTM LSTM LSTM LSTM Fully Connected Output Fully Connected Input LSTM LSTM LSTM LSTM Fully Connected Output Fully Connected Time EXPERIMENTS DEEP LEARNING BASED APPROACH 4 • キャピタリコは個人の投資アイ デア(認識したい値動きの時系列 データ)を投資アルゴリズムにし ます。 • これは具体的には、Deep Learningによって金融時系列デ ータの認識機を作成しています 。 • よって、システム開発時にもモ デル構築、動作時にもGPUが必 要 • エンジニア全員にどのように GPU開発環境を安価にスケール する形で提供するかが経営課題
  5. 5. • Alpacaでは原則枯れた技術を徹底的に使い倒す方針。 • Dockerは完全に枯れてるとは言えないが、最新版は十分に安定しており 、Alpacaにとってはあまりにも有用なので採用せざるを得ない。 • なぜDockerなのか? • 科学計算なPythonとGPU周りでは、(コミュニティが頑張っていますが )まだまだ開発環境のメンテナンスが難しいしスムーズさに掛ける • 開発環境による、動いた・動いていない。テストが通った、通らない、 挙動が違うはスタートアップのスピード感において死活問題。 • Dockerfileで実行環境を一意に設定できることが圧倒的なメリット • しかし他の箇所ではブラックボックスなツールや枯れていないシステムを 採用できない • だから誰でも知っているMakeとDockerで開発環境を作る! なぜDockerなのか? 5
  6. 6. • Makeがなぜ必要なのか • コマンドのディレクトリに対する再帰的な実行 • 共通設定ファイルの管理: Makefile.common • ディレクトリ構成 • dockerfilesというディレクトリにそれぞれの Dockerfileとそれを制御するMakefileを設置 • トップディレクトリで特定コマンドを打つと Makeによりdockerfiles内のディレクトリに再帰 的にMakeファイルのコマンドが実行されシス テム全体の挙動が変更される • Docker Composer/Swarmでは実現できない、単 純ゆえに圧倒的な柔軟性 なぜMakeがDockerと一緒に必要なのか? 6
  7. 7. 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/loa ddb/migrate DBのリセット、初期化、ダンプ、ロード、DBのスキーマを最新状態にアップグ レード make fake_run 時系列データの加速度試験用の設定で全コンテナをrunする make build/pull/push docker build/pull/pushに割り当てられており、dockerhubと連携
  8. 8. CircleCIと開発フロー 8 GitHub CircleCI Push $ make pull $ make run $ make unitest Docker Hub SoftLayer deploy git pull docker push docker pull
  9. 9. • 本日話すこと • AlpacaのDockerとMakeを用いた開発環境 • Dockerを徹底活用してSoftLayerのGPUベアメタルサーバに最高のデ ィープラーニング開発環境を構築 • Dockerをプロダクション環境に投入する話 Agenda 10
  10. 10. • 2015/08まではAWSのg2.2xlargeを用いて各人がスポットインスタンスを用 いて開発。スポットインスタンスはインスタンスの需要が逼迫した時に AWSからKillされてもよいかわりに格安で利用する仕組み。 • しかし、世界的に発生したディープラーニングブームによるg2インスタンス のスポットインスタンスの高騰。時間7ドル!朝起きるとスポットインスタ ンスが死んでる。 • このままだとサーバ代金で破産するので、早速代替手段の検討を開始! History 1 11
  11. 11. • 2015/09 SoftLayerのソリューションを知る • GPU Tesla K80を2台追加したGPUサー バを月額契約で利用可能! • 他に話していた事業者様だとGPUサーバ は先方のハードウェアの減価償却のため の年間契約になっていた。 • 進歩の激しいGPU業界で年間契約はきつ い。1年後に5倍の性能のGPUとかが平気 ででる • 高機能・高速なGPUサーバ一台を全員で 徹底活用しよう! History 2 12
  12. 12. • もし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
  13. 13. • AlpacaではDockerを開発にも実運用にも徹底活用しているので、一台の サーバに全員がログインしてDockerをそれぞれ走らせるノウハウが必要 。調査したところ、以下の課題を解決する必要がある。 • 異なるユーザーが同一の名前を持つコンテナが同じサーバ上でrunし ても問題ないようにする。 • 他のユーザーのコンテナ同士でネットワークのポートがバッティング しても問題ないようにする • つまり、他のユーザーのコンテナ・ネットワークを全く気にせず1ホス ト上で複数のDocker環境を構築できればよい。 Problems 14
  14. 14. Docker In Docker 15 • 最初はDocker Deamonを複数サーバにRunして3ヶ月ほど運用し、実際 かなり上手くワークしていました。 • しかし、Multio Docker Deamonは、現在オフィシャルサポートされてお らず、今後Dockerに追加される様々な機能が単一のDocker Deamonが ホスト上で動作していることを前提として設計された場合、その恩恵を 受けることができない可能性がありました。 • そこで、公式に古くからサポートが宣言されているDocker-in-Dockerの ソリューションを改めて設計することにしました。
  15. 15. • 基本的な考え方 • docker daemonをコンテナ内で走 らせる • DOCKER_HOSTを指定すること で任意のdocker daemonを使用す る • 具体的には右の設定で各ユーザー 用のdockerデーモンをDockerコン テナとしてdocker runする。 • dockerコンテナにIPを割り当てて外 から通信できるようにするために は pipework(https://github.com/jpetazz o/pipework) の仕組みを利用する • Box内のプライベートネットワー ク構成を同一にする docker-in-dockerの基本コンセプト 16 # launch a docker daemon docker 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 ← パフォーマンスのためにとても大切
  16. 16. • このコンテナ上で自由に起動・停止できる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
  17. 17. まとめ 18 • Docker in Dockerは非常に上手く動作。Boxスクリプトで気軽に他人のこ とを気にせずにDockerデーモンを操作できる。 • これで、各エンジニアがそれぞれ他のユーザーのことを何も気にせずデ ィープラーニングの開発を単一サーバでできる最高の開発環境ができた 。 • 現在、make pull/make run/make resetdbで5分で新規エンジニアの開発環 境が整う。GPUが足りなくなっても、サーバに増設するだけ! • 月額およそ$5500の削減はスタートアップには非常に大きい
  18. 18. • 本日話すこと • AlpacaのDockerとMakeを用いた開発環境 • Dockerを徹底活用してSoftLayerのGPUベアメタルサーバに最高のデ ィープラーニング開発環境を構築 • Dockerをプロダクション環境に投入する話 Agenda 19
  19. 19. その後 20 • さて、ここまでは開発環境の話ですが、、、、Alpacaでは、ここまでで 培ったDocker in DockerのBoxをプロダクションに投入。分散システムの 永遠の課題である複数ノードによる冗長性の問題に挑戦。 • Boxをそもそも一つの物理的なノードと同等と定義して、そのBox同士が クラスタリングを組めば、単一サーバにもかかわらず複数ノードの開発 ・テストが可能になる。 • 現在、実際にシステムを稼働中!
  20. 20. Boxクラスタリング 21 • 考え方としては、以下のようにBoxでクラスタリングを組めば、単一サーバ で気軽に分散システムの開発・テストが可能。それをそのまま本番環境に 。
  21. 21. Conclusion 22 • Boxクラスタリングの何が嬉しいのか • これまでの分散システムの永遠の課題であった、分散ノードの開発環 境のデバッグ、整備がDockerデーモンを複数個立てることと同等とな る。開発・テスト工数の圧倒的な削減。 • これにより、ローカルテストと分散ノードの等価性がかなり保証され るので、makeコマンドでDockerデーモンを操作することで、分散ノ ードの追加・障害テスト・分散効率のチェックがすべてmake x Dockerのローカルなコマンドで実行可能となる。 • 最高の開発環境が、そのまま最高の運用環境へ!
  22. 22. Recruiting 23 • Alpacaでは「金融 × Deep Learningに挑戦したいエンジニア・サイエン ティスト・デザイナー募集中!」です。特に丸の内オフィスでは、以下 のメンバーを募集しています。WantedlyでAlpacaを検索! • Dockerを徹底活用したいDevOps • 機械学習エンジニア • デザイナー • Deep Learningを用いてリアルな問題解決にチャレンジしたい学生イ ンターン
  23. 23. Empowering Professionals with AI Technology

×