You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python通过subprocess调用trtexec未生成TRT引擎文件如何解决?

问题原因及解决方案

1. 核心调用逻辑错误

你当前的subprocess.run写法完全错误:[sys.executable, "-c", "trtexec ..."]是让Python解释器执行trtexec命令字符串,而trtexec是独立的二进制可执行文件,不属于Python语法,该调用会直接执行失败,不会触发任何转换逻辑。
正确写法有两种:

  • 列表形式(无需开启shell,更安全):
# 可替换为你本地trtexec的实际绝对路径,避免PATH找不到的问题
TRTEXEC_PATH = "trtexec"
if USE_FP16:
    subprocess.run([
        TRTEXEC_PATH,
        "--onnx=rmpx.onnx",
        "--saveEngine=/home/my_username/github/TensorRT/quickstart/IntroNotebooks/rmpx_engine_pytorch.trt",
        "--explicitBatch",
        "--fp16"
    ], check=True)
else:
    subprocess.run([
        TRTEXEC_PATH,
        "--onnx=rmpx.onnx",
        "--saveEngine=/home/my_username/github/TensorRT/quickstart/IntroNotebooks/rmpx_engine_pytorch.trt",
        "--explicitBatch"
    ], check=True)
  • 字符串形式(需开启shell,写法更简单):
if USE_FP16:
    cmd = "trtexec --onnx=rmpx.onnx --saveEngine=/home/my_username/github/TensorRT/quickstart/IntroNotebooks/rmpx_engine_pytorch.trt --explicitBatch --fp16"
else:
    cmd = "trtexec --onnx=rmpx.onnx --saveEngine=/home/my_username/github/TensorRT/quickstart/IntroNotebooks/rmpx_engine_pytorch.trt --explicitBatch"
subprocess.run(cmd, shell=True, check=True)

2. 缺少执行结果校验

原代码没有校验subprocess.run的执行结果,无论转换是否成功都会直接执行后续的文件读取逻辑,自然会出现文件不存在的错误。上面的修正代码里加了check=True参数,只要命令执行失败就会直接抛出异常,方便快速定位问题。

3. 路径不匹配问题

原代码中--saveEngine用的是相对路径,生成的引擎文件会存储在Python脚本的当前工作目录下,但后续open用的是固定绝对路径,如果当前工作目录和绝对路径不一致,自然会找不到文件。修正代码里统一了saveEngine的路径为你读取时用的绝对路径,避免路径不匹配问题。

4. 其他可能的排查点

  • trtexec没有加入系统PATH,直接写trtexec调用会找不到可执行文件,可以直接替换为trtexec的绝对路径,或者提前把trtexec所在目录加入PATH环境变量
  • 你指定的rmpx.onnx相对路径下不存在对应的ONNX文件,trtexec转换失败不会输出引擎文件
  • 当前运行Python脚本的用户没有对应目录的写入权限,trtexec无法生成引擎文件

内容的提问来源于stack exchange,提问作者rmpX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 21:06:02