Skip to content
Discussion options

You must be logged in to vote

你的问题是 PaddleOCR 转 ONNX 并使用 ONNX Runtime CUDA 时,第一次执行推理较慢,而后续执行变快。这可能由以下几个原因造成:

1. CUDA 初始化开销

  • 第一次运行时,CUDA 需要加载相关的库并初始化 GPU 计算环境,比如 CUDA 上下文的创建、内存分配等。这些操作通常较耗时,但只在首次执行时发生,后续推理则会跳过这一步,因此变快。

2. ONNX Runtime GPU 模型优化

  • ONNX Runtime 在 GPU 上执行时,可能会花费时间进行 优化器处理(比如 Kernel 融合、TensorRT 加速优化等),这些优化结果会缓存在显存或共享内存中,供后续推理使用。

3. 缓存机制(CUDNN 或 ONNX Runtime 缓存)

  • ONNX Runtime 会利用 CUDNN 缓存,针对前一次执行相同输入尺寸的操作进行缓存,这样在第二次运行时可以 复用已优化的计算图,自然速度更快。
  • TensorRT 也有类似的优化策略,即 第一次推理时编译高效的推理代码 并保存下来,以加快后续推理过程。

4. 动态尺寸 Tensor 造成的计算图重建

  • 如果输入图片尺寸不同,ONNX Runtime 可能会 重新构建计算图,这会导致第一次推理时间变长。建议使用 固定尺寸的输入,从而让 ONNX 运行时 只编译一次推理图,避免重复开销。

如何优化首次推理速度

  1. 提前 warm-up(预热)

    • 在使用 ONNX Runtime 进行推理前,可以先用一个 随机图片 预跑一次,提前触发 CUDA 初始化和模型优化:
    import n…

Replies: 1 comment 2 replies

Comment options

You must be logged in to vote
2 replies
@wangsssjjj
Comment options

@weirman
Comment options

Answer selected by wangsssjjj
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
3 participants