AzureとDockerでDeep Learning(CNTK)環境をサク作する
気軽に作って壊せる環境を作る
Deep Learning環境設計のお手伝いをする機会に恵まれまして。インフラおじさんはDeep Learningであれこれする主役ではないのですが、ちょっとは中身を理解しておきたいなと思い、環境作ってます。
試行錯誤するでしょうから、萎えないようにデプロイは自動化します。
方針
- インフラはAzure Resource Manager Templateでデプロイする
- Linux (Ubuntu 14.04) VM, 仮想ネットワーク/ストレージ関連リソース
- CNTKをビルド済みのdockerリポジトリをDocker Hubに置いておく
- Dockerfileの元ネタはここ
- GPUむけもあるけどグッと我慢、今回はCPUで
- Docker Hub上のリポジトリは torumakabe/cntk-cpu
- Dockerfileの元ネタはここ
- ARM TemplateデプロイでVM Extensionを仕込んで、上物のセットアップもやっつける
- docker extensionでdocker engineを導入
- custom script extensionでdockerリポジトリ(torumakabe/cntk-cpu)をpull
- VMにログインしたら即CNTKを使える、幸せ
使い方
Azure CLIでARM Templateデプロイします。WindowsでもMacでもLinuxでもOK。
リソースグループを作ります。
C:\Work> azure group create CNTK -l "Japan West"
ARMテンプレートの準備をします。テンプレートはGithubに置いておきました。
- azuredeploy.json
- 編集不要です
- azuredeploy.parameters.json
- テンプレートに直で書かきたくないパラメータです
- fileUris、commandToExecute以外は、各々で
- fileUris、commandToExecuteもGist読んでdocker pullしているだけなので、お好みで変えてください
- ファイル名がazuredeploy.parameters.“sample”.jsonなので、以降の手順では"sample"を外して読み替えてください
うし、デプロイ。
C:\Work> azure group deployment create CNTK dep01 -f .\azuredeploy.json -e .\azuredeploy.parameters.json
10分くらい待つと、できあがります。VMのパブリックIPを確認し、sshしましょう。
docker engine入ってますかね。
yourname@yournamecntkr0:~$ docker -v
Docker version 1.11.0, build 4dc5990
CNTKビルド済みのdockerイメージ、pullできてますかね。
yourname@yournamecntkr0:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yournamebe/cntk-cpu latest 9abab8a76543 9 hours ago 2.049 GB
問題なし。ではエンジョイ Deep Learning。
yourname@yournamecntkr0:~$ docker run -it torumakabe/cntk-cpu
root@a1234bc5d67d:/cntk#
CNTKの利用例は、Githubにあります。
今後の展開
インフラおじさんは、最近LinuxむけにPreviewがはじまったAzure Batchと、このエントリで使った仕掛けを組み合わせて、大規模並列Deep Learning環境の自動化と使い捨て化を企んでいます。
これだけ簡単に再現性ある環境を作れるなら、常時インフラ起動しておく必要ないですものね。使い捨てでいいです。
もちろんdockerやGPUまわりの性能など別の課題にぶつかりそうですが、人間がどれだけ楽できるかとのトレードオフかと。