使用TensorRT(8.6.1)加速SadTalker时遭遇grid_sample_3d_cuda错误
解决TensorRT 8.6.1加速SadTalker时的
grid_sample_3d_cuda内核错误 这个错误核心是TensorRT生成的CUDA内核和你的GPU架构不兼容,或是依赖的CUDA环境版本不匹配,导致没有适配当前设备的可执行内核镜像。以下是针对性解决步骤:
确认GPU算力并指定编译架构
先通过nvidia-smi查看GPU型号,对应找到其算力版本(比如RTX 30系列为8.6,RTX 40系列为8.9/9.0)。生成TensorRT引擎时强制指定对应算力:- 用
trtexec工具时,添加参数--gpu-architecture=compute_XX(XX替换为你的算力值,比如86),示例命令:trtexec --onnx=sadtalker_model.onnx --saveEngine=sadtalker_trt.engine --fp16 --explicitBatch --gpu-architecture=compute_86 - 用Python API时,在创建Builder阶段设置GPU架构:
import tensorrt as trt TRT_LOGGER = trt.Logger(trt.Logger.WARNING) builder = trt.Builder(TRT_LOGGER) builder.set_gpu_archs([trt.BuilderArch.ARCH_86]) # 替换为对应算力的ARCH常量
- 用
检查CUDA与TensorRT版本兼容性
TensorRT 8.6.1仅支持CUDA 11.8和12.0版本,同时需要匹配的NVIDIA驱动(CUDA 11.8要求驱动≥450.80.02,CUDA 12.0要求≥525.60.13)。确保系统CUDA、驱动版本完全适配,不兼容环境会直接导致内核编译失败。优化SadTalker的ONNX导出参数
SadTalker中的grid_sample_3d操作可能使用了TensorRT不完全支持的参数(比如align_corners=False)。修改SadTalker导出ONNX的代码,将grid_sample的align_corners设为True,同时检查3D采样的输入维度顺序是否符合TensorRT要求,重新导出ONNX后再转换为TensorRT引擎。清理TensorRT缓存并重新生成引擎
TensorRT会缓存已编译的内核,旧缓存可能和当前GPU不兼容。删除缓存文件后重新生成引擎:- Linux系统:删除
~/.cache/tensorrt目录下所有文件 - Windows系统:删除
C:\Users\<你的用户名>\AppData\Local\Temp\TensorRT目录下所有文件
- Linux系统:删除
内容的提问来源于stack exchange,提问作者TSerendipity
相关产品推荐
相关产品推荐

