为 vLLM 做贡献¶
感谢您有兴趣为 vLLM 做出贡献!我们的社区对所有人开放,无论贡献大小,我们都欢迎各种形式的参与。您可以通过多种方式为该项目做出贡献:
- 识别并报告任何问题或漏洞。
- 请求或添加对新模型的支持。
- 建议或实现新功能。
- 改进文档或撰写使用指南。
我们也相信社区支持的力量;因此,回答查询、提供 PR(拉取请求)评审以及协助他人也是备受推崇的有益贡献。
最后,支持我们最有影响力的方式之一是提高 vLLM 的知名度。在您的博客中谈论它,并重点介绍它如何驱动您令人惊叹的项目。如果您正在使用 vLLM,请在社交媒体上表达您的支持,或者只需为我们的仓库点赞(Star)以表示您的赞赏!
任务看板¶
不知道从哪里开始?请查看以下链接以获取可进行的工作任务:
许可证¶
参见 LICENSE。
开发指南¶
为 vLLM 做贡献的第一步是克隆 GitHub 仓库。
然后,配置您的 Python 虚拟环境。
建议使用 uv,一个非常快速的 Python 环境管理器,来创建和管理 Python 环境。请按照 文档 安装 uv。安装 uv 后,您可以使用以下命令创建新的 Python 环境。
如果您仅开发 vLLM 的 Python 代码,请使用以下命令安装 vLLM:
如果您在开发 vLLM 的 Python 和 CUDA/C++ 代码,请先安装 Pytorch:
uv pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu129
然后从 requirements/build.txt 安装必要的构建依赖项,跳过 torch(因为它已在上一步中安装):
最后使用以下命令安装 vLLM:
有关从源码安装以及在其他硬件上安装的更多详细信息,请查看适用于您硬件的 安装说明,并跳转到“从源码构建 Wheel”部分。
为了在迭代 C++/CUDA 内核时获得优化的工作流程,请参阅 增量编译工作流程 (Incremental Compilation Workflow) 获取建议。
提示
vLLM 兼容 Python 3.10 到 3.13 版本。然而,vLLM 的默认 Dockerfile 使用 Python 3.12,且 CI 中的测试(mypy 除外)均使用 Python 3.12 运行。
因此,我们建议使用 Python 3.12 进行开发,以最大限度地减少本地环境与 CI 环境冲突的可能性。
代码检查¶
vLLM 使用 pre-commit 来对代码库进行 Lint 和格式化。如果您对 pre-commit 不熟悉,请参阅 https://pre-commit.git-scm.cn/#usage。设置 pre-commit 非常简单:
vLLM 的 pre-commit 钩子现在将在您每次提交时自动运行。
提示
您可以手动运行 pre-commit 钩子:
有些 pre-commit 钩子仅在 CI 中运行。如果需要,您可以在本地运行它们:
文档¶
MkDocs 是一个快速、简单且极其精美的静态网站生成器,旨在构建项目文档。文档源文件以 Markdown 编写,并通过单个 YAML 配置文件 mkdocs.yaml 进行配置。
开始使用:
提示
确保您的 Python 版本与插件兼容(例如,mkdocs-awesome-nav 需要 Python 3.10+)。
MkDocs 附带一个内置的开发服务器,允许您在工作时预览文档。从仓库根目录运行:
mkdocs serve # with API ref (~10 minutes)
API_AUTONAV_EXCLUDE=vllm mkdocs serve # API ref off (~15 seconds)
一旦您在日志中看到 Serving on http://127.0.0.1:8000/,实时预览即已就绪!在浏览器中打开 http://127.0.0.1:8000/ 即可查看。
有关其他功能和高级配置,请参阅:
- MkDocs 文档
- Material for MkDocs 文档(我们使用的 MkDocs 主题)
测试¶
vLLM 使用 pytest 来测试代码库。
# Install the test dependencies used in CI (CUDA only)
uv pip install -r requirements/common.txt -r requirements/dev.txt --torch-backend=auto
# Install some common test dependencies (hardware agnostic)
uv pip install pytest pytest-asyncio
# Run all tests
pytest tests/
# Run tests for a single test file with detailed output
pytest -s -v tests/test_logger.py
如果缺少 Python.h,请安装 python3-dev:
如果上述任何命令失败并显示 Python.h: No such file or directory,请使用 sudo apt install python3-dev 安装 python3-dev。
警告
目前,代码库尚未完全通过 mypy 检查。
目前,并非所有单元测试在 CPU 平台上运行时都能通过。如果您无法访问 GPU 平台以在本地运行单元测试,请暂时依赖持续集成 (CI) 系统来运行测试。
问题反馈¶
如果您发现错误或有功能请求,请先 搜索现有议题,看是否已有相关报告。如果没有,请 提交新议题,并提供尽可能多且相关的详细信息。
重要
如果您发现安全漏洞,请按照 此处的说明进行操作。
PR 与代码评审¶
感谢您对 vLLM 的贡献!在提交拉取请求 (PR) 之前,请确保该 PR 符合以下标准。这有助于 vLLM 保持代码质量并提高评审过程的效率。
DCO 和 Signed-off-by¶
在为本项目贡献更改时,您必须同意 DCO。提交内容必须包含 Signed-off-by: 标头,以证明同意 DCO 条款。
在 git commit 时使用 -s 参数会自动添加此头部。
提示
您可以通过 IDE 启用自动签名:
- PyCharm:单击
Commit窗口中Commit and Push...按钮右侧的Show Commit Options图标。它将打开一个git窗口,您可以在其中修改Author并启用Sign-off commit。 - VSCode:打开 设置编辑器 并启用
Git: Always Sign Off(git.alwaysSignOff) 选项。
AI 辅助贡献¶
在做出 AI 辅助贡献之前,您必须:
- 保持参与:不要提交“纯代理”PR。人类提交者有责任审核所有更改的行,端到端验证行为,并运行相关测试。
- 确保意义:避免一次性的“繁杂工作”PR(单个拼写错误、孤立的样式清理、一个可变默认值的修复等)。将机械清理工作整合为清晰、系统的任务范围。
当 AI 工具在生成或修改代码方面提供非平凡的帮助时,您必须:
- 彻底审查:您仍对提交的所有代码负责。审查并理解 AI 生成的代码,其严谨程度应与手动编写代码相同。
- 在 PR 中披露:始终注明拉取请求何时包含 AI 生成的代码。在 PR 说明中添加备注。
- 标记提交:使用提交 Trailer(如
Co-authored-by:)添加署名(其他项目使用Assisted-by:或Generated-by:)。例如:
Your commit message here
Co-authored-by: GitHub Copilot
Co-authored-by: Claude
Co-authored-by: gemini-code-assist
Signed-off-by: Your Name <[email protected]>
AI 辅助的代码必须符合所有质量标准:适当的测试、文档、遵循样式指南以及彻底的审查。署名有助于评审者在上下文中评估贡献,并保持项目的法律清晰度。
PR 标题和分类¶
只有特定类型的 PR 才会被审查。PR 标题应加上适当的前缀以表明更改类型。请使用以下前缀之一:
[Bugfix]用于错误修复。[CI/Build]用于构建或持续集成改进。[Doc]用于文档修复和改进。[Model]用于添加新模型或改进现有模型。标题中应包含模型名称。[Frontend]用于 vLLM 前端的更改(例如 OpenAI API 服务器、LLM类等)。[Kernel]用于影响 CUDA 内核或其他计算内核的更改。[Core]用于 vLLM 核心逻辑的更改(例如LLMEngine、AsyncLLMEngine、Scheduler等)。[Hardware][Vendor]用于硬件特定的更改。前缀中应包含供应商名称(例如[Hardware][AMD])。[Misc]用于不属于上述类别的 PR。请谨慎使用。
注意
如果 PR 跨越多个类别,请包含所有相关的前缀。
代码质量¶
PR 需要满足以下代码质量标准:
- 我们遵循 Google Python 样式指南 和 Google C++ 样式指南。
- 通过所有 Linter 检查。
- 代码需要有良好的文档记录,以确保未来的贡献者能够轻松理解代码。
- 包含足够的测试以确保项目保持正确和稳健。这包括单元测试和集成测试。
- 如果 PR 修改了 vLLM 的用户可见行为,请在
docs/中添加文档。这有助于 vLLM 用户理解并利用新特性或更改。
添加或更改内核¶
在积极开发或修改内核时,强烈建议使用 增量编译工作流程 以缩短构建时间。每个自定义内核都需要一个 Schema 和一个或多个实现来向 PyTorch 注册。
- 确保自定义算子按照 PyTorch 指南进行注册:自定义 C++ 和 CUDA 算子 以及 自定义算子手册。
- 返回
Tensors的自定义算子需要元函数 (Meta-functions)。元函数应在 Python 中实现并注册,以便自动处理动态维度。请参阅上述文档以了解元函数的描述。 - 使用 torch.library.opcheck() 测试任何已注册算子的函数注册和元函数。查看
tests/kernels了解示例。 - 更改现有算子的 C++ 签名时,必须更新 Schema 以反映更改。
- 如果需要新的自定义类型,请参阅以下文档:PT2 中的自定义类支持。
大规模变更注意事项¶
请尽可能保持更改简洁。对于重大架构变更(>500 行代码,不含内核/数据/配置/测试),我们希望有一个 GitHub 议题 (RFC) 来讨论技术设计和理由。否则,我们将为其贴上 rfc-required 标签,该 PR 可能无法通过。
评审预期¶
vLLM 团队的目标是成为一个透明的评审机器。我们希望使评审过程透明高效,并确保没有任何贡献者感到困惑或沮丧。然而,vLLM 团队规模较小,因此我们需要确定一些 PR 的优先级。以下是您对评审过程的预期:
- PR 提交后,将被分配给一名评审员。每位评审员将根据其专业领域和可用性选择 PR。
- 分配 PR 后,评审员每 2-3 天会提供一次状态更新。如果 PR 在 7 天内未被评审,请随时通过 ping 提醒评审员或 vLLM 团队。
- 评审后,如果需要更改,评审员会在 PR 上贴上
action-required标签。贡献者应解决评论并 ping 评审员以重新评审 PR。 - 请在合理的时间范围内回复所有评论。如果评论不明确或者您不同意建议,请随时寻求澄清或讨论该建议。
- 请注意,由于计算资源有限,并非所有 CI 检查都会执行。当 PR 准备好合并或需要完整 CI 运行时,评审员会在 PR 上添加
ready标签。
谢谢¶
最后,感谢您花时间阅读这些指南并关注 vLLM 的贡献。您的所有贡献都有助于使 vLLM 成为一个对每个人都出色的工具和社区!