⚙️深層学習コンパイラスタックと最適化2023/04/24に公開2件コンパイラtechGitHubで編集を提案Discussionkessen2023/07/18に更新 畳み込み等の演算において異なるチャンネル間の混成は生じないため、一般に CHW フォーマットの方が高速に演算を実行できる。NVIDIA TensorRT Developer Guide より引用。 の部分に関してコメントさせていただきます。 使用する畳み込みのアルゴリズム次第ではあるのですが、現在、最も高速とされているimplicit_gemm方式の畳み込みでは、CHWではなく、HWCフォーマットを使用する必要があります。 実際、TensorRTを使用して、畳み込みのみを含むネットワークを変換した場合、最初にCHWからHWCに変換する操作が挿入され、以降の畳み込みはすべてHWCフォーマットで行われる(ように変換される)はずです。(ただし、バッチサイズやカーネルサイズによっては異なる場合もあります) したがって、一般的には 「GPUではHWCフォーマットの方が高速に畳み込み演算を実行できる」 という方が適切かと思います。ただし、他の演算においてはCHWフォーマットの方が高速な場合もあるかと思います。 lewisacid2023/07/18ご指摘ありがとうございます。GPUにおける畳み込み操作については、HWCフォーマットの方が高速だとは存じ上げませんでした。 GPUでの演算に最適なフォーマットは、一概には言えないのかもしれませんね。誤解のないように本文を修正させていただきます。 返信を追加
kessen2023/07/18に更新 畳み込み等の演算において異なるチャンネル間の混成は生じないため、一般に CHW フォーマットの方が高速に演算を実行できる。NVIDIA TensorRT Developer Guide より引用。 の部分に関してコメントさせていただきます。 使用する畳み込みのアルゴリズム次第ではあるのですが、現在、最も高速とされているimplicit_gemm方式の畳み込みでは、CHWではなく、HWCフォーマットを使用する必要があります。 実際、TensorRTを使用して、畳み込みのみを含むネットワークを変換した場合、最初にCHWからHWCに変換する操作が挿入され、以降の畳み込みはすべてHWCフォーマットで行われる(ように変換される)はずです。(ただし、バッチサイズやカーネルサイズによっては異なる場合もあります) したがって、一般的には 「GPUではHWCフォーマットの方が高速に畳み込み演算を実行できる」 という方が適切かと思います。ただし、他の演算においてはCHWフォーマットの方が高速な場合もあるかと思います。 lewisacid2023/07/18ご指摘ありがとうございます。GPUにおける畳み込み操作については、HWCフォーマットの方が高速だとは存じ上げませんでした。 GPUでの演算に最適なフォーマットは、一概には言えないのかもしれませんね。誤解のないように本文を修正させていただきます。 返信を追加
lewisacid2023/07/18ご指摘ありがとうございます。GPUにおける畳み込み操作については、HWCフォーマットの方が高速だとは存じ上げませんでした。 GPUでの演算に最適なフォーマットは、一概には言えないのかもしれませんね。誤解のないように本文を修正させていただきます。
Discussion
の部分に関してコメントさせていただきます。
使用する畳み込みのアルゴリズム次第ではあるのですが、現在、最も高速とされているimplicit_gemm方式の畳み込みでは、CHWではなく、HWCフォーマットを使用する必要があります。
実際、TensorRTを使用して、畳み込みのみを含むネットワークを変換した場合、最初にCHWからHWCに変換する操作が挿入され、以降の畳み込みはすべてHWCフォーマットで行われる(ように変換される)はずです。(ただし、バッチサイズやカーネルサイズによっては異なる場合もあります)
したがって、一般的には 「GPUではHWCフォーマットの方が高速に畳み込み演算を実行できる」 という方が適切かと思います。ただし、他の演算においてはCHWフォーマットの方が高速な場合もあるかと思います。
ご指摘ありがとうございます。GPUにおける畳み込み操作については、HWCフォーマットの方が高速だとは存じ上げませんでした。
GPUでの演算に最適なフォーマットは、一概には言えないのかもしれませんね。誤解のないように本文を修正させていただきます。