Closed
XPU 三方执行丢弃 self 名输入 #419
FishPotatoChenAdd on 21 days agoClosed at 17 days ago
RuiWang_
18 days ago Comments:
18 days ago Comments:
感谢反馈。当前 master(HEAD 127cec9)代码核对确认:XPU 三方执行两条通路均丢弃 self 名输入,与描述一致。
- 类形式插件通路:
_bind(ttk/remote/server/executor.py:534-548)→bind_params(ttk/core_modules/common/xpu.py:297-366)。绑定后__call__签名已无self形参,self 名输入在 leftover 分发处被k != "self"(xpu.py:358)过滤,既不进**kwargs也不进*args。 - 无插件 api 自动解析通路:
_invoke_function(executor.py:591-638)三相位全部过滤 self:kwargs 相位(executor.py:604)、位置相位(executor.py:613)、签名 zip 相位(executor.py:637)。 - 后果:凡输入参数名含 self 的 aclnn 算子(如 aclnnReal 的 self),三方执行收不到输入报 500,cross_check 呈现 third_party unavailable,NPU 侧不受影响。
修复方向:self 名输入按普通输入对待,经 *args 按 C 头序送达;param_order 机制已支持按头序重排(executor.py:537-547),仅在与实例位冲突时绕行;普通函数签名中的 self 形参按真实参数名绑定。当前 master 无该修复。
环境说明:本机无 NPU,未做端到端三方实测,结论为代码路径核对。


17 days ago Close issue
17 days ago Added label: resolved
aten 命名惯例下,ACLNN 算子 C 接口的首个输入参数名多为
self(如aclnnReal(aclTensor *self, aclTensor *out))。TTK 做 XPU 三方校验时,输入按参数名发给 xpu-server 按名绑定,但服务端把self当特殊名过滤掉了:类形式插件通路(bind_params)里,绑定__call__的签名已无self,池中self名输入本应经*args位置送达,却在 leftover 分发处被整体丢弃——既不进**kwargs(防与实例位冲突,合理),也进不了*args(与 docstring "use *args to receive it positionally" 的承诺矛盾);无插件的 api 自动解析通路(_invoke_function三相位)同样全部过滤self。结果凡输入参数名含self的算子(绝大多数 aclnn 算子),XPU 三方执行收不到输入、报 500,cross_check 一律third_party unavailable,而 NPU 侧执行正常。修复后self名输入按普通输入对待:经*args按 C 头文件序位置送达,仅在与实例位冲突(绑定方法 / 未绑定__init__的**kwargs)时绕行,普通函数签名中的self形参视为真实参数名按名绑定。