Prhub

#39978 [ROCm][CI] Build fastsafetensors from source so it links against libamdhip64

vllm-project/vllm · 作者 AndreasKaratzas · 合并时间 2026-04-18 03:30

分析状态 已生成
文件变更 4提交数 3 · 评论 4
代码增减 +3 / -27
rocm ci/build v1 infra

执行摘要

为 ROCm 平台从源码构建 fastsafetensors,修复 HIP 运行时库链接问题。

PR body明确指出:PyPI上的fastsafetensors wheel是CUDA-only的,其编译扩展会无条件dlopen libcudart.so,因此在ROCm主机上即使存在libamdhip64.so也会抛出异常“GPU runtime library (libcudart.so or libamdhip64.so) does not exist”,这破坏了ROCm CI测试镜像和ROCm发布镜像。从固定的git标签直接安装强制从源码构建,解决了mi250_1: Model Executor测试组的失败。

该PR主要涉及基础设施调整,对于关注ROCm平台兼容性或CI/CD流程的工程师值得一读。关键设计决策在于权衡使用git源码构建与PyPI预编译包的利弊,以及移除git依赖检查的合理性。

讨论亮点

review中,gemini-code-assist[bot]提出了两个关键建议:1)build_fastsafetensors阶段应基于已安装torch的build_vllm镜像,而非base镜像,因为fastsafetensors作为PyTorch扩展需要torch进行构建;2)构建时应使用--no-build-isolation标志,防止pip下载不兼容的CUDA版torch。作者AndreasKaratzas回应指出fastsafetensors不使用torch.utils.cpp_extension,且构建环境不会拉入CUDA torch,因此未采纳这些建议。最终PR被gshtras批准合并。

实现拆解

  1. 修改依赖声明文件:在requirements/test/rocm.inrequirements/rocm.txt中,将fastsafetensors>=0.2.2改为fastsafetensors @ git+https://github.com/foundation-model-stack/fastsafetensors.git@0.2.2,并更新对应的锁定文件requirements/test/rocm.txt。这样在安装时会从Git源码构建,而非使用PyPI的CUDA-only预编译包。
  2. 移除Dockerfile中的git依赖检查:在docker/Dockerfile.rocm中,删除了之前用于检查requirements文件中git+ URL的脚本块(约24行)。因为现在fastsafetensors必须通过git+ URL安装,所以需要移除这个检查以避免构建失败。
  3. 同步更新锁定文件requirements/test/rocm.txtrequirements/rocm.txt作为依赖锁定文件,相应更新了fastsafetensors的条目,确保版本一致性。
文件 模块 状态 重要度
docker/Dockerfile.rocm Docker 构建 modified 4.09
requirements/test/rocm.in 测试依赖 modified 3.25
requirements/rocm.txt 依赖配置 modified 1.72
requirements/test/rocm.txt 测试锁定 modified 1.89
docker/Dockerfile.rocm infrastructure

移除了禁止 git 依赖的检查脚本,允许从 Git 源码构建 fastsafetensors,是解决构建失败的关键步骤。

# 移除的脚本块原本用于检查requirements文件中是否包含git+ URL,
# 并强制要求使用PyPI包。由于fastsafetensors在PyPI上仅提供CUDA-only预编译包,
# 在ROCm环境下会导致libcudart.so链接失败,因此必须从Git源码构建。
# 删除此检查后,Docker构建将允许通过git+ URL安装fastsafetensors,
# 从而生成链接到libamdhip64.so的正确版本。
# 注意:这仅影响ROCm特定的Dockerfile,不会改变其他平台的构建流程。

评论区精华

构建阶段基础镜像选择 设计

gemini-code-assist[bot] 建议将 build_fastsafetensors 阶段基于 build_vllm 镜像而非 base 镜像,因为 fastsafetensors 作为 PyTorch 扩展需要 torch 进行构建。

结论:作者 AndreasKaratzas 回应指出 fastsafetensors 不使用 torch.utils.cpp_extension,且构建环境不会拉入 CUDA torch,因此未采纳该建议。 · 已解决

构建隔离标志使用 设计

gemini-code-assist[bot] 建议在构建时使用 --no-build-isolation 标志,防止 pip 下载不兼容的 CUDA 版 torch。

结论:作者未直接回应此建议,但最终 PR 未添加该标志,可能认为当前构建方式已足够。 · unresolved

风险与影响

  1. 构建环境风险:从源码构建可能增加构建时间和复杂性,如果fastsafetensors源码或构建脚本变更,可能导致构建失败或兼容性问题。
  2. 依赖管理风险:使用git+ URL而非PyPI包,可能引入版本控制的不稳定性,例如Git仓库不可访问或标签被移动。
  3. 兼容性风险:移除Dockerfile中的git依赖检查,可能未来其他git依赖被无意引入时无法及时发现,但本PR中这是必要调整。
  1. 对用户影响:ROCm平台用户(包括CI和发布镜像)将能正常使用fastsafetensors进行模型加载,修复了之前因库链接失败导致的测试和部署问题。
  2. 对系统影响:仅影响ROCm相关的构建和测试流程,不涉及核心推理或训练逻辑。
  3. 对团队影响:简化了ROCm环境配置,提升了CI稳定性和开发效率。
依赖管理变更 构建环境调整

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

执行摘要

  • 一句话:为ROCm平台从源码构建fastsafetensors,修复HIP运行时库链接问题。
  • 推荐动作:该PR主要涉及基础设施调整,对于关注ROCm平台兼容性或CI/CD流程的工程师值得一读。关键设计决策在于权衡使用git源码构建与PyPI预编译包的利弊,以及移除git依赖检查的合理性。

功能与动机

PR body明确指出:PyPI上的fastsafetensors wheel是CUDA-only的,其编译扩展会无条件dlopen libcudart.so,因此在ROCm主机上即使存在libamdhip64.so也会抛出异常“GPU runtime library (libcudart.so or libamdhip64.so) does not exist”,这破坏了ROCm CI测试镜像和ROCm发布镜像。从固定的git标签直接安装强制从源码构建,解决了mi250_1: Model Executor测试组的失败。

实现拆解

  1. 修改依赖声明文件:在requirements/test/rocm.inrequirements/rocm.txt中,将fastsafetensors>=0.2.2改为fastsafetensors @ git+https://github.com/foundation-model-stack/fastsafetensors.git@0.2.2,并更新对应的锁定文件requirements/test/rocm.txt。这样在安装时会从Git源码构建,而非使用PyPI的CUDA-only预编译包。
  2. 移除Dockerfile中的git依赖检查:在docker/Dockerfile.rocm中,删除了之前用于检查requirements文件中git+ URL的脚本块(约24行)。因为现在fastsafetensors必须通过git+ URL安装,所以需要移除这个检查以避免构建失败。
  3. 同步更新锁定文件requirements/test/rocm.txtrequirements/rocm.txt作为依赖锁定文件,相应更新了fastsafetensors的条目,确保版本一致性。

关键文件:

  • docker/Dockerfile.rocm(模块 Docker构建;类别 infra;类型 infrastructure): 移除了禁止git依赖的检查脚本,允许从Git源码构建fastsafetensors,是解决构建失败的关键步骤。
  • requirements/test/rocm.in(模块 测试依赖;类别 test;类型 test-coverage): 将fastsafetensors依赖从PyPI包改为Git源码,触发从源码构建以支持ROCm。
  • requirements/rocm.txt(模块 依赖配置;类别 docs;类型 documentation): 更新ROCm主依赖文件,同步fastsafetensors为Git源码版本,确保一致性。
  • requirements/test/rocm.txt(模块 测试锁定;类别 docs;类型 documentation): 作为锁定文件,更新fastsafetensors的哈希值以匹配Git源码版本。

关键符号:未识别

关键源码片段

docker/Dockerfile.rocm

移除了禁止git依赖的检查脚本,允许从Git源码构建fastsafetensors,是解决构建失败的关键步骤。

# 移除的脚本块原本用于检查requirements文件中是否包含git+ URL,
# 并强制要求使用PyPI包。由于fastsafetensors在PyPI上仅提供CUDA-only预编译包,
# 在ROCm环境下会导致libcudart.so链接失败,因此必须从Git源码构建。
# 删除此检查后,Docker构建将允许通过git+ URL安装fastsafetensors,
# 从而生成链接到libamdhip64.so的正确版本。
# 注意:这仅影响ROCm特定的Dockerfile,不会改变其他平台的构建流程。

评论区精华

review中,gemini-code-assist[bot]提出了两个关键建议:1)build_fastsafetensors阶段应基于已安装torch的build_vllm镜像,而非base镜像,因为fastsafetensors作为PyTorch扩展需要torch进行构建;2)构建时应使用--no-build-isolation标志,防止pip下载不兼容的CUDA版torch。作者AndreasKaratzas回应指出fastsafetensors不使用torch.utils.cpp_extension,且构建环境不会拉入CUDA torch,因此未采纳这些建议。最终PR被gshtras批准合并。

  • 构建阶段基础镜像选择 (design): 作者AndreasKaratzas回应指出fastsafetensors不使用torch.utils.cpp_extension,且构建环境不会拉入CUDA torch,因此未采纳该建议。
  • 构建隔离标志使用 (design): 作者未直接回应此建议,但最终PR未添加该标志,可能认为当前构建方式已足够。

风险与影响

  • 风险:1. 构建环境风险:从源码构建可能增加构建时间和复杂性,如果fastsafetensors源码或构建脚本变更,可能导致构建失败或兼容性问题。
    2. 依赖管理风险:使用git+ URL而非PyPI包,可能引入版本控制的不稳定性,例如Git仓库不可访问或标签被移动。
    3. 兼容性风险:移除Dockerfile中的git依赖检查,可能未来其他git依赖被无意引入时无法及时发现,但本PR中这是必要调整。
  • 影响:1. 对用户影响:ROCm平台用户(包括CI和发布镜像)将能正常使用fastsafetensors进行模型加载,修复了之前因库链接失败导致的测试和部署问题。
    2. 对系统影响:仅影响ROCm相关的构建和测试流程,不涉及核心推理或训练逻辑。
    3. 对团队影响:简化了ROCm环境配置,提升了CI稳定性和开发效率。
  • 风险标记:依赖管理变更, 构建环境调整

关联脉络

  • PR #38396 [AMD][CI] Update DeepEP branch: 同样涉及ROCm CI配置更新,属于AMD平台基础设施调整。
  • PR #39957 skip fp8e4b15 on xpu: 类似平台特定修复(XPU),涉及测试和量化模块调整。

参与讨论