news 2026/9/26 15:45:35

Chinese-CLIP 部署完整实战:ONNX 与 TensorRT 转换加速指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Chinese-CLIP 部署完整实战:ONNX 与 TensorRT 转换加速指南

Chinese-CLIP 部署完整实战:ONNX 与 TensorRT 转换加速指南

【免费下载链接】Chinese-CLIPChinese version of CLIP which achieves Chinese cross-modal retrieval and representation generation.项目地址: https://gitcode.com/GitHub_Trending/ch/Chinese-CLIP

本文以 Chinese-CLIP ViT-B-16 为例,走通 Chinese-CLIP 部署全流程:环境速配、PyTorch → ONNX → TensorRT 两级模型转换、最小推理代码,以及实测推理时延与零样本精度对比,面向生产级图文检索落地。

选型先行:什么场景用 ONNX,什么场景用 TensorRT

先给结论。需要跨平台(CPU 或多厂商 GPU)交付、快速上线的,选 ONNX:ONNX Runtime 生态成熟、模型可携带,FP16 版本开箱即用。固定 NVIDIA GPU 上追求 Chinese-CLIP TensorRT 推理加速、把时延压到最低的,选 TensorRT:实测 ViT-B/16 文本侧时延从 12.47ms 降到 1.54ms,约 8 倍提速。两者 FP16 下与 PyTorch 的 zero-shot 图文检索精度差距在 ±0.1 以内,生产可用。

Chinese-CLIP 部署环境速配:两条命令装齐全部依赖

硬件与软件要求合并在一张表里,注意版本匹配链:TensorRT 8.5.x ↔ cuDNN 8.6.0 ↔ CUDA 11.6,任何一环不匹配都会出现晦涩的加载报错。

项目推荐版本 / 配置说明
GPUNVIDIA Volta 架构及以上需配备 FP16 Tensor Core
显存16GB 及以上本文测速环境为 T4(16GB)
CUDA11.6+核心计算平台
cuDNN8.6.0+必须与 TensorRT 版本匹配
TensorRT8.5.x(本文 8.5.2.2)高性能推理引擎
ONNX / onnxruntime-gpu1.13.0 / 1.13.1中间格式与推理运行时
PyTorch1.12.1+直接安装 cu116 版本

代码不在本地可先克隆:git clone https://gitcode.com/GitHub_Trending/ch/Chinese-CLIP,然后一条命令装齐核心依赖:

pip install tensorrt==8.5.2.2 onnx==1.13.0 onnxruntime-gpu==1.13.1 pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116

Chinese-CLIP 模型转换两级流水线:PyTorch → ONNX → TensorRT 🚀

TensorRT 不直接读 PyTorch checkpoint,唯一路径是先转 ONNX 再建引擎。仓库 cn_clip/deploy/ 内置两个转换脚本,按顺序跑完两级即可。

第一步:PyTorch → ONNX(Chinese-CLIP ONNX 转换)

以 ViT-B-16 为例,一次导出文本侧与图像侧,各得 FP32/FP16 两份文件:

python cn_clip/deploy/pytorch_to_onnx.py \ --model-arch ViT-B-16 \ --pytorch-ckpt-path pretrained_weights/clip_cn_vit-b-16.pt \ --save-onnx-path deploy/vit-b-16 \ --convert-text --convert-vision

参数说明:

  • --model-arch:模型规模,可选RN50、ViT-B-16、ViT-L-14、ViT-L-14-336、ViT-H-14
  • --pytorch-ckpt-path:PyTorch checkpoint 路径(预训练或微调均可),须与规模对应
  • --save-onnx-path:输出路径前缀,实际生成.txt/.img×.fp32/.fp16共 4 个.onnx
  • --convert-text/--convert-vision:指定导出文本侧 / 图像侧编码器
  • --context-length(可选):文本序列长度,默认 52

注意 FP16 文件附带一个.extra_file(外置权重),它与.onnx必须同目录且不可改名。

第二步:ONNX → TensorRT(Chinese-CLIP TensorRT 引擎构建)

用第一步的 FP16 ONNX 建引擎,单个规模耗时几分钟到十几分钟:

python cn_clip/deploy/onnx_to_tensorrt.py \ --model-arch ViT-B-16 \ --convert-text --text-onnx-path deploy/vit-b-16.txt.fp16.onnx \ --convert-vision --vision-onnx-path deploy/vit-b-16.img.fp16.onnx \ --save-tensorrt-path deploy/vit-b-16 \ --fp16

参数说明:

  • --model-arch:规模,须与 ONNX 输入一致
  • --text-onnx-path/--vision-onnx-path:第一步产出的两个 ONNX 文件
  • --save-tensorrt-path:输出前缀,生成.txt.fp16.trt与.img.fp16.trt
  • --fp16:以 FP16 构建(要求 Volta 及以上)
  • --convert-text/--convert-vision:指定构建哪一侧

不想自己构建可直接使用官方预转换的 FP16 引擎(基于 TensorRT 8.5.2.2),下载后放入deploy/即可:

模型规模图像侧引擎文本侧引擎
RN50rn50.img.fp16.trtrn50.txt.fp16.trt
ViT-B/16vit-b-16.img.fp16.trtvit-b-16.txt.fp16.trt
ViT-L/14vit-l-14.img.fp16.trtvit-l-14.txt.fp16.trt
ViT-L/14@336pxvit-l-14-336.img.fp16.trtvit-l-14-336.txt.fp16.trt
ViT-H/14vit-h-14.img.fp16.trtvit-h-14.txt.fp16.trt

最小可运行示例:5 行代码跑通 Chinese-CLIP TensorRT 推理

转换出的引擎固定 batch=1,一次处理一张图或一条文本;图像输入为[1,3,分辨率,分辨率],文本侧先用clip.tokenize分词、序列长度 52 与转换时--context-length保持一致。TensorRT 侧写法如下(ONNX 侧同理,用 onnxruntime 载入.fp16.onnx,传 CPU 张量,输入名image/text,输出名unnorm_image_features/unnorm_text_features):

from cn_clip.deploy.tensorrt_utils import TensorRTModel img_engine = TensorRTModel("deploy/vit-b-16.img.fp16.trt") image = preprocess(Image.open("examples/pokemon.jpeg")).unsqueeze(0).cuda() feats = img_engine(inputs={"image": image})["unnorm_image_features"] feats = feats / feats.norm(dim=-1, keepdim=True) # 归一化图像特征

其中preprocess由clip.utils.image_transform按模型输入分辨率生成。特征算出后,图文特征内积乘以logit_scale.exp()(官方预训练值为 4.6052,即乘 100)再 softmax,即得相似概率。

Chinese-CLIP 推理时延与零样本精度验证

测试环境:单卡 T4(16GB)、Xeon Platinum 8163 @ 2.5GHz(16 核)、64GB 内存。三种格式模型均 FP16、batch=1,各执行 100 次特征提取取均值(ms/样本):

模型规模图像 PyTorch图像 ONNX图像 TensorRT文本 PyTorch文本 ONNX文本 TensorRT
RN5012.935.041.363.640.950.58
ViT-B/1611.124.923.5812.473.421.54
ViT-L/1421.1917.1013.0812.453.481.52
ViT-L/14@336px47.1148.4031.5912.243.251.54
ViT-H/1435.1034.0026.9823.986.013.89

MUGE 图文检索 zero-shot 精度(R@1):

模型格式ViT-B/16 R@1ViT-H/14 R@1
PyTorch52.163.0
ONNX52.062.9
TensorRT52.062.9

结论:两种格式与 PyTorch 仅差 ±0.1,精度基本无损,而 TensorRT 对小规模模型的提速尤为显著。

Chinese-CLIP 部署常见坑位与 FAQ ⚠️

  • cuDNN 与 TensorRT 版本不匹配:TensorRT 8.5.x 必须搭配 cuDNN 8.6.0。建议随 torch cu116 轮子一并处理 cuDNN,不要用 conda 安装 cudatoolkit,cuDNN 版本漂移会直接导致 TRT 构建失败。
  • FP16 建不出来:Volta 之前的 GPU(如 Pascal 一代)没有 FP16 Tensor Core,此时改用--fp32构建或升级显卡。
  • 显存不足:ViT-H/14 等大规模引擎构建期显存占用较高,建议 16GB 以上;OOM 时换大显存机器构建一次,产物可复用。
  • extra_file 丢失:ONNX FP16 权重存于外置.extra_file,.onnx内记录其路径,重命名或移动文件会加载失败;转换时输出前缀尽量用相对路径。
  • TRT 版本漂移:.trt引擎不保证跨版本加载,运行环境的 TensorRT 版本必须与构建时一致(8.5.2.2)。
  • 输入形状写死:引擎按 batch=1、文本序列 52 构建,运行时要改这两个参数必须重新构建。

一句话总结:ONNX 负责跨平台交付,TensorRT 负责极致 GPU 时延,两级流水线跑完,Chinese-CLIP 部署即可投产。相关资源:cn_clip/deploy/(转换与推理加速脚本)、cn_clip/eval/(ONNX/TensorRT 特征提取与评测脚本)、deployment.md(官方部署文档)、speed_benchmark.py(时延测试脚本)。

【免费下载链接】Chinese-CLIPChinese version of CLIP which achieves Chinese cross-modal retrieval and representation generation.项目地址: https://gitcode.com/GitHub_Trending/ch/Chinese-CLIP

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 15:43:34

CPU缓存一致性本质:MESI协议、伪共享与内存屏障实战解析

同样的变量,两个核读出两个值:从“灵异Bug”看缓存一致性问题的本质我记不清第一次被CPU缓存一致性坑是什么时候了,但印象最深的是好几年前排查的一个线上服务:一个多线程统计程序,逻辑很简单,多个线程各自…

作者头像 李华
网站建设 2026/9/26 15:36:08

Windows 10 下 wsl --update 权限报错解决与离线安装 WSL 内核指南

1. 问题背景与核心痛点拆解1.1 这个报错到底在说什么如果你在 Windows 10 上敲下wsl --update,终端回你一句“请求的操作需要提升”,别慌,这不是系统坏了,也不是 WSL 装错了。这句话翻译成人话就是:当前这个终端窗口没…

作者头像 李华