执行摘要
本PR通过重构Buildkite发布流水线,为ROCm平台启用了nightly Docker镜像和Python wheel的自动化发布。这一变更显著提升了ROCm用户的开发体验,通过缓存机制优化了长达3小时的构建时间,并经过多次迭代解决了配置管理和发布流程中的关键问题。
功能与动机
此PR的主要功能是启用ROCm的nightly构建发布,以解决issue #36703中用户对最新构建的需求。动机源于ROCm依赖构建时间过长(超过3小时),需通过缓存基础Docker镜像和wheels来改善效率。PR body详细描述了用户将如何通过Docker Hub获取标签如vllm/vllm-openai-rocm:nightly的镜像,以及通过S3路径下载wheels。
实现拆解
实现方案按模块拆解如下:
- CI流水线重构:修改
.buildkite/release-pipeline.yaml,移除手动配置输入,整合ROCm基础镜像和wheels构建步骤,并添加nightly镜像推送任务。关键变更包括简化构建逻辑,使用缓存键基于Dockerfile.rocm_base哈希。
- 新增发布脚本:
.buildkite/scripts/push-nightly-builds-rocm.sh是新增脚本,负责从ECR拉取镜像并推送到Docker Hub,支持标签如base-nightly和nightly-<commit>。
- 缓存优化:修改
.buildkite/scripts/cache-rocm-base-wheels.sh,移除对PYTHON_VERSION和PYTORCH_ROCM_ARCH的依赖,缓存键仅基于Dockerfile内容,提升稳定性。
- 辅助脚本更新:更新
.buildkite/scripts/annotate-release.sh和cleanup-nightly-builds.sh以支持ROCm特定仓库,确保发布注释和清理操作正确。
评论区精华
Review讨论中突出了几个关键交锋:
- S3_BUCKET变量变更:gemini-code-assist[bot]指出变量从
vllm-wheels改为vllm-wheels-dev可能影响发布目标,tjtanaa回应是试用值并已更正。
- DRY_RUN设置:评论指出
DRY_RUN设置为1会阻止发布,tjtanaa解释为试用运行,后续提交中移除。
- 配置提取的脆性:gshtras评论从
Dockerfile.rocm_base提取配置易受未来变化影响,tjtanaa随后移除这些提取,仅基于文件内容生成缓存键,决策结论是避免隐藏依赖,提升设计鲁棒性。
风险与影响
风险分析:
- 缓存键生成仅依赖
Dockerfile.rocm_base哈希,若环境变量未纳入,可能导致缓存无效或构建不一致。
- 发布脚本中的网络或权限错误可能阻止镜像推送到Docker Hub,影响nightly发布可用性。
- 清理脚本
cleanup-nightly-builds.sh修改后支持多仓库,但参数错误可能导致误删标签,需谨慎测试。
影响分析:
- 对用户:ROCm用户现在可便捷获取nightly构建,加速开发和测试迭代。
- 对系统:CI流水线增加ROCm nightly发布步骤,可能轻微增加资源消耗,但通过缓存优化整体效率。
- 对团队:简化发布流程,减少手动操作,促进更频繁的集成测试。
关联脉络
此PR与历史PR #32264密切相关,重用了其缓存逻辑为基础Docker镜像和wheels提供支持。从近期历史PR看,如#38161和#38167,vLLM仓库持续优化ROCm相关CI测试和性能,本PR是这一趋势的一部分,旨在扩展发布基础设施以支持更稳定的ROCm生态。关联issue #36703提供了直接需求背景,推动了此功能的实现。
参与讨论