【问题标题】:Load trained model on another machine - fastai, torch, huggingface在另一台机器上加载训练好的模型——fastai、torch、huggingface
【发布时间】:2021-03-22 18:38:57
【问题描述】:

我正在使用 fastai 和 pytorch 来微调来自 huggingface 的 XLMRoberta。 我已经训练了模型,并且在我训练它的机器上一切正常。

但是当我尝试在另一台机器上加载模型时,我得到OSError - Not Found - No such file or directory 指向.cache/torch/transformers/。问题是vocab_file 的路径。

我使用 fastai 的 Learner.export 将模型导出到 .pkl 文件中,但我不认为这个问题与 fastai 有关,因为我发现 the same issue 出现在 flairNLP 中。

似乎在训练期间存储 vocab_file 的缓存文件夹的路径嵌入在 .pkl 文件中:

错误来自transformer的XLMRobertaTokenizer__setstate__:

def __setstate__(self, d):
    self.__dict__ = d
    self.sp_model = spm.SentencePieceProcessor()
    self.sp_model.Load(self.vocab_file)

它尝试使用文件中的路径加载 vocab_file。

我尝试使用以下方法修补此方法:

pretrained_model_name = "xlm-roberta-base"
vocab_file = XLMRobertaTokenizer.from_pretrained(pretrained_model_name).vocab_file

def _setstate(self, d):
    self.__dict__ = d
    self.sp_model = spm.SentencePieceProcessor()
    self.sp_model.Load(vocab_file)

XLMRobertaTokenizer.__setstate__ = MethodType(_setstate, XLMRobertaTokenizer(vocab_file))

这成功加载了模型,但导致了其他问题,例如缺少模型属性和其他不需要的问题。

有人可以解释一下为什么文件中嵌入了路径,有没有办法在不重新导出模型的情况下配置它,或者如果必须重新导出,如何使用 fastai、torch 和 huggingface 动态配置它。

【问题讨论】:

  • .cache/torch/transformers 是默认缓存位置,不应用于加载模型。我实际上并不完全确定您要做什么,但是当 fastai(从未使用过它)有导出时,为什么不使用相应的导入?存储 hugginface 模型和标记器的正确方法是使用 save_pretrained(location)。您可以稍后使用 from_pretrained 从此位置加载标记器和模型。
  • @cronoik 谢谢你的评论。是的,我知道 huggingface 中的 pretrained 函数,但所有库都交织在一起,我必须覆盖 fastai 导出的某些部分。不管怎样,我会仔细看看我能做什么,但现在我通过创建 Docker 映像解决了这个问题。
  • 我之前问过你,但是fastai没有导入功能吗?

标签: nlp pytorch huggingface-transformers fast-ai


【解决方案1】:

我遇到了同样的错误。我对下游分类任务的 XLMRoberta 进行了微调,fastai 版本 = 1.0.61。我正在 docker 中加载模型。

我不确定为什么要嵌入路径,但我找到了解决方法。为可能正在寻找解决方法的未来读者发帖,因为通常不可能进行再培训。

  1. 我在 docker 镜像中创建了 /home/.cache/torch/transformer/。
RUN mkdir -p /home/<username>/.cache/torch/transformers
  1. 将文件(未在 docker 中找到)从我的本地 /home/.cache/torch/transformer/ 复制到 docker image /home/.cache/torch/transformer/
 COPY filename:/home/<username>/.cache/torch/transformers/filename

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 2021-12-05
    • 2021-01-08
    • 2017-09-01
    • 2020-12-15
    • 1970-01-01
    • 2020-11-21
    • 2022-11-08
    • 1970-01-01
    相关资源
    最近更新 更多