小知识,hf_transfer能够比HF的下载速度快10-100倍。
这个讨论底下还有个回复比较有意思,Hugging Face 的 Xet 团队,专注于通过基于区块的重复数据删除方法(利用 Rust 客户端和内容寻址存储)来加快上传和下载速度。该作者还写了几篇有意思的技术文章:
1. 《“从文件到块:提升HF存储效率”》
Hugging Face目前存储超过30PB的模型、数据集和空间,全部采用Git LFS仓库。Git以文件为单位进行存储和版本控制,这意味着任何文件的更改都需要重新上传整个文件,这在文件平均大小介于200-300MB的Parquet和CSV文件、约1GB的Safetensor文件,以及超过8GB的GGUF文件时,成本极高。想象一下,仅仅修改GGUF文件中的一行元数据,就需要等待多GB文件的上传;除了用户时间和传输成本外,Git LFS还需要保存两个文件的完整版本,从而增加了存储成本。
为了解决这一问题,Hugging Face的Xet团队采取了一种不同的存储方法——将文件存储为块。通过只传输修改过的块,我们能够显著提高存储效率和迭代速度,同时确保对不断发展的数据集和模型的可靠访问。这一方法基于内容定义的块划分(CDC),它通过使用数据来定义边界,将文件分解成可变大小的块。我们应用滚动哈希算法计算块,通过在文件的字节序列上扫描来实现。
当文件内容发生变化时,CDC允许进行细粒度的更新,使其能够有效处理插入和删除操作。我们的实验表明,与Git LFS相比,采用CDC的Xet-backed存储在存储和传输性能上平均改善了50%。
原文:huggingface.co/blog/from-files-to-chunks
2. 《重构上传和下载架构,全面提升效率!》
1). 在对Hugging Face Hub存储后端进行全面改进的过程中,我们分析了一天内的上传请求数据,结果显示:来自88个国家的8.2百万请求,传输了130.8TB数据。目前,上传数据存储在美东的S3桶中,并通过S3传输加速优化,下载则依赖AWS Cloudfront作为CDN,尽管其全球400多个边缘位置提供了低延迟数据传输,但对于日益增长的模型和数据集文件大小,50GB的文件大小限制成为了新的挑战。
2). 我们计划引入内容寻址存储(CAS)和自定义协议来重构上传和下载架构,采用“简单读取、智能写入”的设计哲学,不同于Git LFS将文件视为不透明的blob,我们的方法将在字节级别分析文件,为模型和数据集仓库中的庞大文件寻找提速机会。这一新架构将使我们能够根据不同文件格式调整优化策略,例如,我们已探索改进Parquet文件的去重能力,并正在研究压缩张量文件(如Safetensors),有望将上传速度提高10-25%。
3). 为了支持这一自定义协议,我们需要确定CAS服务的最佳地理分布。分析24小时内的S3 PUT请求数据后,我们选择在AWS的34个区域中选取几个部署CAS节点,以平衡存储和网络资源,同时最小化延迟。预计我们将在us-east-1、eu-west-3和ap-southeast-1分别部署4、4和2个节点,以应对来自北美、欧洲以及亚洲的主要上传流量。
原文:huggingface.co/blog/rearchitecting-uploads-and-downloads
3. 《从块到块:在Hub上加速上传和下载》
1). 通过内容定义分块(CDC)技术,实现了存储空间的去重,使文件数据分块存储,仅保存独特的块。这一技术虽直观,但实操中复杂度较高。为了最大化去重效果,理论上需将块尽可能做小,但这会带来庞大的基础设施和构建者负担。
2). Xet团队致力于将CDC理论应用于生产,目标是显著提升AI构建者的上传和下载速度(在某些情况下提速2-3倍)。团队的指导原则是简单明了的:优化网络数据传输、存储方式及整个开发体验,以支持团队快速迭代模型和数据集。
3). 但在实际应用中,单纯的块级处理方法面临着网络和基础设施开销问题。例如,如果每个块都单独上传或下载,将生成数百万个请求,给客户端和服务器带来巨大压力。因此,Xet团队采取了聚合策略,通过将数据在去重后打包成最大64MB的块,并利用碎片(shards)来映射文件和块之间的关系,极大降低了CAS条目数量,并减少了不必要的传输和查询。
4). 此外,Xet团队还引入了关键块(key chunks)概念,通过选择所有块中0.1%的子集,为这些关键块建立一个全局索引。当查询特定块时,返回相关的碎片,实现局部去重,从而提高了去重效率,减少了网络和数据库请求。这一聚合去重策略在实践中已经取得了显著成效,例如在上传具有高度重复性的量化模型时,不仅大幅节省了存储空间,也显著提高了上传和下载速度。
原文:huggingface.co/blog/from-chunks-to-blocks
#deepseek# #ai创造营# #程序员#
这个讨论底下还有个回复比较有意思,Hugging Face 的 Xet 团队,专注于通过基于区块的重复数据删除方法(利用 Rust 客户端和内容寻址存储)来加快上传和下载速度。该作者还写了几篇有意思的技术文章:
1. 《“从文件到块:提升HF存储效率”》
Hugging Face目前存储超过30PB的模型、数据集和空间,全部采用Git LFS仓库。Git以文件为单位进行存储和版本控制,这意味着任何文件的更改都需要重新上传整个文件,这在文件平均大小介于200-300MB的Parquet和CSV文件、约1GB的Safetensor文件,以及超过8GB的GGUF文件时,成本极高。想象一下,仅仅修改GGUF文件中的一行元数据,就需要等待多GB文件的上传;除了用户时间和传输成本外,Git LFS还需要保存两个文件的完整版本,从而增加了存储成本。
为了解决这一问题,Hugging Face的Xet团队采取了一种不同的存储方法——将文件存储为块。通过只传输修改过的块,我们能够显著提高存储效率和迭代速度,同时确保对不断发展的数据集和模型的可靠访问。这一方法基于内容定义的块划分(CDC),它通过使用数据来定义边界,将文件分解成可变大小的块。我们应用滚动哈希算法计算块,通过在文件的字节序列上扫描来实现。
当文件内容发生变化时,CDC允许进行细粒度的更新,使其能够有效处理插入和删除操作。我们的实验表明,与Git LFS相比,采用CDC的Xet-backed存储在存储和传输性能上平均改善了50%。
原文:huggingface.co/blog/from-files-to-chunks
2. 《重构上传和下载架构,全面提升效率!》
1). 在对Hugging Face Hub存储后端进行全面改进的过程中,我们分析了一天内的上传请求数据,结果显示:来自88个国家的8.2百万请求,传输了130.8TB数据。目前,上传数据存储在美东的S3桶中,并通过S3传输加速优化,下载则依赖AWS Cloudfront作为CDN,尽管其全球400多个边缘位置提供了低延迟数据传输,但对于日益增长的模型和数据集文件大小,50GB的文件大小限制成为了新的挑战。
2). 我们计划引入内容寻址存储(CAS)和自定义协议来重构上传和下载架构,采用“简单读取、智能写入”的设计哲学,不同于Git LFS将文件视为不透明的blob,我们的方法将在字节级别分析文件,为模型和数据集仓库中的庞大文件寻找提速机会。这一新架构将使我们能够根据不同文件格式调整优化策略,例如,我们已探索改进Parquet文件的去重能力,并正在研究压缩张量文件(如Safetensors),有望将上传速度提高10-25%。
3). 为了支持这一自定义协议,我们需要确定CAS服务的最佳地理分布。分析24小时内的S3 PUT请求数据后,我们选择在AWS的34个区域中选取几个部署CAS节点,以平衡存储和网络资源,同时最小化延迟。预计我们将在us-east-1、eu-west-3和ap-southeast-1分别部署4、4和2个节点,以应对来自北美、欧洲以及亚洲的主要上传流量。
原文:huggingface.co/blog/rearchitecting-uploads-and-downloads
3. 《从块到块:在Hub上加速上传和下载》
1). 通过内容定义分块(CDC)技术,实现了存储空间的去重,使文件数据分块存储,仅保存独特的块。这一技术虽直观,但实操中复杂度较高。为了最大化去重效果,理论上需将块尽可能做小,但这会带来庞大的基础设施和构建者负担。
2). Xet团队致力于将CDC理论应用于生产,目标是显著提升AI构建者的上传和下载速度(在某些情况下提速2-3倍)。团队的指导原则是简单明了的:优化网络数据传输、存储方式及整个开发体验,以支持团队快速迭代模型和数据集。
3). 但在实际应用中,单纯的块级处理方法面临着网络和基础设施开销问题。例如,如果每个块都单独上传或下载,将生成数百万个请求,给客户端和服务器带来巨大压力。因此,Xet团队采取了聚合策略,通过将数据在去重后打包成最大64MB的块,并利用碎片(shards)来映射文件和块之间的关系,极大降低了CAS条目数量,并减少了不必要的传输和查询。
4). 此外,Xet团队还引入了关键块(key chunks)概念,通过选择所有块中0.1%的子集,为这些关键块建立一个全局索引。当查询特定块时,返回相关的碎片,实现局部去重,从而提高了去重效率,减少了网络和数据库请求。这一聚合去重策略在实践中已经取得了显著成效,例如在上传具有高度重复性的量化模型时,不仅大幅节省了存储空间,也显著提高了上传和下载速度。
原文:huggingface.co/blog/from-chunks-to-blocks
#deepseek# #ai创造营# #程序员#