如何在spaCy运行时下载en_core_web_sm模型(AWS Lambda场景)
AWS Lambda 运行时下载spaCy en_core_web_sm模型实现方案
实现原理
利用AWS Lambda自带的/tmp临时可写目录存储模型,冷启动时完成模型下载,热启动复用已下载的模型文件,无需依赖EFS。en_core_web_sm模型压缩包大小约15MB,解压后不超过100MB,完全适配Lambda/tmp目录的存储限制。
前置配置
- 打包Lambda部署包时已引入对应版本的spaCy依赖
- Lambda超时配置调整为≥60秒,预留足够的模型下载时间
- Lambda临时目录
/tmp存储配置≥256MB(默认512MB足够使用)
代码实现示例
import os import spacy from spacy.cli import download # 模型配置,版本需和部署包中的spaCy版本完全匹配 MODEL_NAME = "en_core_web_sm" MODEL_VERSION = "3.7.0" MODEL_TMP_PATH = f"/tmp/{MODEL_NAME}" def load_spacy_model(): # 热启动场景复用已下载的模型,跳过重复下载 if os.path.isdir(MODEL_TMP_PATH): return spacy.load(MODEL_TMP_PATH) # 冷启动场景下载模型 download(f"{MODEL_NAME}=={MODEL_VERSION}", direct=True) # 加载模型后持久化到/tmp目录,供后续热启动使用 nlp = spacy.load(MODEL_NAME) nlp.to_disk(MODEL_TMP_PATH) return nlp def lambda_handler(event, context): # 加载模型 nlp = load_spacy_model() # 业务逻辑示例 text = event.get("text", "") doc = nlp(text) return { "statusCode": 200, "result": { "tokens": [token.text for token in doc], "entities": [(ent.text, ent.label_) for ent in doc.ents] } }
注意事项
- 版本匹配校验:spaCy和对应模型的版本必须完全一致,否则会触发模型加载兼容性错误。比如spaCy 3.7.x版本必须搭配3.7.x版本的en_core_web_sm使用
- 只读目录限制:Lambda除
/tmp外的所有目录均为只读权限,不可修改下载路径到其他位置 - 冷启动优化可选方案:如果业务对冷启动延迟要求较高,可以直接将预下载的模型打包进Lambda部署包,只要部署包解压后总大小不超过250MB的Lambda限制即可,稳定性比运行时下载更高
内容的提问来源于stack exchange,提问作者Vikas Gupta
相关产品推荐
相关产品推荐

