Prhub

#49837 [CI][ROCm] Make hf-xet reconstruction safe on shared NFS

原始 PR 作者 AndreasKaratzas 合并时间 2026-07-27 17:23 文件变更 1 提交数 1 评论 0 代码增减 +13 / -0

执行摘要

修复 ROCm CI 中 hf-xet 在共享 NFS 上的安全问题

在共享 NFS 上运行 ROCm CI 时,高并发的 hf-xet vectored writes 可能导致数据损坏,如 Buildkite build #11196 所示。需要让 xet 的永久缓存保留在共享 NFS 上,但将临时状态移到本地存储,并禁用高性能 vectored 重建模式。

低风险、高收益的 CI 稳定性修复,建议快速合并。

讨论亮点

无显著的 review 讨论;tjtanaa 直接批准了变更。

实现拆解

  1. 检测 NFS 文件系统:在initialize_native_environment()函数中,新增变量hf_fstype,使用findmnt命令查询${HF_HOME}挂载点的文件系统类型。
  2. 设置环境变量:若类型为nfsnfs4,则设置HF_XET_CACHE为本地路径(native_root/cache/hf-xet),并禁用HF_XET_HIGH_PERFORMANCEHF_XET_RECONSTRUCTION_USE_VECTORED_WRITE
  3. 创建缓存目录:使用mkdir -p确保本地缓存目录存在,失败时返回非零退出码。
  4. 日志输出:打印配置信息以便调试。
文件 模块 状态 重要度
.buildkite/scripts/hardware_ci/run-amd-test.sh CI 脚本 modified 4.05

关键符号

initialize_native_environment

关键源码片段

.buildkite/scripts/hardware_ci/run-amd-test.sh infrastructure

唯一变更文件,包含 NFS 检测逻辑和环境变量设置。

# 在 initialize_native_environment() 函数中
local hf_fstype=""# 使用 findmnt 检测 HF_HOME 挂载的文件系统类型
if command -v findmnt >/dev/null 2>&1; then
    hf_fstype=$(findmnt -n -T "${HF_HOME}" -o FSTYPE 2>/dev/null || true)
fi# 如果是 NFS 类型,则调整 xet 配置
if [[ "${hf_fstype}" == nfs || "${hf_fstype}" == nfs4 ]]; then
    # Keep hf-xet state local and avoid vectored writes on shared NFS.
    export HF_XET_CACHE="${native_root}/cache/hf-xet"
    export HF_XET_HIGH_PERFORMANCE=0
    export HF_XET_RECONSTRUCTION_USE_VECTORED_WRITE=0
    mkdir -p "${HF_XET_CACHE}" || return 1
    echo "Configured hf-xet for shared ${hf_fstype} cache at ${HF_HOME}"
fi

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

低风险:仅当findmnt可用且HF_HOME在 NFS 上时才会触发变更;对非 NFS 环境无影响。潜在风险是findmnt命令在部分镜像中不可用,但已通过command -v检查。

仅影响 ROCm CI 运行环境,特别是使用共享 NFS 存储HF_HOME的机器。预计会消除因 vectored writes 导致的 CI 不稳定,而不会影响缓存命中率。

CI 脚本变更 低风险

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论