EC2 P3で使えるChainerMN入りのDockerイメージを作った

sonots先生によるこの記事をやってみたという話です。

概要

Dockerfileはここにあります。
ベースはNVIDIAさんのオフィシャルイメージです。

実行結果

ChainerMNのexampleを試した結果はこちら。 今のところシングルNodeシングルGPUとシングルNodeマルチGPUしか試してないです。
手順はこちらの通りなんですが時間が取れていない...
P3じゃなくても動くはずですが、ホスト側にGPUとnvidia-dockerは必要です。 今回は社の環境で試したのでsonots便利先生環境の恩恵を受けてます🙏
イチから構築する場合はこういう記事が参考になりそう。

経緯とか

めでたく記事も出たので色々言えるようになったのですが、実はありがたいことにP3の先行検証というのをさせていただいてました。 (なおイベント当日はカメラマンしてました)
この検証時点では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イメージなのでそういう名前にすべきだし(さらに長くなる)。