EC2 P3で使えるChainerMN入りのDockerイメージを作った
sonots 先生によるこの記事をやってみたという話です。
docker (nvidia-docker) を使ってマルチノードで ChainerMN を実行する方法(仮) - Qiita
概要
Dockerfile はここにあります。
mazgi/docker-cuda-cv: based on: https://gitlab.com/nvidia/cuda
ベースは NVIDIA さんのオフィシャルイメージです。
https://hub.docker.com/r/nvidia/cuda/
実行結果
ChainerMN の example を試した結果はこちら。
今のところシングル Node シングル GPU とシングル Node マルチ GPU しか試してないです。
手順はこちらの通りなんですが時間が取れていない…
docker (nvidia-docker) を使ってマルチノードで ChainerMN を実行する方法(仮) - Qiita
P3 じゃなくても動くはずですが、ホスト側に GPU と nvidia-docker は必要です。
今回は社の環境で試したので sonots 便利先生環境の恩恵を受けてます 🙏
DeNA TechCon 2017 と Developers Summit 2017 で DeNA の機械学習基盤と分析基盤の講演をしました - sonots:blog
イチから構築する場合はこういう記事が参考になりそう。
p3 インスタンス(V100)上で CUDA+CUDNN+Tensorflow を動かすのが大変だったのできろく。 - 焼肉が食べたい
経緯とか
めでたく記事も出たので色々言えるようになったのですが、実はありがたいことに P3 の先行検証というのをさせていただいてました。
(なおイベント当日はカメラマンしてました)
Amazon EC2 P3 インスタンスにおける Pose Estimation 速度向上検証 - Technology of DeNA
この検証時点では ChainerMN ではなく Chainer で、環境も VM 上に直接作ってたのですが、その後部内から「Docker イメージになってたほうが便利」とフィードバックいただき先行者の記事を参考に手探りしてる状況です。
私は ML わからないマンなのですが、最初 cuDNN 7 + CuPy 1.0.3 で環境作ろうとしてバージョンが合わなくてどうしよ!と思ってたら「今日 cuDNN 7 対応の CuPy 2.0 リリースするよ!」と教えていただいたりとか、この業界本当に数時間単位で進歩しててすごい。
こういう用途だとコンテナほんと便利なんですけど、でも Docker イメージの命名むずかしい。
mazgi/cuda-cv:9.0-cudnn7-devel-ubuntu16.04
じゃなくて、
mazgi/cuda-cv-9.0-cudnn7-devel-ubuntu16.04:latest
とかにしたほうがいいのかな(長い)。
そもそもの話としては実質 Chainer & ChainerMN イメージなのでそういう名前にすべきだし(さらに長くなる)。