重新设计 Hugging Face 的上传和下载架构

发布于 2024 年 11 月 26 日
在 GitHub 上更新

作为 Hugging Face Xet 团队改进 Hugging Face Hub 存储后端工作的一部分,我们分析了 2024 年 10 月 11 日 24 小时内 Hugging Face 的上传请求,以更好地了解访问模式。我们观察到:

  • 来自 88 个国家的上传
  • 820 万次上传请求
  • 130.8 TB 数据传输

下图通过各国每小时上传字节数来可视化此活动。

Animated view of uploads

目前,上传文件存储在 **`us-east-1`** 区域的 S3 存储桶中,并使用 S3 Transfer Acceleration 进行优化。下载通过 AWS CloudFront 作为 CDN 进行缓存和分发。CloudFront 的 400 多个便捷的边缘站点提供全球覆盖和低延迟数据传输。然而,像大多数 CDN 一样,它针对网络内容进行了优化,文件大小限制为 50GB。

虽然这个大小限制对于典型的互联网文件传输是合理的,但模型和数据集存储库中不断增长的文件大小带来了挑战。例如,meta-llama/Meta-Llama-3-70B 的权重总计 131GB,并被拆分为 30 个文件,以符合 Hub 建议的将权重分块成 20 GB 段。此外,为了实现上传和下载的高级去重或压缩技术,我们需要重新构思文件传输的处理方式。

用于上传和下载的自定义协议

为了将 Hugging Face 基础设施推向当前极限之外,我们正在重新设计 Hub 的上传和下载架构。我们计划插入一个内容可寻址存储 (CAS) 作为内容分发的首站。这使我们能够实现一个基于“**愚蠢读取,智能写入**”指导理念的自定义协议。与将文件视为不透明二进制大对象(blob)的 Git LFS 不同,我们的方法在字节级别分析文件,从而发现提高模型和数据集存储库中大量文件传输速度的机会。

读取路径优先考虑简单性和速度,以确保高吞吐量和最小延迟。文件请求被路由到 CAS 服务器,该服务器提供重构信息。数据本身仍由 **`us-east-1`** 区域的 S3 存储桶支持,AWS CloudFront 继续作为下载的 CDN。

写入路径更为复杂,旨在优化上传速度并提供额外的安全保障。与读取类似,上传请求被路由到 CAS 服务器,但我们不是在文件级别查询,而是在块级别操作。当找到匹配项时,CAS 服务器会指示客户端(例如 huggingface_hub)仅传输必要的(新)块。这些块在上传到 S3 之前由 CAS 进行验证。

还有许多实现细节需要解决,例如网络限制和存储开销,我们将在未来的文章中讨论。目前,让我们看看读取目前是如何进行的。下面的第一张图显示了当前读取和写入路径

Old read and write sequence diagram
左侧表示读取;右侧表示写入。请注意,写入直接进入 S3,没有任何中间环节。

同时,在新设计中,读取将遵循以下路径

New read path in proposed architecture
新的读取路径,内容可寻址存储 (CAS) 提供重构信息。CloudFront 继续充当 CDN。

最后是更新后的写入路径

New read path in proposed architecture
新的写入路径,CAS 加速并验证上传。S3 继续提供后端存储。

通过在字节级别管理文件,我们可以调整优化以适应不同的文件格式。例如,我们已经探索了提高 Parquet 文件去重能力的方法,现在正在研究压缩张量文件(例如 Safetensors),这有可能将上传速度提高 10-25%。随着新格式的出现,我们独特的优势在于可以开发进一步的增强功能,以改善 Hub 上的开发体验。

此协议还为企业客户和高级用户带来了显著改进。插入文件传输的控制平面提供了额外的保障,以确保恶意或无效数据无法上传。在操作上,上传不再是一个黑箱。增强的遥测功能提供了审计跟踪和详细日志记录,使 Hub 基础设施团队能够快速有效地识别和解决问题。

为全球访问而设计

为了支持这个自定义协议,我们需要确定 CAS 服务的最佳地理分布。AWS Lambda@Edge 最初被考虑用于其广泛的全球覆盖范围,以帮助最大限度地减少往返时间。然而,它对 Cloudfront 触发器的依赖使其与我们更新的上传路径不兼容。因此,我们选择在 AWS 的 34 个区域中的少数几个部署 CAS 节点。

仔细研究我们 24 小时内的 S3 PUT 请求,我们识别出全球流量模式,揭示了数据上传到 Hub 的分布。正如预期的那样,大部分活动来自北美和欧洲,全天都有持续的大量上传。数据还突出显示了亚洲强大且不断增长的存在。通过专注于这些核心区域,我们可以放置我们的 CAS 存在点,以平衡存储和网络资源,同时最大限度地减少延迟。

Pareto chart of uploads

虽然 AWS 提供 34 个区域,但我们的目标是保持基础设施成本合理,同时保持高质量的用户体验。在这份快照中代表的 88 个国家中,上方的帕累托图显示,前 7 个国家贡献了 80% 的上传字节,而前 20 个国家贡献了总上传量和请求的 95%。

美国是上传流量的主要来源,因此有必要在该地区设立 PoP。在欧洲,大部分活动集中在中欧和西欧国家(例如卢森堡、英国和德国),尽管非洲也有一些额外的活动需要考虑(特别是阿尔及利亚、埃及和南非)。亚洲的上传流量主要由新加坡、香港、日本和韩国驱动。

如果我们使用一个简单的启发式方法来分配流量,我们可以将 CAS 覆盖范围划分为三个主要区域

  • **`us-east-1`**:服务北美和南美
  • **`eu-west-3`**:服务欧洲、中东和非洲
  • **`ap-southeast-1`**:服务亚洲和大洋洲

这最终效果相当好。美国和欧洲占上传字节的 78.4%,而亚洲占 21.6%。

New AWS mapping

这种区域划分使得我们的三个 CAS PoP 之间的负载均衡良好,**`ap-southeast-1`** 具有额外的增长容量,并且在需要时可以灵活地在 **`us-east-1`** 和 **`eu-west-3`** 中进行扩展。

根据预期流量,我们计划按如下方式分配资源

  • **`us-east-1`**:4 个节点
  • **`eu-west-3`**:4 个节点
  • **`ap-southeast-1`**:2 个节点

验证和审查

尽管我们正在增加某些用户的首次跳跃距离,但对整个 Hub 的带宽总体影响将是有限的。我们的估计预测,虽然所有上传的总带宽将从 48.5 Mbps 降低到 42.5 Mbps(减少 12%),但性能损失将被其他系统优化所抵消。

我们目前正在努力在 2024 年底前将我们的基础设施投入生产,届时我们将从 `us-east-1` 的单个 CAS 开始。从那里,我们将开始将内部存储库复制到我们的新存储系统以基准测试传输性能,然后将我们的 CAS 复制到上面提到的其他 PoP 以进行更多基准测试。根据这些结果,我们将继续优化我们的方法,以确保明年我们的存储后端完全到位时一切顺利运行。

超越字节

随着我们继续进行这项分析,新的更深入的洞察机会正在浮现。Hugging Face 拥有开源机器学习社区最大的数据集合之一,为探索全球人工智能发展的模式和趋势提供了独特的视角。

例如,未来的分析可以根据用例(如自然语言处理、计算机视觉、机器人或大型语言模型)对上传到 Hub 的模型进行分类,并检查机器学习活动的地理趋势。这些数据不仅为我们的基础设施决策提供信息,还提供了了解机器学习发展格局的视角。

我们诚挚邀请您更详细地探索我们当前的发现!请访问我们的交互式空间,查看您所在地区的上传分布,并关注我们的团队,了解我们正在构建的更多内容。

社区

文章作者

现在您可以加入候补名单,获取我们在此处讨论的所有改进!

https://huggingface.co/join/xet

注册登录发表评论