.from_pretrained()函数下载不了怎么办


前言

本文介绍的是在网络条件不好的情况下,直接跑.from_pretrained()下载不了权重的解决办法,本文以AutoencoderKL.from_pretrained(model_key, subfolder=“vae”)为例。
注:本文仅提供一个找到url的思路,需要一定的python功底。


一、huggingface是什么?

抱脸是一个提供预训练模型和数据集的开源平台,可能需要科学上网。

二、怎么找要下载文件的url

先找到你python安装huggingface_hub的位置,比如我的位置在:C:\Users\zkzou\AppData\Local\Programs\Python\Python38\Lib\site-packages\huggingface_hub,进入该位置并打开file_download.py文件,然后在hf_huf_download函数的这一行加入print(“downloading url is:”,url)语句就行,大概如下:

1230    url = hf_hub_url(repo_id, filename, repo_type=repo_type, revision=revision, endpoint=endpoint)
1231    print("downloading url is:",url)
1232    headers = build_hf_headers(
1233        token=token,
1234        library_name=library_name,
1235        library_version=library_version,
1236        user_agent=user_agent,
1237    )

log就能打印出url来,例如本文打印的是:

downloading url is: https://huggingface.co/stabilityai/stable-diffusion-2-base/resolve/main/vae/config.json

然后浏览器打开https://huggingface.co/stabilityai/stable-diffusion-2-base/resolve/main/vae,把这个.json文件下载下来。

那么如果打印不出来呢?
别急,只要在hf_hub_download()这个函数下面加一个

import pdb; pdb.set_trace()

然后一直按n往后走,走到你觉得是url的代码那里打印一下变量就行了。

三、下载好后放哪

这个主要看.from_pretrained函数后面跟的地址,一般情况下是丢到.cache文件夹里,比如windows系统是“C:\Users\zkzou2.cache\huggingface\hub”下,Linux一般是“/user/.cache/huggingface/hub”下。如果你是下huggingface的文件且当前运行的代码有“./huggingface/hub”文件夹,则有可能丢到当前的“./huggingface/hub”文件夹里。也可以指定路径,比如本文的代码如下:

model_key = r"stabilityai/stable-diffusion-2-base"
AutoencoderKL.from_pretrained(model_key, subfolder="vae")

只要在当前目录下创建./stabilityai/stable-diffusion-2-base,然后把下载好的文件丢进去就行了。
如果再跑一遍,log还提示少了xxx,就再从上一步那个网站下载xxx并放进去就行了。

注:本文只是拿AutoencoderKL为例,有些包比如vocos没有model_key这个参数,你可以直接去 XXX\site-packages\vocos\pretrained.py里的from_pretrain()函数中强行指定路径,如果你不想改变源码的功能性,可以和我这样改:
修改前:

    @classmethod
    def from_pretrained(cls, repo_id: str, revision: Optional[str] = None) -> Vocos:
        config_path = hf_hub_download(repo_id=repo_id, filename="config.yaml", revision=revision)
        model_path = hf_hub_download(repo_id=repo_id, filename="pytorch_model.bin", revision=revision)
        ...

修改后:

    def from_pretrained(cls, repo_id: str, revision: Optional[str] = None) -> Vocos:
        config_path = 'vocos/config.yaml' if os.path.isfile('vocos/config.yaml') else hf_hub_download(repo_id=repo_id, filename="config.yaml", revision=revision)
        model_path = 'vocos/pytorch_model.bin' if os.path.isfile('vocos/pytorch_model.bin') else hf_hub_download(repo_id=repo_id, filename="pytorch_model.bin", revision=revision)
        ...

其中’vocos/config.yaml’ 和’vocos/pytorch_model.bin’代表工程路径下如果存在vocos文件夹且文件夹中有配置文件和权重的话就直接读取,否则就从网上下载。之所以写成xxx = xxx if xxx else xxx是为了不破坏源代码的行数。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
`AutoTokenizer.from_pretrained` 是 Hugging Face Transformers 库中的一个函数,用于从预训练模型中加载 tokenizer。 在自然语言处理任务中,tokenizer 负责将原始文本转换成模型可以理解的输入格式,例如将文本转换成词语序列或字序列。在使用预训练模型时,我们通常需要加载与该模型相对应的 tokenizer,以确保输入格式的一致性。 `AutoTokenizer.from_pretrained` 函数可以从 Hugging Face Model Hub 或本地文件系统中加载预训练模型的 tokenizer。该函数的定义如下: ```python @classmethod def from_pretrained(cls, pretrained_model_name_or_path: Union[str, os.PathLike], *init_inputs, **kwargs) -> PreTrainedTokenizer: ``` 其中,`pretrained_model_name_or_path` 参数指定要加载的预训练模型的名称或路径,`init_inputs` 和 `kwargs` 参数用于传递给 tokenizer 的其他参数。 下面是一个简单的示例,展示如何使用 `AutoTokenizer.from_pretrained` 函数加载预训练模型的 tokenizer: ```python from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased") text = "This is a sample sentence." tokens = tokenizer.tokenize(text) print(tokens) ``` 在这个示例中,我们首先使用 `AutoTokenizer.from_pretrained` 函数加载了 `bert-base-uncased` 模型的 tokenizer。然后,我们使用 tokenizer 的 `tokenize` 方法将原始文本转换成词语序列。最后,我们将转换后的词语序列输出到控制台上。 需要注意的是,`AutoTokenizer.from_pretrained` 函数可以加载多种类型的预训练模型的 tokenizer,例如 BERT、GPT、RoBERTa 等。在使用该函数时,我们需要确保指定了正确的预训练模型名称或路径。 总之,`AutoTokenizer.from_pretrained` 函数是 Hugging Face Transformers 库中一个非常有用的函数,可以帮助我们加载预训练模型的 tokenizer,从而将原始文本转换成模型可以理解的输入格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值