器件型号: J784S4XEVM
您好:
我目前正在整合多个 自定义运算符 一起执行的大型 ONNX 模型中 模型 。
实现工作正常、但我们观察到了一种我们希望更好地理解的行为。
发现的问题:
运行 完整模型时、我们的一些自定义运算符是 执行了多次 、尽管 ONNX 图形仅包含运算符的单个实例。
分析日志后、我们注意到这种行为仅发生在内部 大型模型 TIDL 在内部执行 平铺 (将张量拆分为较小的图块以用于内存和调度约束)。
当前理解:
- 当张量超过一定的内部限制时、TIDL 会应用内部平铺策略。
- 当发生平铺时、 可以多次调用相同的自定义运算符内核 、每个图块一次。
- 这可能导致:
- 对自定义 op 实现的多次调用。
- 不同形状、具体取决于瓷砖尺寸。
- 单独测试自定义操作时与“单次调用“预期不同的执行行为。
问题:
为了更好地支持生产中的定制操作员、我想澄清以下几点:
- TIDL 如何确切决定应用拼贴?
是否有记录的张量大小阈值或内部内存限制? - 平铺如何影响自定义操作员?
是否应该多次调用自定义运算符(每个图块一次)?
对平铺下的自定义操作支持的输入/输出形状是否有限制? - 是否有建议的方法来确保自定义运算符为整个张量而不是每个图块运行一次?
还是必须实现所有自定义操作以支持任意分割/部分张量形状? - 模型中的自定义运算符是否存在限制(或最佳实践)、这些运算符可能会进行拼贴?
有关 TIDL 平铺及其对自定义运算执行的影响的任何指导、文档参考或内部详细信息都将非常有帮助。
非常感谢。