贡献 vLLM¶
感谢您对贡献 vLLM 感兴趣!我们的社区对所有人开放,欢迎各种形式的贡献,无论大小。您可以通过以下几种方式为项目做出贡献:
- 发现并报告任何问题或错误。
- 请求或添加对新模型的支持。
- 建议或实现新功能。
- 改进文档或贡献操作指南。
我们也相信社区支持的力量;因此,回答疑问、提供 PR 审查和帮助他人也是非常受重视和有益的贡献。
最后,支持我们最有影响力的方式之一是提高 vLLM 的知名度。在您的博客文章中谈论它,并强调它如何推动您的卓越项目。如果您正在使用 vLLM,请在社交媒体上表达您的支持,或者只需给我们的仓库加星表示感谢!
招聘信息¶
不确定从哪里开始?请查看以下链接,了解可以着手处理的任务:
许可协议¶
参阅 LICENSE。
开发¶
根据您希望进行的开发类型(例如 Python、CUDA),您可以选择带编译或不带编译地构建 vLLM。详情请查阅从源代码构建 文档。
使用 MkDocs 构建文档¶
MkDocs 简介¶
MkDocs 是一个快速、简单且非常漂亮的静态站点生成器,专用于构建项目文档。文档源文件以 Markdown 格式编写,并使用单个 YAML 配置文件进行配置。
安装 MkDocs 和插件¶
安装 MkDocs 以及 vLLM 文档中使用的插件和所需依赖项
注意: 确保您的 Python 版本与插件兼容(例如,mkdocs-awesome-nav 需要 Python 3.10+)
验证安装¶
确认 MkDocs 已正确安装:
输出示例
mkdocs, version 1.6.1 from /opt/miniconda3/envs/mkdoc/lib/python3.9/site-packages/mkdocs (Python 3.9)
克隆 vLLM
仓库¶
启动开发服务器¶
MkDocs 带有内置的开发服务器,您可以在编写文档时预览文档。确保您位于包含 mkdocs.yml
配置文件的目录中,然后运行 mkdocs serve
命令启动服务器
输出示例
INFO - Documentation built in 106.83 seconds
INFO - [22:02:02] Watching paths for changes: 'docs', 'mkdocs.yaml'
INFO - [22:02:02] Serving on http://127.0.0.1:8000/
在浏览器中查看¶
在浏览器中打开 http://127.0.0.1:8000/ 以查看实时预览。
了解更多¶
有关附加功能和高级配置,请参考官方 MkDocs 文档。
测试¶
pip install -r requirements/dev.txt
# Linting, formatting and static type checking
pre-commit install --hook-type pre-commit --hook-type commit-msg
# You can manually run pre-commit with
pre-commit run --all-files
# To manually run something from CI that does not run
# locally by default, you can run:
pre-commit run mypy-3.9 --hook-stage manual --all-files
# Unit tests
pytest tests/
提示
由于 docker/Dockerfile 包含 Python 3.12,因此 CI 中的所有测试(mypy
除外)都使用 Python 3.12 运行。
因此,我们建议使用 Python 3.12 进行开发,以最大程度地减少本地环境与我们的 CI 环境发生冲突的可能性。
注意
目前,仓库尚未完全通过 mypy
检查。
注意
目前,并非所有单元测试在 CPU 平台上运行时都能通过。如果您无法访问 GPU 平台在本地运行单元测试,目前请依赖持续集成系统运行测试。
问题¶
如果您遇到错误或有功能请求,请先搜索现有问题,查看是否已报告。如果没有,请提交新问题,并提供尽可能多的相关信息。
警告
如果您发现安全漏洞,请遵循 此处 的说明。
拉取请求与代码审查¶
感谢您对 vLLM 的贡献!在提交拉取请求之前,请确保 PR 符合以下标准。这有助于 vLLM 保持代码质量并提高审查流程的效率。
DCO 和 Signed-off-by¶
向本项目贡献更改时,您必须同意 DCO。提交必须包含 Signed-off-by:
头部,以证明同意 DCO 的条款。
使用 git commit
时带上 -s
参数将自动添加此头部。
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 检查。请使用
pre-commit
格式化您的代码。如果您不熟悉pre-commit
,请参阅 https://pre-commit.git-scm.cn/#usage。 - 代码需要有良好的文档,以确保未来的贡献者能够轻松理解代码。
- 包含足够的测试以确保项目保持正确和健壮。这包括单元测试和集成测试。
- 如果 PR 修改了 vLLM 面向用户的行为,请在
docs/
中添加文档。这有助于 vLLM 用户理解和使用新功能或更改。
添加或更改内核¶
每个自定义内核都需要一个 schema 和一个或多个实现,以便在 PyTorch 中注册。
- 请确保自定义操作按照 PyTorch 指南注册:自定义 C++ 和 CUDA 操作 以及 自定义操作手册。
- 返回
Tensors
的自定义操作需要 meta-functions。应在 Python 中实现和注册 meta-functions,以便自动处理动态维度。有关 meta-functions 的描述,请参阅上述文档。 - 使用 torch.library.opcheck() 测试已注册操作的函数注册和 meta-function。请参阅
tests/kernels
了解示例。 - 更改现有操作的 C++ 签名时,必须更新 schema 以反映更改。
- 如果需要新的自定义类型,请参阅以下文档:PT2 中的自定义类支持。
大型更改的注意事项¶
请保持更改尽可能简洁。对于主要的架构更改(不包括 kernel/data/config/test,超过 500 行代码),我们希望在 GitHub issue 中(以 RFC 形式)讨论技术设计和理由。否则,我们将标记为 rfc-required
,并且可能不会处理该 PR。
代码审查预期¶
vLLM 团队的目标是成为一个透明的审查机器。我们希望使审查流程透明高效,并确保所有贡献者不会感到困惑或沮丧。然而,vLLM 团队规模较小,因此我们需要对某些 PR 进行优先级排序。以下是您可以从审查流程中预期的内容:
- 提交 PR 后,将分配给一名审查者。每位审查者将根据其专业知识和可用时间选择 PR 进行审查。
- 分配 PR 后,审查者会每隔 2-3 天提供状态更新。如果 PR 在 7 天内未被审查,请随时提醒审查者或 vLLM 团队。
- 审查后,如果需要进行更改,审查者会在 PR 上添加
action-required
标签。贡献者应处理评论并提醒审查者重新审查 PR。 - 请在合理的时间范围内回复所有评论。如果某个评论不清楚或您不同意某个建议,请随时要求澄清或讨论该建议。
- 请注意,由于计算资源有限,并非所有 CI 检查都会执行。当 PR 准备好合并或需要完整的 CI 运行时,审查者会给 PR 添加
ready
标签。
感谢¶
最后,感谢您抽出时间阅读这些指南并对贡献 vLLM 感兴趣。您的所有贡献都帮助 vLLM 成为一个对所有人来说都很棒的工具和社区!