vai_q_tensorflow 用法 - 3.5 简体中文

Vitis AI 用户指南 (UG1414)

Document ID
UG1414
Release Date
2023-09-28
Version
3.5 简体中文

下表显示了 vai_q_tensorflow 选项。

表 1. vai_q_tensorflow 选项
名称 类型 描述
常用配置
--input_frozen_graph 字符串 适用于浮点模型的 TensorFlow 冻结的 GraphDef 推断文件,它用于训练后量化。
--input_nodes 字符串 指定量化计算图的输入节点名称列表,以逗号分隔,搭配 –output_nodes 一起使用。输入节点和输出节点即为量化的起点和终点。两者间的子计算图在可量化情况下就会加以量化。
--output_nodes 字符串 指定量化计算图的输出节点名称列表,以逗号分隔,并与 –input_nodes 结合使用。输入节点和输出节点即为量化的起点和终点。两者间的子计算图在可量化情况下就会加以量化。
--input_shapes 字符串 指定输入节点的形状列表。它必须设为每个节点的四维形状,并以逗号分隔。例如,1,224,224,3。针对 batch_size 支持使用未知大小,例如,224,224,3。对于多个输入节点,请分配每个节点的形状列表(以 , 分隔),例如,? 224,224,3:? 300,300,1.
--input_fn 字符串

为搭配校准数据集使用的计算图提供输入数据。该函数遵循 module_name.input_fn_name 格式(例如,my_input_fn.input_fn)。-input_fn 应采用 int 对象作为输入以表示校准步骤,并且应返回成对 ("placeholder_node_name, numpy.Array") 形式的 dict 作为每次调用的对象。随后,将该对象馈送至模型的占位符运算。

例如,您可将 -input_fn 分配给 my_input_fn.calib_input ,并创建 calib_input 函数 in my_input_fn.py,如下所示:

def calib_input_fn:
# read the image and do some preprocessing
    return {"placeholder_1": input_1_nparray, "placeholder_2": input_2_nparray}
注释: 您无需在 input_fn 中再次执行计算图内预处理,因为量化期间会保留 –input_nodes 之前的子计算图。移除预定义的输入函数(包括默认函数和随机函数),因为这些函数不常用。不包含在计算图文件中的预处理部分,应在 input_fn 中进行处理。
量化配置
--weight_bit Int32 指定已量化的权重和偏差的位宽。

默认值:8

--activation_bit Int32 指定已量化的激活的位宽。

默认值:8

--nodes_bit 字符串 指定节点的位宽。节点名称与位宽构成一对参数(以冒号相连),并且这些参数以逗号分隔。指定 conv op 名称时,只有 vai_q_tensorflow 会使用指定的位宽量化 conv op 的权重。例如,conv1/Relu:16,conv1/weights:8,conv1:16
--method Int32 指定量化方法。
  • 0:非溢出方法,量化期间不会有任何值达到饱和。易受离群值影响。
  • 1:最小差值方法,支持饱和以使量化尽可能降低量化差值。对于离群值容限更高。通常相比非上溢方法,此方法最终范围更小。
  • 2:使用最小差值方法搭配逐通道策略。它支持在量化期间较大值达到饱和,以获得较小的量化误差。对逐通道权重应用特定策略。它比方法 0 慢,但对离群值有更高的耐受力。

默认值:1

--nodes_method 字符串 指定节点的方法。节点名称与方法构成一对参数(以冒号相连),并且这些参数对以逗号分隔。指定 conv op 名称时,只有 vai_q_tensorflow 会使用指定方法来量化 conv op 的权重,例如,“conv1/Relu:1,depthwise_conv1/weights:2,conv1:1”。
--calib_iter Int32 指定校准迭代。校准图像总数 = calib_iter * batch_size。

默认值:100

--ignore_nodes 字符串 指定量化期间要忽略的节点列表。量化期间,已忽略的节点将保留不予量化。
--skip_check Int32 如果设为 1,则跳过浮点模型检查。当仅对输入模型某一部分进行量化时,此项很有用。

范围:[0, 1]

默认值:0

--align_concat Int32 指定用于对齐 concat 节点的输入量化位置的策略。
  • 0:对齐所有 concat 节点
  • 1:对齐输出 concat 节点
  • 2:禁用对齐

默认值:0

--align_pool Int32 指定用于对齐 maxpool/avgpool 节点的输入量化位置的策略。
  • 0:对齐所有 maxpool/avgpool 节点
  • 1:对齐输出 maxpool/avgpool 节点
  • 2:禁用对齐

默认值:0

--simulate_dpu Int32 设为 1 即可启用 DPU 仿真。DPU 的部分运算的行为与 TensorFlow 不尽相同。例如,LeakyRelu 和 AvgPooling 中的除法被移位所替代,因此 DPU 输出与 CPU/GPU 输出之间可能存在些许差异。如果此标志设为 1,那么 vai_q_tensorflow 量化器会对这些运算的行为进行仿真。

范围:[0, 1]

默认值:1

--adjust_shift_bias Int32 指定 DPU 编译器的移位偏差检查和调整策略。
  • 0:禁用移位偏差检查和调整
  • 1:在静态约束下启用
  • 2:在动态约束下启用

默认值:1

--adjust_shift_cut Int32 指定 DPU 编译器的移位切割检查和调整策略。
  • 0:禁用移位切割检查和调整
  • 1:在静态约束下启用

默认值:1

--arch_type 字符串 指定固定神经元的架构类型。DEFAULT 表示权重和激活的量化范围是 [-128, 127]。“DPUCADF8H”表示权重量化范围为 [-128, 127],而激活的量化范围则为 [-127, 127]
--output_dir 字符串 指定量化结果的保存目录。

默认值:“./quantize_results”

--max_dump_batches Int32 指定用于转储的最大批次数。

默认值:1

--dump_float Int32 如果设为 1,那么会转储浮点权重和激活。

范围:[0, 1]

默认值:0

--dump_input_tensors 字符串 指定当计算图入口并非占位符时,此计算图的输入张量名称。将占位符添加到 dump_input_tensor,以便 input_fn 可馈送数据。
--scale_all_avgpool Int32 设为 1 即启用 AvgPooling 运算的比例输出以仿真 DPU。仅当 kernel_size <= 64 时才会执行缩放。此运算不影响特殊情况,例如 kernel_size=3,5,6,7,14

默认值:1

--do_cle Int32
  • 1:启用跨层均衡的实现,以便调整权重分布
  • 0:跳过跨层均衡运算

默认值:0

--replace_relu6 Int32 仅限 do_cle=1 时可用
  • 1:将 ReLU6 替换为 ReLU
  • 0:跳过替换

默认值:1

--replace_sigmoid Int32
  • 1:将 sigmoid 替换为 hard-sigmoid
  • 0:跳过替换

默认值:0

--replace_softmax Int32
  • 1:将 softmax 替换为 hard-softmax
  • 0:跳过替换

默认值:0

--convert_datatype Int32
  • 4:执行 BN 折叠,并转换为数据类型 fp32
  • 3:执行 BN 折叠,并转换为数据类型 bfloat16
  • 2:执行 BN 折叠,并转换为数据类型 double
  • 1:执行 BN 折叠,并转换为数据类型 fp16
  • 0:跳过转换

默认值:0

--output_format 字符串 指示量化模型的保存格式,pb 表示保存 tensorflow 冻结 pb,onnx 表示保存 ONNX 模型。

默认值:'pb'

会话配置
--gpu 字符串 指定用于量化的 GPU 器件 ID,以逗号分隔。
--gpu_memory_fraction 浮点值 指定用于量化的 GPU 内存小数(介于 0-1 之间)。

默认值:0.5

其他
--help   显示所有可用的 vai_q_tensorflow 选项。
--version   显示 vai_q_tensorflow 版本信息。

示例

show help: vai_q_tensorflow --help
quantize: 
vai_q_tensorflow quantize --input_frozen_graph frozen_graph.pb \
                          --input_nodes inputs \
                          --output_nodes predictions \
                          --input_shapes ?,224,224,3 \
                          --input_fn my_input_fn.calib_input
dump quantized model: 
vai_q_tensorflow dump --input_frozen_graph quantize_results/quantize_eval_model.pb \
                      --input_fn my_input_fn.dump_input

请参阅 AMD Model Zoo 以获取有关 TensorFlow 模型量化的更多示例。