跳至内容

为vLLM贡献

感谢您对vLLM项目的贡献感兴趣!我们的社区向所有人开放,欢迎各种形式的贡献,无论大小。您可以通过以下几种方式为项目做出贡献:

  • 识别并报告任何问题或错误。
  • 请求或添加对新模型的支持。
  • 建议或实现新功能。
  • 改进文档或贡献一份操作指南。

我们也深信社区支持的力量;因此,解答疑问、提供PR审核以及帮助他人同样是备受重视且有益的贡献。

最后,支持我们最有影响力的方式之一就是提高对vLLM的认知。在您的博客文章中讨论它,并强调它如何推动您的出色项目。如果您正在使用vLLM,请在社交媒体上表达您的支持,或者简单地通过给我们的仓库加星来表达您的赞赏!

任务公告板

不确定从哪里开始?查看以下链接以获取可处理的任务:

许可证

参见 LICENSE

开发

推荐使用uv这个极速Python环境管理器来创建和管理Python环境。请按照文档安装uv。安装完uv后,您可以通过以下命令创建新的Python环境并安装vLLM:

uv venv --python 3.12 --seed
source .venv/bin/activate

根据您希望进行的开发类型(例如Python、CUDA),您可以选择是否在编译环境下构建vLLM。详情请参阅从源代码构建文档。

在迭代优化C++/CUDA内核时,如需了解优化工作流程建议,请参阅增量编译工作流程

使用MkDocs构建文档

MkDocs 简介

MkDocs 是一款快速、简洁且极其美观的静态网站生成器,专为构建项目文档而设计。文档源文件采用Markdown格式编写,并通过单个YAML配置文件进行配置。

安装MkDocs及插件

安装MkDocs以及vLLM文档中使用的插件,以及所需的依赖项:

uv pip install -r requirements/docs.txt

注意

确保您的Python版本与插件兼容(例如,mkdocs-awesome-nav需要Python 3.10+版本)

验证安装

确认MkDocs已正确安装:

mkdocs --version

示例输出:

mkdocs, version 1.6.1 from /opt/miniconda3/envs/mkdoc/lib/python3.10/site-packages/mkdocs (Python 3.10)

克隆 vLLM 仓库

git clone https://github.com/vllm-project/vllm.git
cd vllm

启动开发服务器

MkDocs内置了一个开发服务器,可以让你在编写文档时实时预览。请确保你当前目录下存在mkdocs.yml配置文件,然后通过运行mkdocs serve命令启动服务器:

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文档

测试

Commands
# These commands are only for Nvidia CUDA platforms.
uv pip install -r requirements/common.txt -r requirements/dev.txt --torch-backend=auto

# Linting, formatting and static type checking
pre-commit install

# You can manually run pre-commit with
pre-commit run --all-files --show-diff-on-failure

# 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/

# Run tests for a single test file with detailed output
pytest -s -v tests/test_logger.py

提示

由于 docker/Dockerfile内置了Python 3.12,CI中的所有测试(除mypy外)都使用Python 3.12运行。

因此,我们建议使用Python 3.12进行开发,以最大程度减少本地环境与我们的CI环境发生冲突的可能性。

如果缺少Python.h,请安装python3-dev

如果上述任何命令因Python.h: No such file or directory而失败,请使用sudo apt install python3-dev安装python3-dev

注意

目前,该代码库尚未通过mypy的完整检查。

注意

目前,在CPU平台上运行时,并非所有单元测试都能通过。如果您无法在本地GPU平台上运行单元测试,暂时可以依赖持续集成系统来运行这些测试。

问题

如果您遇到错误或有功能需求,请先搜索现有问题查看是否已被报告过。如果没有,请提交新问题,并尽可能提供相关详细信息。

重要

如果您发现安全漏洞,请按照此处的说明操作。

拉取请求与代码审查

感谢您为vLLM做出的贡献!在提交拉取请求之前,请确保PR符合以下标准。这有助于vLLM保持代码质量并提高审查过程的效率。

DCO与签署声明

向本项目贡献更改时,您必须同意 DCO。提交必须包含Signed-off-by:标头,以证明同意DCO的条款。

使用 -s 参数配合 git commit 命令会自动添加这个头部信息。

提示

您可以通过IDE启用自动签出功能:

  • PyCharm: 在Commit窗口的Commit and Push...按钮右侧点击Show Commit Options图标。这将打开一个git窗口,您可以在其中修改Author并启用Sign-off commit
  • VSCode: 打开设置编辑器并启用Git: Always Sign Off (git.alwaysSignOff)字段。

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++风格指南
  • 通过所有代码检查。请使用pre-commit格式化代码。如果不熟悉pre-commit,请参考https://pre-commit.com/#usage
  • 代码需要充分注释,以确保未来的贡献者能够轻松理解代码。
  • 包含足够的测试以确保项目保持正确和健壮。这包括单元测试和集成测试。
  • 如果PR修改了vLLM面向用户的行为,请向docs/添加文档。这有助于vLLM用户理解并利用新功能或变更。

添加或更改内核

在积极开发或修改内核时,强烈建议使用增量编译工作流以加快构建时间。每个自定义内核都需要一个模式和一个或多个实现注册到PyTorch中。

  • 确保自定义操作符按照PyTorch指南进行注册:Custom C++ and CUDA OperatorsThe Custom Operators Manual
  • 返回Tensors的自定义操作需要元函数。应在Python中实现并注册元函数,以便自动处理动态维度。关于元函数的描述请参阅上述文档。
  • 使用torch.library.opcheck()来测试任何已注册操作的功能注册和元函数。示例请参见tests/kernels
  • 当修改现有操作的C++签名时,必须更新模式(schema)以反映这些变更。
  • 如需新增自定义类型,请参阅以下文档:Custom Class Support in PT2

重大变更说明

请尽量保持修改简洁。对于重大架构变更(超过500行代码,不包括内核/数据/配置/测试),我们期望先在GitHub上提交议题(RFC)讨论技术设计和合理性。否则,我们将标记为rfc-required并可能不会通过该PR。

评论内容预期

vLLM团队的目标是成为一台透明的评审机器。我们希望使评审过程透明高效,确保每位贡献者都不会感到困惑或沮丧。然而,vLLM团队规模较小,因此我们需要优先处理某些PR。以下是您可以期待的评审流程:

  • 提交PR后,该PR将被分配给一位审阅者。每位审阅者将根据自身专业领域和时间安排来认领PR。
  • PR被分配后,审阅者将每2-3天提供一次状态更新。如果PR在7天内未被审阅,请随时联系审阅者或vLLM团队。
  • 审核后,如果存在需要修改的地方,审核者会在PR上添加action-required标签。贡献者应处理相关评论并通知审核者重新审查PR。
  • 请在合理的时间范围内回复所有评论。如果评论内容不清晰或您对建议有异议,可以随时要求澄清或讨论该建议。
  • 请注意,由于计算资源有限,并非所有CI检查都会执行。当PR准备合并或需要完整CI运行时,审核者会添加ready标签。

感谢

最后,感谢您抽出时间阅读这些指南,并对为vLLM做出贡献感兴趣。您的所有贡献都有助于使vLLM成为每个人都能使用的优秀工具和社区!

优云智算