
拓海先生、最近部下から「モデル訓練に時間がかかるから分散化しよう」と言われているのですが、正直クラウドも含めて何から手を付けていいかわかりません。要点を教えていただけますか。

素晴らしい着眼点ですね!大丈夫、一緒に整理すれば必ずできますよ。今日はKerasという使いやすいライブラリを、MPIという古くからある仕組みで分散化するフレームワークの話を、経営視点で要点3つに絞って説明しますね。

まずROIの観点で知りたいのですが、分散訓練って要するに訓練時間を短くするだけの話ですか。それとも精度も上がるのですか。

素晴らしい着眼点ですね!端的に言うと、今回のフレームワークは主に訓練時間の短縮を狙ったものです。しかし短縮できれば実験回数が増え、ハイパーパラメータ探索が早く回せるため結果的に良いモデルをより早く手にできます。要点は1)導入の簡便さ、2)既存資源の活用、3)スケールアップの現実性、の3つですよ。

既存資源の活用というのはうちの社内サーバーでも使えるということでしょうか。クラウドにデータを上げるのが怖いんです。

素晴らしい着眼点ですね!このフレームワークはMPI(Message Passing Interface)という、昔からスーパーコンピュータで使われてきた通信規約に基づいています。つまりクラウド任せにせず、自前のマシン群や学内クラスター、あるいはスーパーコンピュータのジョブ投入環境でも動くんですよ。要するに選択肢が増えるのです。

通信規約という言葉が出ましたが、現場で同期や非同期の管理が難しそうです。実務的にはどういう仕組みで速度を出すのですか。

素晴らしい着眼点ですね!技術的には、mpi_learnという軽量フレームワークはデータ並列(data parallelism)で設計されています。複数のワーカーがそれぞれミニバッチを処理して勾配を集約し、モデルを更新する方法です。実装はKerasをそのまま使い、バックエンドにTensorFlowやTheanoを選べるので既存コードの改変は小さくできますよ。

なるほど、既存のKerasコードが活かせるのは魅力的です。ただ現場のGPU台数は限られており、スケールしたとき本当に線形に速くなるのか心配です。実験結果はどうでしたか。

素晴らしい着眼点ですね!論文では単一サーバーでのマルチGPU環境から、60GPU規模のスーパーコンピュータまで評価しており、ある条件下ではワーカー数に対し概ね線形のスピードアップを示しています。ただしバッチサイズや通信オーバーヘッドに依存するため、万能ではありません。実務では小さなバッチでワーカーを増やすと効率が落ちる点に注意が必要です。

これって要するに、うちのようにGPUがせいぜい数台の中小企業でも効果が見込めるが、運用のコツがあるということですか。

素晴らしい着眼点ですね!まさにその理解で合っています。要点を改めて3つ。1) 既存のKerasコードが使えるため導入コストが低い、2) MPIでローカルクラスターやスパコンへ直に接続できるためデータ管理の選択肢が広い、3) バッチサイズとワーカー数の調整が性能の鍵である、です。大丈夫、一緒にチューニングすれば運用可能です。

わかりました。要するに、Kerasのコードを大きく変えずに、MPIを使って訓練を複数のマシンに分散できる。それで訓練時間が短縮できれば、実験の回転が上がってより良いモデルに早くたどり着ける、ということですね。これなら現場でも検討できます。


