天天看點

CUDNN學習筆記(4)

Tensor Core操作說明:

關于sm_70上的cuDNN v7使用Tensor Core Operations的一些說明:Volta GPU系列支援Tensor Core操作,這些操作執行多個浮點産品的并行浮點積累。 将數學模式設定為CUDNN_TENSOR_OP_MATH表示庫将如前所述使用Tensor Core操作。 預設值是CUDNN_DEFAULT_MATH,這個預設值表示庫将避免Tensor Core操作。 預設模式是序列化操作,張量核心操作是并行操作,是以由于操作的不同順序,兩者可能會導緻略微不同的數值結果。 注意:當Tensor Core操作不受支援或不允許時,庫将回退到預設的數學模式。

使用Tensor Core操作将兩個矩陣相乘的結果與使用一系列傳統标量浮點運算序列實作的産品非常接近,但并不總是相同。 是以cuDNN在啟用Tensor Core操作之前需要明确的使用者選擇加入。 然而,訓練常用深度學習模型的實驗顯示,使用Tensor Core操作和遺留浮點路徑之間的差異可忽略不計(根據最終網絡準确性和疊代次數來衡量)。 是以,圖書館将兩種操作模式視為功能上難以區分,并且允許将傳統路徑用作使用Tensor Core操作不适用的情況下的合法回退。

向後相容性和棄用政策:

當更改現有cuDNN函數“foo”的API(通常用于支援某些新功能)時,首先建立一個新例程“foo_v ”,其中n表示首次引入新API的cuDNN版本,而“ foo“不變。 這確定了與cuDNN的版本n-1的向後相容性。 此時,“foo”被認為已被棄用,并應由cuDNN的使用者對待。 根據以下政策,我們逐漸删除在庫的幾個版本過程中棄用和添加的API條目:

在版本n + 1中,傳統API條目“foo”被重新映射到新的API“foo_v ”,其中f是n之前的某個cuDNN版本。

同樣在版本n + 1中,未修飾的API條目“foo”被修改為與“foo_ ”具有相同的簽名。 “foo_ ”保持原樣。

本發行版中維護了已棄用的具有字首字尾_v 和具有字尾_v 的新API條目的前API條目。

在版本n + 2中,删除給定條目的兩個字尾條目。

作為一個經驗法則,當例程以兩種形式出現時,一種帶有字尾,另一種沒有字尾,非字尾條目将被視為棄用。 在這種情況下,強烈建議使用者遷移到新的字尾API條目,以確定在以下cuDNN版本中具有向後相容性。 當例程出現多個字尾時,未添加的API條目将映射到較高編号的字尾。 在這種情況下,強烈建議使用非字尾API條目來保證與以下cuDNN版本的後向相容性。

分組卷積:

通過使用cudnnSetConvolutionGroupCount()設定GroupCount> 1,cuDNN支援分組卷積。 在記憶體中,所有輸入/輸出張量都存儲所有獨立的組。 這樣,所有張量描述符都必須描述整個卷積的大小(而不是指定每個組的大小)。 請參閱以下尺寸/步驟,以解釋如何針對二維卷積運作NCHW格式的分組卷積。 請注意,支援其他格式和3-D卷積(請參閱相關的卷積API了解有關支援的資訊); 組數為1的張量stridings仍然适用于任何組計數。

CUDNN學習筆記(4)
CUDNN學習筆記(4)
CUDNN學習筆記(4)

繼續閱讀