在vLLM OSS CI/CD上更新PyTorch版本¶
vLLM目前的策略是在CI/CD中始终使用最新的PyTorch稳定版本。当新的PyTorch稳定版本发布时,尽早提交PR更新PyTorch版本是标准做法。由于PyTorch版本发布之间的间隔,这个过程并非易事。以 Pull Request #16859为例,本文档概述了实现此更新的常见步骤,以及潜在问题列表和如何解决这些问题。
测试PyTorch候选发布版本 (RCs)¶
在PyTorch正式发布后才更新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 dev-discuss论坛上向社区公布。在此公告之后,我们可以通过遵循此三步流程起草拉取请求来开始vLLM集成测试:
-
更新requirements文件,使其指向
torch
、torchvision
和torchaudio
的新版本。 -
使用以下选项获取最终候选发布版本的wheel包。一些常见的平台是
cpu
、cu128
和rocm6.2.4
。 -
由于vLLM使用
uv
,请确保应用以下索引策略:- 通过环境变量
- 或通过CLI标志
如果在拉取请求中发现故障,请将其作为问题在vLLM上提出,并抄送PyTorch发布团队以启动关于如何解决它们的讨论。
更新CUDA版本¶
PyTorch发布矩阵包括稳定版和实验性CUDA版本。由于限制,只有最新的稳定版CUDA版本(例如,torch2.7.0+cu12.6
)被上传到PyPI。然而,vLLM可能需要不同的CUDA版本,例如用于Blackwell支持的12.8。这使得过程复杂化,因为我们不能使用现成的pip install torch torchvision torchaudio
命令。解决方案是在vLLM的Dockerfiles中使用--extra-index-url
。
- 目前重要的索引包括
平台 | --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 |
- 更新以下文件以匹配步骤1中的CUDA版本。这确保了发布版的vLLM wheel在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
从源代码构建并安装FlashInfer:
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发布团队。
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]"
causal-conv1d¶
uv pip install 'git+https://github.com/Dao-AILab/[email protected]'
更新所有不同的vLLM平台¶
与其尝试在一个拉取请求中更新所有vLLM平台,不如分别处理某些平台更易于管理。vLLM CI/CD中不同平台的需求文件和Dockerfiles的分离允许我们有选择地选择要更新的平台。例如,更新XPU需要来自Intel Extension for PyTorch(英特尔)的相应版本。虽然 Pull Request #16859将vLLM更新到PyTorch 2.7.0(CPU、CUDA和ROCm),但 Pull Request #17444完成了XPU的更新。