执行摘要
- 一句话:Ascend CI 工作流中 pip 迁移为 uv pip
- 推荐动作:该 PR 结构清晰,更改模式可复制,适合作为其他 CI 环境迁移 pip→uv 的参考。建议关注 uv 配置参数(如
INDEX_STRATEGY、INSECURE_HOST)的选择逻辑,后续可考虑统一推广到更多工作流。
功能与动机
PR 正文说明替换 pip/pip3 install/list 调用为 uv pip 等价调用,通过配置内部集群 PyPI 缓存服务和华为云 Ascend 仓库作为 fallback,并设置 unsafe-best-match 策略,目的是加速 Ascend CI 工作流中的包安装过程。
实现拆解
- 替换包管理命令:在 8 个工作流(
e2e_ascend.yml, e2e_fully_async_policy_ascend.yml, e2e_one_step_off_policy_ascend.yml, e2e_ppo_trainer_megatron_sglang_ascend.yml, e2e_ppo_trainer_megatron_sglang_2_ascend.yml, reward_model_sglang_ascend.yml, sgl_ascend.yml, nightly_ascend.yml)的每个 job 中,将 pip list 替换为 uv pip list,将 pip install 替换为 uv pip install(保留参数如 --no-deps, --no-build-isolation, -e .)。
- 添加 UV 环境变量:在每个 job 的
env: 块中新增以下变量:
UV_EXTRA_INDEX_URL:指向华为云 Ascend PyPI 仓库(fallback)。
UV_INDEX_STRATEGY: unsafe-best-match:允许在不安全的索引中优先选择最佳匹配。
UV_INSECURE_HOST 白名单:内部缓存服务域名。
UV_HTTP_TIMEOUT: 120、UV_NO_CACHE: "1"、UV_SYSTEM_PYTHON: "1" 等设置。
- 安装 uv 步骤:在每个 job 的开头新增
- name: Install uv 步骤,通过 pip install uv 安装 uv 工具。
- 保持原有环境变量:保留原有的
HF_HUB_ENABLE_HF_TRANSFER 等环境变量。
- 不涉及 a2b3 工作流:PR 明确排除 a2b3 机型的工作流,因其已有基础设施级 pip 源配置。
关键文件:
.github/workflows/sgl_ascend.yml(模块 CI 配置;类别 infra;类型 infrastructure): 修改量最大的工作流(+134/-126),包含详细的 CI 步骤和 uv 迁移,是本次变更的核心文件。
.github/workflows/e2e_ascend.yml(模块 CI 配置;类别 infra;类型 infrastructure): 多个 job 中执行了 uv 迁移,包括 uv install 步骤、应用 --no-build-isolation 的差异,影响多个端到端测试。
.github/workflows/nightly_ascend.yml(模块 CI 配置;类别 infra;类型 infrastructure): 夜间 CI 工作流,增加 uv 环境和 install 步骤,确保长时间运行的工作流也能受益于加速。
.github/workflows/reward_model_sglang_ascend.yml(模块 CI 配置;类别 infra;类型 infrastructure): 奖励模型测试工作流,迁移后使用了 uv pip install pytest pytest-asyncio 等第三方包安装。
.github/workflows/e2e_fully_async_policy_ascend.yml(模块 CI 配置;类别 infra;类型 infrastructure): 全异步策略 e2e 测试工作流,包含 FSDP2 和 Megatron 两种策略的 job,均迁移到 uv。
.github/workflows/e2e_one_step_off_policy_ascend.yml(模块 CI 配置;类别 infra;类型 infrastructure): 离策略 e2e 测试工作流,与 fully_async 结构类似,同样迁移。
.github/workflows/e2e_ppo_trainer_megatron_sglang_ascend.yml(模块 CI 配置;类别 infra;类型 infrastructure): PPO 训练器 Megatron+SGLang 组合测试工作流。
.github/workflows/e2e_ppo_trainer_megatron_sglang_2_ascend.yml(模块 CI 配置;类别 infra;类型 infrastructure): PPO 训练器另一个配置工作流,修改最小。
关键符号:未识别
评论区精华
无有效 review 讨论。PR 有一条 CLA 检查评论和一条 Gemini 自动评论表示无法审查该文件类型。审核人 wucong25 直接批准,未留下评论。
风险与影响
- 风险:本次变更为纯 CI 配置修改,风险较低。但 uv 与 pip 在依赖解析策略上存在差异,
unsafe-best-match 策略可能导致与之前不同的包版本被安装,从而引发兼容性问题。不过,升级后的缓存配置使用内部服务和华为云官方仓库,且保留了 --no-deps 和 --no-build-isolation 参数,显著降低了依赖冲突风险。建议在合并后手动触发一次 CI 流程验证各工作流能够成功完成包安装。
- 影响:影响范围仅限于 8 个使用 a3 自托管 runner 的 Ascend CI 工作流。对用户、产品代码或公共 API 无直接影响。团队收益是通过使用 uv 和内部缓存服务可加速包安装,减少 CI 等待时间。运维方面,新增的 UV 环境变量需要在 CI 网络中保证缓存服务域名可访问。
- 风险标记:CI 工具替换, 依赖解析行为变化, 内部缓存服务依赖
关联脉络
参与讨论