当前位置: 首页 > news >正文

从文件到块: 提高 Hugging Face 存储效率

Hugging Face 在Git LFS 仓库中存储了超过30 PB 的模型、数据集和 Spaces。由于 Git 在文件级别进行存储和版本控制,任何文件的修改都需要重新上传整个文件。这在 Hub 上会产生高昂的成本,因为平均每个 Parquet 和 CSV 文件大小在 200-300 MB 之间,Safetensor 文件约 1 GB,而 GGUF 文件甚至可能超过 8 GB。设想一下,仅仅修改 GGUF 文件中的一行元数据,就需要等待数 GB 大小的文件重新上传。除了耗费用户时间和传输成本外,Git LFS 还需要保存文件的两个完整版本,这进一步增加了存储开销。

  • Git LFS 仓库https://hf.co/docs/hub/en/repositories-getting-started#requirements

  • 30 PB 的模型、数据集和 Spaceshttps://hf.co/spaces/xet-team/lfs-analysis

下图展示了 Hub 上各类仓库 (模型、数据集和 Spaces) 中 LFS 存储容量在 2022 年 3 月至 2024 年 9 月期间的增长趋势:

LFS Storage Growth

Hugging Face 的 Xet 团队正在采用一种创新的存储方案: 将文件分块存储。通过只传输发生变化的数据块,我们可以显著提升存储效率和迭代速度,同时确保用户能可靠地访问不断演进的数据集和模型。下面让我们详细了解其工作原理。

基于内容的分块原理

我们采用的分块方法称为基于内容的分块 (Content-Defined Chunking,CDC)。与将文件视为不可分割的整体不同,CDC 根据文件内容本身来确定边界,将文件划分为大小可变的数据块。为了计算这些块的边界,我们使用滚动哈希算法来扫描文件的字节序列。https://en.wikipedia.org/wiki/Rolling_hash

让我们通过一个简单的例子来说明:

transformerstransformerstransformers

这里我们用文本来演示,但实际上这个过程适用于任何字节序列。

滚动哈希算法通过在数据上滑动固定大小的窗口来计算哈希值。比如,当窗口长度为 4 时,算法会依次计算 tranransansf 等字符序列的哈希值,直到处理完整个文件。

当某个位置的哈希值满足预设条件时,就会在该处设置块的边界。例如,可以设置如下条件:

hash(data) % 2^12 == 0

如果序列 mers 的哈希值满足这个条件,那么文件就会被分成三个块:

transformers | transformers | transformers

系统会计算这些块的哈希值,建立块哈希值到实际内容的映射,并最终将它们存储在基于内容寻址的存储系统 (Content-Addressed Storage,CAS) 中。由于这三个块完全相同,CAS 只需要存储一个块的实际内容,从而自动实现了数据去重。🪄

处理插入和删除操作

当文件内容发生变化时,CDC 的优势就体现出来了: 它能够精确定位变化的部分,高效处理插入和删除操作。让我们看一个具体示例,在原文件中插入 super 后:

transformerstransformerssupertransformers

使用相同的边界条件重新应用滚动哈希算法,新的分块结果如下:

transformers | transformers | supertransformers

前两个块的内容系统中已经存在,无需重新存储。只有 supertransformers 是新的数据块,因此保存这个更新版本只需要上传和存储这一个新块即可。

为了验证这种优化方案在实际应用中的效果,我们将 XetHub 上基于 CDC 的存储实现与 Git LFS 进行了对比测试。在三个迭代开发场景中,我们发现存储和传输性能始终提升了 50%。其中一个典型案例是CORD-19 数据集——这是一个在 2020 年至 2022 年间持续更新的 COVID-19 研究论文集合,共有 50 次增量更新。下表对比了两种存储方案的性能指标:https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html

指标基于 Git LFS 的仓库基于 Xet 的仓库
平均下载时间51 分钟19 分钟
平均上传时间47 分钟24 分钟
存储占用8.9 GB3.52 GB

通过只传输和保存变化的数据块,再结合改进的压缩算法和优化的网络请求,基于 Xet 的 CDC 方案显著缩短了上传和下载时间,同时大幅降低了存储多个版本所需的空间。想深入了解测试细节?请查看我们的完整基准测试报告。https://xethub.com/blog/benchmarking-the-modern-development-experience

CDC 技术对 Hub 的影响

那么,CDC 如何应用于 Hugging Face Hub 上的各类文件呢?为了直观展示 CDC 在文件集合上的存储节省潜力,我们开发了一个简单的重复数据删除估算工具。我们用这个工具分析了openai-community/gpt2仓库中 model.safetensors 文件的两个版本,得到了以下结果:

  • 重复数据删除估算工具https://github.com/huggingface/dedupe_estimator

  • openai-community/gpt2https://hf.co/openai-community/gpt2

Safetensors Deduplication

图中的绿色区域表示两个版本之间内容的重叠部分,这意味着我们可以在单个文件内部以及不同版本之间进行有效的数据去重。


Git LFS 存储占用Xet 存储占用
版本 1664 MB509 MB
版本 2548 MB136 MB
总计1.2 GB645 MB

在这个案例中,采用基于 Xet 的存储方案不仅大大缩短了第二个版本的上传和下载时间,还将总存储空间减少了 53%。通过进一步的压缩优化,我们预计还能额外节省 10% 的空间。

我们对 Hub 上的仓库进行的初步研究显示,CDC 技术对某些类型的数据特别有效。例如,微调模型通常只修改部分参数,大部分模型权重在不同版本间保持不变,这使它们非常适合使用数据去重技术。同样,模型检查点文件也是理想的应用场景,因为相邻检查点之间的变化往往很小。这两类文件都展现出 30-85% 的去重比率。考虑到 PyTorch 模型检查点在 Hub 上占用了约 200 TB 的存储空间,如果能达到 50% 的去重率,我们可以立即节省 100 TB 的存储空间,并在未来每月减少 7-8 TB 的增长。

除了降低存储成本,块级数据去重还能显著提升数据传输效率,因为只需要传输实际发生变化的数据块。这对于需要频繁处理多个模型版本或数据集版本的团队来说尤其重要,可以大大减少等待时间,提高工作效率。

目前,我们团队正在开发 Hub 的基于 Xet 存储的概念验证系统,计划在 2025 年初推出首批基于 Xet 的仓库。欢迎关注我们的团队,了解更多技术进展。我们将持续分享在全球分布式仓库扩展 CDC、优化网络性能、保护数据隐私以及并行化分块算法等方面的研究成果。

https://hf.co/xet-team


英文原文:https://hf.co/blog/from-files-to-chunks

原文作者: Jared Sulzdorf, Ann Huang

译者: smartisan

相关文章:

从文件到块: 提高 Hugging Face 存储效率

Hugging Face 在Git LFS 仓库中存储了超过30 PB 的模型、数据集和 Spaces。由于 Git 在文件级别进行存储和版本控制,任何文件的修改都需要重新上传整个文件。这在 Hub 上会产生高昂的成本,因为平均每个 Parquet 和 CSV 文件大小在 200-300 MB 之间&#…...

Android14 串口控制是能wifi adb实现简介

Android14 串口控制是能wifi adb实现简介 一、前言 文章目录 Android14 串口控制是能wifi adb实现简介一、前言二、Android14 串口控制是能wifi adb实现1、设置prop属性命令开启adb(1)相关prop属性设置(2)在设置界面或者 ifconfi…...

vue3中 组合式~测试深入组件:事件 与 $emit()

一、语法(props) 第一步&#xff1a;在组件模板表达式中&#xff0c;可以直接用$emit()方法触发自定义事件&#xff0c; <!-- MyComponent --> <button click"$emit(someEvent)">Click Me</button> 第二步父组件可以通过 v-on (缩写为 ) 来监听…...

SQL-labs13-16闯关记录

http://127.0.0.1/sqli-labs/less-13/ 基于POST单引号双注入变形 1&#xff0c;依然是一个登录框&#xff0c;POST型SQL注入 2&#xff0c;挂上burpsuite&#xff0c;然后抓取请求&#xff0c;构造请求判断漏洞类型和闭合条件 admin 发生了报错&#xff0c;根据提示闭合方式是(…...

基于微信小程序的停车场管理系统的设计与实现

第1章 绪论 1.1 课题背景 随着移动互联形式的不断发展&#xff0c;各行各业都在摸索移动互联对本行业的改变&#xff0c;不断的尝试开发出适合于本行业或者本公司的APP。但是这样一来用户的手机上就需要安装各种软件&#xff0c;但是APP作为一个只为某个公司服务的一个软件&a…...

DAIR-V2X-R数据集服务器下载

【官方github链接】https://github.com/ylwhxht/V2X-R 点击并登录 选择并点击下载 浏览器弹窗&#xff0c;右键选择复制下载链接 ------------------------------------服务器下载----------------------------------------- 登录服务器&#xff0c;选在要下载的文件夹复制路…...

table 拖拽移动

表格拖拽 Sortable.js中文网|配置 <!-- 教务处 --><template><div class"but"><el-button click"mergeAndPrintArrays()" type"primary">保存数据</el-button><el-button click"restoration()" t…...

Linux使用笔记:Find Tree 命令

Tree 命令的使用 使用-I 参数&#xff0c;过滤掉不想展未的目录或文件使用-L参数&#xff0c;指定展示的目录层级个数 arsenaltxzq1899:~/Workspace/vue-application$ tree -I node_modules/ -I public/ -L 2 . ├── components.json ├── Dockerfile ├── ecosystem.c…...

数据结构入门篇——什么是数据结构。

一、引入 工具是一种什么东西呢&#xff1f;是一种转化媒介&#xff0c;我们需要熟食&#xff0c;我们要通过用火来将生肉烤熟。在这个过程中。我们要输入一个东西——生肉&#xff0c;通过工具——火的加工&#xff0c;从而得到我们的目的产物——熟肉。 将上面的例子和红字部…...

MySQL-简介与基本命令

数据库 主流数据库 关系型数据库 MySQL&#xff1a;开源免费的关系型数据库&#xff0c;易于使用和学习&#xff0c;支持大型企业级应用。其特点包括高性能、可靠性和可扩展性&#xff0c;支持多种编程语言和操作系统&#xff0c;拥有大量的社区支持和插件SQLite&#xff1a…...

汽车材料耐候性测试仪器-太阳光模拟器介绍

**太阳光模拟器**是一种用于模拟太阳光谱的设备&#xff0c;广泛应用于汽车材料的耐候性测试。通过模拟太阳光中的紫外线、可见光和红外线&#xff0c;评估材料在长期光照下的性能变化。 主要组成部分 1. **光源系统**&#xff1a; - **氙灯**&#xff1a;最常用的光源&…...

音频3A测试--AEC(回声消除)测试

一、测试前期准备 一台录制电脑:用于作为近段音源和收集远端处理后的数据; 一台测试设备B:用于测试AEC的设备; 一个高保真音响:用于播放设备B的讲话; 一台播放电脑:用于模拟设备A讲话,和模拟设备B讲话; 一台音频处理器(调音台):用于录制和播放数据; 测试使用转接线若…...

DeepSeek 助力 Vue3 开发:打造丝滑的弹性布局(Flexbox)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

六、Redis 高级功能详解:BitMap、HyperLogLog、Geo、Stream

Redis 高级功能详解:BitMap、HyperLogLog、Geo、Stream Redis 不仅提供了基础的数据结构(String、List、Set、Hash、Sorted Set),还提供了一些高级数据结构,专门用于特定的应用场景,如位运算统计、去重计数、地理位置存储、流数据处理等。本文将详细介绍这些高级功能的使…...

WSL下使用git克隆失败解决

WSL默认nat模式&#xff0c;别动了防火墙放行&#xff0c;见图1git导入[bash1]&#xff0c;ip为你wsl上linxu通过ifconfig获取的本机ip&#xff0c;端口对好某alcsh软件开启tun模式【经过测试&#xff0c;不开也行】应该成了&#xff0c;如果不行&#xff0c;修改.wslconfig为下…...

【Elasticsearch】索引生命周期管理相关的操作(Index Lifecycle Actions)

Elasticsearch 的Index Lifecycle Management(ILM)是一种用于管理索引生命周期的工具&#xff0c;它允许用户根据索引的使用阶段&#xff08;如热、温、冷、冻结&#xff09;自动执行一系列操作。以下是详细解释 Elasticsearch 中的索引生命周期操作&#xff08;Index Lifecycl…...

TS的接口 泛型 自定义类型 在接口中定义一个非必须的属性

TS的接口 泛型 自定义类型 接口 新建一个ts文件&#xff0c;在里面定义一个接口 export interface PersonInter{id:string,name:string,age:number }在vue文件中引入这个ts文件 <script lang"ts" setup name"Person">import {type PersonInter} …...

Collab-Overcooked:专注于多智能体协作的语言模型基准测试平台

2025-02-27&#xff0c;由北京邮电大学和理想汽车公司联合创建。该平台基于《Overcooked-AI》游戏环境&#xff0c;设计了更具挑战性和实用性的交互任务&#xff0c;目的通过自然语言沟通促进多智能体协作。 一、研究背景 近年来&#xff0c;基于大型语言模型的智能体系统在复…...

未来经济范式争夺战:AR眼镜为何成为下一代交互终端的制高点?

未来经济范式争夺战&#xff1a;AR眼镜为何成为下一代交互终端的制高点&#xff1f; 在蒸汽机轰鸣的工业革命时代&#xff0c;煤炭、铁路、电报构建了第一个现代经济范式&#xff1b;互联网时代&#xff0c;电力、光纤、物流网络重构了全球经济版图。当前&#xff0c;我们正站…...

Mybatis实现批量添加

1.设计一张商品表 CREATE TABLE IF NOT EXISTS goods (id BIGINT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL );2.编写实体类映射数据库表格 Data public class Goods {private Long id;private String name;// Getters and Setters }3.编写持久层接口以及其对应…...

DanKoe 视频笔记:赚钱是精神性的:破除“高尚的失败者”的迷思 [特殊字符]

在本节课中&#xff0c;我们将要学习一种关于金钱、商业和道德的全新视角。我们将探讨为何将赚钱视为不道德是一种幻觉&#xff0c;以及这种观念如何阻碍你为世界创造真正的价值。 在当今世界&#xff0c;最糟糕的事情之一就是陷入“高尚的失败者”的思维模式。许多聪明人讨厌…...

睿尔曼超轻量仿人机械臂--控制器与末端接口深度解析

1. 睿尔曼机械臂接口设计理念解析 第一次拿到睿尔曼机械臂时&#xff0c;最让我惊讶的是它的极简设计——传统机械臂必备的控制柜、示教器和缠绕的线缆统统不见了&#xff0c;整个系统就只有一个机械臂本体。这种高度集成化的设计背后&#xff0c;其实隐藏着两个关键接口模块&a…...

C++ 虚表与多态:从源码到汇编的逐步解析

本文基于代码随想录最强八股文给出的 C 源码与对应的 x86-64&#xff08;System V ABI 风格&#xff09;反汇编&#xff0c;按“程序运行流程”一步步解释&#xff1a; 对象内存里 vptr&#xff08;虚表指针&#xff09; 在哪构造函数如何 写入 vptrAnimal* 指针如何通过 vtabl…...

如何让Windows 11运行如飞?Win11Debloat系统优化工具全解析

如何让Windows 11运行如飞&#xff1f;Win11Debloat系统优化工具全解析 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以简…...

springboot-vue+nodejs 的酒店客房预定管理系统的设计与实现

目录技术栈选择系统模块划分后端实现前端实现中间层实现数据库设计支付集成测试与部署项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术栈选择 Spring Boot 作为后端框架&#xff0c;提供 RESTful API 接口&#xff1b;Vue.…...

YOLOv8+DCNv3实战避坑:从‘RuntimeError: Not implemented on the CPU’到GPU部署成功

1. 环境准备与版本匹配 在开始YOLOv8与DCNv3的集成之前&#xff0c;环境配置是第一个需要跨过的门槛。我遇到过不少开发者在这个阶段就栽了跟头&#xff0c;主要原因就是版本兼容性问题。根据实测经验&#xff0c;这里有几个关键点需要注意&#xff1a; 首先是CUDA版本的选择。…...

告别重复造轮子:用快马平台高效生成openclaw测试与调试工具

最近在做一个机器人项目&#xff0c;需要集成openclaw机械爪进行抓取操作。调试过程中发现&#xff0c;每次都要重复搭建测试环境、编写基础通信代码&#xff0c;特别浪费时间。于是尝试用InsCode(快马)平台快速生成一个测试工具&#xff0c;效果出乎意料的好用。 硬件连接测试…...

从隔离到互联:工业现场中耐达讯自动化CC-Link IE转Modbus RTU实战指南

在工业自动化领域中&#xff0c;不同协议设备间的通信壁垒正成为智能制造的核心挑战之一。耐达讯自动化的CC-Link IE转Modbus RTU专用网关&#xff0c;通过硬件级协议转换技术&#xff0c;高效实现CC-Link IE高速以太网与Modbus RTU串口设备的无缝对接&#xff0c;帮助企业快速…...

J-Link驱动签名被拦?手把手教你用WHQL签名驱动搞定Windows 11安全策略

J-Link驱动签名被拦&#xff1f;手把手教你用WHQL签名驱动搞定Windows 11安全策略 最近在帮团队调试一批新的STM32H7开发板时&#xff0c;遇到了一个令人头疼的问题&#xff1a;明明上周还能正常使用的J-Link调试器&#xff0c;在新的Windows 11企业版电脑上突然无法识别了。设…...

Qwen3-ASR-0.6B与LaTeX集成:学术语音笔记系统

Qwen3-ASR-0.6B与LaTeX集成&#xff1a;学术语音笔记系统 1. 引言 学术研究工作中&#xff0c;记录和整理笔记是每个研究者都要面对的重要任务。无论是参加学术会议、听讲座&#xff0c;还是记录自己的研究思路&#xff0c;传统的手写或打字方式往往效率不高&#xff0c;特别…...