transformer-deploy
transformer-deploy 是一款专为 Hugging Face Transformer 模型打造的高效推理部署工具,旨在帮助开发者将模型快速转化为生产级服务。它解决了传统部署方案(如 Pytorch 搭配 FastAPI)在推理延迟和吞吐量上的瓶颈问题,通过自动化优化流程,让模型在 CPU 或 GPU 上的运行速度提升 5 到 10 倍,轻松实现亚毫秒级低延迟响应。
这款工具特别适合需要构建高性能语义搜索、文本分类、命名实体识别或文本生成服务的 AI 工程师与后端开发者。其核心亮点在于“一键式”操作:只需一条命令,即可自动完成模型导出、量化压缩以及针对 NVIDIA TensorRT 和 Triton 推理服务器的深度优化。相比手动配置复杂的底层加速技术,transformer-deploy 封装了诸多高阶技巧,让用户无需成为专家也能享受到企业级的推理性能。无论是处理海量用户请求的在线服务,还是对实时性要求极高的应用场景,它都能提供稳定且极速的解决方案,让模型部署变得简单而高效。
使用场景
某法律科技团队正在构建实时语义检索系统,需在用户查询瞬间对数百个法律条文片段进行重排序(Re-ranking),以确保判决推荐的精准度。
没有 transformer-deploy 时
- 响应延迟过高:基于 PyTorch + FastAPI 的传统架构导致单次推理耗时过长,无法满足亚毫秒级的实时交互需求,用户等待感明显。
- 资源成本高昂:为了勉强维持并发吞吐量,不得不堆砌大量 GPU 实例,导致云端算力成本居高不下。
- 部署门槛极高:若想手动集成 Nvidia TensorRT 和 Triton 以获得极致性能,需耗费数周时间攻克复杂的算子优化与配置陷阱,开发周期被严重拖慢。
- 扩展性受限:在流量高峰期,原有架构难以线性扩展,容易成为整个法律服务平台的性能瓶颈。
使用 transformer-deploy 后
- 推理速度飞跃:通过一键自动应用 TensorRT 优化与量化技术,模型推理速度提升 5 至 10 倍,轻松实现亚毫秒级低延迟响应。
- 算力成本骤降:同等吞吐量下所需的 GPU 资源大幅减少,显著降低了生产环境的运营支出。
- 上线效率倍增:无需深入底层细节,仅需一条命令即可完成从 Hugging Face 模型到企业级 Triton 服务的部署,将原本数周的优化工作压缩至分钟级。
- 生产级稳定性:直接获得支持 CPU/GPU 的企业级推理服务架构,完美承载高并发下的法律条文实时重排序任务。
transformer-deploy 将原本需要专家级调优的复杂部署流程简化为单一命令,让法律 AI 应用在保持极致性能的同时实现了快速落地。
运行环境要求
- Linux
- GPU 推理必需(使用 TensorRT 或 ONNX Runtime 加速),需安装 NVIDIA 驱动和 NVIDIA Container Toolkit
- 示例中使用了 GeForce RTX 3090 和 Tesla T4
- CPU 模式也支持但性能较低
未说明(运行 Triton Server 时建议设置共享内存 --shm-size 256m)

快速开始
Hugging Face Transformer 亚毫秒级推理️及生产环境部署:🤗 → 🤯
使用一条命令行即可优化并部署 生产环境 中的 🤗 Hugging Face Transformer 模型。
=> 推理速度最高可提升至 10 倍!<=
为什么需要这个工具?
在 Lefebvre Dalloz,我们在生产环境中运行法律领域的 语义搜索引擎,用非营销术语来说就是重排序器,而我们的实现正是基于 Transformer。
在这种场景下,延迟是提供良好用户体验的关键因素,相关性推理需要针对每个用户查询中的数百个片段进行在线计算。
我们尝试过许多解决方案,以下是我们的发现:
Pytorch + FastAPI = 🐢
大多数关于 Transformer 生产环境部署的教程都是基于 Pytorch 和 FastAPI 构建的。
两者都是非常优秀的工具,但在推理性能上并不出色(实际测量结果见下文)。
Microsoft ONNX Runtime + Nvidia Triton 推理服务器 = 🏃💨
如果你愿意花些时间,也可以基于 ONNX Runtime 和 Triton 推理服务器搭建一套方案。
通常情况下,相比原生 Pytorch,推理速度可以提升 2 到 4 倍。这已经相当不错了!
Nvidia TensorRT + Nvidia Triton 推理服务器 = ⚡️🏃💨💨
然而,如果希望在 GPU 上获得业界顶尖的性能,唯一的组合就是 Nvidia TensorRT 和 Triton。
与原生 Pytorch 相比,推理速度通常可以提升 5 倍。
有时甚至可以达到 10 倍的加速。
但是……TensorRT 的掌握需要一定的技巧,且这些技巧并不容易想到,我们已经为你实现了它们!
功能特性
- 大幅优化 Transformer 模型的推理性能(CPU 和 GPU)-> 加速 5 至 10 倍
- 将模型部署到
Nvidia Triton推理服务器上(企业级),速度比FastAPI快 6 倍 - 支持 CPU 和 GPU 上的量化
- 使用简单:只需一条命令即可完成优化!
- 支持的模型:任何可导出为 ONNX 格式的模型(即大多数模型)
- 支持的任务:文档分类、标记分类(NER)、特征提取(即 sentence-transformers 密集嵌入)、文本生成
想了解其内部工作原理吗?
请阅读 🤗 Hugging Face Transformer 推理延迟低于 1 毫秒 📖
想在 3 分钟内亲自体验一下吗?
为了大致了解你的模型可以获得怎样的加速效果,你可以尝试下面的仅使用 Docker 的运行示例。
对于 GPU 运行,你需要在机器上安装 Nvidia 驱动程序和 NVIDIA Container Toolkit。
以下涵盖了 3 种任务:
- 分类,
- 特征提取(文本转密集嵌入)
- 文本生成(GPT-2 风格)。
此外,我们还添加了一个 GPU 量化 笔记本,可以直接在 Docker 中打开并进行实验。
首先,克隆仓库,因为下面的一些命令会依赖于找到 demo 文件夹:
git clone git@github.com:ELS-RD/transformer-deploy.git
cd transformer-deploy
# docker 镜像可能需要几分钟
docker pull ghcr.io/els-rd/transformer-deploy:0.6.0
### 分类/重排序(编码器模型)
分类是 NLP 中常见的任务,大型语言模型在这方面表现优异。
该任务也被搜索引擎用来提供类似 Google 的相关性排序(参见 [arxiv](https://arxiv.org/abs/1901.04085))。
#### 优化现有模型
此命令将一次性完成模型优化、生成 Triton 配置以及 Triton 文件结构:
```shell
docker run -it --rm --gpus all \
-v $PWD:/project ghcr.io/els-rd/transformer-deploy:0.6.0 \
bash -c "cd /project && \
convert_model -m \"philschmid/MiniLM-L6-H384-uncased-sst2\" \
--backend tensorrt onnx \
--seq-len 16 128 128"
# 输出:
# ...
# 在 NVIDIA GeForce RTX 3090 上进行推理
# 延迟情况:
# [Pytorch (FP32)] 平均 5.43ms,标准差 0.70ms,最小 4.88ms,最大 7.81ms,中位数 5.09ms,95%分位数 7.01ms,99%分位数 7.53ms
# [Pytorch (FP16)] 平均 6.55ms,标准差 1.00ms,最小 5.75ms,最大 10.38ms,中位数 6.01ms,95%分位数 8.57ms,99%分位数 9.21ms
# [TensorRT (FP16)] 平均 0.53ms,标准差 0.03ms,最小 0.49ms,最大 0.61ms,中位数 0.52ms,95%分位数 0.57ms,99%分位数 0.58ms
# [ONNX Runtime (FP32)] 平均 1.57ms,标准差 0.05ms,最小 1.49ms,最大 1.90ms,中位数 1.57ms,95%分位数 1.63ms,99%分位数 1.76ms
# [ONNX Runtime(优化版)] 平均 0.90ms,标准差 0.03ms,最小 0.88ms,最大 1.23ms,中位数 0.89ms,95%分位数 0.95ms,99%分位数 0.97ms
# 每个推理引擎的输出与 Pytorch 的输出误差均在 0.3 以内
它会输出平均延迟及其他统计信息。
通常情况下,Nvidia TensorRT 是最快的选项,而 ONNX Runtime 通常是第二选择。
在 ONNX Runtime 中,“优化版”意味着启用了内核融合和混合精度。
无论模型大小如何,Pytorch 在 Transformer 推理方面始终不具备竞争力,即使使用混合精度也是如此。
运行 Nvidia Triton 推理服务器
请注意,我们在运行时安装了 transformers。
在生产环境中,建议构建一个包含预装 transformers 的三行 Docker 镜像。
docker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 256m \
-v $PWD/triton_models:/models nvcr.io/nvidia/tritonserver:22.07-py3 \
bash -c "pip install transformers && tritonserver --model-repository=/models"
# 输出:
# ...
# I0207 09:58:32.738831 1 grpc_server.cc:4195] GRPCInferenceService 已启动,地址为 0.0.0.0:8001
# I0207 09:58:32.739875 1 http_server.cc:2857] HTTPService 已启动,地址为 0.0.0.0:8000
# I0207 09:58:32.782066 1 http_server.cc:167] 已在 0.0.0.0:8002 启动指标服务
查询推理
查询 ONNX 模型(将 transformer_onnx_inference 替换为 transformer_tensorrt_inference 可以查询 TensorRT 引擎):
curl -X POST http://localhost:8000/v2/models/transformer_onnx_inference/versions/1/infer \
--data-binary "@demo/infinity/query_body.bin" \
--header "Inference-Header-Content-Length: 161"
# 输出:
# {"model_name":"transformer_onnx_inference","model_version":"1","parameters":{"sequence_id":0,"sequence_start":false,"sequence_end":false},"outputs":[{"name":"output","datatype":"FP32","shape":[1,2],"data":[-3.431640625,3.271484375]}]}
模型输出位于 JSON 的末尾(data 字段)。
关于如何从 Python 及其他语言查询服务器的更多信息。
若想在 Python 代码中实现极低延迟的推理(无需推理服务器),请 点击此处。
标记分类(NER)(编码器模型)
标记分类任务会为句子中的每个标记分配一个标签。 最常见的标记分类任务之一是命名实体识别(NER)。 NER 旨在为句子中的每个实体(如人名、地点或组织名称)找到相应的标签。
优化现有模型
此命令可一次性完成模型优化、生成 Triton 配置文件以及 Triton 文件夹结构:
docker run -it --rm --gpus all \
-v $PWD:/project ghcr.io/els-rd/transformer-deploy:0.6.0 \
bash -c "cd /project && \
convert_model -m \"kamalkraj/bert-base-cased-ner-conll2003\" \
--backend tensorrt onnx \
--seq-len 16 128 128 \
--task token-classification"
# 输出:
# ...
# 推理在 Tesla T4 上完成
# 延迟:
# [Pytorch (FP32)] 平均=8.24ms,标准差=0.46ms,最小=7.66ms,最大=13.91ms,中位数=8.20ms,95%分位数=8.38ms,99%分位数=10.01ms
# [Pytorch (FP16)] 平均=6.87ms,标准差=0.44ms,最小=6.69ms,最大=13.05ms,中位数=6.78ms,95%分位数=7.33ms,99%分位数=8.86ms
# [TensorRT (FP16)] 平均=2.33ms,标准差=0.32ms,最小=2.19ms,最大=4.18ms,中位数=2.24ms,95%分位数=3.00ms,99%分位数=4.04ms
# [ONNX Runtime (FP32)] 平均=8.08ms,标准差=0.33ms,最小=7.78ms,最大=10.61ms,中位数=8.06ms,95%分位数=8.18ms,99%分位数=10.55ms
# [ONNX Runtime (优化版)] 平均=2.57ms,标准差=0.04ms,最小=2.38ms,最大=2.83ms,中位数=2.56ms,95%分位数=2.68ms,99%分位数=2.73ms
# 每个推理引擎的输出与 Pytorch 输出的差异均在 0.3 以内
该命令会输出平均延迟及其他统计信息。
通常情况下,Nvidia TensorRT 是最快的选项,而 ONNX Runtime 则是强劲的第二选择。
在 ONNX Runtime 中,“优化版”表示启用了内核融合和混合精度。
无论模型大小如何,Pytorch 在 Transformer 推理方面始终不具备竞争力,即使使用混合精度也不例外。
运行 Nvidia Triton 推理服务器
请注意,我们是在运行时安装 transformers 库的。
对于生产环境,建议构建一个包含预装 transformers 库的三行 Docker 镜像。
docker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 256m \
-v $PWD/triton_models:/models nvcr.io/nvidia/tritonserver:22.07-py3 \
bash -c "pip install transformers torch==1.12.0 -f https://download.pytorch.org/whl/cu116/torch_stable.html && \
tritonserver --model-repository=/models"
# 输出:
# ...
# I0207 09:58:32.738831 1 grpc_server.cc:4195] 已在 0.0.0.0:8001 启动 gRPC 推理服务
# I0207 09:58:32.739875 1 http_server.cc:2857] 已在 0.0.0.0:8000 启动 HTTP 服务
# I0207 09:58:32.782066 1 http_server.cc:167] 已在 0.0.0.0:8002 启动指标服务
查询推理
查询 ONNX 模型(将 transformer_onnx_inference 替换为 transformer_tensorrt_inference 可以查询 TensorRT 引擎):
curl -X POST http://localhost:8000/v2/models/transformer_onnx_inference/versions/1/infer \
--data-binary "@demo/infinity/query_body.bin" \
--header "Inference-Header-Content-Length: 161"
# 输出:
# {"model_name":"transformer_onnx_inference","model_version":"1","outputs":[{"name":"output","datatype":"BYTES","shape":[],"data":["[{\"entity_group\": \"ORG\", \"score\": 0.9848777055740356, \"word\": \"Infinity\", \"start\": 45, \"end\": 53}]"]}]}
问答任务(编码器模型)
问答模型可以从给定文本中检索出问题的答案,这在文档中查找答案时非常有用。
优化现有模型
此命令可一次性完成模型优化、生成 Triton 配置文件以及 Triton 文件夹结构:
docker run -it --rm --gpus all \
-v $PWD:/project ghcr.io/els-rd/transformer-deploy:0.6.0 \
bash -c "cd /project && \
convert_model -m \"distilbert-base-cased-distilled-squad\" \
--backend tensorrt onnx \
--seq-len 16 128 384 \
--task question-answering"
# 输出:
# ...
# 推理在 Tesla T4 上完成
# 延迟:
# [Pytorch (FP32)] 平均=8.24ms,标准差=0.46ms,最小=7.66ms,最大=13.91ms,中位数=8.20ms,95%分位数=8.38ms,99%分位数=10.01ms
# [Pytorch (FP16)] 平均=6.87ms,标准差=0.44ms,最小=6.69ms,最大=13.05ms,中位数=6.78ms,95%分位数=7.33ms,99%分位数=8.86ms
# [TensorRT (FP16)] 平均=2.33ms,标准差=0.32ms,最小=2.19ms,最大=4.18ms,中位数=2.24ms,95%分位数=3.00ms,99%分位数=4.04ms
# [ONNX Runtime (FP32)] 平均=8.08ms,标准差=0.33ms,最小=7.78ms,最大=10.61ms,中位数=8.06ms,95%分位数=8.18ms,99%分位数=10.55ms
# [ONNX Runtime (优化版)] 平均=2.57ms,标准差=0.04ms,最小=2.38ms,最大=2.83ms,中位数=2.56ms,95%分位数=2.68ms,99%分位数=2.73ms
# 每个推理引擎的输出与 Pytorch 输出的差异均在 0.3 以内
该命令会输出平均延迟及其他统计信息。
通常情况下,Nvidia TensorRT 是最快的选项,而 ONNX Runtime 则是强劲的第二选择。
在 ONNX Runtime 中,“优化版”表示启用了内核融合和混合精度。
无论模型大小如何,Pytorch 在 Transformer 推理方面始终不具备竞争力,即使使用混合精度也不例外。
运行 Nvidia Triton 推理服务器
请注意,我们是在运行时安装 transformers 库的。
对于生产环境,建议构建一个包含预装 transformers 库的三行 Docker 镜像。
docker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 1024m \
-v $PWD/triton_models:/models nvcr.io/nvidia/tritonserver:22.07-py3 \
bash -c "pip install transformers torch==1.12.0 -f https://download.pytorch.org/whl/cu116/torch_stable.html && \
tritonserver --model-repository=/models"
# 输出:
# ...
# I0207 09:58:32.738831 1 grpc_server.cc:4195] 已在 0.0.0.0:8001 启动 gRPC 推理服务
# I0207 09:58:32.739875 1 http_server.cc:2857] 已在 0.0.0.0:8000 启动 HTTP 服务
# I0207 09:58:32.782066 1 http_server.cc:167] 已在 0.0.0.0:8002 启动指标服务
查询推理
查询 ONNX 模型(将 transformer_onnx_inference 替换为 transformer_tensorrt_inference 以查询 TensorRT 引擎):
curl -X POST http://localhost:8000/v2/models/transformer_onnx_inference/versions/1/infer \
--data-binary "@demo/question-answering/query_body.bin" \
--header "Inference-Header-Content-Length: 276"
# 输出:
# {"model_name":"transformer_onnx_inference","model_version":"1","outputs":[{"name":"output","datatype":"BYTES","shape":[],"data":["{\"score\": 0.9925152659416199, \"start\": 34, \"end\": 40, \"answer\": \"柏林\"}"]}]}
有关如何生成 query_body.bin 文件,请参阅 demo/question-answering/query_bin_gen.ipynb。
更多推理示例可在 demo/question-answering/ 中找到。
特征提取 / 密集嵌入
自然语言处理中的特征提取任务是将文本转换为密集嵌入。
这种方法作为一种提高搜索引擎相关性(增加召回率)的稳健方式,近年来受到越来越多的关注。
该项目支持来自 sentence-transformers 的模型,并且需要版本 ≥ V2.2.0 的 sentence-transformers 库。
优化现有模型
docker run -it --rm --gpus all \
-v $PWD:/project ghcr.io/els-rd/transformer-deploy:0.6.0 \
bash -c "cd /project && \
convert_model -m \"sentence-transformers/msmarco-distilbert-cos-v5\" \
--backend tensorrt onnx \
--task embedding \
--seq-len 16 128 128"
# 输出:
# ...
# 推理在 NVIDIA GeForce RTX 3090 上完成
# 延迟:
# [Pytorch (FP32)] 平均=5.19ms,标准差=0.45ms,最小=4.74ms,最大=6.64ms,中位数=5.03ms,95%分位数=6.14ms,99%分位数=6.26ms
# [Pytorch (FP16)] 平均=5.41ms,标准差=0.18ms,最小=5.26ms,最大=8.15ms,中位数=5.36ms,95%分位数=5.62ms,99%分位数=5.72ms
# [TensorRT (FP16)] 平均=0.72ms,标准差=0.04ms,最小=0.69ms,最大=1.33ms,中位数=0.70ms,95%分位数=0.78ms,99%分位数=0.81ms
# [ONNX Runtime (FP32)] 平均=1.69ms,标准差=0.18ms,最小=1.62ms,最大=4.07ms,中位数=1.64ms,95%分位数=1.86ms,99%分位数=2.44ms
# [ONNX Runtime(优化版)] 平均=1.03ms,标准差=0.09ms,最小=0.98ms,最大=2.30ms,中位数=1.00ms,95%分位数=1.15ms,99%分位数=1.41ms
# 每个推理引擎的输出与 Pytorch 输出的差异均在 0.3 的容差范围内
运行 Nvidia Triton 推理服务器
docker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 256m \
-v $PWD/triton_models:/models nvcr.io/nvidia/tritonserver:22.07-py3 \
bash -c "pip install transformers && tritonserver --model-repository=/models"
# 输出:
# ...
# I0207 11:04:33.761517 1 grpc_server.cc:4195] GRPC 推理服务已在 0.0.0.0:8001 启动
# I0207 11:04:33.761844 1 http_server.cc:2857] HTTP 服务已在 0.0.0.0:8000 启动
# I0207 11:04:33.803373 1 http_server.cc:167] 指标服务已在 0.0.0.0:8002 启动
查询推理
curl -X POST http://localhost:8000/v2/models/transformer_onnx_inference/versions/1/infer \
--data-binary "@demo/infinity/query_body.bin" \
--header "Inference-Header-Content-Length: 161"
# 输出:
# {"model_name":"transformer_onnx_inference","model_version":"1","parameters":{"sequence_id":0,"sequence_start":false,"sequence_end":false},"outputs":[{"name":"output","datatype":"FP32","shape":[1,768],"data":[0.06549072265625,-0.04327392578125,0.1103515625,-0.007320404052734375,...
文本生成(解码器模型)
文本生成似乎是自然语言处理领域的一个重要方向。
然而,这类模型的运行速度通常较慢。下面我们将加速其中最著名的模型之一:GPT-2。
GPT 示例
我们首先以 GPT-2 模型为例,然后在下一节中使用 T5 模型。
优化现有模型
与之前类似,以下命令将准备 Triton 推理服务器的相关内容。
需要注意的是,Triton 运行:
- 推理引擎(
ONNX Runtime和TensorRT) - 负责解码部分的
Python代码。该Python代码会将模型管理委托给 Triton 服务器。
Python 代码位于 ./triton_models/transformer_tensorrt_generate/1/model.py。
docker run -it --rm --gpus all \
-v $PWD:/project ghcr.io/els-rd/transformer-deploy:0.6.0 \
bash -c "cd /project && \
convert_model -m gpt2 \
--backend tensorrt onnx \
--seq-len 6 256 256 \
--task text-generation"
# 输出:
# ...
# 推理在 NVIDIA GeForce RTX 3090 上完成
# 延迟:
# [Pytorch (FP32)] 平均=9.43ms,标准差=0.59ms,最小=8.95ms,最大=15.02ms,中位数=9.33ms,95%分位数=10.38ms,99%分位数=12.46ms
# [Pytorch (FP16)] 平均=9.92ms,标准差=0.55ms,最小=9.50ms,最大=15.06ms,中位数=9.74ms,95%分位数=10.96ms,99%分位数=12.26ms
# [TensorRT (FP16)] 平均=2.19ms,标准差=0.18ms,最小=2.06ms,最大=3.04ms,中位数=2.10ms,95%分位数=2.64ms,99%分位数=2.79ms
# [ONNX Runtime (FP32)] 平均=4.99ms,标准差=0.38ms,最小=4.68ms,最大=9.09ms,中位数=4.78ms,95%分位数=5.72ms,99%分位数=5.95ms
# [ONNX Runtime(优化版)] 平均=3.93ms,标准差=0.40ms,最小=3.62ms,最大=6.53ms,中位数=3.81ms,95%分位数=4.49ms,99%分位数=5.79ms
# 每个推理引擎的输出与 Pytorch 输出的差异均在 0.3 的容差范围内
提供了两个详细的笔记本:
- GPT-2:https://github.com/ELS-RD/transformer-deploy/blob/main/demo/generative-model/gpt2.ipynb
- T5:https://github.com/ELS-RD/transformer-deploy/blob/main/demo/generative-model/t5.ipynb
优化现有大型模型
对于通常无法在单个 GPU 上完整加载的大型模型,可以按如下方式运行脚本:
docker run -it --rm --shm-size=24g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all \
-v $PWD:/project ghcr.io/els-rd/transformer-deploy:0.6.0 \
bash -c "cd /project && \
convert_model -m gpt2-medium \
--backend tensorrt onnx \
--seq-len 6 256 256 \
--fast \
--atol 3 \
--task text-generation"
模型越大,越可能需要相应地提高脚本的绝对容差。此外,某些模型可能会返回类似以下消息:“已将权重中的 FP32 值(无论是 FP32 无穷大还是超出 FP16 范围的 FP32 值)转换为对应的 FP16 无穷大”。最好在之后对模型进行测试和评估,以了解这种转换的影响。
根据模型大小,此过程可能非常耗时。例如,GPT Neo 2.7B 的转换可能需要 1 小时甚至更长时间。
运行 Nvidia Triton 推理服务器
为了在服务器端运行解码算法,我们需要在 Triton 的 Docker 镜像上安装 Pytorch。
docker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 8g \
-v $PWD/triton_models:/models nvcr.io/nvidia/tritonserver:22.07-py3 \
bash -c "pip install transformers torch==1.12.0 -f https://download.pytorch.org/whl/cu116/torch_stable.html && \
tritonserver --model-repository=/models"
# 输出:
# ...
# I0207 10:29:19.091191 1 grpc_server.cc:4195] GRPC 推理服务已在 0.0.0.0:8001 启动
# I0207 10:29:19.091417 1 http_server.cc:2857] HTTP 服务已在 0.0.0.0:8000 启动
# I0207 10:29:19.132902 1 http_server.cc:167] 已在 0.0.0.0:8002 启动指标服务
查询推理
将 transformer_onnx_generate 替换为 transformer_tensorrt_generate,以查询 TensorRT 引擎。
curl -X POST http://localhost:8000/v2/models/transformer_onnx_generate/versions/1/infer \
--data-binary "@demo/infinity/query_body.bin" \
--header "Inference-Header-Content-Length: 161"
# 输出:
# {"model_name":"transformer_onnx_generate","model_version":"1","outputs":[{"name":"output","datatype":"BYTES","shape":[],"data":["这场直播活动太棒了。我要注册 Infinity。\n\n我打算对这次活动进行直播。\n\n我"]}]}
好吧,输出内容并不太有趣(💩 输入 -> 💩 输出),但你已经明白其中的原理了。
生成模型的源代码位于 ./triton_models/transformer_tensorrt_generate/1/model.py。
你可以根据自己的需求对其进行调整(默认设置为贪婪搜索,并输出 64 个标记)。
Python 代码
你可能希望直接在 Python 中运行优化后的文本生成,而无需使用任何推理服务器:
docker run -p 8888:8888 -v $PWD/demo/generative-model:/project ghcr.io/els-rd/transformer-deploy:0.6.0 \
bash -c "cd /project && jupyter notebook --ip 0.0.0.0 --port 8888 --no-browser --allow-root"
T5-small 示例
在这一部分,我们将展示 t5-small 模型的转换过程。
优化现有大型模型
要优化模型,请按以下方式运行脚本:
docker run -it --rm --shm-size=24g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all \
-v $PWD:/project ghcr.io/els-rd/transformer-deploy:0.6.0 \
bash -c "cd /project && \
convert_model -m t5-small \
--backend onnx \
--seq-len 16 256 256 \
--task text-generation \
--nb-measures 100 \
--generative-model t5 \
--output triton_models"
运行 Nvidia Triton 推理服务器
要在服务器端运行解码算法,我们需要在 Triton Docker 镜像上安装 Pytorch。
docker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 8g \
-v $PWD/triton_models/:/models nvcr.io/nvidia/tritonserver:22.07-py3 \
bash -c "pip install onnx onnxruntime-gpu transformers==4.21.3 git+https://github.com/ELS-RD/transformer-deploy torch==1.12.0 -f https://download.pytorch.org/whl/cu116/torch_stable.html onnx onnxruntime-gpu && \
tritonserver --model-repository=/models"
要测试文本生成,可以尝试以下请求:
curl -X POST http://localhost:8000/v2/models/t5_model_generate/versions/1/infer --data-binary "@demo/generative-model/t5_query_body.bin" --header "Inference-Header-Content-Length: 181"
# 输出:
# {"model_name":"t5_model_generate","model_version":"1","outputs":[{"name":"OUTPUT_TEXT","datatype":"BYTES","shape":[],"data":["我的名字叫沃尔夫冈·沃尔夫冈,我住在柏林。"]}]}
查询推理
将 transformer_onnx_generate 替换为 transformer_tensorrt_generate,以查询 TensorRT 引擎。
curl -X POST http://localhost:8000/v2/models/transformer_onnx_inference/versions/1/infer \
--data-binary "@demo/infinity/seq2seq_query_body.bin" \
--header "Inference-Header-Content-Length: 176"
GPU 上的模型量化
量化是一种通用的方法,可以在其他推理优化的基础上再提升约两倍的速度。
然而,在 Transformer 模型上进行 GPU 量化几乎从未被采用,因为这需要修改模型的源代码。
我们在该库中实现了一种机制,可以更新 Hugging Face 的 Transformer 库以支持量化操作,从而使其使用起来更加便捷。
要体验这一功能,请打开以下笔记本:
docker run -p 8888:8888 -v $PWD/demo/quantization:/project ghcr.io/els-rd/transformer-deploy:0.6.0 \
bash -c "cd /project && jupyter notebook --ip 0.0.0.0 --port 8888 --no-browser --allow-root"
请参阅我们的文档,以获取有关如何使用该软件包的详细说明,包括设置、GPU 量化支持以及 Nvidia Triton 推理服务器的部署。
版本历史
v0.4.02022/02/08v0.3.02021/12/28v0.2.02021/12/08v0.1.12021/11/24v0.1.02021/11/23v0.0.12021/11/08常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
