轉換階段¶
一旦圖形簡化為易於轉換的形式後,我們便會設定轉換環境,以管理從區塊節點建構 TensorRT INetworkDefinition
。轉換環境會記錄已轉換節點的集合、區塊輸入和輸出,以及關於圖形轉換的其他資訊。此資料隨後用於協助轉換器連結層,並保存建構引擎所需的權重等建置時間資訊。建立環境後,區塊轉換器便會開始迭代節點清單,針對每個節點,轉換器將查看其輸入並組裝資源陣列,以傳遞至轉換器。輸入可能處於幾種狀態
輸入為區塊參數
在這種情況下,輸入應已作為 IValue 儲存在轉換環境
evaluated_value_map
中。轉換階段將 IValue 新增至轉換器的引數清單
輸入是已轉換節點的輸出
在這種情況下,輸出的 ITensor 已新增至
value_tensor_map
,轉換階段將 ITensor 新增至轉換器的引數清單
輸入來自產生靜態值的節點
有些節點會產生靜態值,通常用於儲存運算子的參數,我們需要在轉換時評估這些節點,才能轉換運算子。轉換系統將在評估器登錄檔中尋找節點評估器,並在節點上執行它。產生的 IValue 將輸入轉換環境
evaluated_value_map
,並新增至轉換器的引數清單。如果要評估的節點需要輸入,則轉換階段將遞迴地解析依賴關係,直到評估出最終靜態值
輸入來自尚未轉換的節點
Torch-TensorRT 將在此處產生錯誤
節點評估¶
有些節點包含靜態資料,並且是運算的資源。這些可以在轉換時評估,以便您在進行節點轉換時可以使用這些值。理論上,任何節點種類都可以具有轉換時評估器,只要它產生靜態 IValue 即可。此 IValue 將儲存在轉換環境中,以便任何將評估節點作為輸入的節點都可以使用它。常見的節點類型為 prim::Constant
(發出常數)和 prim::ListConstruct
(建立清單)。
節點轉換器¶
節點轉換器將 JIT 節點對應到層或層的子圖。然後,它們將來自 JIT 圖形的輸出和 TRT 圖形中的輸出關聯在轉換環境中。這允許轉換階段組裝下一個節點的輸入。在某些情況下,節點產生的輸出不是 Tensor,而是對輸入執行的計算產生的靜態結果,這些輸入需要先轉換。在這種情況下,轉換器可能會將輸出關聯在 evaluated_value_map
中,而不是 value_tensor_map
中。如需更多資訊,請查看:writing_converters