
拓海先生、お久しぶりです。最近、部下が『GPUを替えればAIが速くなる』と言うのですが、本当に単純にハードを増強すれば済む話なのでしょうか。投資対効果が気になります。

素晴らしい着眼点ですね!大丈夫、一緒に分解して考えれば見えてきますよ。要点は三つです:演算性能、メモリ帯域、そしてメモリ階層ごとのデータ移動の効率です。今回はそれを定量的に予測するDeLTAというモデルを通して説明できますよ。

そのDeLTAというのは要するに『どこでボトルネックが起きるかを教えてくれる道具』という理解で良いですか。ハードを替える前に試算できるなら助かります。

その通りです!DeLTAは特にCNN(convolutional neural network, CNN, 畳み込みニューラルネットワーク)の畳み込み層がどれだけメモリ階層を動くかを細かく見積もれます。だから『ただ演算を増やすだけ』で効くかどうか事前に分かりますよ。

なるほど。具体的には何をモデル化するのですか。うちの技術部は『メモリ帯域(memory bandwidth)が足りない』と言っていますが、それだけで判断して良いのか知りたいです。

良い質問ですね。DeLTAはGPU(Graphics Processing Unit, GPU, グラフィックス処理装置)の各メモリ階層、たとえばL1/L2キャッシュや共有メモリ(shared memory)、グローバルメモリといった層ごとのトラフィック量を推定します。つまり帯域だけでなく、どの階層がボトルネックかを示せるんです。

それは便利ですね。ただ現場は『実際のソフトのアクセスパターンが複雑で予測できない』とも言います。本当に実動作に合うのですか。

そこがDeLTAの肝です。多くの実装で用いられるim2colという畳み込みアルゴリズムのアクセスパターンを詳細に解析して、cuDNN(CUDA Deep Neural Network library, cuDNN, cuDNNライブラリ)が実際に行うブロッキングや共有メモリ利用を反映しています。だから実機との一致度が高いんです。

これって要するにメモリ階層ごとのデータ再利用をちゃんと数えることで、無駄な投資を避けられるということ?

その通りです。要点を三つにまとめます。第一に、演算性能だけでなくメモリ階層ごとのトラフィックを見ないと誤った結論になる。第二に、ソフトのブロッキング戦略がハード資源の有効性を左右する。第三に、DeLTAは設計空間探索に使えるほど精度が高い、です。

なるほど、では我々のような資本効率を重視する会社は、まずこのモデルでボトルネックを特定してから機器投資を決めるべきですね。やってみます。

大丈夫、一緒にやれば必ずできますよ。まずは代表的なレイヤーをいくつか選んでDeLTAで見積もりを出し、優先順位をつけて投資計画を作りましょう。失敗を恐れず一歩ずつ進められますよ。

分かりました。では私なりに整理します。『DeLTAはCNNの畳み込みで階層ごとのメモリトラフィックを精密に見積もり、演算とメモリのどちらに投資すべきかを指し示すツール』という理解で正しいですか。

素晴らしい着眼点ですね!その言い方で十分伝わりますよ。大丈夫、これで会議でも主導できます。次回は実データを持ち寄って見積もりを一緒にやりましょう。


