
拓海先生、最近部下から「GPUのINT8を使って高精度の行列計算をエミュレートできる論文がある」と聞きまして、ちょっと混乱しているんです。要するに、安い小さな計算単位で精度の高い計算を実現できる、という理解で合っていますか?

素晴らしい着眼点ですね!大丈夫、分かりやすく整理していきますよ。要点は3つで説明できます。1つ目は、Ozaki scheme(Ozaki scheme、オザキ方式)は低精度の乗算を組み合わせて高精度を得る手法ですよ。2つ目は、最近のGPUはINT8(INT8、8ビット整数)などの低精度ユニット、特にTensor Cores(Tensor Cores、テンソルコア)を高速化に用いており、これを活かすのが狙いです。3つ目は、本論文はその実装を工夫して、乗算回数と加算回数を減らすことで性能を改善しているんです。

なるほど。現場でのイメージが湧きません。これって要するに、1万円の計算機を10回使って10万円相当の精度を得る、ということですか?

良い比喩です!概ねそのイメージでOKですよ。ただ本論文は単に回数を増やすだけでなく、回数と手順を賢く削る工夫を加え、同等かそれ以上の精度をより短時間で達成できるようにしています。結果として投資対効果が上がるわけです。

投資対効果の点が重要でして。具体的には何を減らすことで速くなるのでしょうか。乗算の回数ですか、それとも精度を上げるための最後のまとめ処理ですか。

いい質問ですね。論文は両方に手を入れています。第一に、低精度の行列乗算を行う“スライス”の数を減らす工夫を提案しています。第二に、スライスの結果を高精度で積算する際の手順を高速化するアルゴリズム改善を行っています。要するに、掛け算の総数とまとめる際の余分な高精度作業の両方を削れるんです。

なるほど。で、実際の精度はどう担保しているのですか。低精度を組み合わせると誤差が心配です。

その点がOzaki scheme(オザキ方式)の強みなんです。誤差をコントロールするための誤差なし変換(error-free transformation)を使い、低精度の乗算で生じる細かな誤差を追跡して高精度で再合算します。論文はさらに、スライスの切り方を変えることで一つひとつの誤差を小さくする分割法の改善も提案していますよ。

実運用面で気になる点があります。現行のGPUでやるなら、コードの大幅な書き換えや専用ハードが必要ですか。それとも既存のTensor Coresを少し工夫すれば動きますか。

実は既存のTensor Coresを活用できるのが肝です。論文はINT8 Tensor Cores上での実装例を示しており、特別なハードは不要で、ソフトウェア側の実装工夫で多くが賄えます。つまり当面は既存設備で試作し、性能と精度を評価してから本格導入を判断できるんです。大丈夫、一緒にやれば必ずできますよ。

分かりました。最後に私の理解を確認させてください。要するに、1) 低精度ユニットを賢く組み合わせて高精度を出す、2) 乗算と高精度加算の回数を減らす実装改善で速くする、3) 既存のハードで試せる、という理解で合っていますか。私の言葉で言うと、安いユニットを上手に回して高い精度を安く作る、ということですね。

その通りですよ。素晴らしい要約です。これをもとにまずは小さなベンチマークを一緒に回して、投資対効果を見ていきましょう。安心してください、失敗は学習のチャンスですから。


