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_pretrained
和AutoTokenizer.from_pretrained
:这些函数可以直接从本地路径加载模型和分词器。
找到本地下载huggingface模型的服务器默认路径的方法
- 可以全局搜索,找到
~/.cache/huggingface/hub/
这个路径,我们可以把文件上传到这个路径上去。 - 找到
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
以上
版权归原作者 宇宙计算机 所有, 如有侵权,请联系我们删除。