torch.ao.ns._numeric_suite¶
警告
此模組是一個早期原型,可能會有所變動。
- torch.ao.ns._numeric_suite.compare_weights(float_dict, quantized_dict)[來源][來源]¶
比較浮點模組與其對應的量化模組的權重。返回一個字典,其鍵對應於模組名稱,每個條目都是一個字典,包含兩個鍵 ‘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 量化的模組,我們想要 shadowing
float_module – 用於 shadowing q_module 的浮點模組
logger_cls – 用於處理 q_module 和 float_module 輸出的記錄器類型。可以使用 ShadowLogger 或自訂記錄器。
- torch.ao.ns._numeric_suite.prepare_model_with_stubs(float_module, q_module, module_swap_list, logger_cls)[原始碼][原始碼]¶
如果 float module 的類型在 module_swap_list 中,則將 float module 作為 shadow 連接到其匹配的量化 module,以此來準備模型。
使用範例
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'>)[原始碼][原始碼]¶
比較模型中量化的 module 與其對應的浮點 module,並為它們提供相同的輸入。返回一個 dict,其鍵對應於 module 名稱,每個條目都是一個包含兩個鍵“float”和“quantized”的字典,其中包含量化 module 及其匹配的 float shadow module 的輸出張量。該 dict 可用於比較和計算 module 級別的量化誤差。
此函數首先調用 prepare_model_with_stubs() 以將我們要比較的量化 module 與 Shadow module 交換,Shadow module 接收量化 module、相應的 float module 和 logger 作為輸入,並在內部創建一個前向路徑,使 float module 能夠對 shadow 量化 module 共享相同的輸入。 logger 可以是可自定義的,預設的 logger 是 ShadowLogger,它將保存量化 module 和 float module 的輸出,可用於計算 module 級別的量化誤差。
使用範例
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)[原始碼][原始碼]¶
尋找浮點模組和量化模組之間的匹配激活。
- torch.ao.ns._numeric_suite.prepare_model_outputs(float_module, q_module, logger_cls=<class 'torch.ao.ns._numeric_suite.OutputLogger'>, allow_list=None)[原始碼][原始碼]¶
如果浮點模組和量化模組在 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)[原始碼][原始碼]¶
比較相同輸入下,浮點模型和量化模型在對應位置的輸出激活。 傳回一個字典,其鍵對應於量化模組名稱,每個條目都是一個字典,其中包含兩個鍵“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() ) )
- 參數
- 返回
字典,其鍵對應於量化模組名稱,每個條目都是一個字典,其中包含兩個鍵“float”和“quantized”,分別包含匹配的浮點和量化激活
- 返回類型
act_compare_dict