Hugging Face 和 SkyPilot 集成以实现零弹出 AI 存储
Hugging Face 和 SkyPilot 集成以实现零弹出 AI 存储
Hugging Face 和 SkyPilot 已集成,以使 AI 开发者能够在任何云提供商上运行计算工作负载,同时将他们的模型和数据集存储在 Hugging Face Hub 上。此集成通过提供零弹出存储消除了“跨云传输税”,使用户能够将 Hub 存储库和存储桶直接挂载到 SkyPilot 作业中,而不管 GPU 位于何处。
零弹出存储跨越多个云
云 GPU 容量经常在多个供应商之间碎片化(超大规模云服务商、新兴云和本地)。传统上,将数据从区域对象存储(如 AWS S3)移动到不同云中的 GPU 会产生显著的弹出费用(大约在 AWS 上为 0.09 美元/GB)。
通过使用 Hugging Face Storage(不收取弹出或 CDN 费用),团队可以从单一来源读取他们的模型和数据集,覆盖 20+ 云、Kubernetes 和本地集群。这消除了在每个供应商的存储桶中维护数据冗余副本的需求,并防止了根据数据所在位置将工作负载“固定”到特定云上的情况。
技术实现: store: hf 和 hf://
SkyPilot 现在通过 store: hf 配置和 hf:// URI 方案将 Hugging Face Storage 作为一流后端支持。这允许挂载三种类型的 Hub 资产:
- Hugging Face Buckets: 可读写访问检查点、日志和处理后的数据。
- Model Repositories: 仅读取访问模型权重。
- Dataset Repositories: 仅读取访问数据集,通常固定到特定修订版。
挂载模式: MOUNT vs. COPY
- MOUNT: 使用
hf-mountFUSE 后端。它执行延迟读取,仅拉取应用程序所需的字节。这使得 GPU 能够几乎立即开始训练或推理,而无需等待完整下载。MOUNT还维护一个用于重复读取的磁盘缓存。 - COPY: 通过
huggingface_hub客户端提前下载资产,无需特殊的 FUSE 要求。
身份验证通过将单个 HF_TOKEN 作为密钥传递给 SkyPilot 运行来处理,这在所有云提供商上均适用。
基于 Xet 的高效去重
Hugging Face Buckets 基于 Xet 构建,Xet 采用内容定义的分块将文件分割为大约 64 KB 的块。此架构提供了几种效率提升:
- 增量检查点: 仅上传在保存之间发生变化的块,减少了适配器检查点或冻结层的传输时间。
- 模型变体: 基础模型及其微调或量化之间共享的块仅存储一次。
- 数据集追加: 将行追加到大型 Parquet 文件仅传输新数据。在测试中,将 10K 行追加到 100K 行的表中仅传输了大约 10 MB,而不是大约 106 MB。
- 快速重新上传: 重新上传已存在于存储桶中的 blob 速度显著提高(例如,对于 8.43 GB 文件,8 秒 vs 24 秒),因为仅传输了块哈希。
性能基准
在使用 Qwen/Qwen3.5-4B 和 Multilingual-Thinking 数据集的微调测试中,观察到以下结果:
- 模型加载: 模型在大约 30 秒内准备好进行训练,速度最高可达 ~500 MB/s。由于零弹出政策,此操作在 AWS、GCP 和 Lambda 上没有成本。
- 检查点写入: 每个检查点(8.43 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 |
开始使用
要使用此集成,用户可以安装所需的软件包:
pip install "skypilot[huggingface]"
用户随后必须通过使用 hf auth login 或导出 HF_TOKEN 环境变量来进行身份验证。对于 MOUNT 模式,基础镜像必须具备 /dev/fuse 和 glibc 2.34+。