マルチノードでの分散学習対応への取り組みについて発表しました。本記事では、その発表について詳しく説明していきます。性能は継続的に向上していますが、より大きなデータを活用してより精度の高いモデルを実現するために、深層学習で使われるモデルのパラメータ数や計算量も増大しています。週間以上かかってしまうようなユースケースが少なくありません。連携させ学習を高速化させることは重要な課題です。今回の実装はデータ並列と呼ばれるアプローチを採用しており、その中でも同期型の実装を採用しています。イテレーションのミニバッチを分割し全ワーカーで協力して勾配を計算する、というアプローチです。ような高性能なネットワークの性能を活用できます。いうライブラリを利用しています。画像分類データセットを使って性能を測定しました。実験にはさくらインターネットの高火力コンピューティングを利用しています。詳しい実験の設定については記事末尾の付録をご覧ください。以下の性能測定の結果は、完全に公平とは言えない可能性がある事をご留意下さい。性能測定を行った環境は我々が開発を行った環境でもあるため、測定環境に特に適した実装になっている可能性があります。他のフレームワークに関しても、性能を出すためにある程度の試行錯誤をしたものの、我々は十分な経験を持ち合わせていないため、完全に性能を出し切れているとは限りません。第三者による検証を推奨するため、比較に利用したプログラムは他フレームワークのものも含めて公開予定です。数を増やしたときに学習完了にかかる時間がどのように高速化されるかを表した図です。学習完了とは同じエポック数の学習を行うこととしています。以上ではノードを跨いでいます。倍程度の高速化となりました。系の学習曲線で見られる一般的な現象です。使った場合でもちゃんと精度が上がってきていることが確認できます。用いる同じ設定下で各フレームワークが学習完了に要する時間です。高速という結果になりました。この理由については次の実験と併せて考察していきます。数を変えた時の各フレームワークのスループットを描いています。計測のイテレーション数を少なめにしてしまったのでやや不安定ですが、傾向が見て取れます。記述されているからだと考えられます。自前でノード内の通信を行っている、ということが言えると思います。ほうが良いスケーラビリティを示しています。結果の解釈には注意が必要です。通常の利用では十分高速なフレームワークです。分散実行時と同じ設定で実行しているためです。時ですらこのような速度になってしまっています。して、スループットの向上が常にそのまま学習効率の向上になるわけではない、という点が挙げられます。数を増やすほどバッチサイズが大きくなります。ある程度以上のバッチサイズでは、バッチサイズを大きくするとモデルの学習に悪い影響があり、得られるモデルの精度が段々下がっていきます。同じエポック数の学習を行う場合、イテレーション数が減ってしまうため、モデルが成熟しないことがあります。呼ばれます)に進みやすくなってしまい、結果として得られるモデルの汎化性能が悪くなってしまう、という現象も知られています。いったことを加味せずスループットのみを報告するベンチマーク結果には意味が有りません。バッチサイズを上げたり同期頻度を下げたりすることにより、いくらでもスループットのスケーラビリティは上げることができますが、そういった設定では有用なモデルを学習させることはできません。担当バッチサイズを小さめに抑えることで、それなりの精度のモデルを得る事ができる設定にしています。