本地下载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
- def get_tokenlizer(text_encoder_type):
- # import ipdb;ipdb.set_trace();
- if not isinstance(text_encoder_type, str):
- # print("text_encoder_type is not a str")
- if hasattr(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):
- pass
- else:
- 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
- '''
-
- def get_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
以上
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |