我想在不同的码头容器上运行多个spacy语言模型。我不希望码头映像包含行RUN python -m spacy download en_core_web_lg,因为其他进程可能有不同的语言模型。
我的问题是:是否可以将多个spacy语言模型下载到本地(即en_core_web_lg、en_core_web_md、.),然后在码头容器生成时将这些模型加载到python环境中?
这个过程可能有以下步骤:
python -m spacy download --local ./language_models/en_core_web_lg。希望在于,由于共享卷上已经存在语言模型,因此每个新容器的下载/导入时间都会大大减少。每个容器都不会有不必要的语言模型,Docker映像也不会针对任何语言模型。
发布于 2022-05-30 10:45:32
有两种方法可以做到这一点。
更简单的方法是使用模型目录在Docker中挂载卷,并将其指定为路径。spaCy允许您调用spacy.load("some/path"),因此不需要安装pip。
如果您真的需要使用pip来安装某些东西,您还可以下载压缩模型并安装该文件。然而,在默认情况下,这可能涉及复制它,减少收益。如果您解压缩模型下载和挂载,您可以使用pipe -e (可编辑),这通常用于develpoment。我不建议这样做,但是如果您正在使用import en_core_web_sm或其他什么东西,并且在重构方面有困难,那么它可能就是您想要的。
发布于 2022-05-31 12:44:53
谢谢你的评论@polm23 23!我还有一个额外的复杂性层,因为SpaCy模型最终被用来训练一个Rasa模型。我选择的解决方案是使用以下方法在本地保存模型:
nlp = spacy.load(model)
nlp.to_disk(f'language_models/{model}')然后使用已挂载的卷使特定的模型目录对停靠器容器可见。然后,在Rasa中,您可以使用本地路径导入语言模型。
# Configuration for Rasa NLU.
# https://rasa.com/docs/rasa/nlu/components/
language: "../../language_models/MODEL_NAME"
recipe: default.v1https://stackoverflow.com/questions/72431625
复制相似问题