本記事は、2019年インターンシップとして勤務した徐 子健さんによる寄稿です。 2019年度夏季インターンのJoeです。この度インターンプロジェクトとしてCuPyのカーネル融合の拡張に取り組み、既存のカーネル融合の適用範囲を大幅に拡張しました。さらにその応用として、ResNet50のバッチ正規化においてCPU実行時間を30%ほど、GPU実行時間を(入力サイズに大きく依存しますがおおよそ)70%ほど削減することに成功しましたので、その取り組みをご紹介します。 背景 CuPyはNumPyと同じAPIを提供するPythonのライブラリで、CUDAを用いて演算を高速に行います。具体的には、行列・ベクトルの要素ごとの演算や、リダクションと呼ばれる、演算によって配列の次元が落ちる演算(たとえばcupy.sum)など、GPUが得意とする計算を高速に行うことができます。 さて、CuPyのGPU演算は強力で
![CuPy カーネル融合の拡張 - Preferred Networks Research & Development](https://cdn-ak-scissors.b.st-hatena.com/image/square/93768604de4e33233346bcf29d92c360d329652c/height=288;version=1;width=512/https%3A%2F%2Ftech.preferred.jp%2Fwp-content%2Fuploads%2F2019%2F09%2Fimage1.png)