torch.ao.ns._numeric_suite_fx¶
警告
此模組是一個早期原型,可能會變更。
此模組包含用於比較模型之間權重和激活的工具。使用範例
import copy
import torch
import torch.ao.quantization.quantize_fx as quantize_fx
import torch.ao.ns._numeric_suite_fx as ns
m = torch.nn.Sequential(torch.nn.Conv2d(1, 1, 1)).eval()
mp = quantize_fx.prepare_fx(m, {'': torch.ao.quantization.default_qconfig})
# We convert a copy because we need the original prepared model
# to be available for comparisons, and `quantize_fx.convert_fx` is inplace.
mq = quantize_fx.convert_fx(copy.deepcopy(mp))
#
# Comparing weights
#
# extract weight pairs
weight_comparison = ns.extract_weights('a', mp, 'b', mq)
# add SQNR for each comparison, inplace
ns.extend_logger_results_with_comparison(
weight_comparison, 'a', 'b', torch.ao.ns.fx.utils.compute_sqnr,
'sqnr')
# weight_comparison contains the weights from `mp` and `mq` stored
# in pairs, and can be used for further analysis.
#
# Comparing activations, with error propagation
#
# add loggers
mp_ns, mq_ns = ns.add_loggers(
'a', copy.deepcopy(mp),
'b', copy.deepcopy(mq),
ns.OutputLogger)
# send an example datum to capture intermediate activations
datum = torch.randn(1, 1, 1, 1)
mp_ns(datum)
mq_ns(datum)
# extract intermediate activations
act_comparison = ns.extract_logger_info(
mp_ns, mq_ns, ns.OutputLogger, 'b')
# add SQNR for each comparison, inplace
ns.extend_logger_results_with_comparison(
act_comparison, 'a', 'b', torch.ao.ns.fx.utils.compute_sqnr,
'sqnr')
# act_comparison contains the activations from `mp_ns` and `mq_ns` stored
# in pairs, and can be used for further analysis.
#
# Comparing activations, without error propagation
#
# create shadow model
mp_shadows_mq = ns.add_shadow_loggers(
'a', copy.deepcopy(mp),
'b', copy.deepcopy(mq),
ns.OutputLogger)
# send an example datum to capture intermediate activations
datum = torch.randn(1, 1, 1, 1)
mp_shadows_mq(datum)
# extract intermediate activations
shadow_act_comparison = ns.extract_shadow_logger_info(
mp_shadows_mq, ns.OutputLogger, 'b')
# add SQNR for each comparison, inplace
ns.extend_logger_results_with_comparison(
shadow_act_comparison, 'a', 'b', torch.ao.ns.fx.utils.compute_sqnr,
'sqnr')
# shadow_act_comparison contains the activations from `mp_ns` and `mq_ns` stored
# in pairs, and can be used for further analysis.
- class torch.ao.ns._numeric_suite_fx.OutputLogger(ref_node_name, prev_node_name, model_name, ref_name, prev_node_target_type, ref_node_target_type, results_type, index_within_arg, index_of_arg, fqn, qconfig_str='')[source][source]¶
用於捕捉中間值的基礎類別。
- class torch.ao.ns._numeric_suite_fx.OutputComparisonLogger(*args, **kwargs)[source][source]¶
與 OutputLogger 相同,但需要原始 activation 以便在校正時計算比較。
- class torch.ao.ns._numeric_suite_fx.NSTracer(skipped_module_names, skipped_module_classes)[source][source]¶
就像一般的 FX 量化追蹤器一樣,但將 observer 和 fake_quantize 模組視為葉模組。
- torch.ao.ns._numeric_suite_fx.extract_weights(model_name_a, model_a, model_name_b, model_b, base_name_to_sets_of_related_ops=None, unmatchable_types_map=None, op_to_type_to_weight_extraction_fn=None)[source][source]¶
從模型 A 和模型 B 提取權重,並回傳比較結果。
- 參數
model_name_a (str) – 模型 A 的字串名稱,用於結果中
model_a (Module) – 模型 A
model_name_b (str) – 模型 B 的字串名稱,用於結果中
model_b (Module) – 模型 B
base_name_to_sets_of_related_ops (Optional[Dict[str, Set[Union[Callable, str]]]]) – subgraph 基礎節點的可選覆寫,可能會變更
unmatchable_types_map (Optional[Dict[str, Set[Union[Callable, str]]]]) – unmatchable 類型的可選覆寫,可能會變更
op_to_type_to_weight_extraction_fn (Optional[Dict[str, Dict[Callable, Callable]]]) – 從類型提取權重的函數的可選覆寫,可能會變更
- 傳回
包含權重比較的 NSResultsType
- 回傳類型
- torch.ao.ns._numeric_suite_fx.add_loggers(name_a, model_a, name_b, model_b, logger_cls, should_log_inputs=False, base_name_to_sets_of_related_ops=None, unmatchable_types_map=None)[source][source]¶
使用記錄器來儀器化模型 A 和模型 B。
- 參數
name_a (str) – 用於結果中的模型 A 的字串名稱
model_a (Module) – 模型 A
name_b (str) – 用於結果中的模型 B 的字串名稱
model_b (Module) – 模型 B
logger_cls (Callable) – 要使用的 Logger 類別
base_name_to_sets_of_related_ops (Optional[Dict[str, Set[Union[Callable, str]]]]) – subgraph 基礎節點的可選覆寫,可能會變更
unmatchable_types_map (Optional[Dict[str, Set[Union[Callable, str]]]]) – unmatchable 類型的可選覆寫,可能會變更
- 傳回
傳回 (model_a_with_loggers, model_b_with_loggers) 的元組。就地修改兩個模型。
- 回傳類型
- torch.ao.ns._numeric_suite_fx.extract_logger_info(model_a, model_b, logger_cls, model_name_to_use_for_layer_names)[source][source]¶
遍歷 model_a 和 model_b 中的所有記錄器,並提取已記錄的資訊。
- torch.ao.ns._numeric_suite_fx.add_shadow_loggers(name_a, model_a, name_b, model_b, logger_cls, should_log_inputs=False, base_name_to_sets_of_related_ops=None, node_type_to_io_type_map=None, unmatchable_types_map=None)[source][source]¶
使用陰影記錄器來儀器化模型 A 和模型 B。
- 參數
name_a (str) – 用於結果中的模型 A 的字串名稱
model_a (Module) – 模型 A
name_b (str) – 用於結果中的模型 B 的字串名稱
model_b (Module) – 模型 B
logger_cls (Callable) – 要使用的 Logger 類別
should_log_inputs (bool) – 是否要記錄輸入
base_name_to_sets_of_related_ops (Optional[Dict[str, Set[Union[Callable, str]]]]) – subgraph 基礎節點的可選覆寫,可能會變更
unmatchable_types_map (Optional[Dict[str, Set[Union[Callable, str]]]]) – unmatchable 類型的可選覆寫,可能會變更
- 回傳類型
- torch.ao.ns._numeric_suite_fx.extract_shadow_logger_info(model_a_shadows_b, logger_cls, model_name_to_use_for_layer_names)[source][source]¶
遍歷陰影模型中的所有記錄器,並提取已記錄的資訊。
- torch.ao.ns._numeric_suite_fx.extend_logger_results_with_comparison(results, model_name_1, model_name_2, comparison_fn, comparison_name)[原始碼][原始碼]¶
使用 comparison_fn 比較 model_name_2 的記錄值與 model_name_1 中對應的值。將結果記錄在 model_name_2 的 comparison_name 下。會原地修改 results。
- 參數
- torch.ao.ns._numeric_suite_fx.prepare_n_shadows_model(model, example_inputs, qconfig_multi_mapping, backend_config, custom_prepare_fn=None, custom_prepare_kwargs=None, custom_tracer=None)[原始碼][原始碼]¶
給定一個具有 M 個操作圖的模型,例如
args_kwargs_m -> op_m -> output_m
以及每個操作的 N 個 qconfig 集合,建立一個新模型,其中 op_m 的每個子圖都轉換為
|---------> op_m_n -> log_m_n | / args_kwargs_m ---------> op_m -> log_m_0
其中 op_m_n 是 op_m 包裝在子模組中並使用 qconfig_n 轉換,其內部圖如下所示
args_m -------- op_m_prepared_with_qconfig_n -> out_m_n / kwargs_m ---
這對於在單次模型傳遞中測試多個層的不同量化非常有用。
未來 PR 的高階 TODO:* 找出更好的方法來命名輸出結構 * 返回結果資料結構而不是列印出來 * 向 docblock 新增範例
- 回傳類型
- torch.ao.ns._numeric_suite_fx.loggers_set_enabled(model, enabled)[原始碼][原始碼]¶
設定 model 的記錄器的 enabled 設定
- torch.ao.ns._numeric_suite_fx.loggers_set_save_activations(model, save_activations)[原始碼][原始碼]¶
設定 model 的記錄器的 save_activations 設定
- torch.ao.ns._numeric_suite_fx.convert_n_shadows_model(model, custom_convert_fn=None, custom_convert_kwargs=None)[原始碼][原始碼]¶
給定一個來自 prepare_n_shadows_model 的模型,在每個 shadow 子模組上執行 convert_fx。
- 回傳類型