写在前面
在大模型横行的时代,无法在服务器上连接外网的研究僧真的是太苦逼了,每次想尝试类似于CLIP,BLIP之类的大模型都会得到“requests.exceptions.ConnectionError: (MaxRetryError("HTTPSConnectionPool(host=‘huggingface.co’, port=443)” 或“requests.exceptions.ConnectionError: (MaxRetryError(“HTTPSConnectionPool(host=‘huggingface.co’, port=443): Max retries exceeded with url: /api/models/bert-base-uncased/tree/main?recursive=True&expand=False (Caused by NewConnectionError(‘<urllib3.connection.HTTPSConnection object at 0x7f4326e15e50>: Failed to establish a new connection: [Errno 101] Network is unreachable’))”), ‘(Request ID: 390a0157-95dd-416d-80c5-79f4fdd4b6d1)’)”类似的“奖励”。
其实主要就是因为无法访问外网,从而不能从huggingface下载预训练的权重导致的。一个简单的方式就是在本地将预训练的权重文件下载好,然后再上传到服务器上,但是找了一下现在网上的相关教程都不是特别容易上手,特此在这里记录一下便于后续自己遇到类似的问题参考。
下面以BLIP调用BERT为例。
报错的语句为:
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
解决方案
1. 进入huggingface官网:https://huggingface.co/
2. 在搜索框输入想要下载的模型名称,如 bert-base-uncased
3. 如图找到自己需要的模型对应的连接,点进去。 点击 Files and versions
4. 下载需要的文件,这里以Torch为例 需要下载四个文件, 分别是 config.json , pytorch_model.bin, tokenizer.json ,vocab.txt
5. 在本地新建一个文件夹我这里叫BERT,然后把上面四个文件下载到这个目录下面,注意:不能改变文件名和后缀
6. 将该文件夹上传到服务器项目所在的文件夹下,from_pretrained() 里面的参数
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
修改为 服务器上改文件夹路径,如
tokenizer = BertTokenizer.from_pretrained('/data/timer/BLIP/BERT')
这里主要是因为BertTokenizer.from_pretrained() 可以接受的参数有几种,short-cut name(缩写名称,类似于bert-base-uncased这种)、identifier name(类似于microsoft/DialoGPT-small这种)、文件夹、文件。
其实相关的教程网上也有,但就是没有给一个实例或者不够全面。特别地对于下载的文件如何放置没有一个特别详细的说明。希望这篇博客能够帮助到大家。
参考:
- huggingface transformers预训练模型如何下载至本地,并使用?
- 如何从huggingface官网下载模型