核 C++ 类 - 3.5 简体中文

Vitis AI 用户指南 (UG1414)

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

wego_torch::core::CompileOptions

该 C++ 类对象用于为 WeGO-Torch 指定编译选项。您需创建该类的实例,并将其作为实参传递给 wego_torch::core::Compile 函数。
表 1. 构造函数参数
类型 名称 描述
wego_torch::AccuracyMode accuracy_mode 确定精度模式。它有 2 种不同类型:
  • wego_torch::AccuracyMode::kDefaultRemoveFixNeuron:在此模式下,WeGO-Torch 会在编译进程期间消除冗余 fixneuron 来最优化性能。这些 fixneuron 可能因量化运算符而存在,但由于板载 DPU 目标不支持这些 fixneuron,导致将其分派给 CPU 用于推断。从该模型中移除这些 fixneuron,即可增强端到端性能,前提是精度满足要求。
  • wego_torch::AccuracyMode::kReserveFixNeuron:如果提供该值,那么 WeGO-Torch 会在模型中保留所有冗余的 fixneuron,而不是将其移除。虽然移除这些 fixneuron 能增强性能,但在某些情况下可能出现精度问题。如果使用 WeGO-Torch 编译模型后,端到端精度无法满足要求,那么建议尝试使用该值进行实验。
wego_torch::core::PartitionOptions partition_options 设置分区选项。请参阅 wego_torch::core::PartitionOptions 类,获取更多详细信息。
std::vector<InputMeta> inputs_meta wego_torch::InputMeta 的矢量,对应模型的每项输入。
uint32_t thread_parallel 该参数用于最优化性能。
uint32_t core_parallel 该参数用于最优化性能。
wego_torch::core::DebugOptions debug_options 设置调试选项。请参阅 wego_torch::core::DebugOptions 类,获取更多详细信息。

wego_torch::core::PartitionOptions

适用于 WeGO 分区配置的选项。
表 2. 构造函数参数
类型 名称 描述
uint32_t wego_subgraph_min_ops_number

当前,WeGO 使用贪婪方法将运算符分配 DPU,前提是 DPU 兼容这些运算符。但此方法可能导致下列问题:

  • 如果 DPU 不支持大量运算符,那么该模型最终可能会被分区到多个 DPU 子计算图和 CPU 子计算图中。如果每个 DPU 子计算图仅含少量运算符,那么在 DPU 上执行这些子计算图时,就可能因主机与器件之间存在频繁的存储器传输而导致性能问题。
  • WeGO 会为每个 DPU 子计算图分配一个器件缓冲器。如果该模型过大并且分区后存在多个 DPU 子计算图,那么可能出现缓冲器溢出问题。
以下选项是专为解决此问题而添加的:wego_subgraph_min_ops_number它会为要在 DPU 上执行的 DPU 子计算图设置最小运算符数。如不使用该选项,那么即使 DPU 支持所有运算符,也仍会在 CPU 上执行。
注释: wego_subgraph_min_ops_number = 0 表示无限。
std::vector<std::string> extra_accel_op_list DPU 可运行各种 DL 运算符,但存在一些约束(例如,DPUCVDX8H_ISA1_F2W4_4PE 只能支持含 1 到 16 个内核与 1 到 4 个步幅的卷积)。WeGO 使用 DPU 限制检查引擎基于运算符的 DPU 兼容性来进行运算符分区。但某些运算符具有复杂的兼容性规则,这些规则可能导致开销过多。WeGO 默认不会将其分派给 DPU,而是由您在 extra_accel_op_list 中指定要加速的运算符。下列运算符可添加到 extra_accel_op_list 中以供 DPU 执行:
  • aten::mul
  • aten::mean
  • aten::linear
  • aten::unsqueeze
  • aten::slice
注释: 如果 WeGO 在编译 extra_accel_op_list 中列出的运算符时遇到错误,则表明 DPU 无法对该特定运算符进行加速。但如未报告错误,则表示确实可以成功加速这些运算符。

wego_torch::core::DebugOptions

用于 WeGO 调试的选项。
表 3. 构造函数参数
类型 名称 描述
bool accuracy_debug 要为存在精度问题的子计算图启用输入和输出值的转储,请将该值设置为 true。这样即可记录这些子计算图的输入和输出。默认值为 false。

wego_torch::InputMeta

用于描述量化模型的输入的元信息。由于 Vitis AI 工具链的限制,WeGO-Torch 仅支持以静态类型和形状进行编译。您必须明确传递每个输入的日期类型和形状信息,以便 WeGO-Torch 进行类型和形状推理。
表 4. 构造函数参数
类型 名称 描述
wego_torch::DataType type_ 当前输入张量的数据类型。可设为:wego_torch::DataType::kBool、wego_torch::DataType::kInt32 或 wego_torch::DataType::kFloat32。
wego_torch::ShapeType input_shape_ 当前输入张量的输入形状。

wego_torch::TargetInfo

该 C++ 类对象充当 DPU 目标信息的封装文件,可提供对板载 DPU 目标的 批次、名称、指纹和指纹驱动的信息的访问。
表 5. 构造函数参数
类型 名称 描述
std::string name DPU 目标的名称
uint64_t fingerprint 板载 DPU 目标的指纹
bool is_fingerprint_driven 指示 DPU 子计算图是基于指纹还是目标名称来编译的。
uint32_t batch 板载 DPU 目标所支持的批次大小