在AWS Lambda上部署Spacy时出现的问题的根本原因是什么?

128次阅读
没有评论

问题描述

在按照指南(https://towardsdatascience.com/quickstart-spacy-on-aws-lambda-up-and-running-in-10-minutes-e347037a0ef8)的步骤进行操作时,使用最新的来自https://github.com/keithrozario/Klayers的layers。在测试时,出现以下错误:

OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k
/opt/python/spacy/util.py:1538: SyntaxWarning: "is" with a literal. Did you mean "=="?
if val is True or val is 1:
/opt/python/spacy/util.py:1540: SyntaxWarning: "is" with a literal. Did you mean "=="?
elif val is None or val is 0:
START RequestId: addae27b-24ac-4137-b191-067deb298022 Version: $LATEST
/opt/python/spacy/util.py:717: UserWarning: [W094] Model 'en_core_web_sm' (2.2.5) specifies an under-constrained spaCy version requirement: >=2.2.2. This can lead to compatibility problems with older versions, or as new spaCy versions are released, because the model may say it's compatible when it's not. Consider changing the "spacy_version" in your meta.json to a version range, with a lower and upper pin. For example: >=3.0.6,<3.1.0
warnings.warn(warn_msg)
[ERROR] OSError: [E053] Could not read config.cfg from /opt/en_core_web_sm-2.2.5/en_core_web_sm/en_core_web_sm-2.2.5/config.cfg
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 4, in lambda_handler
    nlp = spacy.load("/opt/en_core_web_sm-2.2.5/en_core_web_sm/en_core_web_sm-2.2.5")
  File "/opt/python/spacy/__init__.py", line 50, in load
    return util.load_model(
  File "/opt/python/spacy/util.py", line 326, in load_model
    return load_model_from_path(Path(name), **kwargs)
  File "/opt/python/spacy/util.py", line 390, in load_model_from_path
    config = load_config(config_path, overrides=dict_to_dot(config))
  File "/opt/python/spacy/util.py", line 547, in load_config
    raise IOError(Errors.E053.format(path=config_path, name="config.cfg"))
END RequestId: addae27b-24ac-4137-b191-067deb298022
REPORT RequestId: addae27b-24ac-4137-b191-067deb298022  Duration: 5.02 ms   Billed Duration: 6 ms   Memory Size: 1024 MB    Max Memory Used: 124 MB Init Duration: 2087.99 ms

用户在搜索此错误时找到的非常有限的信息是函数可能需要更多的内存。用户尝试增加内存,但不确定是否是问题所在。
运行函数时的附加信息:

Init duration2087.99 ms
Duration5.02 ms
Billed duration6 ms
Resources configured1024 MB
Max memory used124 MB

用户还尝试了不同的模型路径,但只有以下路径没有给出“找不到模型”的错误,所以用户认为这是正确的路径。
函数代码:

import json
import spacy

def lambda_handler(event, context):
    nlp = spacy.load("/opt/en_core_web_sm-2.2.5/en_core_web_sm/en_core_web_sm-2.2.5")
    doc = nlp("Hello World from spaCy")
    return {
        'statusCode': 200,
        'body': json.dumps(doc.text)
    }

用户想知道是否还有其他尝试的方法。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据错误信息,问题可能出现在以下几个方面:
1. OpenBLAS警告:这个警告是关于无法确定系统上的L2缓存大小,但是假设为256k。这个警告通常不会导致问题,可以忽略。
2. 语法警告:这些警告是关于使用了字面值的”is”,是否意味着”==”。这些警告可以通过将”is”更改为”==”来解决。
3. UserWarning:这个警告是关于模型的spaCy版本要求不明确,可能会导致与旧版本的兼容性问题。可以通过在meta.json中更改”spacy_version”为一个版本范围来解决。
4. OSError:这个错误是关于无法从config.cfg中读取配置文件。这可能是由于模型路径不正确导致的。确保模型路径正确,并且模型文件夹中包含config.cfg文件。

根据以上分析,以下是解决问题的步骤:
1. 忽略OpenBLAS警告。
2. 将语法警告中的”is”更改为”==”。
3. 在meta.json中将”spacy_version”更改为一个版本范围。
4. 确保模型路径正确,并且模型文件夹中包含config.cfg文件。

请注意,如果问题仍然存在,可能需要进一步调查和排除其他可能的原因。

方案2

如果方案1无法解决问题,可以尝试使用其他方法来部署Spacy。例如,使用Docker容器或其他云服务来运行Spacy。

以上是解决问题的两种可能方案。如果以上方案都无法解决问题,可能需要进一步调查和排除其他可能的原因。

希望以上解决方案对您有所帮助。如果您有任何其他问题,请随时提问。

正文完