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

Python 比较huggingface_hub库的hf_hub_download函数和snapshot_download函数

梳理 hf_hub_downloadsnapshot_download 的区别、相同点,以及各自适合的场景。


1. 相同点

  1. 都来自 huggingface_hub

    from huggingface_hub import hf_hub_download, snapshot_download
    
  2. 都用于下载 Hugging Face Hub 上的模型或文件

    • 都可以指定 repo_id(仓库名)、revision(分支/commit/tag)等参数。
    • 都支持设置缓存目录 cache_dir
    • 都可以配合 proxies 或国内镜像使用。
  3. 缓存机制相同

    • 下载后的文件会缓存在 HF_HOME 或指定 cache_dir 中。
    • 如果文件已经存在缓存中,下次直接读取,无需重新下载。

2. 不同点

特性hf_hub_downloadsnapshot_download
下载粒度单个文件仓库快照(整个模型目录)
返回值本地文件路径仓库本地路径(目录)
适合场景只想下载仓库中的单个文件,比如 model.safetensorsconfig.json想获取整个仓库内容,包括多个文件、权重、tokenizer、配置等
使用方法python local_file = hf_hub_download(repo_id, filename)python local_dir = snapshot_download(repo_id)
耗时快(只下载一个文件)慢(下载整个仓库)
存储空间

3. 场景示例

hf_hub_download

from huggingface_hub import hf_hub_download# 下载单个模型权重文件
local_file = hf_hub_download(repo_id="bert-base-uncased",filename="pytorch_model.bin",cache_dir="/home/user/.cache/huggingface/hub"
)

✅ 场景:

  • 只需要模型权重或 tokenizer 文件。
  • 快速下载一个文件,不需要整个仓库。
  • 适合自定义加载模型时使用(如 FastLanguageModel.from_pretrained(local_file))。

snapshot_download

from huggingface_hub import snapshot_download# 下载整个仓库快照
local_dir = snapshot_download(repo_id="bert-base-uncased",cache_dir="/home/user/.cache/huggingface/hub"
)

✅ 场景:

  • 需要整个模型仓库,包括 config.jsontokenizer 文件、权重文件等。

  • 想离线完整使用模型,或者需要对多个文件进行统一管理。

  • 适合加载 Transformers 模型时直接传目录:

    from transformers import AutoModel
    model = AutoModel.from_pretrained(local_dir)
    

4. 小结

  • hf_hub_download → 下载单个文件,速度快,适合下载模型权重或配置文件。
  • snapshot_download → 下载整个仓库,完整快照,适合一次性获取整个模型目录用于离线或批量操作。

在这里插入图片描述

5. example

使用国内镜像下载模型

import os
from huggingface_hub import snapshot_download
from unsloth.models import FastLanguageModel# -------------------------------
# 1. 设置缓存目录和镜像
# -------------------------------
os.environ["HF_HOME"] ="/home/xjg/.cache/huggingface/hub"  # 可自定义缓存路径
os.environ["HF_DATASETS_OFFLINE"] = "1"     # 只从本地缓存读取数据集,不访问网络
os.environ["TRANSFORMERS_OFFLINE"] = "0"    # "0" 表示在线模式;如果设置为 "1",transformers 会只从本地缓存加载模型# 国内 Hugging Face 官方 CDN 镜像(无需代理)
HF_ENDPOINT = "https://hf-mirror.com/"# -------------------------------
# 2. 下载模型到本地
# -------------------------------
model_name = "unsloth/DeepSeek-R1-Distill-Qwen-1.5B-unsloth-bnb-4bit"
filename = "model.safetensors"# 使用 snapshot_download 下载整个模型目录
local_model_dir = snapshot_download(repo_id=model_name,cache_dir=os.environ["HF_HOME"],use_auth_token=None,  # 如果是私有模型,需要填入 tokenendpoint=HF_ENDPOINT
)
print(f"模型下载到本地目录:{local_model_dir}")# -------------------------------
# 3. 从本地加载模型和分词器
# -------------------------------
max_seq_length = 2048
dtype = "float16"
load_in_4bit = Truemodel, tokenizer = FastLanguageModel.from_pretrained(model_name=local_model_dir,max_seq_length=max_seq_length,dtype=dtype,load_in_4bit=load_in_4bit
)print("模型和分词器加载成功!")

输出结果:

🦥 Unsloth: Will patch your computer to enable 2x faster free finetuning.
🦥 Unsloth Zoo will now patch everything to make training faster!
Fetching 8 files: 100%|███████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 56299.38it/s]
模型下载到本地目录:/home/xjg/.cache/huggingface/hub/models--unsloth--DeepSeek-R1-Distill-Qwen-1.5B-unsloth-bnb-4bit/snapshots/c93b549ceae3f8137b567af565c2b204b3045091
==((====))==  Unsloth 2025.8.5: Fast Qwen2 patching. Transformers: 4.55.2.\\   /|    NVIDIA GeForce RTX 3060 Laptop GPU. Num GPUs = 1. Max memory: 5.799 GB. Platform: Linux.
O^O/ \_/ \    Torch: 2.7.1+cu126. CUDA: 8.6. CUDA Toolkit: 12.6. Triton: 3.3.1
\        /    Bfloat16 = TRUE. FA [Xformers = 0.0.31.post1. FA2 = False]"-____-"     Free license: http://github.com/unslothai/unsloth
Unsloth: Fast downloading is enabled - ignore downloading bars which are red colored!
模型和分词器加载成功!
http://www.dtcms.com/a/353750.html

相关文章:

  • 在 .NET 8.0 中实现 JWT 刷新令牌
  • 密钥管理服务KMS介绍
  • 遗传算法:模拟自然选择的优化智慧
  • 可编辑69页PPT | 某手机品牌主数据治理项目案例
  • 神经网络学习笔记12——高效卷积神经网络架构MobileNet
  • Origin 2024 安装包下载与安装教程
  • 【算法速成课1 | 题解】洛谷P3366 【模板】最小生成树 MST(Prim Kruskal)
  • 深度学习入门:神经网络基础知识
  • YOLO11实战 第006期-基于yolo11-seg的香蕉种植园语义分割实战文档(yolo格式数据免费获取)
  • MDK-5.4.2 集成 Compiler 5 编译器
  • 基于SpringBoot的协同过滤余弦函数的美食推荐系统(爬虫Python)的设计与实现
  • 数据结构:堆(Heap)
  • 生成式AI的引擎室:深入剖析LLM内存管理与调度
  • 【解锁Photonics for AI:系统学习光学神经网络与超表面设计,成就下一代光芯片工程师】
  • python - js的引入方式、注释变量、数据类型、强制转换、自动类型转换、js运算符、分支结构、函数
  • Nginx单端口代理多个前后端服务的完整配置指南
  • 【雅思019】Canceling an appointment
  • 数据结构——算法设计的基本思想(穷举、递归、分治等)
  • 【自用】JavaSE--junit单元测试、反射、注解、动态代理
  • FreeRTOS 常见面试题与核心知识点详解
  • Redis数据持久化——RDB快照和Aof日志追加
  • 8.28 模拟
  • 从易用性的角度来看,哪个ETL平台比较好用?
  • MySQL-数据类型
  • Clerk 用户认证系统集成文档
  • 关于virtual camera
  • UE5 PCG 笔记(三) Height To Density 节点
  • UE5 查找组件
  • UE5多人MOBA+GAS 55、基于 Python 协调器与 EOS 的会话编排
  • 嵌入式Linux自学不走弯路!670+讲课程!系统学习路线:入门+应用+ARM+驱动+移植+项目 (STM32MP157开发板)