Hugging Face 与 SkyPilot 合作,让用户可以在任何云上运行 AI 工作负载,数据直接挂载 Hugging Face Hub,无需支付跨云出站流量费用。只需一个 `hf://` URL 和现有 `HF_TOKEN`,即可在 20 多个云平台、Kubernetes 等集群上读写模型、数据集和检查点。支持延迟挂载、Xet 去重,大幅降低多云架构下的存储成本。
对于大多数团队来说,模型和数据集通常存放在某个云厂商某个区域的存储桶中。而开发、训练或推理所需的 GPU,却越来越多地分布在不同的云上。一旦数据和计算分离,你就得为读取自己的数据到自己的 GPU 支付跨云传输费用。
现在,Hugging Face 与 SkyPilot 联手解决了这个问题:你的模型和数据集存放在 Hugging Face Hub 上,SkyPilot 负责计算(开发、训练或推理),可以运行在任何有 GPU 的集群上。只需一个 hf:// URL 和你已有的 HF_TOKEN,就能将 Hugging Face 存储桶或 Hub 仓库挂载到 SkyPilot 任务中,然后选择有空闲容量的云平台启动。Hugging Face 不收取出站流量费,因此在任何云上读取你的数据都不花钱。
以下是本次更新的核心功能:
store: hf 可将 Hugging Face 存储桶(读写)或模型/数据集/Space 仓库(只读)挂载到 SkyPilot 任务中,使用 hf:// URL 和你的 HF_TOKEN,支持 MOUNT(挂载)或 COPY(复制)模式。hf-mount 的 FUSE 修复代码上游贡献,使其能在无特权容器中工作。SkyPilot 任务已经可以通过挂载本地路径的方式读写云对象存储(S3、GCS、Azure、R2 等)。现在 Hugging Face 存储也加入了这个行列,以 store: hf 形式通过 hf:// 协议访问:
file_mounts:
# Hugging Face 存储桶,读写模式,用于检查点、日志、处理后数据
/checkpoints:
source: hf://buckets/my-org/qwen-sft
store: hf
mode: MOUNT # 或 COPY
# 模型仓库,只读挂载
/base-model:
source: hf://Qwen/Qwen3.5-4B
store: hf
mode: MOUNT
# 数据集仓库,固定版本,只读
/data:
source: hf://datasets/my-org/my-dataset@main
store: hf
mode: MOUNT
这个 hf:// 协议覆盖了完整工作流:从仓库读取模型和数据集,训练时将检查点写入存储桶,将完成的模型发布回仓库,推理时再将模型拉取到推理服务器。大多数团队已经将模型和数据集保存在 Hub 上,因此无需迁移步骤,也无需创建新的存储账户。
MOUNT 模式使用 Hugging Face 的 hf-mount FUSE 后端,存储桶或仓库会像本地路径一样出现在 SkyPilot 的其他 FUSE 挂载点旁边(如 gcsfuse、blobfuse2、rclone、goofys)。数据获取发生在文件系统层:当你的代码发出 read() 调用时,驱动仅从 Xet 后端拉取实际读取的字节,因此只有你真正访问的数据才会通过网络传输。hf-mount 还会在磁盘上保留缓存,以便重复读取时直接使用本地副本。对于 hf 存储,MOUNT 和 MOUNT_CACHED 行为相同,都会保留缓存。
由于读取是延迟进行的,进程可以在完整文件下载完成前就开始处理大型文件,无需等待完全复制。这样 GPU 几乎可以立即开始工作,在数据流式进入时进行训练,而不是空闲等待(同时计费)。这在第一个 epoch 中效果最明显,当时还没有缓存。COPY 模式则通过 huggingface_hub 预先下载,没有特殊要求。
身份验证使用你已有的令牌。在环境中设置 HF_TOKEN,并通过 --secret HF_TOKEN 传递给任务;SkyPilot 会在任务运行的任何云上使用此令牌进行挂载。同一令牌在 AWS、GCP、Azure、Nebius、Lambda 或你自己的 Kubernetes 集群上均可使用,无需管理每个云各自的存储桶密钥。
如今 GPU 容量很少来自单一地点。为了获得足够的 H100 和 H200,团队需要在多个供应商处持有预留和已承诺容量(超大规模云上的块、新云上的集群,可能还有本地机架),然后在有分配的地方运行。SkyPilot 正是为此而生:一个任务规范,可在 20 多个云平台、Kubernetes 和本地集群间调度,降落在任何空闲的预留集群上。
对象存储一直是瓶颈。对象存储是区域性的且每个云独立,因此要为不同供应商数据中心中的 GPU 或推理服务器提供数据,要么在每个供应商的存储桶中都保留一份数据副本,要么付费拉取。大多数云在数据离开其网络时收取出站费用(例如 AWS 约 0.09 美元/GB),有时同一云内部跨区域也会收费。将基础模型拉取到每个推理节点,或在另一个云的集群上迭代多个 epoch 的数据集,都会在已预留的 GPU 之外增加高昂的账单。团队最终将每个任务固定到持有数据的供应商,而让其他容量闲置。
Hugging Face 存储消除了读操作的这一成本。由于不收取出站或 CDN 费用,存储价格为 12-18 美元/TB/月(而 AWS S3 约 23 美元/TB 外加出站费用),同一个存储桶可从所有集群访问,无论 GPU 在何处运行,读取都是免费的。写回操作仍然需要计算云的正常出站费用(与任何外部存储一样),但对于大多数 AI 工作来说,读取占主导地位:数据集流式传输多个 epoch,或模型权重被拉取到每个新的训练或推理节点。因此,你不再需要将每个任务固定到持有数据副本的供应商。
为了收集一些基准数字,我们运行了一个小型微调:使用 Qwen/Qwen3.5-4B 模型和 HuggingFaceH4/Multilingual-Thinking 数据集,通过 TRL 的 SFTTrainer 进行微调。模型从 Hub 仓库只读挂载,每个检查点写入 Hugging Face 存储桶。同一个 SkyPilot YAML 在 AWS、GCP 和 Lambda 上运行,只更改 --infra 参数。SkyPilot 将每个任务放置到有空闲 GPU 的地方,所有三个云都读写同一个存储桶。
我们测量的结果:
from_pretrained 触及的内容,因此大约 30 秒即可开始训练(速度可达约 500 MB/s)。由于 Hugging Face 不收取出站费用,这次拉取成本为零;如果模型存放在 S3 中,每次从另一个云读取 GPU 都会被收取约 0.09 美元/GB 的出站费用。各云检查点写入速度:
| 云平台 | GPU | 检查点写入速度 |
|---|---|---|
| AWS (us-east-2) | L40S | ~168 MB/s |
| GCP (us-central1) | L4 | ~123 MB/s |
| Lambda (us-west-3) | H100 | ~112 MB/s |
Hugging Face 存储桶基于 Xet 构建,Xet 使用内容定义的分块将文件分割成约 64 KB 的块,每个唯一块只存储一次。由于边界跟随内容,编辑只更改它触及的块,其余块会被识别为已存储。这在以下场景中效果显著:
use_content_defined_chunking=True 以保持更改局部性。)hf buckets cp 在仓库和存储桶之间通过引用复制,而不是重新上传字节。能节省多少取决于你的工件重叠程度,但去重是自动的:你照常写入检查点,只有新的块会离开机器。
pip install "skypilot[huggingface]"
hf auth login # 或:export HF_TOKEN=<your-token>
在任何 SkyPilot 任务中添加 hf:// 挂载点并启动。MOUNT 模式需要基础镜像支持 glibc 2.34+ 和 /dev/fuse。
最初的 store: hf 支持来自 Nikhil Jha 的贡献。Hugging Face 团队进一步完善并上游了 hf-mount 的 FUSE 修复,使其能在无特权容器中挂载(许多 Kubernetes 集群的默认配置)。SkyPilot 团队将其集成到存储后端。整个过程都是开源的:SkyPilot、Hugging Face 的 hf-mount 以及 huggingface_hub 客户端。
原文链接:Hugging Face
本文由前途科技编辑整理
免费获取企业 AI 成熟度诊断报告,发现转型机会
关注公众号

扫码关注,获取最新 AI 资讯
3 步完成企业诊断,获取专属转型建议
已有 200+ 企业完成诊断