[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-ELS-RD--transformer-deploy":3,"tool-ELS-RD--transformer-deploy":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",142651,2,"2026-04-06T23:34:12",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107888,"2026-04-06T11:32:50",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":76,"owner_twitter":77,"owner_website":78,"owner_url":79,"languages":80,"stars":92,"forks":93,"last_commit_at":94,"license":95,"difficulty_score":10,"env_os":96,"env_gpu":97,"env_ram":98,"env_deps":99,"category_tags":108,"github_topics":109,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":116,"updated_at":117,"faqs":118,"releases":148},4832,"ELS-RD\u002Ftransformer-deploy","transformer-deploy","Efficient, scalable and enterprise-grade CPU\u002FGPU inference server for 🤗 Hugging Face transformer models 🚀","transformer-deploy 是一款专为 Hugging Face Transformer 模型打造的高效推理部署工具，旨在帮助开发者将模型快速转化为生产级服务。它解决了传统部署方案（如 Pytorch 搭配 FastAPI）在推理延迟和吞吐量上的瓶颈问题，通过自动化优化流程，让模型在 CPU 或 GPU 上的运行速度提升 5 到 10 倍，轻松实现亚毫秒级低延迟响应。\n\n这款工具特别适合需要构建高性能语义搜索、文本分类、命名实体识别或文本生成服务的 AI 工程师与后端开发者。其核心亮点在于“一键式”操作：只需一条命令，即可自动完成模型导出、量化压缩以及针对 NVIDIA TensorRT 和 Triton 推理服务器的深度优化。相比手动配置复杂的底层加速技术，transformer-deploy 封装了诸多高阶技巧，让用户无需成为专家也能享受到企业级的推理性能。无论是处理海量用户请求的在线服务，还是对实时性要求极高的应用场景，它都能提供稳定且极速的解决方案，让模型部署变得简单而高效。","# Hugging Face Transformer submillisecond inference️ and deployment to production: 🤗 → 🤯\n\n[![Documentation](https:\u002F\u002Fimg.shields.io\u002Fwebsite?label=documentation&style=for-the-badge&up_message=online&url=https%3A%2F%2Fels-rd.github.io%2Ftransformer-deploy%2F)](https:\u002F\u002Fels-rd.github.io\u002Ftransformer-deploy\u002F) [![tests](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fworkflow\u002Fstatus\u002FELS-RD\u002Ftransformer-deploy\u002Ftests\u002Fmain?label=tests&style=for-the-badge)](https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Factions\u002Fworkflows\u002Fpython-app.yml) [![Python 3.6](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.8-blue.svg?style=for-the-badge)](https:\u002F\u002Fwww.python.org\u002Fdownloads\u002Frelease\u002Fpython-380\u002F) [![Twitter Follow](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Ffollow\u002Fpommedeterre33?color=orange&style=for-the-badge)](https:\u002F\u002Ftwitter.com\u002Fpommedeterre33)\n\n### Optimize and deploy in **production** 🤗 Hugging Face Transformer models in a single command line.  \n\n=> Up to 10X faster inference! \u003C=\n\n#### Why this tool?\n\n\u003C!--why-start-->\n\nAt [Lefebvre Dalloz](https:\u002F\u002Fwww.lefebvre-dalloz.fr\u002F) we run in production *semantic search engines* in the legal domain, \nin non-marketing language it's a re-ranker, and we based ours on `Transformer`.  \nIn those setup, latency is key to provide good user experience, and relevancy inference is done online for hundreds of snippets per user query.  \nWe have tested many solutions, and below is what we found:\n\n[`Pytorch`](https:\u002F\u002Fpytorch.org\u002F) + [`FastAPI`](https:\u002F\u002Ffastapi.tiangolo.com\u002F) = 🐢  \nMost tutorials on `Transformer` deployment in production are built over Pytorch and FastAPI.\nBoth are great tools but not very performant in inference (actual measures below).  \n\n[`Microsoft ONNX Runtime`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fonnxruntime\u002F) + [`Nvidia Triton inference server`](https:\u002F\u002Fgithub.com\u002Ftriton-inference-server\u002Fserver) = ️🏃💨  \nThen, if you spend some time, you can build something over ONNX Runtime and Triton inference server.\nYou will usually get from 2X to 4X faster inference compared to vanilla Pytorch. It's cool!  \n\n[`Nvidia TensorRT`](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FTensorRT\u002F)  + [`Nvidia Triton inference server`](https:\u002F\u002Fgithub.com\u002Ftriton-inference-server\u002Fserver) = ⚡️🏃💨💨  \nHowever, if you want the best in class performances on GPU, there is only a single possible combination: Nvidia TensorRT and Triton.\nYou will usually get 5X faster inference compared to vanilla Pytorch.  \nSometimes it can rise up to **10X faster inference**.  \nBuuuuttt... TensorRT can ask some efforts to master, it requires tricks not easy to come up with, we implemented them for you!  \n\n[Detailed tool comparison table](https:\u002F\u002Fels-rd.github.io\u002Ftransformer-deploy\u002Fcompare\u002F)\n\n## Features\n\n* Heavily optimize transformer models for inference (CPU and GPU) -> between 5X and 10X speedup\n* deploy models on `Nvidia Triton` inference servers (enterprise grade), 6X faster than `FastAPI`\n* add quantization support for both CPU and GPU\n* simple to use: optimization done in a single command line!\n* supported model: any model that can be exported to ONNX (-> most of them)\n* supported tasks: document classification, token classification (NER), feature extraction (aka sentence-transformers dense embeddings), text generation\n\n> Want to understand how it works under the hood?  \n> read [🤗 Hugging Face Transformer inference UNDER 1 millisecond latency 📖](https:\u002F\u002Ftowardsdatascience.com\u002Fhugging-face-transformer-inference-under-1-millisecond-latency-e1be0057a51c?source=friends_link&sk=cd880e05c501c7880f2b9454830b8915)  \n> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FELS-RD_transformer-deploy_readme_4540f65c21e1.jpg\" width=\"120\">\n\n## Want to check by yourself in 3 minutes?\n\nTo have a raw idea of what kind of acceleration you will get on your own model, you can try the `docker` only run below.\nFor GPU run, you need to have installed on your machine Nvidia drivers and [NVIDIA Container Toolkit](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnvidia-docker).\n\n**3 tasks are covered** below: \n\n* Classification, \n* feature extraction (text to dense embeddings) \n* text generation (GPT-2 style).  \n\nMoreover, we have added a GPU `quantization` notebook to open directly on `Docker` to play with.\n\nFirst, clone the repo as some commands below expect to find the `demo` folder:\n\n```shell\ngit clone git@github.com:ELS-RD\u002Ftransformer-deploy.git\ncd transformer-deploy\n# docker image may take a few minutes\ndocker pull ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \n\n\n### Classification\u002Freranking (encoder model)\n\nClassification is a common task in NLP, and large language models have shown great results.  \nThis task is also used for search engines to provide Google like relevancy (cf. [arxiv](https:\u002F\u002Farxiv.org\u002Fabs\u002F1901.04085))\n\n#### Optimize existing model\n\nThis will optimize models, generate Triton configuration and Triton folder layout in a single command:\n\n```shell\ndocker run -it --rm --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m \\\"philschmid\u002FMiniLM-L6-H384-uncased-sst2\\\" \\\n    --backend tensorrt onnx \\\n    --seq-len 16 128 128\"\n\n# output:  \n# ...\n# Inference done on NVIDIA GeForce RTX 3090\n# latencies:\n# [Pytorch (FP32)] mean=5.43ms, sd=0.70ms, min=4.88ms, max=7.81ms, median=5.09ms, 95p=7.01ms, 99p=7.53ms\n# [Pytorch (FP16)] mean=6.55ms, sd=1.00ms, min=5.75ms, max=10.38ms, median=6.01ms, 95p=8.57ms, 99p=9.21ms\n# [TensorRT (FP16)] mean=0.53ms, sd=0.03ms, min=0.49ms, max=0.61ms, median=0.52ms, 95p=0.57ms, 99p=0.58ms\n# [ONNX Runtime (FP32)] mean=1.57ms, sd=0.05ms, min=1.49ms, max=1.90ms, median=1.57ms, 95p=1.63ms, 99p=1.76ms\n# [ONNX Runtime (optimized)] mean=0.90ms, sd=0.03ms, min=0.88ms, max=1.23ms, median=0.89ms, 95p=0.95ms, 99p=0.97ms\n# Each infence engine output is within 0.3 tolerance compared to Pytorch output\n```\n\nIt will output mean latency and other statistics.  \nUsually `Nvidia TensorRT` is the fastest option and `ONNX Runtime` is usually a strong second option.  \nOn ONNX Runtime, `optimized` means that kernel fusion and mixed precision are enabled.  \n`Pytorch` is never competitive on transformer inference, including mixed precision, whatever the model size.  \n\n#### Run Nvidia Triton inference server\n\nNote that we install `transformers` at run time.  \nFor production, it's advised to build your own 3-line Docker image with `transformers` pre-installed.\n\n```shell\ndocker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 256m \\\n  -v $PWD\u002Ftriton_models:\u002Fmodels nvcr.io\u002Fnvidia\u002Ftritonserver:22.07-py3 \\\n  bash -c \"pip install transformers && tritonserver --model-repository=\u002Fmodels\"\n\n# output:\n# ...\n# I0207 09:58:32.738831 1 grpc_server.cc:4195] Started GRPCInferenceService at 0.0.0.0:8001\n# I0207 09:58:32.739875 1 http_server.cc:2857] Started HTTPService at 0.0.0.0:8000\n# I0207 09:58:32.782066 1 http_server.cc:167] Started Metrics Service at 0.0.0.0:8002\n```\n\n#### Query inference\n\nQuery ONNX models (replace `transformer_onnx_inference` by `transformer_tensorrt_inference` to query TensorRT engine):\n\n```shell\ncurl -X POST  http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ftransformer_onnx_inference\u002Fversions\u002F1\u002Finfer \\\n  --data-binary \"@demo\u002Finfinity\u002Fquery_body.bin\" \\\n  --header \"Inference-Header-Content-Length: 161\"\n\n# output:\n# {\"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]}]}\n```\n\nModel output is at the end of the Json (`data` field).\n[More information about how to query the server from `Python`, and other languages](https:\u002F\u002Fels-rd.github.io\u002Ftransformer-deploy\u002Frun\u002F).\n\nTo get very low latency inference in your Python code (no inference server): [click here](https:\u002F\u002Fels-rd.github.io\u002Ftransformer-deploy\u002Fpython\u002F)\n\n### Token-classification (NER) (encoder model)\n\nToken classification assigns a label to individual tokens in a sentence.\nOne of the most common token classification tasks is Named Entity Recognition (NER). \nNER attempts to find a label for each entity in a sentence, such as a person, location, or organization.\n\n#### Optimize existing model\n\nThis will optimize models, generate Triton configuration and Triton folder layout in a single command:\n\n```shell\ndocker run -it --rm --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m \\\"kamalkraj\u002Fbert-base-cased-ner-conll2003\\\" \\\n    --backend tensorrt onnx \\\n    --seq-len 16 128 128 \\\n    --task token-classification\"\n\n# output:  \n# ...\n# Inference done on Tesla T4\n# latencies:\n# [Pytorch (FP32)] mean=8.24ms, sd=0.46ms, min=7.66ms, max=13.91ms, median=8.20ms, 95p=8.38ms, 99p=10.01ms\n# [Pytorch (FP16)] mean=6.87ms, sd=0.44ms, min=6.69ms, max=13.05ms, median=6.78ms, 95p=7.33ms, 99p=8.86ms\n# [TensorRT (FP16)] mean=2.33ms, sd=0.32ms, min=2.19ms, max=4.18ms, median=2.24ms, 95p=3.00ms, 99p=4.04ms\n# [ONNX Runtime (FP32)] mean=8.08ms, sd=0.33ms, min=7.78ms, max=10.61ms, median=8.06ms, 95p=8.18ms, 99p=10.55ms\n# [ONNX Runtime (optimized)] mean=2.57ms, sd=0.04ms, min=2.38ms, max=2.83ms, median=2.56ms, 95p=2.68ms, 99p=2.73ms\n# Each infence engine output is within 0.3 tolerance compared to Pytorch output\n```\n\nIt will output mean latency and other statistics.  \nUsually `Nvidia TensorRT` is the fastest option and `ONNX Runtime` is usually a strong second option.  \nOn ONNX Runtime, `optimized` means that kernel fusion and mixed precision are enabled.  \n`Pytorch` is never competitive on transformer inference, including mixed precision, whatever the model size.  \n\n#### Run Nvidia Triton inference server\n\nNote that we install `transformers` at run time.  \nFor production, it's advised to build your own 3-line Docker image with `transformers` pre-installed.\n\n```shell\ndocker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 256m \\\n  -v $PWD\u002Ftriton_models:\u002Fmodels nvcr.io\u002Fnvidia\u002Ftritonserver:22.07-py3 \\\n  bash -c \"pip install transformers torch==1.12.0 -f https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu116\u002Ftorch_stable.html && \\\n  tritonserver --model-repository=\u002Fmodels\"\n\n# output:\n# ...\n# I0207 09:58:32.738831 1 grpc_server.cc:4195] Started GRPCInferenceService at 0.0.0.0:8001\n# I0207 09:58:32.739875 1 http_server.cc:2857] Started HTTPService at 0.0.0.0:8000\n# I0207 09:58:32.782066 1 http_server.cc:167] Started Metrics Service at 0.0.0.0:8002\n```\n\n#### Query inference \n\nQuery ONNX models (replace `transformer_onnx_inference` by `transformer_tensorrt_inference` to query TensorRT engine):\n\n```shell\ncurl -X POST  http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ftransformer_onnx_inference\u002Fversions\u002F1\u002Finfer \\\n  --data-binary \"@demo\u002Finfinity\u002Fquery_body.bin\" \\\n  --header \"Inference-Header-Content-Length: 161\"\n\n# output:\n# {\"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}]\"]}]}\n```\n\n### Question Answering (encoder model)\n\nQuestion Answering models can retrieve the answer to a question from a given text, which is useful for searching for an answer in a document.\n\n#### Optimize existing model\n\nThis will optimize models, generate Triton configuration and Triton folder layout in a single command:\n\n```shell\ndocker run -it --rm --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m \\\"distilbert-base-cased-distilled-squad\\\" \\\n    --backend tensorrt onnx \\\n    --seq-len 16 128 384 \\\n    --task question-answering\"\n\n# output:  \n# ...\n# Inference done on Tesla T4\n# latencies:\n# [Pytorch (FP32)] mean=8.24ms, sd=0.46ms, min=7.66ms, max=13.91ms, median=8.20ms, 95p=8.38ms, 99p=10.01ms\n# [Pytorch (FP16)] mean=6.87ms, sd=0.44ms, min=6.69ms, max=13.05ms, median=6.78ms, 95p=7.33ms, 99p=8.86ms\n# [TensorRT (FP16)] mean=2.33ms, sd=0.32ms, min=2.19ms, max=4.18ms, median=2.24ms, 95p=3.00ms, 99p=4.04ms\n# [ONNX Runtime (FP32)] mean=8.08ms, sd=0.33ms, min=7.78ms, max=10.61ms, median=8.06ms, 95p=8.18ms, 99p=10.55ms\n# [ONNX Runtime (optimized)] mean=2.57ms, sd=0.04ms, min=2.38ms, max=2.83ms, median=2.56ms, 95p=2.68ms, 99p=2.73ms\n# Each infence engine output is within 0.3 tolerance compared to Pytorch output\n```\n\nIt will output mean latency and other statistics.  \nUsually `Nvidia TensorRT` is the fastest option and `ONNX Runtime` is usually a strong second option.  \nOn ONNX Runtime, `optimized` means that kernel fusion and mixed precision are enabled.  \n`Pytorch` is never competitive on transformer inference, including mixed precision, whatever the model size.  \n\n#### Run Nvidia Triton inference server\n\nNote that we install `transformers` at run time.  \nFor production, it's advised to build your own 3-line Docker image with `transformers` pre-installed.\n\n```shell\ndocker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 1024m \\\n  -v $PWD\u002Ftriton_models:\u002Fmodels nvcr.io\u002Fnvidia\u002Ftritonserver:22.07-py3 \\\n  bash -c \"pip install transformers torch==1.12.0 -f https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu116\u002Ftorch_stable.html && \\\n  tritonserver --model-repository=\u002Fmodels\"\n\n# output:\n# ...\n# I0207 09:58:32.738831 1 grpc_server.cc:4195] Started GRPCInferenceService at 0.0.0.0:8001\n# I0207 09:58:32.739875 1 http_server.cc:2857] Started HTTPService at 0.0.0.0:8000\n# I0207 09:58:32.782066 1 http_server.cc:167] Started Metrics Service at 0.0.0.0:8002\n```\n\n#### Query inference \n\nQuery ONNX models (replace `transformer_onnx_inference` by `transformer_tensorrt_inference` to query TensorRT engine):\n\n```shell\ncurl -X POST  http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ftransformer_onnx_inference\u002Fversions\u002F1\u002Finfer \\\n  --data-binary \"@demo\u002Fquestion-answering\u002Fquery_body.bin\" \\\n  --header \"Inference-Header-Content-Length: 276\"\n\n# output:\n# {\"model_name\":\"transformer_onnx_inference\",\"model_version\":\"1\",\"outputs\":[{\"name\":\"output\",\"datatype\":\"BYTES\",\"shape\":[],\"data\":[\"{\\\"score\\\": 0.9925152659416199, \\\"start\\\": 34, \\\"end\\\": 40, \\\"answer\\\": \\\"Berlin\\\"}\"]}]}\n```\nCheckout demo\u002Fquestion-answering\u002Fquery_bin_gen.ipynb for how to generate the query_body.bin file.\nMore examples of inference can be found in demo\u002Fquestion-answering\u002F\n\n\n### Feature extraction \u002F dense embeddings\n\nFeature extraction in NLP is the task to convert text to dense embeddings.  \nIt has gained some traction as a robust way to improve search engine relevancy (increase recall).  \nThis project supports models from [sentence-transformers](https:\u002F\u002Fgithub.com\u002FUKPLab\u002Fsentence-transformers) and it requires \na version >= V2.2.0 of sentence-transformers library.\n#### Optimize existing model\n\n```shell\ndocker run -it --rm --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m \\\"sentence-transformers\u002Fmsmarco-distilbert-cos-v5\\\" \\\n    --backend tensorrt onnx \\\n    --task embedding \\\n    --seq-len 16 128 128\"\n\n# output:\n# ...\n# Inference done on NVIDIA GeForce RTX 3090\n# latencies:\n# [Pytorch (FP32)] mean=5.19ms, sd=0.45ms, min=4.74ms, max=6.64ms, median=5.03ms, 95p=6.14ms, 99p=6.26ms\n# [Pytorch (FP16)] mean=5.41ms, sd=0.18ms, min=5.26ms, max=8.15ms, median=5.36ms, 95p=5.62ms, 99p=5.72ms\n# [TensorRT (FP16)] mean=0.72ms, sd=0.04ms, min=0.69ms, max=1.33ms, median=0.70ms, 95p=0.78ms, 99p=0.81ms\n# [ONNX Runtime (FP32)] mean=1.69ms, sd=0.18ms, min=1.62ms, max=4.07ms, median=1.64ms, 95p=1.86ms, 99p=2.44ms\n# [ONNX Runtime (optimized)] mean=1.03ms, sd=0.09ms, min=0.98ms, max=2.30ms, median=1.00ms, 95p=1.15ms, 99p=1.41ms\n# Each infence engine output is within 0.3 tolerance compared to Pytorch output\n```\n\n#### Run Nvidia Triton inference server\n\n```shell\ndocker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 256m \\\n  -v $PWD\u002Ftriton_models:\u002Fmodels nvcr.io\u002Fnvidia\u002Ftritonserver:22.07-py3 \\\n  bash -c \"pip install transformers && tritonserver --model-repository=\u002Fmodels\"\n\n# output:\n# ...\n# I0207 11:04:33.761517 1 grpc_server.cc:4195] Started GRPCInferenceService at 0.0.0.0:8001\n# I0207 11:04:33.761844 1 http_server.cc:2857] Started HTTPService at 0.0.0.0:8000\n# I0207 11:04:33.803373 1 http_server.cc:167] Started Metrics Service at 0.0.0.0:8002\n\n```\n\n#### Query inference \n\n```shell\ncurl -X POST  http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ftransformer_onnx_inference\u002Fversions\u002F1\u002Finfer \\\n  --data-binary \"@demo\u002Finfinity\u002Fquery_body.bin\" \\\n  --header \"Inference-Header-Content-Length: 161\"\n\n# output:\n# {\"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,...\n```\n\n### Generate text (decoder model)\n\nText generation seems to be the way to go for NLP.  \nUnfortunately, they are slow to run, below we will accelerate the most famous of them: GPT-2.\n\n#### GPT example\nWe will start with GPT-2 model example, then in the next section we will use T5-model.\n\n#### Optimize existing model\n\nLike before, command below will prepare Triton inference server stuff.  \nOne point to have in mind is that Triton run:\n- inference engines (`ONNX Runtime` and `TensorRT`)\n- `Python` code in charge of the `decoding` part. `Python` code delegate to Triton server the model management.\n\n`Python` code is in `.\u002Ftriton_models\u002Ftransformer_tensorrt_generate\u002F1\u002Fmodel.py`\n\n```shell\ndocker run -it --rm --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m gpt2 \\\n    --backend tensorrt onnx \\\n    --seq-len 6 256 256 \\\n    --task text-generation\"\n\n# output:\n# ...\n# Inference done on NVIDIA GeForce RTX 3090\n# latencies:\n# [Pytorch (FP32)] mean=9.43ms, sd=0.59ms, min=8.95ms, max=15.02ms, median=9.33ms, 95p=10.38ms, 99p=12.46ms\n# [Pytorch (FP16)] mean=9.92ms, sd=0.55ms, min=9.50ms, max=15.06ms, median=9.74ms, 95p=10.96ms, 99p=12.26ms\n# [TensorRT (FP16)] mean=2.19ms, sd=0.18ms, min=2.06ms, max=3.04ms, median=2.10ms, 95p=2.64ms, 99p=2.79ms\n# [ONNX Runtime (FP32)] mean=4.99ms, sd=0.38ms, min=4.68ms, max=9.09ms, median=4.78ms, 95p=5.72ms, 99p=5.95ms\n# [ONNX Runtime (optimized)] mean=3.93ms, sd=0.40ms, min=3.62ms, max=6.53ms, median=3.81ms, 95p=4.49ms, 99p=5.79ms\n# Each infence engine output is within 0.3 tolerance compared to Pytorch output\n```\n\nTwo detailed notebooks are available:\n\n* GPT-2: \u003Chttps:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fblob\u002Fmain\u002Fdemo\u002Fgenerative-model\u002Fgpt2.ipynb>\n* T5: \u003Chttps:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fblob\u002Fmain\u002Fdemo\u002Fgenerative-model\u002Ft5.ipynb>\n\n#### Optimize existing large model\n\nTo optimize models which typically don't fit twice onto a single GPU, run the script as follows:\n\n```shell\ndocker run -it --rm --shm-size=24g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m gpt2-medium \\\n    --backend tensorrt onnx \\\n    --seq-len 6 256 256 \\\n    --fast \\\n    --atol 3 \\\n    --task text-generation\"\n```\n\nThe larger the model gets, the more likely it is that you need to also increase the absolute tolerance of the script.\nAdditionally, some models may return a message similar to: `Converted FP32 value in weights (either FP32 infinity or FP32 value outside FP16 range) to corresponding FP16 infinity`. It is best to test and evaluate the model afterwards to understand the implications of this conversion.\n\nDepending on model size this may take really long. GPT Neo 2.7B can easily take 1 hour of conversion or more.\n\n#### Run Nvidia Triton inference server\n\nTo run decoding algorithm server side, we need to install `Pytorch` on `Triton` docker image.\n\n```shell\ndocker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 8g \\\n  -v $PWD\u002Ftriton_models:\u002Fmodels nvcr.io\u002Fnvidia\u002Ftritonserver:22.07-py3 \\\n  bash -c \"pip install transformers torch==1.12.0 -f https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu116\u002Ftorch_stable.html && \\\n  tritonserver --model-repository=\u002Fmodels\"\n\n# output:\n# ...\n# I0207 10:29:19.091191 1 grpc_server.cc:4195] Started GRPCInferenceService at 0.0.0.0:8001\n# I0207 10:29:19.091417 1 http_server.cc:2857] Started HTTPService at 0.0.0.0:8000\n# I0207 10:29:19.132902 1 http_server.cc:167] Started Metrics Service at 0.0.0.0:8002\n```\n\n#### Query inference\n\nReplace `transformer_onnx_generate` by `transformer_tensorrt_generate` to query `TensorRT` engine.\n\n```shell\ncurl -X POST  http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ftransformer_onnx_generate\u002Fversions\u002F1\u002Finfer \\\n  --data-binary \"@demo\u002Finfinity\u002Fquery_body.bin\" \\\n  --header \"Inference-Header-Content-Length: 161\"\n\n# output:\n# {\"model_name\":\"transformer_onnx_generate\",\"model_version\":\"1\",\"outputs\":[{\"name\":\"output\",\"datatype\":\"BYTES\",\"shape\":[],\"data\":[\"This live event is great. I will sign-up for Infinity.\\n\\nI'm going to be doing a live stream of the event.\\n\\nI\"]}]}\n```\n\nOk, the output is not very interesting (💩 in -> 💩 out) but you get the idea.  \nSource code of the generative model is in `.\u002Ftriton_models\u002Ftransformer_tensorrt_generate\u002F1\u002Fmodel.py`.  \nYou may want to tweak it regarding your needs (default is set for greedy search and output 64 tokens).\n\n#### Python code\n\nYou may be interested in running optimized text generation on Python directly, without using any inference server:  \n\n```shell\ndocker run -p 8888:8888 -v $PWD\u002Fdemo\u002Fgenerative-model:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && jupyter notebook --ip 0.0.0.0 --port 8888 --no-browser --allow-root\"\n```\n\n#### T5-small example\nIn this section we will present the t5-small model conversion.\n\n#### Optimize existing large model\n\nTo optimize model run the script as follows:\n\n```shell\ndocker run -it --rm --shm-size=24g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m t5-small \\\n    --backend onnx \\\n    --seq-len 16 256 256 \\\n    --task text-generation \\\n    --nb-measures 100 \\\n    --generative-model t5 \\\n    --output triton_models\"\n```\n#### Run Nvidia Triton inference server\n\nTo run decoding algorithm server side, we need to install `Pytorch` on `Triton` docker image.\n\n```shell\ndocker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 8g \\\n  -v $PWD\u002Ftriton_models\u002F:\u002Fmodels nvcr.io\u002Fnvidia\u002Ftritonserver:22.07-py3 \\\n  bash -c \"pip install onnx onnxruntime-gpu transformers==4.21.3 git+https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy torch==1.12.0 -f https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu116\u002Ftorch_stable.html onnx onnxruntime-gpu && \\\n  tritonserver --model-repository=\u002Fmodels\"\n```\nTo test text generation, you can try this request:\n```shell\ncurl -X POST http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ft5_model_generate\u002Fversions\u002F1\u002Finfer --data-binary \"@demo\u002Fgenerative-model\u002Ft5_query_body.bin\" --header \"Inference-Header-Content-Length: 181\"\n\n# output:\n# {\"model_name\":\"t5_model_generate\",\"model_version\":\"1\",\"outputs\":[{\"name\":\"OUTPUT_TEXT\",\"datatype\":\"BYTES\",\"shape\":[],\"data\":[\"Mein Name mein Wolfgang Wolfgang und ich wohne in Berlin.\"]}]}\n```\n#### Query inference\n\nReplace `transformer_onnx_generate` by `transformer_tensorrt_generate` to query `TensorRT` engine.\n\n```shell\ncurl -X POST  http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ftransformer_onnx_inference\u002Fversions\u002F1\u002Finfer \\\n  --data-binary \"@demo\u002Finfinity\u002Fseq2seq_query_body.bin\" \\\n  --header \"Inference-Header-Content-Length: 176\"\n```\n\n### Model quantization on GPU\n\nQuantization is a generic method to get X2 speedup on top of other inference optimization.  \nGPU quantization on transformers is almost never used because it requires to modify model source code.  \n\nWe have implemented in this library a mechanism which updates Hugging Face transformers library to support quantization.  \nIt makes it easy to use.\n\nTo play with it, open this notebook:\n\n```shell\ndocker run -p 8888:8888 -v $PWD\u002Fdemo\u002Fquantization:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && jupyter notebook --ip 0.0.0.0 --port 8888 --no-browser --allow-root\"\n```\n\n\u003C!--why-end-->\n\n## See our [documentation](https:\u002F\u002Fels-rd.github.io\u002Ftransformer-deploy\u002F) for detailed instructions on how to use the package, including setup, GPU quantization support and Nvidia Triton inference server deployment.\n","# Hugging Face Transformer 亚毫秒级推理️及生产环境部署：🤗 → 🤯\n\n[![文档](https:\u002F\u002Fimg.shields.io\u002Fwebsite?label=documentation&style=for-the-badge&up_message=online&url=https%3A%2F%2Fels-rd.github.io%2Ftransformer-deploy%2F)](https:\u002F\u002Fels-rd.github.io\u002Ftransformer-deploy\u002F) [![测试](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fworkflow\u002Fstatus\u002FELS-RD\u002Ftransformer-deploy\u002Ftests\u002Fmain?label=tests&style=for-the-badge)](https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Factions\u002Fworkflows\u002Fpython-app.yml) [![Python 3.6](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.8-blue.svg?style=for-the-badge)](https:\u002F\u002Fwww.python.org\u002Fdownloads\u002Frelease\u002Fpython-380\u002F) [![Twitter 关注](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Ffollow\u002Fpommedeterre33?color=orange&style=for-the-badge)](https:\u002F\u002Ftwitter.com\u002Fpommedeterre33)\n\n### 使用一条命令行即可优化并部署 **生产环境** 中的 🤗 Hugging Face Transformer 模型。\n\n=> 推理速度最高可提升至 10 倍！\u003C=\n\n#### 为什么需要这个工具？\n\n\u003C!--why-start-->\n\n在 [Lefebvre Dalloz](https:\u002F\u002Fwww.lefebvre-dalloz.fr\u002F)，我们在生产环境中运行法律领域的 *语义搜索引擎*，用非营销术语来说就是重排序器，而我们的实现正是基于 `Transformer`。  \n在这种场景下，延迟是提供良好用户体验的关键因素，相关性推理需要针对每个用户查询中的数百个片段进行在线计算。  \n我们尝试过许多解决方案，以下是我们的发现：\n\n[`Pytorch`](https:\u002F\u002Fpytorch.org\u002F) + [`FastAPI`](https:\u002F\u002Ffastapi.tiangolo.com\u002F) = 🐢  \n大多数关于 `Transformer` 生产环境部署的教程都是基于 Pytorch 和 FastAPI 构建的。  \n两者都是非常优秀的工具，但在推理性能上并不出色（实际测量结果见下文）。  \n\n[`Microsoft ONNX Runtime`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fonnxruntime\u002F) + [`Nvidia Triton 推理服务器`](https:\u002F\u002Fgithub.com\u002Ftriton-inference-server\u002Fserver) = 🏃💨  \n如果你愿意花些时间，也可以基于 ONNX Runtime 和 Triton 推理服务器搭建一套方案。  \n通常情况下，相比原生 Pytorch，推理速度可以提升 2 到 4 倍。这已经相当不错了！  \n\n[`Nvidia TensorRT`](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FTensorRT\u002F)  + [`Nvidia Triton 推理服务器`](https:\u002F\u002Fgithub.com\u002Ftriton-inference-server\u002Fserver) = ⚡️🏃💨💨  \n然而，如果希望在 GPU 上获得业界顶尖的性能，唯一的组合就是 Nvidia TensorRT 和 Triton。  \n与原生 Pytorch 相比，推理速度通常可以提升 5 倍。  \n有时甚至可以达到 **10 倍的加速**。  \n但是……TensorRT 的掌握需要一定的技巧，且这些技巧并不容易想到，我们已经为你实现了它们！  \n\n[详细的工具对比表](https:\u002F\u002Fels-rd.github.io\u002Ftransformer-deploy\u002Fcompare\u002F)\n\n## 功能特性\n\n* 大幅优化 Transformer 模型的推理性能（CPU 和 GPU）-> 加速 5 至 10 倍\n* 将模型部署到 `Nvidia Triton` 推理服务器上（企业级），速度比 `FastAPI` 快 6 倍\n* 支持 CPU 和 GPU 上的量化\n* 使用简单：只需一条命令即可完成优化！\n* 支持的模型：任何可导出为 ONNX 格式的模型（即大多数模型）\n* 支持的任务：文档分类、标记分类（NER）、特征提取（即 sentence-transformers 密集嵌入）、文本生成\n\n> 想了解其内部工作原理吗？  \n> 请阅读 [🤗 Hugging Face Transformer 推理延迟低于 1 毫秒 📖](https:\u002F\u002Ftowardsdatascience.com\u002Fhugging-face-transformer-inference-under-1-millisecond-latency-e1be0057a51c?source=friends_link&sk=cd880e05c501c7880f2b9454830b8915)  \n> \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FELS-RD_transformer-deploy_readme_4540f65c21e1.jpg\" width=\"120\">\n\n## 想在 3 分钟内亲自体验一下吗？\n\n为了大致了解你的模型可以获得怎样的加速效果，你可以尝试下面的仅使用 Docker 的运行示例。  \n对于 GPU 运行，你需要在机器上安装 Nvidia 驱动程序和 [NVIDIA Container Toolkit](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnvidia-docker)。\n\n**以下涵盖了 3 种任务**：\n\n* 分类，\n* 特征提取（文本转密集嵌入）\n* 文本生成（GPT-2 风格）。  \n\n此外，我们还添加了一个 GPU `量化` 笔记本，可以直接在 `Docker` 中打开并进行实验。\n\n首先，克隆仓库，因为下面的一些命令会依赖于找到 `demo` 文件夹：\n\n```shell\ngit clone git@github.com:ELS-RD\u002Ftransformer-deploy.git\ncd transformer-deploy\n# docker 镜像可能需要几分钟\ndocker pull ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \n\n\n### 分类\u002F重排序（编码器模型）\n\n分类是 NLP 中常见的任务，大型语言模型在这方面表现优异。  \n该任务也被搜索引擎用来提供类似 Google 的相关性排序（参见 [arxiv](https:\u002F\u002Farxiv.org\u002Fabs\u002F1901.04085)）。\n\n#### 优化现有模型\n\n此命令将一次性完成模型优化、生成 Triton 配置以及 Triton 文件结构：\n\n```shell\ndocker run -it --rm --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m \\\"philschmid\u002FMiniLM-L6-H384-uncased-sst2\\\" \\\n    --backend tensorrt onnx \\\n    --seq-len 16 128 128\"\n\n# 输出：\n# ...\n# 在 NVIDIA GeForce RTX 3090 上进行推理\n# 延迟情况：\n# [Pytorch (FP32)] 平均 5.43ms，标准差 0.70ms，最小 4.88ms，最大 7.81ms，中位数 5.09ms，95%分位数 7.01ms，99%分位数 7.53ms\n# [Pytorch (FP16)] 平均 6.55ms，标准差 1.00ms，最小 5.75ms，最大 10.38ms，中位数 6.01ms，95%分位数 8.57ms，99%分位数 9.21ms\n# [TensorRT (FP16)] 平均 0.53ms，标准差 0.03ms，最小 0.49ms，最大 0.61ms，中位数 0.52ms，95%分位数 0.57ms，99%分位数 0.58ms\n# [ONNX Runtime (FP32)] 平均 1.57ms，标准差 0.05ms，最小 1.49ms，最大 1.90ms，中位数 1.57ms，95%分位数 1.63ms，99%分位数 1.76ms\n# [ONNX Runtime（优化版）] 平均 0.90ms，标准差 0.03ms，最小 0.88ms，最大 1.23ms，中位数 0.89ms，95%分位数 0.95ms，99%分位数 0.97ms\n# 每个推理引擎的输出与 Pytorch 的输出误差均在 0.3 以内\n```\n\n它会输出平均延迟及其他统计信息。  \n通常情况下，`Nvidia TensorRT` 是最快的选项，而 `ONNX Runtime` 通常是第二选择。  \n在 ONNX Runtime 中，“优化版”意味着启用了内核融合和混合精度。  \n无论模型大小如何，`Pytorch` 在 Transformer 推理方面始终不具备竞争力，即使使用混合精度也是如此。  \n\n#### 运行 Nvidia Triton 推理服务器\n\n请注意，我们在运行时安装了 `transformers`。  \n在生产环境中，建议构建一个包含预装 `transformers` 的三行 Docker 镜像。\n\n```shell\ndocker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 256m \\\n  -v $PWD\u002Ftriton_models:\u002Fmodels nvcr.io\u002Fnvidia\u002Ftritonserver:22.07-py3 \\\n  bash -c \"pip install transformers && tritonserver --model-repository=\u002Fmodels\"\n\n# 输出：\n# ...\n# I0207 09:58:32.738831 1 grpc_server.cc:4195] GRPCInferenceService 已启动，地址为 0.0.0.0:8001\n# I0207 09:58:32.739875 1 http_server.cc:2857] HTTPService 已启动，地址为 0.0.0.0:8000\n\n# I0207 09:58:32.782066 1 http_server.cc:167] 已在 0.0.0.0:8002 启动指标服务\n```\n\n#### 查询推理\n\n查询 ONNX 模型（将 `transformer_onnx_inference` 替换为 `transformer_tensorrt_inference` 可以查询 TensorRT 引擎）：\n\n```shell\ncurl -X POST  http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ftransformer_onnx_inference\u002Fversions\u002F1\u002Finfer \\\n  --data-binary \"@demo\u002Finfinity\u002Fquery_body.bin\" \\\n  --header \"Inference-Header-Content-Length: 161\"\n\n# 输出：\n# {\"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]}]}\n```\n\n模型输出位于 JSON 的末尾（`data` 字段）。\n[关于如何从 `Python` 及其他语言查询服务器的更多信息](https:\u002F\u002Fels-rd.github.io\u002Ftransformer-deploy\u002Frun\u002F)。\n\n若想在 Python 代码中实现极低延迟的推理（无需推理服务器），请 [点击此处](https:\u002F\u002Fels-rd.github.io\u002Ftransformer-deploy\u002Fpython\u002F)。\n\n### 标记分类（NER）（编码器模型）\n\n标记分类任务会为句子中的每个标记分配一个标签。\n最常见的标记分类任务之一是命名实体识别（NER）。\nNER 旨在为句子中的每个实体（如人名、地点或组织名称）找到相应的标签。\n\n#### 优化现有模型\n\n此命令可一次性完成模型优化、生成 Triton 配置文件以及 Triton 文件夹结构：\n\n```shell\ndocker run -it --rm --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m \\\"kamalkraj\u002Fbert-base-cased-ner-conll2003\\\" \\\n    --backend tensorrt onnx \\\n    --seq-len 16 128 128 \\\n    --task token-classification\"\n\n# 输出：  \n# ...\n# 推理在 Tesla T4 上完成\n# 延迟：\n# [Pytorch (FP32)] 平均=8.24ms，标准差=0.46ms，最小=7.66ms，最大=13.91ms，中位数=8.20ms，95%分位数=8.38ms，99%分位数=10.01ms\n# [Pytorch (FP16)] 平均=6.87ms，标准差=0.44ms，最小=6.69ms，最大=13.05ms，中位数=6.78ms，95%分位数=7.33ms，99%分位数=8.86ms\n# [TensorRT (FP16)] 平均=2.33ms，标准差=0.32ms，最小=2.19ms，最大=4.18ms，中位数=2.24ms，95%分位数=3.00ms，99%分位数=4.04ms\n# [ONNX Runtime (FP32)] 平均=8.08ms，标准差=0.33ms，最小=7.78ms，最大=10.61ms，中位数=8.06ms，95%分位数=8.18ms，99%分位数=10.55ms\n# [ONNX Runtime (优化版)] 平均=2.57ms，标准差=0.04ms，最小=2.38ms，最大=2.83ms，中位数=2.56ms，95%分位数=2.68ms，99%分位数=2.73ms\n# 每个推理引擎的输出与 Pytorch 输出的差异均在 0.3 以内\n```\n\n该命令会输出平均延迟及其他统计信息。\n通常情况下，`Nvidia TensorRT` 是最快的选项，而 `ONNX Runtime` 则是强劲的第二选择。\n在 ONNX Runtime 中，“优化版”表示启用了内核融合和混合精度。\n无论模型大小如何，`Pytorch` 在 Transformer 推理方面始终不具备竞争力，即使使用混合精度也不例外。\n\n#### 运行 Nvidia Triton 推理服务器\n\n请注意，我们是在运行时安装 `transformers` 库的。\n对于生产环境，建议构建一个包含预装 `transformers` 库的三行 Docker 镜像。\n\n```shell\ndocker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 256m \\\n  -v $PWD\u002Ftriton_models:\u002Fmodels nvcr.io\u002Fnvidia\u002Ftritonserver:22.07-py3 \\\n  bash -c \"pip install transformers torch==1.12.0 -f https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu116\u002Ftorch_stable.html && \\\n  tritonserver --model-repository=\u002Fmodels\"\n\n# 输出：\n# ...\n# I0207 09:58:32.738831 1 grpc_server.cc:4195] 已在 0.0.0.0:8001 启动 gRPC 推理服务\n# I0207 09:58:32.739875 1 http_server.cc:2857] 已在 0.0.0.0:8000 启动 HTTP 服务\n# I0207 09:58:32.782066 1 http_server.cc:167] 已在 0.0.0.0:8002 启动指标服务\n```\n\n#### 查询推理\n\n查询 ONNX 模型（将 `transformer_onnx_inference` 替换为 `transformer_tensorrt_inference` 可以查询 TensorRT 引擎）：\n\n```shell\ncurl -X POST  http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ftransformer_onnx_inference\u002Fversions\u002F1\u002Finfer \\\n  --data-binary \"@demo\u002Finfinity\u002Fquery_body.bin\" \\\n  --header \"Inference-Header-Content-Length: 161\"\n\n# 输出：\n# {\"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}]\"]}]}\n```\n\n### 问答任务（编码器模型）\n\n问答模型可以从给定文本中检索出问题的答案，这在文档中查找答案时非常有用。\n\n#### 优化现有模型\n\n此命令可一次性完成模型优化、生成 Triton 配置文件以及 Triton 文件夹结构：\n\n```shell\ndocker run -it --rm --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m \\\"distilbert-base-cased-distilled-squad\\\" \\\n    --backend tensorrt onnx \\\n    --seq-len 16 128 384 \\\n    --task question-answering\"\n\n# 输出：  \n# ...\n# 推理在 Tesla T4 上完成\n# 延迟：\n# [Pytorch (FP32)] 平均=8.24ms，标准差=0.46ms，最小=7.66ms，最大=13.91ms，中位数=8.20ms，95%分位数=8.38ms，99%分位数=10.01ms\n# [Pytorch (FP16)] 平均=6.87ms，标准差=0.44ms，最小=6.69ms，最大=13.05ms，中位数=6.78ms，95%分位数=7.33ms，99%分位数=8.86ms\n# [TensorRT (FP16)] 平均=2.33ms，标准差=0.32ms，最小=2.19ms，最大=4.18ms，中位数=2.24ms，95%分位数=3.00ms，99%分位数=4.04ms\n# [ONNX Runtime (FP32)] 平均=8.08ms，标准差=0.33ms，最小=7.78ms，最大=10.61ms，中位数=8.06ms，95%分位数=8.18ms，99%分位数=10.55ms\n# [ONNX Runtime (优化版)] 平均=2.57ms，标准差=0.04ms，最小=2.38ms，最大=2.83ms，中位数=2.56ms，95%分位数=2.68ms，99%分位数=2.73ms\n# 每个推理引擎的输出与 Pytorch 输出的差异均在 0.3 以内\n```\n\n该命令会输出平均延迟及其他统计信息。\n通常情况下，`Nvidia TensorRT` 是最快的选项，而 `ONNX Runtime` 则是强劲的第二选择。\n在 ONNX Runtime 中，“优化版”表示启用了内核融合和混合精度。\n无论模型大小如何，`Pytorch` 在 Transformer 推理方面始终不具备竞争力，即使使用混合精度也不例外。\n\n#### 运行 Nvidia Triton 推理服务器\n\n请注意，我们是在运行时安装 `transformers` 库的。\n对于生产环境，建议构建一个包含预装 `transformers` 库的三行 Docker 镜像。\n\n```shell\ndocker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 1024m \\\n  -v $PWD\u002Ftriton_models:\u002Fmodels nvcr.io\u002Fnvidia\u002Ftritonserver:22.07-py3 \\\n  bash -c \"pip install transformers torch==1.12.0 -f https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu116\u002Ftorch_stable.html && \\\n  tritonserver --model-repository=\u002Fmodels\"\n\n# 输出：\n# ...\n# I0207 09:58:32.738831 1 grpc_server.cc:4195] 已在 0.0.0.0:8001 启动 gRPC 推理服务\n# I0207 09:58:32.739875 1 http_server.cc:2857] 已在 0.0.0.0:8000 启动 HTTP 服务\n\n# I0207 09:58:32.782066 1 http_server.cc:167] 已在 0.0.0.0:8002 启动指标服务\n```\n\n#### 查询推理\n\n查询 ONNX 模型（将 `transformer_onnx_inference` 替换为 `transformer_tensorrt_inference` 以查询 TensorRT 引擎）：\n\n```shell\ncurl -X POST  http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ftransformer_onnx_inference\u002Fversions\u002F1\u002Finfer \\\n  --data-binary \"@demo\u002Fquestion-answering\u002Fquery_body.bin\" \\\n  --header \"Inference-Header-Content-Length: 276\"\n\n# 输出：\n# {\"model_name\":\"transformer_onnx_inference\",\"model_version\":\"1\",\"outputs\":[{\"name\":\"output\",\"datatype\":\"BYTES\",\"shape\":[],\"data\":[\"{\\\"score\\\": 0.9925152659416199, \\\"start\\\": 34, \\\"end\\\": 40, \\\"answer\\\": \\\"柏林\\\"}\"]}]}\n```\n有关如何生成 `query_body.bin` 文件，请参阅 `demo\u002Fquestion-answering\u002Fquery_bin_gen.ipynb`。\n更多推理示例可在 `demo\u002Fquestion-answering\u002F` 中找到。\n\n### 特征提取 \u002F 密集嵌入\n\n自然语言处理中的特征提取任务是将文本转换为密集嵌入。  \n这种方法作为一种提高搜索引擎相关性（增加召回率）的稳健方式，近年来受到越来越多的关注。  \n该项目支持来自 [sentence-transformers](https:\u002F\u002Fgithub.com\u002FUKPLab\u002Fsentence-transformers) 的模型，并且需要版本 ≥ V2.2.0 的 sentence-transformers 库。\n#### 优化现有模型\n\n```shell\ndocker run -it --rm --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m \\\"sentence-transformers\u002Fmsmarco-distilbert-cos-v5\\\" \\\n    --backend tensorrt onnx \\\n    --task embedding \\\n    --seq-len 16 128 128\"\n\n# 输出：\n# ...\n# 推理在 NVIDIA GeForce RTX 3090 上完成\n# 延迟：\n# [Pytorch (FP32)] 平均=5.19ms，标准差=0.45ms，最小=4.74ms，最大=6.64ms，中位数=5.03ms，95%分位数=6.14ms，99%分位数=6.26ms\n# [Pytorch (FP16)] 平均=5.41ms，标准差=0.18ms，最小=5.26ms，最大=8.15ms，中位数=5.36ms，95%分位数=5.62ms，99%分位数=5.72ms\n# [TensorRT (FP16)] 平均=0.72ms，标准差=0.04ms，最小=0.69ms，最大=1.33ms，中位数=0.70ms，95%分位数=0.78ms，99%分位数=0.81ms\n# [ONNX Runtime (FP32)] 平均=1.69ms，标准差=0.18ms，最小=1.62ms，最大=4.07ms，中位数=1.64ms，95%分位数=1.86ms，99%分位数=2.44ms\n# [ONNX Runtime（优化版）] 平均=1.03ms，标准差=0.09ms，最小=0.98ms，最大=2.30ms，中位数=1.00ms，95%分位数=1.15ms，99%分位数=1.41ms\n# 每个推理引擎的输出与 Pytorch 输出的差异均在 0.3 的容差范围内\n```\n\n#### 运行 Nvidia Triton 推理服务器\n\n```shell\ndocker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 256m \\\n  -v $PWD\u002Ftriton_models:\u002Fmodels nvcr.io\u002Fnvidia\u002Ftritonserver:22.07-py3 \\\n  bash -c \"pip install transformers && tritonserver --model-repository=\u002Fmodels\"\n\n# 输出：\n# ...\n# I0207 11:04:33.761517 1 grpc_server.cc:4195] GRPC 推理服务已在 0.0.0.0:8001 启动\n# I0207 11:04:33.761844 1 http_server.cc:2857] HTTP 服务已在 0.0.0.0:8000 启动\n# I0207 11:04:33.803373 1 http_server.cc:167] 指标服务已在 0.0.0.0:8002 启动\n\n```\n\n#### 查询推理\n\n```shell\ncurl -X POST  http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ftransformer_onnx_inference\u002Fversions\u002F1\u002Finfer \\\n  --data-binary \"@demo\u002Finfinity\u002Fquery_body.bin\" \\\n  --header \"Inference-Header-Content-Length: 161\"\n\n# 输出：\n# {\"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,...\n```\n\n### 文本生成（解码器模型）\n\n文本生成似乎是自然语言处理领域的一个重要方向。  \n然而，这类模型的运行速度通常较慢。下面我们将加速其中最著名的模型之一：GPT-2。\n\n#### GPT 示例\n我们首先以 GPT-2 模型为例，然后在下一节中使用 T5 模型。\n\n#### 优化现有模型\n\n与之前类似，以下命令将准备 Triton 推理服务器的相关内容。  \n需要注意的是，Triton 运行：\n- 推理引擎（`ONNX Runtime` 和 `TensorRT`）\n- 负责解码部分的 `Python` 代码。该 `Python` 代码会将模型管理委托给 Triton 服务器。\n\n`Python` 代码位于 `.\u002Ftriton_models\u002Ftransformer_tensorrt_generate\u002F1\u002Fmodel.py`。\n\n```shell\ndocker run -it --rm --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m gpt2 \\\n    --backend tensorrt onnx \\\n    --seq-len 6 256 256 \\\n    --task text-generation\"\n\n# 输出：\n# ...\n# 推理在 NVIDIA GeForce RTX 3090 上完成\n# 延迟：\n# [Pytorch (FP32)] 平均=9.43ms，标准差=0.59ms，最小=8.95ms，最大=15.02ms，中位数=9.33ms，95%分位数=10.38ms，99%分位数=12.46ms\n# [Pytorch (FP16)] 平均=9.92ms，标准差=0.55ms，最小=9.50ms，最大=15.06ms，中位数=9.74ms，95%分位数=10.96ms，99%分位数=12.26ms\n# [TensorRT (FP16)] 平均=2.19ms，标准差=0.18ms，最小=2.06ms，最大=3.04ms，中位数=2.10ms，95%分位数=2.64ms，99%分位数=2.79ms\n# [ONNX Runtime (FP32)] 平均=4.99ms，标准差=0.38ms，最小=4.68ms，最大=9.09ms，中位数=4.78ms，95%分位数=5.72ms，99%分位数=5.95ms\n# [ONNX Runtime（优化版）] 平均=3.93ms，标准差=0.40ms，最小=3.62ms，最大=6.53ms，中位数=3.81ms，95%分位数=4.49ms，99%分位数=5.79ms\n# 每个推理引擎的输出与 Pytorch 输出的差异均在 0.3 的容差范围内\n```\n\n提供了两个详细的笔记本：\n\n* GPT-2：[https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fblob\u002Fmain\u002Fdemo\u002Fgenerative-model\u002Fgpt2.ipynb](https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fblob\u002Fmain\u002Fdemo\u002Fgenerative-model\u002Fgpt2.ipynb)\n* T5：[https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fblob\u002Fmain\u002Fdemo\u002Fgenerative-model\u002Ft5.ipynb](https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fblob\u002Fmain\u002Fdemo\u002Fgenerative-model\u002Ft5.ipynb)\n\n#### 优化现有大型模型\n\n对于通常无法在单个 GPU 上完整加载的大型模型，可以按如下方式运行脚本：\n\n```shell\ndocker run -it --rm --shm-size=24g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m gpt2-medium \\\n    --backend tensorrt onnx \\\n    --seq-len 6 256 256 \\\n    --fast \\\n    --atol 3 \\\n    --task text-generation\"\n```\n\n模型越大，越可能需要相应地提高脚本的绝对容差。此外，某些模型可能会返回类似以下消息：“已将权重中的 FP32 值（无论是 FP32 无穷大还是超出 FP16 范围的 FP32 值）转换为对应的 FP16 无穷大”。最好在之后对模型进行测试和评估，以了解这种转换的影响。\n\n根据模型大小，此过程可能非常耗时。例如，GPT Neo 2.7B 的转换可能需要 1 小时甚至更长时间。\n\n#### 运行 Nvidia Triton 推理服务器\n\n为了在服务器端运行解码算法，我们需要在 Triton 的 Docker 镜像上安装 `Pytorch`。\n\n```shell\ndocker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 8g \\\n  -v $PWD\u002Ftriton_models:\u002Fmodels nvcr.io\u002Fnvidia\u002Ftritonserver:22.07-py3 \\\n  bash -c \"pip install transformers torch==1.12.0 -f https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu116\u002Ftorch_stable.html && \\\n  tritonserver --model-repository=\u002Fmodels\"\n\n# 输出：\n# ...\n# I0207 10:29:19.091191 1 grpc_server.cc:4195] GRPC 推理服务已在 0.0.0.0:8001 启动\n# I0207 10:29:19.091417 1 http_server.cc:2857] HTTP 服务已在 0.0.0.0:8000 启动\n\n# I0207 10:29:19.132902 1 http_server.cc:167] 已在 0.0.0.0:8002 启动指标服务\n```\n\n#### 查询推理\n\n将 `transformer_onnx_generate` 替换为 `transformer_tensorrt_generate`，以查询 `TensorRT` 引擎。\n\n```shell\ncurl -X POST  http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ftransformer_onnx_generate\u002Fversions\u002F1\u002Finfer \\\n  --data-binary \"@demo\u002Finfinity\u002Fquery_body.bin\" \\\n  --header \"Inference-Header-Content-Length: 161\"\n\n# 输出：\n# {\"model_name\":\"transformer_onnx_generate\",\"model_version\":\"1\",\"outputs\":[{\"name\":\"output\",\"datatype\":\"BYTES\",\"shape\":[],\"data\":[\"这场直播活动太棒了。我要注册 Infinity。\\n\\n我打算对这次活动进行直播。\\n\\n我\"]}]}\n```\n\n好吧，输出内容并不太有趣（💩 输入 -> 💩 输出），但你已经明白其中的原理了。  \n生成模型的源代码位于 `.\u002Ftriton_models\u002Ftransformer_tensorrt_generate\u002F1\u002Fmodel.py`。  \n你可以根据自己的需求对其进行调整（默认设置为贪婪搜索，并输出 64 个标记）。\n\n#### Python 代码\n\n你可能希望直接在 Python 中运行优化后的文本生成，而无需使用任何推理服务器：\n\n```shell\ndocker run -p 8888:8888 -v $PWD\u002Fdemo\u002Fgenerative-model:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && jupyter notebook --ip 0.0.0.0 --port 8888 --no-browser --allow-root\"\n```\n\n#### T5-small 示例\n在这一部分，我们将展示 t5-small 模型的转换过程。\n\n#### 优化现有大型模型\n\n要优化模型，请按以下方式运行脚本：\n\n```shell\ndocker run -it --rm --shm-size=24g --ulimit memlock=-1 --ulimit stack=67108864 --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m t5-small \\\n    --backend onnx \\\n    --seq-len 16 256 256 \\\n    --task text-generation \\\n    --nb-measures 100 \\\n    --generative-model t5 \\\n    --output triton_models\"\n```\n\n#### 运行 Nvidia Triton 推理服务器\n\n要在服务器端运行解码算法，我们需要在 `Triton` Docker 镜像上安装 `Pytorch`。\n\n```shell\ndocker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 8g \\\n  -v $PWD\u002Ftriton_models\u002F:\u002Fmodels nvcr.io\u002Fnvidia\u002Ftritonserver:22.07-py3 \\\n  bash -c \"pip install onnx onnxruntime-gpu transformers==4.21.3 git+https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy torch==1.12.0 -f https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu116\u002Ftorch_stable.html onnx onnxruntime-gpu && \\\n  tritonserver --model-repository=\u002Fmodels\"\n```\n\n要测试文本生成，可以尝试以下请求：\n```shell\ncurl -X POST http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ft5_model_generate\u002Fversions\u002F1\u002Finfer --data-binary \"@demo\u002Fgenerative-model\u002Ft5_query_body.bin\" --header \"Inference-Header-Content-Length: 181\"\n\n# 输出：\n# {\"model_name\":\"t5_model_generate\",\"model_version\":\"1\",\"outputs\":[{\"name\":\"OUTPUT_TEXT\",\"datatype\":\"BYTES\",\"shape\":[],\"data\":[\"我的名字叫沃尔夫冈·沃尔夫冈，我住在柏林。\"]}]}\n```\n\n#### 查询推理\n\n将 `transformer_onnx_generate` 替换为 `transformer_tensorrt_generate`，以查询 `TensorRT` 引擎。\n\n```shell\ncurl -X POST  http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ftransformer_onnx_inference\u002Fversions\u002F1\u002Finfer \\\n  --data-binary \"@demo\u002Finfinity\u002Fseq2seq_query_body.bin\" \\\n  --header \"Inference-Header-Content-Length: 176\"\n```\n\n### GPU 上的模型量化\n\n量化是一种通用的方法，可以在其他推理优化的基础上再提升约两倍的速度。  \n然而，在 Transformer 模型上进行 GPU 量化几乎从未被采用，因为这需要修改模型的源代码。  \n\n我们在该库中实现了一种机制，可以更新 Hugging Face 的 Transformer 库以支持量化操作，从而使其使用起来更加便捷。\n\n要体验这一功能，请打开以下笔记本：\n\n```shell\ndocker run -p 8888:8888 -v $PWD\u002Fdemo\u002Fquantization:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && jupyter notebook --ip 0.0.0.0 --port 8888 --no-browser --allow-root\"\n```\n\n\u003C!--why-end-->\n\n## 请参阅我们的[文档](https:\u002F\u002Fels-rd.github.io\u002Ftransformer-deploy\u002F)，以获取有关如何使用该软件包的详细说明，包括设置、GPU 量化支持以及 Nvidia Triton 推理服务器的部署。","# transformer-deploy 快速上手指南\n\n`transformer-deploy` 是一个用于将 Hugging Face Transformer 模型优化并部署到生产环境的工具。它支持通过单行命令将模型转换为 **Nvidia TensorRT** 或 **ONNX Runtime** 格式，并结合 **Nvidia Triton Inference Server** 进行部署，可实现比原生 PyTorch 快 5 到 10 倍的推理速度（亚毫秒级延迟）。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: Linux (推荐 Ubuntu)\n- **Python**: 3.8+\n- **GPU**: Nvidia GPU (需安装驱动)\n- **Docker**: 已安装 Docker 引擎\n\n### 前置依赖\n若需使用 GPU 加速，必须安装 **NVIDIA Container Toolkit** 以支持 Docker 调用 GPU。\n\n1. **安装 Nvidia 驱动** (如未安装)\n   请前往 [Nvidia 官网](https:\u002F\u002Fwww.nvidia.com\u002FDownload\u002Findex.aspx) 下载对应驱动。\n\n2. **安装 NVIDIA Container Toolkit**\n   ```bash\n   distribution=$(. \u002Fetc\u002Fos-release;echo $ID$VERSION_ID) \\\n         && curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey | sudo apt-key add - \\\n         && curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002F$distribution\u002Flibnvidia-container.list | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list\n   \n   sudo apt-get update\n   sudo apt-get install -y nvidia-container-toolkit\n   sudo systemctl restart docker\n   ```\n\n3. **验证 GPU 支持**\n   ```bash\n   docker run --rm --gpus all nvidia\u002Fcuda:11.0-base nvidia-smi\n   ```\n   若能输出 GPU 状态信息，则环境准备就绪。\n\n## 安装步骤\n\n本工具推荐使用 Docker 镜像运行，无需在本地安装复杂的 Python 依赖。\n\n1. **克隆项目仓库**\n   部分演示命令依赖项目中的 `demo` 文件夹，建议先克隆代码。\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy.git\n   cd transformer-deploy\n   ```\n\n2. **拉取 Docker 镜像**\n   ```bash\n   docker pull ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0\n   ```\n   > **提示**: 如果下载速度慢，可尝试配置 Docker 国内镜像加速器（如阿里云、腾讯云等）。\n\n## 基本使用\n\n以下示例展示如何优化一个分类模型（Classification），启动 Triton 服务器并进行推理查询。整个过程分为三步：**模型转换** -> **启动服务** -> **发送请求**。\n\n### 1. 优化模型并生成配置\n此命令将下载 Hugging Face 模型，将其转换为 TensorRT 和 ONNX 格式，并生成 Triton 所需的目录结构。\n\n```bash\ndocker run -it --rm --gpus all \\\n  -v $PWD:\u002Fproject ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0 \\\n  bash -c \"cd \u002Fproject && \\\n    convert_model -m \\\"philschmid\u002FMiniLM-L6-H384-uncased-sst2\\\" \\\n    --backend tensorrt onnx \\\n    --seq-len 16 128 128\"\n```\n*   `-m`: 指定 Hugging Face 模型名称。\n*   `--backend`: 指定生成的后端格式（此处同时生成 tensorrt 和 onnx）。\n*   `--seq-len`: 指定序列长度参数 (min, opt, max)。\n\n执行完成后，终端会输出不同引擎的延迟对比数据，通常 **TensorRT (FP16)** 速度最快。当前目录下会生成 `triton_models` 文件夹。\n\n### 2. 启动 Nvidia Triton 推理服务器\n使用生成的模型文件夹启动服务。\n\n```bash\ndocker run -it --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 --shm-size 256m \\\n  -v $PWD\u002Ftriton_models:\u002Fmodels nvcr.io\u002Fnvidia\u002Ftritonserver:22.07-py3 \\\n  bash -c \"pip install transformers && tritonserver --model-repository=\u002Fmodels\"\n```\n*   服务启动后，HTTP 接口默认监听在 `8000` 端口。\n*   注意：生产环境中建议构建包含 `transformers` 依赖的自定义 Docker 镜像，而非在运行时安装。\n\n### 3. 发送推理请求\n使用 `curl` 向服务器发送请求。以下示例查询 ONNX 模型（若需测试 TensorRT 模型，将 URL 中的 `transformer_onnx_inference` 替换为 `transformer_tensorrt_inference`）。\n\n```bash\ncurl -X POST  http:\u002F\u002Flocalhost:8000\u002Fv2\u002Fmodels\u002Ftransformer_onnx_inference\u002Fversions\u002F1\u002Finfer \\\n  --data-binary \"@demo\u002Finfinity\u002Fquery_body.bin\" \\\n  --header \"Inference-Header-Content-Length: 161\"\n```\n\n**返回示例:**\n```json\n{\"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]}]}\n```\n推理结果位于 JSON 的 `data` 字段中。\n\n---\n**支持的任务类型**:\n除了上述分类任务，该工具还支持通过添加 `--task` 参数来处理其他任务，例如：\n*   命名实体识别 (NER): `--task token-classification`\n*   问答系统: `--task question-answering`\n*   文本生成: `--task text-generation`","某法律科技团队正在构建实时语义检索系统，需在用户查询瞬间对数百个法律条文片段进行重排序（Re-ranking），以确保判决推荐的精准度。\n\n### 没有 transformer-deploy 时\n- **响应延迟过高**：基于 PyTorch + FastAPI 的传统架构导致单次推理耗时过长，无法满足亚毫秒级的实时交互需求，用户等待感明显。\n- **资源成本高昂**：为了勉强维持并发吞吐量，不得不堆砌大量 GPU 实例，导致云端算力成本居高不下。\n- **部署门槛极高**：若想手动集成 Nvidia TensorRT 和 Triton 以获得极致性能，需耗费数周时间攻克复杂的算子优化与配置陷阱，开发周期被严重拖慢。\n- **扩展性受限**：在流量高峰期，原有架构难以线性扩展，容易成为整个法律服务平台的性能瓶颈。\n\n### 使用 transformer-deploy 后\n- **推理速度飞跃**：通过一键自动应用 TensorRT 优化与量化技术，模型推理速度提升 5 至 10 倍，轻松实现亚毫秒级低延迟响应。\n- **算力成本骤降**：同等吞吐量下所需的 GPU 资源大幅减少，显著降低了生产环境的运营支出。\n- **上线效率倍增**：无需深入底层细节，仅需一条命令即可完成从 Hugging Face 模型到企业级 Triton 服务的部署，将原本数周的优化工作压缩至分钟级。\n- **生产级稳定性**：直接获得支持 CPU\u002FGPU 的企业级推理服务架构，完美承载高并发下的法律条文实时重排序任务。\n\ntransformer-deploy 将原本需要专家级调优的复杂部署流程简化为单一命令，让法律 AI 应用在保持极致性能的同时实现了快速落地。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FELS-RD_transformer-deploy_939f5bc8.png","ELS-RD","Lefebvre Sarrut","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FELS-RD_78b8c495.png","Département R&D du groupe Lefebvre Sarrut",null,"LefebvreSarrut","https:\u002F\u002Fwww.lefebvre-sarrut.eu\u002F","https:\u002F\u002Fgithub.com\u002FELS-RD",[81,85,89],{"name":82,"color":83,"percentage":84},"Python","#3572A5",99.1,{"name":86,"color":87,"percentage":88},"Dockerfile","#384d54",0.4,{"name":90,"color":91,"percentage":88},"Makefile","#427819",1688,152,"2026-04-03T03:19:27","Apache-2.0","Linux","GPU 推理必需（使用 TensorRT 或 ONNX Runtime 加速），需安装 NVIDIA 驱动和 NVIDIA Container Toolkit。示例中使用了 GeForce RTX 3090 和 Tesla T4。CPU 模式也支持但性能较低。","未说明（运行 Triton Server 时建议设置共享内存 --shm-size 256m）",{"notes":100,"python":101,"dependencies":102},"该工具主要通过 Docker 容器运行，推荐使用提供的 Docker 镜像 (ghcr.io\u002Fels-rd\u002Ftransformer-deploy:0.6.0) 进行模型优化和部署。生产环境部署需使用 Nvidia Triton Inference Server。若要在本地直接运行而非使用 Docker，需自行安装 NVIDIA 驱动、NVIDIA Container Toolkit 以及相应的 CUDA 环境。工具支持将模型转换为 ONNX 和 TensorRT 格式以获得最高性能（比原生 PyTorch 快 5-10 倍）。","3.8+",[103,104,105,106,107],"transformers","torch (示例中为 1.12.0)","onnxruntime","tensorrt","tritonserver (Docker 镜像版本 22.07-py3)",[35,14],[110,111,112,113,114,115],"inference","deep-learning","natural-language-processing","deployment","machine-learning","server","2026-03-27T02:49:30.150509","2026-04-07T11:43:58.218153",[119,124,129,134,139,143],{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},21972,"为什么使用动态批处理（Dynamic Batching）时，Roberta 模型在 TensorRT 上的推理延迟反而比固定批处理更高？","这是一个已知的兼容性问题。将 `nvidia-tensorrt` 升级到版本 `8.4.1.5` 即可解决此问题。升级后，动态批处理（例如设置 min=1, optimal=4, max=4）的性能将恢复正常，不再出现比 ONNX Runtime 或 PyTorch 慢的情况。","https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fissues\u002F87",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},21973,"项目是否支持除编码器架构（Encoder-only）以外的模型（如 GPT-2、T5）或其他任务？","是的，项目已开始支持 GPT-2 和 T5 等生成式模型。维护者的目标是让用户能够轻松优化任何来自 Hugging Face 的 Transformer 模型并将其部署到 Triton 中，用户无需关心底层是使用 ONNX Runtime (ORT) 还是 TensorRT (TRT)。ORT 通常开箱即用，适应性更强；而 TRT 则需要更多配置工作，但在量化和混合精度方面能提供显著的性能提升。用户可以根据支持的架构选择后端。","https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fissues\u002F18",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},21974,"在运行 GPT-2 演示脚本进行 ONNX 优化时遇到 'AssertionError: failed in shape inference' 错误，如何解决？","该问题通常与 PyTorch 版本变更有关。请尝试重新生成或使用更新后的 Notebook，其中已删除了 PyTorch 1.11 中移除的两个导出参数。此外，需注意 TensorRT 8.4 (preview) 版本在 GPT-2 上存在已知问题，建议使用修复后的 8.2.5.1 版本。如果问题依旧，检查是否使用了正确的 ONNX 导出参数配置。","https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fissues\u002F74",{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},21975,"尝试优化 T0 模型（基于 T5 架构）时，导出过程报错 'graph is not acyclic' 或导出失败，该怎么办？","官方 PyTorch 1.12 版本可能破坏了 GPT-2 和 T5 相关的单元测试及导出功能。目前的解决方案是通过“猴子补丁”（monkey patch）源代码来应用优化，参考了 fastseq 项目中针对 T5 的轻量级修改（这些修改带来了约 50% 的速度提升）。建议查看项目中的相关 PR（如 #103）以获取具体的代码修改方案，或者暂时使用较低版本的 PyTorch 进行尝试。","https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fissues\u002F102",{"id":140,"question_zh":141,"answer_zh":142,"source_url":138},21976,"为什么优化后的 ONNX 模型内存占用大约是原始 PyTorch 模型的两倍？","内存增加的主要原因通常是 ONNX 图中包含了合并后的解码器节点（即同时包含使用缓存和不使用缓存的版本，通过 IF 节点连接）。如果希望节省内存，可以考虑修改导出逻辑，丢弃不带缓存的版本，仅保留推理时实际需要的带缓存路径。这需要深入调整模型导出时的图结构。",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},21977,"GPT-2 推理速度慢，是否与不支持 'past_key_values' 有关？","是的，原生的 Hugging Face Transformers 支持 `past_key_values` 以加速生成过程中的增量推理。如果封装器未正确支持此参数，会导致每次生成都重新计算所有之前的 token，从而显著降低速度。确保使用的后端（如 ORT 或 TRT）配置正确启用了 KV Cache 机制，或者使用项目提供的专门针对生成式模型优化的 Notebook 进行转换。","https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fissues\u002F49",[149,154,159,164,169,174],{"id":150,"version":151,"summary_zh":152,"released_at":153},133916,"v0.4.0","* 在 ONNX Runtime 和 TensorRT 上添加对基于解码器的模型（GPT-2）的支持\n* 重构 Triton 配置生成逻辑（简化）\n* 添加 GPT-2 模型文档（Notebook）\n* 修复 CPU 量化基准测试（之前未使用量化模型）\n* 修复 Sentence Transformers 的 bug","2022-02-08T23:07:41",{"id":155,"version":156,"summary_zh":157,"released_at":158},133917,"v0.3.0","## 变更内容\n* 由 @sam-writer 在 https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fpull\u002F22 中更新 requirements_gpu.txt\n* 由 @pommedeterresautee 在 https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fpull\u002F27 中进行重构\n* 由 @pommedeterresautee 在 https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fpull\u002F28 中添加 CPU 推理支持\n* 由 @pommedeterresautee 在 https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fpull\u002F29 中为更多模型添加量化感知训练（QAT）支持\n\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fcompare\u002Fv0.2.0...v0.3.0","2021-12-28T22:52:27",{"id":160,"version":161,"summary_zh":162,"released_at":163},133918,"v0.2.0","* 支持 INT-8 GPU 量化\n* 添加端到端量化操作的教程\n* 新增 `QDQRoberta` 模型\n* 切换至 ONNX opset 13\n* 重构 TensorRT 引擎创建流程\n* 修复若干 bug\n* 添加认证令牌（用于私有 Hugging Face 仓库）\n\n## 变更内容\n* @pommedeterresautee 在 https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fpull\u002F11 中更新了 Triton 推理服务器\n* @pommedeterresautee 在 https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fpull\u002F13 中修复了 README.md 文件\n* @sam-writer 在 https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fpull\u002F20 中修复了安装错误\n* @sam-writer 在 https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fpull\u002F19 中添加了认证令牌\n* @pommedeterresautee 在 https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fpull\u002F15 中支持 GPU INT-8 量化\n\n## 新贡献者\n* @sam-writer 在 https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fpull\u002F20 中完成了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002FELS-RD\u002Ftransformer-deploy\u002Fcompare\u002Fv0.1.1...v0.2.0","2021-12-08T22:46:25",{"id":165,"version":166,"summary_zh":167,"released_at":168},133919,"v0.1.1","* 更新 Docker 镜像\n* 更新文档","2021-11-24T08:24:26",{"id":170,"version":171,"summary_zh":172,"released_at":173},133920,"v0.1.0","* 从概念验证项目转型为库\n* 添加对 TensorRT Python API 的支持（以获得最佳性能）\n* 完善文档（将 Hugging Face Infinity 相关内容从文档中分离出来，添加基准测试等）\n* 修复混合精度相关问题\n* 添加许可证\n* 添加测试、GitHub Actions 和 Makefile\n* 改进 Docker 镜像的构建方式\n","2021-11-23T13:41:32",{"id":175,"version":176,"summary_zh":177,"released_at":178},133921,"v0.0.1","用于复现 https:\u002F\u002Fmedium.com\u002Fp\u002Fe1be0057a51c 的所有脚本","2021-11-08T21:15:36"]