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

鼠扑  金牌会员 | 2024-10-13 17:05:38 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 867|帖子 867|积分 2601

本地下载huggingface模子的办法

方法一:使用huggingface_hub库下载

先安装huggingface_hub库:
  1. pip install huggingface_hub
复制代码
之后运行:
  1. from huggingface_hub import snapshot_download
  2. # 指定模型名称和下载路径
  3. model_name = "bert-base-uncased"
  4. save_path = "./my_local_model"
  5. # 下载模型
  6. snapshot_download(repo_id=model_name, cache_dir=save_path)
复制代码
但是注意,因为网络问题,需要科学上网才能下载下来.
但是我们可以使用镜像网站,不需要科学上网就能直接下载。
  1. import os
  2. os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'   # 这个镜像网站可能也可以换掉
  3. from huggingface_hub import snapshot_download
  4. snapshot_download(repo_id="google-bert/bert-base-uncased",
  5.                   local_dir_use_symlinks=False,
  6.                   local_dir="./google-bert/bert-base-uncased")
复制代码
离线加载模子

如果你已经下载好了模子,并且盼望之后在离线环境中使用这些模子,你可以通过local_files_only=True参数来确保模子从本地加载,而不是重新联网下载。
  1. model = AutoModel.from_pretrained(model_save_path, local_files_only=True)
  2. tokenizer = AutoTokenizer.from_pretrained(model_save_path, local_files_only=True)
复制代码
方法二:使用transformers库下载(需要安装pytorch库)



  • 首先需要安装好pytorch库(AutoModelForSequenceClassification这个类是基于PyTorch的一个库)
  • 其次需要安装好Hugging Face 的 transformers 库以及 huggingface_hub 库。这两个库可以通过 pip 安装:
  1. pip install transformers
  2. pip install huggingface_hub
复制代码
如果你使用的是Windows和pip,没有合适的GPU,可以安装CPU版本的PyTorch,可以使用以下命令:
  1. pip install torch torchvision torchaudio
  2. pip install transformers
复制代码
  1. from transformers import AutoTokenizer, AutoModelForSequenceClassification
  2. # 下载模型和分词器
  3. model_name = "bert-base-uncased"
  4. tokenizer = AutoTokenizer.from_pretrained(model_name)
  5. model = AutoModelForSequenceClassification.from_pretrained(model_name)
  6. # 保存模型到本地
  7. model.save_pretrained("./models/bert-base-uncased")
  8. tokenizer.save_pretrained("./models/bert-base-uncased")
复制代码
离线加载模子

如果你已经下载好了模子,并且盼望之后在离线环境中使用这些模子,你可以通过local_files_only=True参数来确保模子从本地加载,而不是重新联网下载。
  1. model = AutoModel.from_pretrained(model_save_path, local_files_only=True)
  2. 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 的预训练模子。那么项目的布局可能会如下:
  1. my_nlp_project/
  2. ├── models/                     # 用于存放模型文件
  3. │   └── bert-base-uncased/       # 具体模型文件目录
  4. │       ├── config.json          # 模型配置文件
  5. │       ├── pytorch_model.bin    # 模型权重
  6. │       ├── tokenizer.json       # 分词器文件
  7. │       └── vocab.txt            # 词汇表文件
  8. ├── data/                        # 其他数据文件(可选)
  9. ├── src/                         # 项目的源代码
  10. │   └── main.py                  # 主代码文件
  11. ├── requirements.txt             # 项目的依赖
  12. └── README.md                    # 项目说明
复制代码
比如模子是这样的时间,可以将Hugging Face的模子文件存放在 models/bert-base-uncased/ 目录下。
3. 怎样在代码中加载本地模子

想要加载本地模子,最告急的一件事,是需要找到项目中的的from_pretrained方法,这个函数会指定指定模子的本地路径。
示例代码
  1. from transformers import AutoModel, AutoTokenizer
  2. # 模型路径(相对于项目根目录)
  3. model_path = "../models/bert-base-uncased/"
  4. # 加载模型和分词器
  5. model = AutoModel.from_pretrained(model_path)
  6. tokenizer = AutoTokenizer.from_pretrained(model_path)
  7. # 测试模型是否加载成功
  8. print("模型和分词器成功加载!")
复制代码
也可以使用相对路径来加载模子:
  1. import os
  2. # 获取当前文件的目录
  3. current_dir = os.path.dirname(os.path.abspath(__file__))
  4. # 构建模型的相对路径
  5. model_path = os.path.join(current_dir, "../models/bert-base-uncased/")
  6. model = AutoModel.from_pretrained(model_path)
  7. 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函数,之后找到的相应的信息。
  1. # 我的代码报了错,我通过from_pretrained的报错,找到了这个文件
  2. /root/anaconda3/lib/python3.11/site-packages/transformers/models/auto/tokenization_auto.py
  3. # 然后看了一下这个文件里的内容,找到了from_pretrained函数
  4. from transformers import AutoTokenizer        
  5. tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")
  6. tokenizer = AutoTokenizer.from_pretrained("dbmdz/bert-base-german-cased")
  7. tokenizer = AutoTokenizer.from_pretrained("FacebookAI/roberta-base", add_prefix_space=True)
复制代码
然后对这些from_pretrained函数进行修改即可:
pytorch_pretrained_bert 的 .from_pretrained(‘bert-base-uncased‘)下载到了本地的那个位置_CodingPark编程公园
比如我在下面的代码里
  1. from transformers import AutoTokenizer, BertModel, BertTokenizer, RobertaModel, RobertaTokenizerFast
  2. import os
  3. def get_tokenlizer(text_encoder_type):
  4.     # import ipdb;ipdb.set_trace();
  5.     if not isinstance(text_encoder_type, str):
  6.         # print("text_encoder_type is not a str")
  7.         if hasattr(text_encoder_type, "text_encoder_type"):
  8.             text_encoder_type = text_encoder_type.text_encoder_type
  9.         elif text_encoder_type.get("text_encoder_type", False):
  10.             text_encoder_type = text_encoder_type.get("text_encoder_type")
  11.         elif os.path.isdir(text_encoder_type) and os.path.exists(text_encoder_type):
  12.             pass
  13.         else:
  14.             raise ValueError(
  15.                 "Unknown type of text_encoder_type: {}".format(type(text_encoder_type))
  16.             )
  17.     print("final text_encoder_type: {}".format(text_encoder_type))
  18.    
  19.     # 新添加代码片段
  20.     tokenizer_path = "/root/autodl-tmp/GroundingDINO/bert-base-uncased"    # 这个需要使用绝对路径才可以。他这里使用了相对路径,有可能报错。
  21.     tokenizer = BertTokenizer.from_pretrained(tokenizer_path, use_fast=False)
  22.     return tokenizer
  23.     '''
  24.     tokenizer = AutoTokenizer.from_pretrained(text_encoder_type)
  25.     return tokenizer
  26.     '''
  27.    
  28. def get_pretrained_language_model(text_encoder_type):
  29.     # import ipdb;ipdb.set_trace();
  30.     if text_encoder_type == "bert-base-uncased" or (os.path.isdir(text_encoder_type) and os.path.exists(text_encoder_type)):
  31.         # 新添加代码片段
  32.         model_path = "/root/autodl-tmp/GroundingDINO/bert-base-uncased"
  33.         return BertModel.from_pretrained(model_path)
  34.         # return BertModel.from_pretrained(text_encoder_type)
  35.     if text_encoder_type == "roberta-base":
  36.         return RobertaModel.from_pretrained(text_encoder_type)
  37.     raise ValueError("Unknown text_encoder_type {}".format(text_encoder_type))
复制代码
重点是通过下面的语句更改了模子的使用路径:
  1.     tokenizer_path = "/root/autodl-tmp/GroundingDINO/bert-base-uncased"    # 这个需要使用绝对路径才可以。他这里使用了相对路径,有可能报错。
  2.     tokenizer = BertTokenizer.from_pretrained(tokenizer_path, use_fast=False)
复制代码
  1.         model_path = "/root/autodl-tmp/GroundingDINO/bert-base-uncased"
  2.         return BertModel.from_pretrained(model_path)
复制代码
可以好好参考一下下面这个帖子(huggingface 的官方文档)
huggingface-PreTrainedModel



以上

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表