Bootstrap

Huggingface 详细使用教程

Hugging face 背景: 起初是一家聊天机器人公司,后面开源了一个transformers库,聊天机器人业务没有起色,机器学习库迅速活了起来,目前模型585659,数据集 Datasets128,253,成了机器学习界的github。

之所以获得巨大的成功,一方面让甲方企业的小白,尤其是入门者快速使用上大佬训练的超级牛逼的模型,另外一方面,开放的文化和态度,以及利他的精神特别吸引人,Huaggingface上面很多业界大牛提交新的模型,越来越多的数据和模型更加丰富。一方面有人提供模型,另外一方面有人消费模型,这样让双方的效率大大提高了,确实是个不错的Idea。

画重点,在国内huggingface 也是非常广泛的,一些开源的架构本质上就是利用transform 上面的模型进行微调,很多NLP工程师招聘条目也明确要求熟悉Huggingface transform 库的使用,重点由于huggingface 提供了模型又提供了数据集,因此入门非常简单,你甚至不用知道,GPT,BERT就能使用它的模型,下面是怎么调用模型的步骤。

1.hugging face 能做什么

  官方网站:

  官方网站:https://huggingface.co/

Models:训练模型,hugging face 有数以万计的模型可以使用

Datasets:数据集,hugging face 有数以万计的数据可以直接拿来使用

Spaces:最初是展示AI模型构建的应用,hugging face 很容让的部署你已经构建的应用

2.hugging face 如何使用


pip install huggingface-hub==0.17.3
pip install transformers==4.34 
#如果 conda 频道提供了您所需的特定版本(比如 4.0),且该版本在 4.0 之后,您可以尝试指定版本安装,尽管您提供的信息未给出明确的示例。通常,指定版本的 conda 命令格式如下:conda install -c huggingface transformers=4.0
import os
# 注意os.environ得在import huggingface库相关语句之前执行。
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
from huggingface_hub import hf_hub_download

3.下载单个文件hf_hub_download  

hf_hub_download是huggingface官方支持(Downloading files/hf_hub_download)的下载模型或数据集的方法。该方法涉及的参数如下

\

实际上用到的参数并不多,一般情况下只需设置repo_id,filename,subfolder,local_dir,token参数即可

  • repo_id:仓库名称
  • filename:需要下载的文件名
  • subfolder:需要下载的文件在仓库中的哪一个文件夹(可选)
  • repo_type:仓库类型(可选),如果不填写就默认下载的是model,否则需要设置对应值(如下载数据集就设为datase)
  • evision:指定Git的修订版本(可选)
  • library_name:对象对应的库的名称(可选)
  • library_version:库的版本号(可选)
  • cache_dir:缓存文件存储的文件夹路径(可选)
  • local_dir:下载的文件存放的目录(可选)
  • local_dir_use_symlinks:与 local_dir 参数一起使用的选项。如果设置为 “auto”,则会使用缓存目录,并根据文件大小将文件复制或创建符号链接到本地目录。如果设置为 True,则无论文件大小如何,都将创建符号链接。如果设置为 False,则文件将从缓存中复制(如果已存在),或者从Hub下载而不缓存。
  • user_agent:指定用户代理信息,可以是一个字典或一个字符串(可选)
  • force_download:如果该文件已经在本地缓存中存在,是否强制性下载文件(可选)
    proxies: 设置代理服务器(可选)

  • etag_timeout:当获取ETag时,等待服务器发送数据的最长时间(以秒为单位)。如果服务器在这段时间内没有响应,将放弃请求(可选)

  • resume_download:如果设置为 True,可以继续之前中断的下载操作,即继续下载先前未完成的文件(可选)

  • token:用于下载的身份验证令牌,如果设置为 True,则从HuggingFace配置文件夹中读取令牌。如果是一个字符串,它将被用作身份验证令牌。(可选)

  • local_files_only:如果设置为 True,则避免下载文件,如果本地缓存中存在文件,则返回本地缓存文件的路径(可选)

  • legacy_cache_layout:如果设置为 True,则使用旧的文件缓存布局,即只需调用 hf_hub_url() 然后进行缓存下载。这已经不推荐使用,因为新的缓存布局更强大。(可选)

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

使用snapshot_download下载整个仓库快照,如下几个参数注意下:allow_patterns选择需要下载的文件类型,通过ignore_patterns设置需要忽略的文件类型。
resume_download=True,表示允许断点续传,整个很有必要。
etag_timeout=100,超时阈值,默认10秒,这里自己根据情况修改。
更多参数详情可访问:https://huggingface.co/docs/huggingface_hub/v0.16.3/guides/download

from huggingface_hub import hf_hub_download

hf_hub_download(repo_id="internlm/internlm2-chat-7b", filename="config.json",local_dir="D:/ai")

import os
# 注意os.environ得在import huggingface库相关语句之前执行。
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
from huggingface_hub import hf_hub_download

def download_model(source_url,local_dir):
    # 使用huggingface原地址
    # source_url ="https://huggingface.co/internlm/internlm2-chat-7b/blob/main/config.json"
    # 使用huggingface-镜像地址
    # source_url = "https://hf-mirror.com/internlm/internlm2-chat-7b/blob/main/config.json"

    if 'blob' in source_url:
        sp = '/blob/main/'
    else:
        sp = '/resolve/main/'

    if 'huggingface.co' in source_url:
        url = 'https://huggingface.co/'
    else:
        url = 'https://hf-mirror.com'

    location = source_url.split(sp)
    repo_id = location[0].strip(url) # 仓库ID,例如:"BlinkDL/rwkv-4-world" 

    cache_dir = local_dir + "/cache"
    filename = location[1]# 大模型文件,例如:"RWKV-4-World-CHNtuned-7B-v1-20230709-ctx4096.pth"

    print(f'开始下载\n仓库:{repo_id}\n大模型:{filename}\n如超时不用管,会自定继续下载,直至完成。中途中断,再次运行将继续下载。')
    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)
        else:
            print(f'下载完成,大模型保存在:{local_dir}\{filename}')
            break
            
if __name__ == '__main__':
    source_url = "https://huggingface.co/internlm/internlm2-chat-7b/blob/main/config.json"
    source_url = "https://hf-mirror.com/internlm/internlm2-chat-7b/blob/main/config.json"
    # source_url = "https://hf-mirror.com/internlm/internlm2-chat-7b/blob/main/config.json"
#目录地址windows系统
    download_model(source_url,local_dir = r'D:\ai')

4.下载整个库 snapshot_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


文件将被下载到本地缓存文件夹。https://huggingface.co/docs/huggingface_hub/guides/manage-cache

5、登录

Hugging Face Hub 使用令牌对应用进行身份验证(请参阅文档). 要登录您的机器,请运行以下命令行:

huggingface-cli login
# or using an environment variable
huggingface-cli login --token $HUGGINGFACE_TOKEN

6、创建一个存储库 create_repo

要创建一个新存储库,请运行以下代码:

from huggingface_hub import create_repo

create_repo(repo_id="super-cool-model")

7.上传单个文件 upload_file

from huggingface_hub import upload_file

upload_file(
    path_or_fileobj="/home/lysandre/dummy-test/README.md",
    path_in_repo="README.md",
    repo_id="lysandre/test-model",
)

8.上传整个文件 upload_folder

from huggingface_hub import upload_folder

upload_folder(
    folder_path="/path/to/local/space",
    repo_id="username/my-cool-space",
    repo_type="space",
)

 【Hugging Face】如何从hub中下载文件_snapshot_download-CSDN博客【AI之路】使用huggingface_hub通过huggingface镜像站hf-mirror.com下载大模型(附代码,实现大模型自由)_huggingface镜像网站-CSDN博客

附录

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

Pipeline使用介绍

飞桨AI Studio星河社区-人工智能学习与实训社区

;