2,851
社区成员




使用AIMET训练的时候, 我们在特定情况下没法将量化结果反馈于perf chanel量化的上。
当模型图的中间存在输出时,从该输出到模型的最终输出不会应用于perf chanel模式。这可以在构建 ConnectedGraph 期间观察到。
在存在分支的情况下,你可以在 ConnectedGraph._link_branch_op_to_multiple_ops 方法中检查此问题,该方法将拆分后的乘积与它的使用者连接起来。当存在输出时,它会用输出乘积覆盖现有的 branch_to_multiple_ops 乘积。结果,它无法在后续的 ordered_ops 中连接。
您可以通过注释掉 ConnectedGraph._link_branch_op_to_multiple_ops 中的第 514 行来暂时解决此问题:
# self._create_link_for_output_product(output.name, branch_op.name)
通过从列表中排除输出,潜在的问题是 output_quantization_config 可能无法应用。然而,在输出和常规连接在多个部分混合的情况下,将输出配置合并到中间 QcNode 可能会导致意外结果。
虽然可能有更严谨的方法来调整图(例如添加一个相同的 QcNode 以应用所有选项),但这将导致重大变化。就目前而言,我认为当前的修改是足够的。
可以使用 aimet/TrainingExtensions/onnx/test/python/models/models_for_tests.py 中的 MultipleOutputModel 重现此问题。它也可以在由 test_multiple_output_quantsim() 函数生成的 QuantizationSimModel 中观察到。