← 返回首页
HuggingFace下载预训练模型
发表时间:2024-06-30 09:36:34
HuggingFace下载预训练模型

1.HuggingFace简介

HuggingFace和 Github 类似,都是Hub(社区)。Hugging Face可以说的上是机器学习界的Github。Hugging Face为用户提供了以下主要功能:

使用方式与Github类似。Hugging Face为不同的机器学习任务提供了许多供大家使用,这些模型就存储在模型仓库中。Hugging Face上有许多公开数据集。 hugging face在NLP领域最出名,其提供的模型大多都是基于Transformer的。为了易用性,Hugging Face还为用户提供了以下几个项目:

Transformers: Transformers提供了上千个预训练好的模型可以用于不同的任务,例如文本领域、音频领域和CV领域。该项目是HuggingFace的核心,可以说学习HuggingFace就是在学习该项目如何使用。 Datasets: 一个轻量级的数据集框架,主要有两个功能:1.一行代码下载和预处理常用的公开数据集; 2.快速、易用的数据预处理类库。 Accelerate: 帮助Pytorch用户很方便的实现 multi-GPU/TPU/fp16。 Space:Space提供了许多好玩的深度学习应用,可以尝试玩一下。

2.Huggingface与Transformer之间的关系

‌Transformers与Hugging Face之间的关系非常紧密,Hugging Face是推动Transformers架构普及和应用的重要力量‌‌。

Transformer架构

Transformer架构是由Google在2017年提出的革命性架构,基于自注意力机制(Self-Attention),解决了传统RNN和CNN在处理长序列数据时的局限性。其特点包括并行计算能力强、训练效率高,适合处理长序列数据,并且是许多现代NLP模型(如BERT、GPT)的基础‌。

Hugging Face

Hugging Face是一家专注于NLP的公司,最初以开发聊天机器人起家,后来转向开源NLP工具和模型。Hugging Face的核心贡献包括提供了Transformers库,这是一个开源库,实现了大量基于Transformers架构的预训练模型(如BERT、GPT、T5等)。此外,Hugging Face还提供了Model Hub,一个共享和下载预训练模型的平台,并开发了Datasets库和Tokenizers库,简化了数据处理和模型训练流程‌。

Transformer与Hugging Face Transformers的具体联系

==注意:不要混淆Huggingface Transformers和Transformer神经网络,前者是是一个开源的 Python 库,它基于Transformer神经网络架构,集成了多种基于 Transformer 架构的预训练模型,如 BERT、GPT、T5 等,用户可直接加载使用。后者是一种具体的神经网络架构,由 Vaswani 等人在 2017 年提出,其核心是自注意力机制,具有并行计算、长距离依赖建模等优势,能有效处理如机器翻译、文本生成等序列到序列的任务。==

3.安装Transformers

Hugging Face Transformer是Hugging Face最核心的项目,你可以用直接使用预训练模型进行推理,使用预训练模型进行迁移学习。

Transformers安装,安装Transformers非常简单,直接安装即可。

pip install transformers

4.如何下载模型

HuggingFace的transformers框架,囊括了BERT、GPT、GPT2、ToBERTa、T5等众多模型,同时支持pytorch和tensorflow 2,代码非常规范,使用也非常简单,但是模型使用的时候,要从他们的服务器上去下载模型,那么有没有办法,把这些预训练模型下载好,在使用时指定使用这些模型呢?答案是肯定的。

首先打开网址:https://huggingface.co/models 这个网址是huggingface/transformers支持的所有模型,目前一直在增长。搜索bert-base-uncased(其他的模型类似,比如gpt2等),并点击进去。

点击页面中的Files and versions,可以看到模型的所有文件。

通常我们需要保存的是三个文件及一些额外的文件,第一个是配置文件;config.json。第二个是词典文件,vocab.json。第三个是预训练模型文件,如果你使用pytorch则保存pytorch_model.bin文件,如果你使用tensorflow 2,则保存tf_model.h5。

下载到本地文件夹t5-base,同时这些名称务必注意保证与图中的名称完全一致。然后从本地上传至自己的服务器想要存储的位置。

项目文件结构如下:

如果你的任务是一个比较常见的应用(比如:中英翻译),大概率可以直接使用Transformer提供的API解决,其使用方式非常简单,可以说是直接用即可。例如:使用huggingface预训练模型实现英法,英中翻译实例。

首先需要安装sentencepiece分词器依赖。

pip install sentencepiece
import os
from transformers import pipeline

os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
translator = pipeline("translation_en_to_fr",model="t5-base",device='cuda')
print(translator("Welcome to china!"))

translator = pipeline("translation_en_to_zh",model="Helsinki-NLP-opus-mt-en-zh",device='cuda')
print(translator("You have time to dream, why don't have time to pursue."))

运行效果:

[{'translation_text': 'Bienvenue en Chine!'}]
[{'translation_text': '你有时间做梦,为什么没有时间追求?'}]

5.使用huggingface_cli下载模型

安装Huggingface CLI:

pip install -U huggingface_hub

设置环境变量

#设置Huggingface镜像地址
set HF_ENDPOINT=https://hf-mirror.com

#设置Huggingface模型保存的路径
set HF_HOME=d:\AI_Model\huggingface

测试下载t5-base模型

huggingface-cli download --resume-download t5-base --local-dir g:/ai_model/t5-base

6.使用snapshot_download代码方式下载

安装 huggingface_hub 库:

pip install huggingface_hub

snapshot_download 用于下载整个模型仓库,包括所有文件。以下是基本用法(以下载Helsinki-NLP/opus-mt-zh-en模型为例):

from huggingface_hub import snapshot_download

# 模型名称
model_name = "Helsinki-NLP/opus-mt-zh-en"

# 本地存储路径
local_dir = "./Helsinki-NLP-opus-mt-zh-en"

# 下载模型
snapshot_download(repo_id=model_name, local_dir=local_dir)

如果只需要下载特定的文件,可以使用 allow_patterns:

from huggingface_hub import snapshot_download

model_name = "Helsinki-NLP/opus-mt-zh-en"
local_dir = "./Helsinki-NLP-opus-mt-zh-en"

# 只下载 `.json` 和 `.bin` 文件
snapshot_download(
    repo_id=model_name,
    local_dir=local_dir,
    allow_patterns=["*.json", "*.bin"]
)

7.国内Huggingface镜像站点推荐

以下是国内推荐使用的Huggingface镜像站点。

使用ModelScope下载模型(推荐)

在 ModelScope 中,snapshot_download 是一个非常有用的工具,可以直接下载模型文件到指定路径,而无需加载模型。以下是使用 snapshot_download 下载模型的具体方法:

安装 ModelScope SDK:

pip install modelscope

使用 snapshot_download 下载模型;

from modelscope import snapshot_download

# 指定模型名称
model_name = "Qwen/Qwen2.5-7B-Instruct"

# 指定下载路径(绝对路径或者相对路径)
custom_path = "./models"

# 下载模型
model_dir = snapshot_download(
    model_name,  # 模型名称
    cache_dir=custom_path,  # 指定下载路径
    revision="master"  # 可选:指定模型版本(默认master)
)

print(f"模型已下载到:{model_dir}")