0


本地下载huggingface模型并在服务器上使用流程

linux服务器连接不上huggingface的解决办法(以及本地下载huggingface模型流程)

本地下载huggingface模型的办法

方法一:使用huggingface_hub库下载

先安装

huggingface_hub

库:

pip install huggingface_hub

之后运行:

from huggingface_hub import snapshot_download

# 指定模型名称和下载路径
model_name ="bert-base-uncased"
save_path ="./my_local_model"# 下载模型
snapshot_download(repo_id=model_name, cache_dir=save_path)

但是注意,因为网络问题,需要科学上网才能下载下来.

但是我们可以使用镜像网站,不需要科学上网就能直接下载。

import os

os.environ['HF_ENDPOINT']='https://hf-mirror.com'# 这个镜像网站可能也可以换掉from huggingface_hub import snapshot_download

snapshot_download(repo_id="google-bert/bert-base-uncased",
                  local_dir_use_symlinks=False,
                  local_dir="./google-bert/bert-base-uncased")

离线加载模型

如果你已经下载好了模型,并且希望之后在离线环境中使用这些模型,你可以通过

local_files_only=True

参数来确保模型从本地加载,而不是重新联网下载。

model = AutoModel.from_pretrained(model_save_path, local_files_only=True)
tokenizer = AutoTokenizer.from_pretrained(model_save_path, local_files_only=True)

方法二:使用transformers库下载(需要安装pytorch库)

  • 首先需要安装好pytorch库(AutoModelForSequenceClassification这个类是基于PyTorch的一个库)
  • 其次需要安装好Hugging Face 的 transformers 库以及 huggingface_hub 库。这两个库可以通过 pip 安装:
pip install transformers 
pip install huggingface_hub

如果你使用的是Windows和pip,没有合适的GPU,可以安装CPU版本的PyTorch,可以使用以下命令:

pip install torch torchvision torchaudio
pip install transformers
from transformers import AutoTokenizer, AutoModelForSequenceClassification

# 下载模型和分词器
model_name ="bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)# 保存模型到本地
model.save_pretrained("./models/bert-base-uncased")
tokenizer.save_pretrained("./models/bert-base-uncased")

离线加载模型

如果你已经下载好了模型,并且希望之后在离线环境中使用这些模型,你可以通过

local_files_only=True

参数来确保模型从本地加载,而不是重新联网下载。

model = AutoModel.from_pretrained(model_save_path, local_files_only=True)
tokenizer = AutoTokenizer.from_pretrained(model_save_path, local_files_only=True)

方法三: 使用git工具下载(但需要在git里设置代理)

参考如下帖子:
如何将 huggingface上的模型文件下载到本地

方法四:需要代理(使用huggingface-cli工具)

如何快速下载huggingface模型

加载本地下载模型的方法:

1. 模型存放路径的选择

根据项目的需求和规模,存放模型的路径一般有以下几种可能:

  • models/ 文件夹:这是最常见的做法。你可以在项目的根目录下创建一个名为 models 的文件夹,将下载好的 Hugging Face 模型存放在这个文件夹中。
  • data/ 或 assets/ 文件夹:如果你的项目已经有其他资源文件目录(如 data 或 assets 文件夹),你可以选择将模型放在这些文件夹中,并确保代码路径能找到它。
  • 项目中的子模块:如果你的项目包含多个子模块,且每个模块需要使用不同的模型,你可以将模型放置到各个子模块的目录中。

2. 项目文件结构示例

假设你的项目是一个 NLP 应用,并且使用了 Hugging Face 的预训练模型。那么项目的结构可能会如下:

my_nlp_project/
│
├── models/# 用于存放模型文件
│   └── bert-base-uncased/# 具体模型文件目录
│       ├── config.json          # 模型配置文件
│       ├── pytorch_model.bin# 模型权重
│       ├── tokenizer.json       # 分词器文件
│       └── vocab.txt            # 词汇表文件
│
├── data/# 其他数据文件(可选)
├── src/# 项目的源代码
│   └── main.py                  # 主代码文件
├── requirements.txt             # 项目的依赖
└── README.md                    # 项目说明

比如模型是这样的时候,可以将

Hugging Face

的模型文件存放在

models/bert-base-uncased/

目录下。

3. 如何在代码中加载本地模型

想要加载本地模型,最重要的一件事,是需要找到项目中的的

from_pretrained

方法,

这个函数会指定指定模型的本地路径

示例代码

from transformers import AutoModel, AutoTokenizer

# 模型路径(相对于项目根目录)
model_path ="../models/bert-base-uncased/"# 加载模型和分词器
model = AutoModel.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)# 测试模型是否加载成功print("模型和分词器成功加载!")

也可以使用相对路径来加载模型:

import os

# 获取当前文件的目录
current_dir = os.path.dirname(os.path.abspath(__file__))# 构建模型的相对路径
model_path = os.path.join(current_dir,"../models/bert-base-uncased/")

model = AutoModel.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)

重点解释:

  • model_path:这是你指定的模型在项目中的路径。在这个例子中,模型文件存放在 models/bert-base-uncased/ 目录下,所以路径为 ../models/bert-base-uncased/
  • AutoModel.from_pretrainedAutoTokenizer.from_pretrained:这些函数可以直接从本地路径加载模型和分词器。

找到本地下载huggingface模型的服务器默认路径的方法

  1. 可以全局搜索,找到~/.cache/huggingface/hub/ 这个路径,我们可以把文件上传到这个路径上去。
  2. 找到from_pretrained函数,比如这样的代码

大家加载huggingface模型,基本都是使用这两条代码来下载相关的文件的,所以我们只要找到这两条代码在哪里,就能找到文件的下载位置。

最后的碎碎念

我在运行

grounddino

的时候,是通过代码运行不成功的报错,还有一些调试搜索方法,找到的上面两行相关代码。(实际上使用vscode的全局搜索更好)

也就是根据

from_pretrained

函数,进一步去好好搜索看了

AutoTokenizer

函数,之后找到的相应的信息。

# 我的代码报了错,我通过from_pretrained的报错,找到了这个文件/root/anaconda3/lib/python3.11/site-packages/transformers/models/auto/tokenization_auto.py

# 然后看了一下这个文件里的内容,找到了from_pretrained函数from transformers import AutoTokenizer        
tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")
tokenizer = AutoTokenizer.from_pretrained("dbmdz/bert-base-german-cased")
tokenizer = AutoTokenizer.from_pretrained("FacebookAI/roberta-base", add_prefix_space=True)

然后对这些from_pretrained函数进行修改即可:
pytorch_pretrained_bert 的 .from_pretrained(‘bert-base-uncased‘)下载到了本地的那个位置_CodingPark编程公园

比如我在下面的代码里

from transformers import AutoTokenizer, BertModel, BertTokenizer, RobertaModel, RobertaTokenizerFast
import os

defget_tokenlizer(text_encoder_type):# import ipdb;ipdb.set_trace();ifnotisinstance(text_encoder_type,str):# print("text_encoder_type is not a str")ifhasattr(text_encoder_type,"text_encoder_type"):
            text_encoder_type = text_encoder_type.text_encoder_type
        elif text_encoder_type.get("text_encoder_type",False):
            text_encoder_type = text_encoder_type.get("text_encoder_type")elif os.path.isdir(text_encoder_type)and os.path.exists(text_encoder_type):passelse:raise ValueError("Unknown type of text_encoder_type: {}".format(type(text_encoder_type)))print("final text_encoder_type: {}".format(text_encoder_type))# 新添加代码片段
    tokenizer_path ="/root/autodl-tmp/GroundingDINO/bert-base-uncased"# 这个需要使用绝对路径才可以。他这里使用了相对路径,有可能报错。
    tokenizer = BertTokenizer.from_pretrained(tokenizer_path, use_fast=False)return tokenizer

    '''
    tokenizer = AutoTokenizer.from_pretrained(text_encoder_type)
    return tokenizer
    '''defget_pretrained_language_model(text_encoder_type):# import ipdb;ipdb.set_trace();if text_encoder_type =="bert-base-uncased"or(os.path.isdir(text_encoder_type)and os.path.exists(text_encoder_type)):# 新添加代码片段
        model_path ="/root/autodl-tmp/GroundingDINO/bert-base-uncased"return BertModel.from_pretrained(model_path)# return BertModel.from_pretrained(text_encoder_type)if text_encoder_type =="roberta-base":return RobertaModel.from_pretrained(text_encoder_type)raise ValueError("Unknown text_encoder_type {}".format(text_encoder_type))

重点是通过下面的语句更改了模型的使用路径:

    tokenizer_path ="/root/autodl-tmp/GroundingDINO/bert-base-uncased"# 这个需要使用绝对路径才可以。他这里使用了相对路径,有可能报错。
    tokenizer = BertTokenizer.from_pretrained(tokenizer_path, use_fast=False)
    model_path ="/root/autodl-tmp/GroundingDINO/bert-base-uncased"return BertModel.from_pretrained(model_path)

可以好好参考一下下面这个帖子(huggingface 的官方文档)
huggingface-PreTrainedModel

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上

标签: 服务器 linux 运维

本文转载自: https://blog.csdn.net/weixin_44151034/article/details/139757013
版权归原作者 宇宙计算机 所有, 如有侵权,请联系我们删除。

“本地下载huggingface模型并在服务器上使用流程”的评论:

还没有评论