在vLLM开源CI/CD中更新PyTorch版本¶
vLLM的当前策略是在CI/CD中始终使用最新的PyTorch稳定版本。按照标准做法,当新的PyTorch稳定版本发布时,应尽早提交PR来更新PyTorch版本。由于PyTorch版本发布之间存在时间间隔,这个过程并非易事。以 Pull Request #16859为例,本文档概述了实现此更新的常见步骤,并列出了可能遇到的问题及其解决方法。
测试PyTorch发布候选版本(RCs)¶
在官方发布后更新vLLM中的PyTorch并不理想,因为此时发现的任何问题只能等待下一个版本发布或在vLLM中实施临时解决方案来解决。更好的解决方案是在每次发布前使用PyTorch候选版本(RC)测试vLLM以确保兼容性。
PyTorch 的候选发布版本可以从 PyTorch 测试索引 下载。例如,可以使用以下命令安装 torch2.7.0+cu12.8 RC:
uv pip install torch torchvision torchaudio \
--index-url https://download.pytorch.org/whl/test/cu128
当最终候选版本(RC)准备就绪进入测试阶段时,我们将在PyTorch开发讨论论坛上向社区发布公告。公告发布后,我们可以按照以下三步流程起草拉取请求,开始测试vLLM集成:
-
更新requirements文件以指向
torch、torchvision和torchaudio的新版本。 -
使用以下选项获取最终候选版本的wheel包。一些常见平台包括
cpu,cu128, 和rocm6.2.4。 -
由于vLLM使用
uv,请确保应用以下索引策略:- 通过环境变量设置:
- 或者通过CLI标志:
如果在拉取请求中发现故障,请在vLLM上将其作为问题提出,并抄送PyTorch发布团队以启动关于如何解决这些问题的讨论。
更新CUDA版本¶
PyTorch的发布矩阵包含稳定版和实验版的CUDA版本。由于限制条件,只有最新的稳定版CUDA版本(例如torch 2.7.1+cu126)会被上传到PyPI。然而vLLM可能需要不同的CUDA版本,比如支持Blackwell架构的12.8版本。这使得流程复杂化,因为我们无法直接使用开箱即用的pip install torch torchvision torchaudio命令。解决方案是在vLLM的Dockerfiles中使用--extra-index-url参数。
- 当前重要的指标包括:
| Platform | --extra-index-url |
|---|---|
| CUDA 12.8 | https://download.pytorch.org/whl/cu128 |
| CPU | https://download.pytorch.org/whl/cpu |
| ROCm 6.2 | https://download.pytorch.org/whl/rocm6.2.4 |
| ROCm 6.3 | https://download.pytorch.org/whl/rocm6.3 |
| XPU | https://download.pytorch.org/whl/xpu |
- Update the below files to match the CUDA version from step 1. This makes sure that the release vLLM wheel is tested on CI.
.buildkite/release-pipeline.yaml.buildkite/scripts/upload-wheels.sh
解决vLLM构建时间过长的问题¶
在使用新版本的PyTorch/CUDA构建vLLM时,vLLM的sccache S3存储桶中不会有缓存存在,这会导致CI上的构建任务可能耗时超过5小时并超时。此外,由于vLLM的fastcheck管道以只读模式运行,它不会填充缓存,因此重新运行它来预热缓存是无效的。
虽然像 #17419这样的持续改进方案正在从根源上解决构建时间过长的问题,但目前的临时解决方案是在Buildkite上手动触发构建时,将VLLM_CI_BRANCH设置为@khluu提供的自定义分支(VLLM_CI_BRANCH=khluu/use_postmerge_q)。该分支实现了两个目标:
- 将超时限制增加到10小时,以防止构建超时。
- 允许将编译后的工件写入vLLM sccache S3存储桶进行预热,从而加快后续构建速度。
更新依赖项¶
vLLM的多个依赖项(如FlashInfer)同样依赖于PyTorch,需要相应更新。与其等待所有这些依赖项发布新版本(耗时过长),可以通过从源代码构建来解除更新流程的阻碍。
FlashInfer¶
以下是如何在vLLM的Dockerfile中使用torch2.7.0+cu128从源代码构建和安装:
export TORCH_CUDA_ARCH_LIST='7.5 8.0 8.9 9.0 10.0+PTX'
export FLASHINFER_ENABLE_SM90=1
uv pip install --system \
--no-build-isolation "git+https://github.com/flashinfer-ai/[email protected]"
需要注意的是,从源码构建FlashInfer会使vLLM的构建时间增加约30分钟。因此,最好将wheel文件缓存在公共位置以便即时安装,例如这个FlashInfer wheel链接。对于未来版本,如果您希望该软件包发布在PyTorch官方渠道,请联系PyTorch发布团队。
xFormers¶
与FlashInfer类似,以下是构建和从源码安装xFormers的方法:
export TORCH_CUDA_ARCH_LIST='7.0 7.5 8.0 8.9 9.0 10.0+PTX'
MAX_JOBS=16 uv pip install --system \
--no-build-isolation "git+https://github.com/facebookresearch/[email protected]"
Mamba¶
uv pip install --system \
--no-build-isolation "git+https://github.com/state-spaces/[email protected]"
因果卷积1d¶
uv pip install 'git+https://github.com/Dao-AILab/[email protected]'
更新所有不同的vLLM平台¶
与其尝试在单个拉取请求中更新所有vLLM平台,更易于管理的方式是分开处理某些平台。vLLM CI/CD中针对不同平台分离需求和Dockerfile的设计,使我们能够选择性更新特定平台。例如,更新XPU需要等待英特尔发布相应版本的Intel Extension for PyTorch。虽然 Pull Request #16859已在CPU、CUDA和ROCm平台上将vLLM更新至PyTorch 2.7.0,但 Pull Request #17444最终完成了XPU平台的更新。