torch.ao.ns._numeric_suite¶
警告
此模組為早期原型,可能會發生變化。
- torch.ao.ns._numeric_suite.compare_weights(float_dict, quantized_dict)[source][source]¶
比較浮點模組與其對應的量化模組的權重。返回一個字典,其鍵對應於模組名稱,每個條目是一個包含兩個鍵“float”和“quantized”的字典,分別包含浮點權重和量化權重。此字典可用於比較和計算浮點模型和量化模型的權重量化誤差。
示例用法
wt_compare_dict = compare_weights( float_model.state_dict(), qmodel.state_dict()) for key in wt_compare_dict: print( key, compute_error( wt_compare_dict[key]['float'], wt_compare_dict[key]['quantized'].dequantize() ) )
- torch.ao.ns._numeric_suite.get_logger_dict(mod, prefix='')[source][source]¶
遍歷模組並將所有日誌記錄器統計資訊儲存到目標字典中。這主要用於量化精度除錯。
- 支援的日誌記錄器型別
ShadowLogger: 用於記錄量化模組及其匹配的浮點影子模組的輸出,OutputLogger: 用於記錄模組的輸出
- class torch.ao.ns._numeric_suite.Shadow(q_module, float_module, logger_cls)[source][source]¶
Shadow 模組將其匹配的浮點模組作為影子附加到量化模組。然後它使用 Logger 模組處理兩個模組的輸出。
- 引數
q_module – 從 float_module 量化而來且我們想要進行影子對比的模組
float_module – 用於影子對比 q_module 的浮點模組
logger_cls – 用於處理 q_module 和 float_module 輸出的 Logger 型別。可以使用 ShadowLogger 或自定義 Logger。
- torch.ao.ns._numeric_suite.prepare_model_with_stubs(float_module, q_module, module_swap_list, logger_cls)[source][source]¶
如果浮點模組型別在 module_swap_list 中,則透過將其浮點模組作為影子附加到其匹配的量化模組來準備模型。
示例用法
prepare_model_with_stubs(float_model, q_model, module_swap_list, Logger) q_model(data) ob_dict = get_logger_dict(q_model)
- torch.ao.ns._numeric_suite.compare_model_stub(float_model, q_model, module_swap_list, *data, logger_cls=<class 'torch.ao.ns._numeric_suite.ShadowLogger'>)[source][source]¶
比較模型中的量化模組與其對應的浮點模組,同時輸入相同的資料。返回一個字典,其鍵對應於模組名稱,每個條目是一個包含兩個鍵“float”和“quantized”的字典,分別包含量化模組及其匹配的浮點影子模組的輸出張量。此字典可用於比較和計算模組級別的量化誤差。
此函式首先呼叫 prepare_model_with_stubs() 將我們想要比較的量化模組替換為 Shadow 模組,Shadow 模組接受量化模組、對應的浮點模組和日誌記錄器作為輸入,並在內部建立一個前向路徑,使浮點模組成為量化模組的影子,共享相同的輸入。日誌記錄器可以自定義,預設日誌記錄器是 ShadowLogger,它將儲存量化模組和浮點模組的輸出,可用於計算模組級別的量化誤差。
示例用法
module_swap_list = [torchvision.models.quantization.resnet.QuantizableBasicBlock] ob_dict = compare_model_stub(float_model,qmodel,module_swap_list, data) for key in ob_dict: print(key, compute_error(ob_dict[key]['float'], ob_dict[key]['quantized'].dequantize()))
- torch.ao.ns._numeric_suite.get_matching_activations(float_module, q_module)[source][source]¶
查詢浮點模組和量化模組之間的匹配啟用。
- torch.ao.ns._numeric_suite.prepare_model_outputs(float_module, q_module, logger_cls=<class 'torch.ao.ns._numeric_suite.OutputLogger'>, allow_list=None)[source][source]¶
如果浮點模組和量化模組在 allow_list 中,則透過將日誌記錄器附加到它們來準備模型。
- torch.ao.ns._numeric_suite.compare_model_outputs(float_model, q_model, *data, logger_cls=<class 'torch.ao.ns._numeric_suite.OutputLogger'>, allow_list=None)[source][source]¶
對於相同的輸入,在對應位置比較浮點模型和量化模型的輸出啟用。返回一個字典,其鍵對應於量化模組名稱,每個條目是一個包含兩個鍵“float”和“quantized”的字典,包含量化模型和浮點模型在匹配位置的啟用。此字典可用於比較和計算傳播量化誤差。
示例用法
act_compare_dict = compare_model_outputs(float_model, qmodel, data) for key in act_compare_dict: print( key, compute_error( act_compare_dict[key]['float'], act_compare_dict[key]['quantized'].dequantize() ) )