【AI之路】使用huggingface_hub优雅解决huggingface大模型下载问题

2023-11-19


前言

Hugging face 资源很不错,可是国内下载速度很慢,动则GB的大模型,下载很容易超时,经常下载不成功。很是影响玩AI的信心。(有人说用迅雷啊,试试就知道有无奈。)

经过多次测试,终于搞定了下载,即使超时也可以继续下载。真正实现下载无忧!究竟如何实现?且看本文分解。


一、Hugging face是什么?

Hugging face 起初是一家总部位于纽约的聊天机器人初创服务商,本来打算创业做聊天机器人,在Github上开源了一个Transformers库,虽然聊天机器人业务没搞起来,但是他们的这个库在机器学习社区迅速大火起来。目前已经共享了超100,000个预训练模型,10,000个数据集。俨然陈国了AI开发者的GitHub,提供了模型、数据集(文本|图像|音频|视频)、类库(比如transformers|peft|accelerate)、教程等。

官网网址:https://huggingface.co/

二、准备工作

安装pip install huggingface_hub安装huggingface_hub包

C:\Users\Administrator>pip install huggingface_hub
Requirement already satisfied: huggingface_hub in d:\programdata\anaconda3\lib\site-packages (0.13.2)
Requirement already satisfied: pyyaml>=5.1 in d:\programdata\anaconda3\lib\site-packages (from huggingface_hub) (6.0)
Requirement already satisfied: typing-extensions>=3.7.4.3 in d:\programdata\anaconda3\lib\site-packages (from huggingface_hub) (4.4.0)
Requirement already satisfied: packaging>=20.9 in d:\programdata\anaconda3\lib\site-packages (from huggingface_hub) (22.0)
Requirement already satisfied: requests in d:\programdata\anaconda3\lib\site-packages (from huggingface_hub) (2.28.2)
Requirement already satisfied: tqdm>=4.42.1 in d:\programdata\anaconda3\lib\site-packages (from huggingface_hub) (4.64.1)
Requirement already satisfied: filelock in d:\programdata\anaconda3\lib\site-packages (from huggingface_hub) (3.12.0)
Requirement already satisfied: colorama in d:\programdata\anaconda3\lib\site-packages (from tqdm>=4.42.1->huggingface_hub) (0.4.6)
Requirement already satisfied: charset-normalizer<4,>=2 in d:\programdata\anaconda3\lib\site-packages (from requests->huggingface_hub) (2.0.4)
Requirement already satisfied: idna<4,>=2.5 in d:\programdata\anaconda3\lib\site-packages (from requests->huggingface_hub) (3.4)
Requirement already satisfied: certifi>=2017.4.17 in d:\programdata\anaconda3\lib\site-packages (from requests->huggingface_hub) (2022.12.7)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in d:\programdata\anaconda3\lib\site-packages (from requests->huggingface_hub) (1.26.14)
C:\Users\Administrator>

三、下载整个仓库或单个大模型文件

找到自己需要下载的仓库,红色框即是repo_id ,选择蓝色框即可查看仓库内文件。
在这里插入图片描述

1. 下载整个仓库

使用snapshot_download下载整个仓库快照,如下几个参数注意下:

  • allow_patterns选择需要下载的文件类型,通过ignore_patterns设置需要忽略的文件类型。
  • resume_download=True,表示允许断点续传,整个很有必要。
  • etag_timeout=100,超时阈值,默认10秒,这里自己根据情况修改。
    更多参数详情可访问:https://huggingface.co/docs/huggingface_hub/v0.16.3/guides/download
import time
from huggingface_hub import snapshot_download
repo_id = "LinkSoul/Chinese-Llama-2-7b"
local_dir = 'd:/ai/models1'
cache_dir = local_dir + "/cache"
while True:
    try:
        snapshot_download(cache_dir=cache_dir,
        local_dir=local_dir,
        repo_id=repo_id,
        local_dir_use_symlinks=False,
        resume_download=True,
        allow_patterns=["*.model", "*.json", "*.bin",
        "*.py", "*.md", "*.txt"],
        ignore_patterns=["*.safetensors", "*.msgpack",
        "*.h5", "*.ot",],
        )
    except Exception as e :
        print(e)
        # time.sleep(5)
    else:
        print('下载完成')
        break

在这里插入图片描述

2. 下载单个大模型文件

个别情况下,我们只需要下载大模型文件,不需要下载整个项目仓库,使用hf_hub_download进行下载即可。参数设置同上解释。

import time
from huggingface_hub import hf_hub_download
repo_id = "BlinkDL/rwkv-4-pile-7b" # 仓库ID
local_dir = 'd:/ai/models2'
cache_dir = local_dir + "/cache"
filename= "RWKV-4-Pile-7B-Chn-testNovel-done-ctx2048-20230404.pth"
while True:   
    try:
        hf_hub_download(cache_dir=cache_dir,
        local_dir=local_dir,
        repo_id=repo_id,
        filename=filename,
        local_dir_use_symlinks=False,
        resume_download=True,
        etag_timeout=100
        )
    except Exception as e :
        print(e)
        # time.sleep(5)
    else:
        print('下载完成')
        break

在这里插入图片描述


总结

几经测试,终于搞定了模型下载,以后再也不用为下载大文件发愁了。
踩坑无数,撰文只为各位博友少走弯路。
觉得有帮助,发动小手点个赞,谢谢!

附录

huggingface中文社区
https://huggingface.co/blog/zh

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【AI之路】使用huggingface_hub优雅解决huggingface大模型下载问题 的相关文章

随机推荐

  • ffmpeg by id和by name查找decoder的区别

    转自 https blog csdn net muyuyuzhong article details 79735763 同一个 AVCodecID 可能对应多个不同的编解码器 AVCodec 他们有不同的 AVCodec name avco
  • 一张图深度解析Linux共享内存的内核实现

    一张图深度解析Linux共享内存的内核实现 Sailor forever sailing 9806 163 com http blog csdn net sailor 8318 article details 39484747 PDF版本下
  • ThreadLocal学习

    1 threadLocal图解 java lang ThreadLocal类实现了线程的本地存储 ThreadLocal的内部实现 ThreadLocal的内部实现包括一个类似HashMap的对象 这里称之ThreadLocalMap Th
  • 华为OD机试 - 表达式括号匹配(Java)

    题目描述 1 2 3 3 8 0 1 2 这是一个简单的数学表达式 今天不是计算它的值 而是比较它的括号匹配是否正确 前面这个式子可以简化为 这样的括号我们认为它是匹配正确的 而 这样的我们就说他是错误的 注意括号里面的表达式可能是错的 也
  • rhel的一些配置

    ip etc sysconfig network scripts ifcfg eth0 DEVICE eth0 NM CONTROLLED yes ONBOOT yes BOOTPROTO dhcp BOOTPROTO static IPA
  • 消息转换器统一对null值处理

    import java nio charset Charset import java util ArrayList import java util List import org springframework context anno
  • STM32 CAN通信理解(是半双工还是全双工?)

    STM32F429 CAN通信 CAN 是控制器局域网络 Controller Area Network 的简称 它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的 并最终成为国际标准 ISO11519 是国际上应用最广泛的现场
  • 数据结构--二叉树的二叉链表实现

    1 二叉树的二叉链表示意图 二叉链表的每个结点由三个域组成 数据域 左指针域和右指针域 左右指针分别用来保存左右孩子结点的存储地址 2 二叉链表实现二叉树 2 1 头文件及其定义 BTNode h pragma once typedef c
  • 利用umi实现前端自定义打包

    背景 目前项目有这么一个需求 一套前端代码里面有两个项目 这两个项目一个是设备页面 一个是平台页面 因为这两个项目有共同的页面和代码 所有就写在一个仓库里面 出现的问题是 打包项目A并且也会随带的项目B的代码 这就会造成打包体积的增大 打包
  • java bean的使用

    这是我最终尝试成功的项目页面截图 网页效果 注意的点 1 Dog类 bean类 必须拥有一个无参构造器 这和spring里的bean的设计是一个理念 spring借鉴于javabean 2 通过getXxx和setXxx方法来访问成员变量
  • SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询

    摘要 本文我们将继续分享介绍Spring Boot在整合Mybatis开发企业级应用时其他典型的业务场景 即Mybatis是如何实现多表关联查询时将查询结果集与对象进行映射的 主要的内容包含 一对一的表关联 和 一对多 多对多的表关联 查询
  • python语言合法命名-Python中的标识符命名方法及使用注意事项

    Python中的标识符是由用户定义的名称 用来指定变量名称 函数名称 类名称 模块等名称 1 标识符的命名规则 1 不能使用Python的保留字 关键字 来命名标识符 2 Python标识符合法的字符包括 26个大小写字母 a z A Z
  • Linux中select poll和epoll的区别

    select的本质是采用32个整数的32位 即32 32 1024来标识 fd值为1 1024 当fd的值超过1024限制时 就必须修改FD SETSIZE的大小 这个时候就可以标识32 max值范围的fd 对于单进程多线程 每个线程处理多
  • STM32笔记:使用SysTick测量程序的运行时间

    本实验用来测量延时函数 如下 的运行时间 void Delay IO u32 nCount for nCount 0 nCount SysTick c include SysTick h IO u32 TimingDelay 0 void
  • 自己的第一个程序 — QT聊天软件 小感

    其实当初师兄给我这个任务的时候还是在2010年的11月份 那个时候刚到项目上的我超级自信 总认为只要自己想做 稍微看下书 动下手就可以写出来了 所以当师兄问我多久可以做好的时候 我开始满怀信心的说一个星期 后来细想下有点悬 说还是2个星期吧
  • VUE props 实现原理(源码解析)

    VUE props 实现原理 源码解析 前言 我们在使用组件的时候 都会给组件传入一些属性 但是在使用时 却只是关注了它传递数据的功能 没有想过它是怎样的一个原理 具体是怎么实现的 其实我们平时写出来的组件 本质上就是一个template模
  • 屏蔽SSH服务的弱密码算法

    前言 等保测试 1 目标主机SSH服务存在RC4 CBC或None弱加密算法 2 如果配置为CBC模式的话 SSH没有正确地处理分组密码算法加密的SSH会话中所出现的错误 解决办法 仅保留CTR加密算法 参考文章 1 编辑 ssh 配置文件
  • Windows 域基础环境搭建-Win_Server_2003

    文章目录 1 Windows 域基础环境搭建 Win Server 2003 1 1 Windows域简介 1 1 1 Windows域作用 1 1 2 Windows计算机查看所在域方式 1 1 3 域控 DC 1 2 Windows域环
  • 如何用Selenium做自动化测试

    我们做自动化测试如果想提高一下自己的软实力 我建议还是学着多写写脚本 这样能锻炼自己的编程能力 让我们以开放测试的思维去测试产品 而不是为了测试而测试 那样我觉得没什么意义 当然这样不是说其他不写脚本 简单的自动化没意义 本人不反对 认真对
  • 【AI之路】使用huggingface_hub优雅解决huggingface大模型下载问题

    文章目录 前言 一 Hugging face是什么 二 准备工作 三 下载整个仓库或单个大模型文件 1 下载整个仓库 2 下载单个大模型文件 总结 附录 前言 Hugging face 资源很不错 可是国内下载速度很慢 动则GB的大模型 下