Triton tcc.exe执行出错解决方案

在ComfyUI中使用wan2.2 animate 的角色替换和动作同步工作流的时候,一直遇到一个tcc.exe错误绕不过去。

花了好长时间才解决,有必要记录一下。

错误信息如下:

Command '['D:\\ComfyUI_windows_portable\\python_embeded\\Lib\\site-packages\\triton\\runtime\\tcc\\tcc.exe', 'C:\\Users\\amd\\AppData\\Local\\Temp\\tmprg_0shad\\cuda_utils.c', '-O3', '-shared', '-Wno-psabi', '-o', 'C:\\Users\\amd\\AppData\\Local\\Temp\\tmprg_0shad\\cuda_utils.cp313-win_amd64.pyd', '-fPIC', '-D_Py_USE_GCC_BUILTIN_ATOMICS', '-lcuda', '-lpython313', '-LD:\\ComfyUI_windows_portable\\python_embeded\\Lib\\site-packages\\triton\\backends\\nvidia\\lib', '-LD:\\ComfyUI_windows_portable\\python_embeded\\Lib\\site-packages\\triton\\backends\\nvidia\\lib\\x64', '-ID:\\ComfyUI_windows_portable\\python_embeded\\Lib\\site-packages\\triton\\backends\\nvidia\\include', '-ID:\\ComfyUI_windows_portable\\python_embeded\\Lib\\site-packages\\triton\\backends\\nvidia\\include', '-IC:\\Users\\amd\\AppData\\Local\\Temp\\tmprg_0shad', '-ID:\\ComfyUI_windows_portable\\python_embeded\\Include']' returned non-zero exit status 1.  

刚开始一直怀疑是版本问题,排查了Python版本,Torch版本,Cuda+Cudnn版本,Triton版本。

花费了大量时间来检查各种组合,始终报这个错误。中间也尝试过把这个问题扔给GPT,但是它说了一大堆,没有击中问题的核心。

我多次重启上下文之后,它似乎说到了重点:

这个报错的核心是Triton 用 tcc.exe 在 Windows 上即时编译 cuda_utils.c 时链接失败,命令里能看到它要链接 -lcuda-lpython313,而你的 ComfyUI 是“嵌入式 Python 3.13(cp313)”。在 Windows 上,这通常有几个致命点:

症结定位(从高概率到低概率)

  1. 缺少 python313.lib(开发版 .lib)

    • 嵌入式/便携版 Python 通常没有 libs/python313.lib,导致 -lpython313 链接失败。

  2. CUDA 开发库未就绪

    • 需要完整 CUDA Toolkit(不仅是驱动),并且 cuda.lib 必须在 LIB 路径中;相关 DLL(如 nvrtc64_xxx_0.dll)需在 PATH 中。

  3. PyTorch/Triton 与 Python 3.13 的组合不成熟

    • 目前很多 Windows 预编译轮子优先支持 3.10/3.11(甚至 3.12),3.13 还在跟进。你这套组合强行触发了 Triton 的 tcc 链路。

  4. 传入了不适配 Windows 的编译参数

    • 命令里有 -fPIC(典型 *nix 旗标),在 Windows 下无意义甚至报错;这通常是某版本 Triton/构建链路的兼容性问题。

从后面可以知道,它说的的第一点是正确的。

但是它给的解决方案却并不合适,按他的路走又是一条漫长的不归路。

它的解决方案是让我安装Python3.10版,而我的ComfyUI是Python3.13。

如果要修改Python版本,会导致一堆预装的依赖出现问题,全部重装绝对是一个大工程。

但是谜底还没解开之前,它这个思路有看起来很有道理。

犹豫不决的时候突然想到,有问题应该去Github上的对应项目上找答案才比较靠谱。

经过分析,上面的错误来自 ComfyUI-WanVideoWrapper 这个插件。

通过项目的issues 终于找到了轻松解决问题的方法。

这个问题的关键就是因为ComfyUI使用了便携版的Python,缺少了include和libs这两个文件夹。只要安装完整版的Python并拷贝这两个文件夹到ComfyUI的python_embeded文件夹里面就可以了。

具体的说明和文件下载,可以参考下面两个地址

WanVideoWrapper issues:

https://github.com/kijai/ComfyUI-WanVideoWrapper/issues/772

triton-windows

https://github.com/woct0rdho/triton-windows#8-special-notes-for-comfyui-with-embeded-python

原文地址:https://www.tonyisstark.com/3953.html

在使用 Triton 时,出现 `TypeError: Parameters to generic types must be types` 错误通常与类型注解或泛型类型的使用方式有关。具体来说,该错误提示“Got module triton.runtime.autotuner”,表明在某个泛型类型(如 `List`, `Dict`, `Union` 等)的参数中错误地传入了模块(如 `triton.runtime.autotuner`)而非实际的类型。 这个问题可能出现在类型注解中,例如: ```python from typing import List import triton.runtime.autotuner as autotuner def func() -> List[autotuner]: ... ``` 上述代码中,`List[autotuner]` 的写法是非法的,因为 `List` 是一个泛型类型,其参数必须是类型(如 `int`, `str`, `MyClass` 等),而不是模块或实例。如果 `autotuner` 是一个模块而非类型,就会导致该错误。 ### 解决方法 1. **确认类型注解是否正确** 确保你注解的是实际的类型,而不是模块或实例。例如,如果你期望一个 `List` 包含的是某个类的实例,应确保该类是定义好的类型: ```python from typing import List from triton.runtime.autotuner import Autotuner def func() -> List[Autotuner]: ... ``` 2. **检查导入语句是否正确** 如果你误将模块导入而非具体类型,应调整导入语句以获取正确的类型定义: ```python from triton.runtime.autotuner import Autotuner # 正确导入类型 ``` 3. **避免对泛型使用错误的参数** 如果你只是想表达一个包含任意元素的列表,可以使用 `List[Any]`: ```python from typing import List, Any def func() -> List[Any]: ... ``` 4. **检查第三方库的兼容性** 如果你确定使用的是正确类型,但仍然报错,可能是由于类型注解与某些运行时环境(如 PyTorch、JIT 编译器)或类型检查工具(如 mypy)之间的兼容性问题。尝试升级相关依赖库或禁用类型检查: ```bash pip install --upgrade triton ``` 5. **使用 `TYPE_CHECKING` 进行条件导入** 如果类型仅用于类型检查而非运行时,可以使用 `typing.TYPE_CHECKING` 来避免运行时加载类型: ```python from typing import List, TYPE_CHECKING if TYPE_CHECKING: from triton.runtime.autotuner import Autotuner def func(arg): # 在类型检查时使用 Autotuner 类型 ... ``` ### 示例修复 假设你原本的代码如下: ```python from typing import List import triton.runtime.autotuner as autotuner def process_tuners() -> List[autotuner]: return [] ``` 修复后应为: ```python from typing import List from triton.runtime.autotuner import Autotuner def process_tuners() -> List[Autotuner]: return [] ``` ### 总结 此错误的核心在于泛型类型(如 `List`, `Dict`)的参数必须是类型而非模块或实例。确保导入的是具体类型,并检查类型注解是否符合预期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值