下表显示了 vai_q_tensorflow
选项。
名称 | 类型 | 描述 |
---|---|---|
常用配置 | ||
--input_frozen_graph | 字符串 | 适用于浮点模型的 TensorFlow 冻结的 GraphDef 推断文件,它用于训练后量化。 |
--input_nodes | 字符串 | 指定量化计算图的输入节点名称列表,以逗号分隔,搭配 –output_nodes 一起使用。输入节点和输出节点即为量化的起点和终点。两者间的子计算图在可量化情况下就会加以量化。建议: 将
–input_nodes 设置为预处理的最后节点,并将 –output_nodes 设置为后处理的最后节点,因为预处理和后处理所需的某些运算不可量化。由 Vitis AI 编译器对该模型进行编译并将其部署到 DPU 时,这些节点可能导致错误。输入节点可能与计算图的占位符节点不同。 |
--output_nodes | 字符串 | 指定量化计算图的输出节点名称列表,以逗号分隔,并与 –input_nodes 结合使用。输入节点和输出节点即为量化的起点和终点。两者间的子计算图在可量化情况下就会加以量化。 建议: 将
–input_nodes 设置为预处理的最后节点,并将 –output_nodes 设置为后处理的最后节点,因为预处理和后处理所需的某些运算不可量化。由 Vitis AI 编译器对该模型进行编译并将其部署到 DPU 时,这些节点可能导致错误。 |
--input_shapes | 字符串 | 指定输入节点的形状列表。它必须设为每个节点的四维形状,并以逗号分隔。例如,1,224,224,3。针对 batch_size 支持使用未知大小,例如,224,224,3。对于多个输入节点,请分配每个节点的形状列表(以 , 分隔),例如,? 224,224,3:? 300,300,1. |
--input_fn | 字符串 |
为搭配校准数据集使用的计算图提供输入数据。该函数遵循 例如,您可将
注释: 您无需在
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 | 指定量化方法。
默认值: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 |
--align_pool | Int32 | 指定用于对齐 maxpool/avgpool 节点的输入量化位置的策略。
默认值: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 编译器的移位偏差检查和调整策略。
默认值:1 |
--adjust_shift_cut | Int32 | 指定 DPU 编译器的移位切割检查和调整策略。
默认值: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 |
默认值:0 |
--replace_relu6 | Int32 | 仅限 do_cle=1 时可用
默认值:1 |
--replace_sigmoid | Int32 |
默认值:0 |
--replace_softmax | Int32 |
默认值:0 |
--convert_datatype | Int32 |
默认值: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 模型量化的更多示例。