PFNの事業戦略とChainer

比戸将平氏(以下、比戸):では、ここからは事業戦略とChainerの話に入っていきたいと思います。今までお見せしたように、我々はディープラーニングの最先端の技術を研究開発して使っているわけですけれども、その分野では、やはりGoogleやFacebookのほうが研究者の数や世の中のブランドでは強いわけです。

ただ、彼らはクラウドベースのコンシューマサービスなどのプロダクトが多いので、我々のフォーカスとしてはインダストリ、それもデバイスに近いほうですね。車はすこしかぶっていますが、産業用機械のようなものをFacebookやGoogleがやるという話はないので、そのあたりでAI技術の産業応用の最先端を走るということでやらせていただいています。

もう1つ、バイオヘルスケアも我々の範疇の1つで、これも1つお見せしたいと思います。

MRIの画像からどこに脳腫瘍があるか正解と予測結果で分けれていて、今、右下に出てくる赤い領域が脳腫瘍の部位なんですが、正解ラベルとモデルの予測結果がかなり当たっています。

これはただ輪切りの画像を別々に扱っていたのではなくて、シーケンスになっている3次元の画像列を使ってうまくモデルの精度を高めてやった結果、この正確な予測モデルができたので、こうした3次元MRIの情報があれば、医師が診てあげる前にあらかじめ機械で絞り込みを行うということができるようになってきます。

これも実は国立がん研究センターと産総研と弊社の共同のプロジェクト「人工知能を用いた統合的ながん医療システムの開発」の中の取り組みの1つです。

その中で重要になってくるのは、単にX線であるとかMRIのような、そのときに検査で取った情報だけではなくて、その人が今までどういう病気をしてきたか、どんな治療を受けてきたか、あるいはどういうゲノム情報を持っているかということを総合的に突き合わせて解析していくことが重要になるだろうと思っています。

マルチモーダル化がもたらすもの

その中でキーワードとなるのが、このマルチモーダル化です。

マルチモーダルというのはデータの種類がいろいろあるという意味ですけれども、こうしたクリニカルシーケンス、ゲノム情報、画像情報、すべてを統合してがん診断あるいは治療につなげていくことが将来重要になると思い、我々はこの領域にディープラーニングの最新の知見を応用していこうとしています。

次が製造業応用です。

こちらはファナックさんとの取り組みが右にありますけれども、こちらはロボショットという射出成形機ですね。

プラスチックの部品などを作るものの中で、逆流防止弁という摩擦によってだんだん削れてそのうち逆流を起こして壊れてしまうという部分があるんですが、そこをモニタリングしているバックフローモニタ時系列というデータがあります。

直接その摩耗を観測することはできないんですが、このバックフローモニタ時系列から摩耗状態を逆推定してあげることによって、壊れる前にAIが逆流防止弁の交換をリコメンドする仕組みを作りました。こちらはすでにファナックさんのところで商用化されて、お客さんのところで動いているものになります。

左側はもう少しわかりやすい例で、外観検査ですね。今回のサミットの展示の中でもおそらく類似するものはいろいろあると思いますが、画像のどこに傷があるかを指定しなくても、「この画像は傷がある画像です」「これは傷がない製品の画像です」という弱い情報を与えてやるだけで、どこに傷があるのかまで含めてちゃんと学習できるようになるというのが我々の特徴です。

いま赤く見えているところが傷の候補地点なんですが、我々はそこを塗ってあげたわけではなく、弱い信号を与えてやっただけでどこに傷があるかがわかるようになったものになります。

線画を人間のように彩色する

ちょっと話が変わって、こちらは弊社の中にエンタメ事業部みたいなところがありまして、そこがやっている事例です。

モノクロの線画を与えてやると、それに対して自動で色塗りするサービスを作っています。「PaintsChainer」という名前で公開しているので、みなさんWebサイトで見ていただければ。

絵を描かれる人であれば、線画をあげるとこうやって自動的に塗ることができるんですが、それに対してさらにヒントを与えることで、ちょっとだけ自分好みの色合いに直していくことができます。

この「かんな」という色塗りのモデルに関していうと、ハイライトや陰影も正確に。正確にというのは人間っぽく塗れているので、遠目から見るともう人間が塗ったのか機械が塗ったのかわからないレベルに達しつつあります。

「じゃあこれをどうするのか?」という話でいうと、白泉社さんという出版社さんと博報堂DYデジタルさんと一緒に、このPaintsChainerと同じ技術を使って自動着色をした漫画の配信もしています。

これは漫画ですが、アニメなど考えていけば、今一生懸命色を塗っているアニメーターさんの負担を減らしながら、良質なコンテンツを作ることができるようになるということで、そのような産業応用も考えつつやっています。

ディープラーニング用ライブラリChainerの特徴

ここまでが我々のやっている応用の話だったんですが、そのすべてで使われているのがこのChainerというディープラーニング用のライブラリです。

特徴をいろいろ書いたんですが、Powerful、Flexible、Intuitiveということで、性能はほかのフレームワークに引けを取らないなかで、柔軟かつ直感的にさまざまな試行錯誤ができます。

その試行錯誤は研究開発において非常に重要ですので、社内でもそこを重視して、いかに研究者の発想をすぐに試すことができるか、プロトタイピングに使えるかということを重視して、最初からデザインされています。

例えば、画像認識モデルを作って学習させたいということを書こうとすると、本質的にはこれぐらいですね。10行に満たないぐらい書いてあげれば学習が回せます。

モデルを定義して、データセットを正解と入力データのペアとのリストとして与えてあげて、それをミニバッチデータセットとして返せるイテレータを定義して、最適化手法を選んであげて、そこにモデルをセットしたら、あとはtrainerという仕組みの中にセットして、GPUの番号を指定してrunとやれば、学習が回ります。

自分でforループを書く必要がないのがChainerの非常に優れた部分かなと思います。簡潔にやりたいことが書けるということですね。

さらに、このChainerの上にさまざまな分野特化型のライブラリを作っています。

CuPyはChainerのバックエンドとして使われているNumPyのようなライブラリです。Pythonに詳しい方はご存じだと思いますが、NumPyのようなコードを書いて、それがGPUで動くというものです。

ChainerMNはあとで出てきますが、分散環境における高速な学習をサポートする追加パッケージです。このChainerRL・ChainerCVは次のページで説明します。

それ以外にも、グラフ構造を持った化合物データでディープラーニングができるChainer Chemistryであるとか、このChainerのモデル学習の実行状況をモニタリングしたりするChainerUIなど、さまざまなChainerファミリーを社内で開発してオープンソースとして公開しています。

最新のアルゴリズムを簡単に導入

ディープラーニングの応用でやっぱり一番多いのがこの画像認識、あるいはAlphaGoなどでも使われた強化学習です。

それをChainerベースでユーザーが簡単に試せるように、この代表的なアルゴリズムやデータセットのラッパーのようなものをセットにしたライブラリということで、ChainerCV、ChainerRLを開発しています。

これを使うと、みなさんでも最新のアルゴリズム、性能が一番良いと知られているアルゴリズムを簡単に使って、ご自分の応用に使えます。ということでぜひ、Chainerの上で自分でアルゴリズム実装する必要はなくて、ここを使えばすぐにでも試すことができます。ということで、ライトユーザー向けのライブラリとして使っています。

さらに弊社の中では、研究開発を加速するためにプライベートのGPUクラスタというものを持っています。P100というNVIDIAのGPUが1,024枚ある環境を構築しまして、そこで日々研究開発をしております。

その中で、ChainerMNという分散学習ライブラリが動いていまして、これを1回1,024GPU使ったらどこまでできるかということで、ImageNetと呼ばれる先ほどの画像認識ベンチマークデータセットの学習をしました。当時は2台使って1週間モデル構築にかかるという世界でしたが、それを15分で達成したのが去年の11月に我々が論文で出したワールドレコードですね。

これは世界でも非常に注目を集めまして、NVIDIA CEOの方がスーパーコンピュータのトップカファレンス「SC」で講演した時にも、GPUを使えばこれだけの性能が出るということで、我々の成果を使っていただきました。

ここまでが前半のまとめということで、ディープラーニングの産業応用が現実にちゃんと進んでいるというお話をさせていただきました。そして、それを取り巻く周辺環境ということで、ソフトウェアとハードウェアの両方の激しい開発競争があります。

ハードウェアの話は今回あまりしていませんが、実際にはGPUを開発しているNVIDIAやそれ以外のチップ、例えばGoogleが開発したディープラーニング専用の「TPU」であるとか、そういったものの激しい開発競争があります。

さらに、それを使いこなせるエンジニアの確保や研究者の育成も重要になっています。そのために、PFNはソフトウェアも開発していますし、ハードウェアも開発していますし、そのソフトウェア・ハードウェアを研究者が自由に使えるような環境のサポートも含めて、エンジニアリングとしてやってきております。

ここにあるのは、ロボットの部屋であったりとか、インターンも含めたケータリングランチ、そのインターンの研究報告会のような図で、我々としてはこういう人とソフトウェアとハードウェアすべてに投資しながらやってきているという状況です。

本当に異種格闘技というか、1つだけで尖るのはやはりなかなか難しく、全部で尖らないとこの世界で、例えばGoogleやFacebookなどと互角にやっていくことは難しいです。

ChainerとAWSは相性が悪いのか?

ここまでの話を聞くと、これまでよく言われていたことなんですが、「でもChainerってAWSで使われていないよね。そんな相性よくないですよね」というのが今までの一般的な印象だったと思いますが、これがもはや誤解に近くなっているということを最後にお話しさせていただきたいと思います。

その誤解の主なものを、4つの文章に書いてみました。

1つは、ChainerMNはInfiniBandという高速なネットワークでつながれているので普通のイーサネット環境だとぜんぜん性能出ないよね、という話からスタートします。あるいは「それを自前で構築するのは難しいよね」とか「AWSに乗っていないよね」とか、そういう話があったかなと思います。

まず、AWSにおけるChainerのサポートとして、これまですでに進んでいたこととしては、Deep Learning AMIというものに最新のメジャー版が乗るようになっているので、みなさんのEC2からAmazon公式のDeep Learning AMIを選択して立ち上げていただけると、すぐにChainerが使えるようになっています。

それはほかのフレームワークたちと同じです。そのチュートリアルみたいなものもしっかりAmazonさんでご用意いただいているという状況になります。

次が「ChainerMNはInfiniBand前提だから、AWSでは性能が出ませんよね」という話だったんですが、それはすでに過去のものになっています。5月25日にChainerMN v1.3にそれを克服する機能が入りました。名前が「Double buffering」といいます。

普通の分散深層学習だと、このForward・Backward計算したあとのこのAll-Reduceというところで全対全の通信を全GPU間でやるんですが、ここの通信が重いんですね。そこがInfiniBandではなくイーサネットだと時間がかかってしまうので、分散させてもそこがボトルネックになってなかなかスケーラビリティが出ないという話でした。

イーサネット環境でも高いスケーラビリティを実現

ですがこのDouble bufferingを使うことで、言ってみれば2種類の学習と通信を並行して走らせることができます。そうすると、通信が返ってくる前に次の学習を始めているので、ある意味1ステップ古い情報を使ってモデル計算をしているので、若干モデルの性能に違いが出てきますが、これによって通信を待たずに次の学習を走らせることができるので、通信の遅延を隠蔽できるという仕組みになっています。

さらにその通信において、これまでは普通の浮動小数点数を使っていたわけですけれども、そこで半精度浮動小数点(FP16)を使うことによって、単純に通信量が半減できます。

この2つを組み合わせることによって、イーサネット環境でもかなり高いスケーラビリティを達成できるようになりました。その実験結果がこちらです。

10Gbのイーサネット、みなさんの環境にももうあると思いますけども、そういう環境において比較したところ、黄色がもともとのInfiniBand環境です。だいたい8〜32GPUでかなり良いスケーラビリティが得られています。

それを10Gbイーサネットでやるとあまりスピードが出ません、というのが緑色です。実際にGPUの数を増やしてもほとんど速度が速くなっていません。縦軸は1秒間に何枚の画像が処理できるかです。32GPUだとほとんど8GPUと変わらないような枚数が処理できていませんでした。

それが、水色のほうですね、Double bufferingとFP16 Allreduceを使うことによってほぼほぼInfiniBandと変わらない速度で処理ができるようになってきました。

モデル精度に関してはこの時点では若干下がってしまっているんですけれども、我々の実験では、学習を繰り返していくことでモデル精度がほぼ同じところに落ち着いていくという結果が得られていますので、もっと学習に時間をかけていいのであれば、この精度の違いはだんだん消えていきます。

これを実際にAWSのP3インスタンスで使ったところ、25GbpsイーサネットがAWSで一番速いものですけれども、その32GPU環境でなんと95パーセントの分散性能を達成しました。

要は32GPUを使うとだいたい30倍速ぐらいになるということですね。これは非常に良い。おそらくほかのフレームワークでは達成できない、AWS上における最高分散性能だと我々は考えております。

ChainerMN用GPUクラスタをAWS上で簡単に構築

2つ目です。でも、ChainerMN用のGPUクラスタは面倒くさくて、P3インスタンスを複数立ち上げて、その間のMPI通信を設定して、なんてやってられないよという話があると思うんですが、これを、みなさんのためにCloudformation Templateとして我々が作ったものを公開しました。

実際に我々のGitHubのリポジトリにchainer-cfnというものが生えましたので、そこを見ていただければ、CloudFormationを使ったことがある方であれば、すぐにでもChainerMNクラスタをAWS上に構築できます。

一応CloudFormationに詳しくない方のために説明させていただきますと、このCloudformation Templateの中にはChainerMN入りAMIのリンクとそのクラスタの構成であるとか、その間のMPIの通信などがすべて定義されています。

これを読み込んでもらってStackの作成ボタンぽちっと押すと、AWSが中で全部見てくれて、プロビジョニングとStackとリソースの設定をして、すぐにでもChainerMNの32GPUでも16GPUでも使える環境を用意してくれるというかたちになります。ぜひ試してみていただければと思います。

これが今朝のキーノートの中で触れられていた話で、これまではAmazon SageMakerというマネージド機械学習サービスあったんですけど、その中にChainer入っていませんでした。なので、今日からそれが使えるようになった。

しかも、東京リージョンで使えます。もし東京リージョンでいろんなシステムを組まれている方であれば、東京リージョンの中で、深層学習を含むデータ解析のパイプラインがすべて完結することになります。

これを使うと、GPUインスタンスを指定して、Notebookを立ち上げて、すぐにChainerが使えます。さらに、このsagemaker-chainer-containerの中でChainerMNのサポートがすでに入っている、MPIも全部その中に定義されているので、ChainerMNを使ったSageMakerの学習もここでできるようになっています。

Amazon SageMakerでChainerが使えるように

詳細に説明させていただくと、まずNotebook上でこのsagemaker.chainer.estimatorというものをimportしまして。このestimatorがそれぞれの鍵になっているんですが、それを学習スクリプトであるとか、IAMのroleであるとか、インスタンスの種類/数、あと学習側のパラメータ等をセットしたインスタンスとして立ち上げて、fit()という機械学習系で普通に使われる関数を呼ぶことで学習Jobがここから実行されるようになります。

これが実際にサンプルから持ってきた画像ですね。SageMakerの中にChainerサポートが入っています。

それを使うとこのような学習曲線みたいなものが結果として実現されて、だんだん精度が上がっています。ロスが下がっていってるということがそのNotebook上に表示されます。

その学習Jobが完了したら、今度は学習済みモデルを予測に利用しましょうという話になります。ここがSageMakerの良いところで、学習用のインスタンスと予測用のインスタンスを分けて作れるんですね。それは実際にはdeploy()という関数がありまして、こちらで学習済みのモデルを使ったインスタンスを立ち上げると。

そのときにはCPUインスタンスでもいいということになります。ChainerもCPUでもちろん走りますし、学習じゃなくて予測であればCPUでまかなえる場合も多いので、そうするとコストを下げながら予測だけを行えます。しかもそのインスタンスの数もコントロールできるので、そのあたりもすべてこのSageMakerのNotebookの上から制御可能ですね。これは実際predictorというものを関数で作っている部分になります。

最後に、そのpredictを実際に予測タスクを実行しましょうということで、predict()という関数を呼ぶと、最初に読み込んだ学習スクリプトのentry_pointの中のpredict_fnというものが実行されて、その中で定義されたモデルが出力されます。

その出力を受け取って、例えば精度評価をしたりとか、ここだとChainerCVというさっき出てきたものの可視化機能ですけれども、入力した画像とその入力した画像に対する検出結果のbounding box、四角を表示するなどのことがこのSageMakerのNotebookの上ですべて完了するということで、かなり使いやすいものになっていると思いますので、ぜひお試しいただければと思います。

Chainerモデルで学習したものを推論で使用可能に

最後の発表になります。4番目ですね。Chainerモデルを学習してもAWSのエッジで予測には使えないという話があるかもしれませんが、みなさんご存じAWS Greengrassに、実はChainerプリコンパイル済みライブラリが追加されました。

実際に探していただくと、このIntel Apollo Lake、あるいはNVIDIA Jetson TX2、Raspberry Piのプラットフォームに対応したものがダウンロード可能になっています。

このIntel Apollo Lakeというものは、AWSのDeepLensですね、カメラ使ったクラウドベースのソリューションのデバイスでも使えることになっていますので、ここでもChainerがAWSのエコシステムの中で使えるようになったということで、我々としても非常に光栄に思っております。

最後に、弊社では、ディープラーニングを用いた応用は広がっていてその実用化が進んでいる中で産業応用に今フォーカスしまして、世界的なパートナーと組むことでディープラーニング応用を商用化に向けて研究開発しているんですが、その中で生まれてきたこのChainer、あるいはChainerの上のライブラリをみなさんにも広く使っていただきたいと思っています。

そのために、今回AWSさんと協力して、イーサネット環境向けの高速化や、CloudFormation、SageMaker、Greengrassの対応をしてまいりました。

これからもクラウドユーザーの方々向けの研究開発をChainerチームとしてやろうと思っていますので、ぜひみなさんもお付き合いいただければと思います。

本日の発表を終わらせていただきます。ご清聴ありがとうございました。

(会場拍手)