Prhub

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

原始 PR 作者 AndreasKaratzas 合并时间 2026-04-18 03:30 文件变更 4 提交数 3 评论 5 代码增减 +3 / -27

执行摘要

修复 ROCm 上 fastsafetensors 的 CUDA-only PyPI 问题

PyPI 上的 fastsafetensors wheel 是 CUDA-only 的,其编译扩展硬编码 dlopen libcudart.so,在 ROCm 主机上会抛出异常: Exception: [FAIL] GPU runtime library (libcudart.so or libamdhip64.so) does not exist,即使 libamdhip64.so 存在。这破坏了 ROCm CI 测试镜像和 ROCm 发布镜像。PR 描述提到:"Installing it directly from the pinned git tag forces build from source."

该 PR 是紧急修复型变更,值得关注其后续演进。建议跟踪 Issue 评论中提到的上游 PR(foundation-model-stack/fastsafetensors#67 和 #68),待上游发布支持 ROCm 的通用 wheel 后,应恢复使用 PyPI 版本,以消除 git 依赖。

讨论亮点

review 中 gemini-code-assist[bot] 提出了两个关于 Dockerfile 构建的安全建议:

  • 建议将 build_fastsafetensors 阶段的基础镜像从 base 改为 build_vllm,因为 base 缺少 PyTorch,而 fastsafetensors 作为 PyTorch 扩展需要 torch 编译。作者 AndreasKaratzas 回应称 "fastsafetensors doesn't use torch.utils.cpp_extension",无需 PyTorch 依赖。
  • 建议使用 --no-build-isolation 标志以防止 pip 下载不兼容的 CUDA torch 包。作者没有直接回应这条,但最终实现中并未采纳该建议。

实现拆解

  1. 更新测试依赖声明:在 requirements/test/rocm.in 中将 fastsafetensors>=0.2.2 替换为 fastsafetensors @ git+https://github.com/foundation-model-stack/fastsafetensors.git@0.2.2,并添加注释 "PyPI only ships CUDA wheels" 说明原因。
  2. 同步锁定文件:相应地更新 requirements/test/rocm.txt 和 requirements/rocm.txt,将 fastsafetensors 版本锁定为 git 源码构建。
  3. 移除 Dockerfile 中的 git 依赖限制:在 docker/Dockerfile.rocm 中删除了约 24 行用于检查并阻止 git+ 依赖的代码,因为 fastsafetensors 现在正是通过 git+ 方式安装的。该检查原本是为了防止 uv 不兼容 git+ URL 的问题,但此次特殊情况下需要例外。
文件 模块 状态 重要度
docker/Dockerfile.rocm Docker 构建 modified 4.09
requirements/test/rocm.in 测试依赖 modified 4.14
requirements/test/rocm.txt 依赖锁定 modified 1.89
requirements/rocm.txt 依赖锁定 modified 1.72

关键源码片段

requirements/test/rocm.in test-coverage

核心依赖声明变更,将 fastsafetensors 从 PyPI 版本改为 git 源码构建。

# 旧行 ( 被替换 ):
# fastsafetensors>=0.2.2 # 0.2.2 contains important fixes for multi-GPU mem usage

# 新行 :
fastsafetensors @ git+https://github.com/foundation-model-stack/fastsafetensors.git@0.2.2  # PyPI only ships CUDA wheels
# 注释说明 PyPI 只有 CUDA wheel,因此强制从指定 git tag 源码构建
# 确保在 ROCm 环境下正确链接 libamdhip64

评论区精华

构建基础镜像选择 设计

gemini-code-assist[bot] 建议将 build_fastsafetensors 阶段的基础镜像从 base 改为 build_vllm,因为 base 缺少 PyTorch。作者 AndreasKaratzas 回应 fastsafetensors 不使用 torch.utils.cpp_extension,不需要 PyTorch。

结论:作者确认不需要 PyTorch 构建依赖,保持 base 镜像作为基础。 · 已解决

使用 --no-build-isolation 标志 build

gemini-code-assist[bot] 建议在 pip wheel 命令中添加 --no-build-isolation 以防止下载不兼容的 CUDA torch。

结论:未采纳,最终版本未添加该标志。作者未直接回应,但可以推断 fastsafetensors 的构建过程确实不依赖 PyTorch,因此不需要。 · unresolved

风险与影响

  1. Dockerfile 兼容性风险:移除了对 git+ 依赖的全面检查,未来可能引入其他 git+ 依赖,而 uv 对 git+ URL 的支持可能有限,需确保构建工具兼容。
  2. 构建安全性风险:不采用 --no-build-isolation 可能导致临时下载的 torch(CUDA 版本)被链接,尽管作者声称不需要 torch,但风险仍存在。
  3. 版本锁定风险:依赖特定 git commit 快照,若上游仓库不可达或标签被强制推送,可能导致构建失败。

用户/系统影响:仅影响 ROCm 用户和 CI。修复后 ROCm 环境中 fastsafetensors 可以正常加载模型权重,消除 CI 测试组(如 mi250_1: Model Executor)的运行时崩溃。团队影响:简化了 ROCm 镜像构建流程,移除了不必要的检查,但需留意未来引入新的 git 依赖。

构建安全风险 依赖版本锁定风险 上游依赖可用性

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论