使用eland导入sentence-transformers模型至Elasticsearch后推理失败
问题描述
使用eland工具将文本嵌入模型sentence-transformers/msmarco-MiniLM-L12-cos-v5导入Elasticsearch后,模型推理功能无法正常运行:
执行的导入命令
eland_import_hub_model --url http://localhost:9200 --hub-model-id sentence-transformers/msmarco-MiniLM-L-12-v3 --task-type text_embedding --start
推理请求及错误响应
发送推理请求:
POST /_ml/trained_models/sentence-transformers__msmarco-minilm-l12-cos-v5/deployment/_infer { "docs": { "text_field": "How is the weather in Jamaica?" } }
返回500错误:
{ "error": { "root_cause": [ { "type": "status_exception", "reason": "Error in inference process: [inference canceled as process is stopping]" } ], "type": "status_exception", "reason": "Error in inference process: [inference canceled as process is stopping]" }, "status": 500 }
Docker日志关键信息
日志显示pytorch_inference/336进程意外终止,触发段错误(si_signo 11),核心错误日志:
2024-05-16 14:47:55 {"@timestamp":"2024-05-16T12:47:55.413Z", "log.level":"ERROR", "message":"[sentence-transformers__msmarco-minilm-l12-cos-v5] pytorch_inference/336 process stopped unexpectedly: Fatal error: 'si_signo 11, si_code: 1, si_errno: 0, address: 0xffffb27ca140, library: /lib/aarch64-linux-gnu/libc.so.6, base: 0xffffb26bd000, normalized address: 0x10d140', version: 8.13.4 (build 8480947324d752)\n", ...}
同时日志提示API路由过时:
[POST /_ml/trained_models/{model_id}/deployment/_infer] is deprecated! Use [POST /_ml/trained_models/{model_id}/_infer] instead.
解决方案
1. 修正推理请求路由
按照日志提示使用最新的推理API路由,替换过时的请求:
POST /_ml/trained_models/sentence-transformers__msmarco-minilm-l12-cos-v5/_infer { "docs": { "text_field": "How is the weather in Jamaica?" } }
2. 解决段错误问题
段错误(si_signo 11)通常由内存访问异常、架构兼容或资源不足导致,尝试以下步骤:
(1)确认模型ID一致性
导入命令中使用的hub-model-id是sentence-transformers/msmarco-MiniLM-L-12-v3,但推理请求的模型ID是sentence-transformers__msmarco-minilm-l12-cos-v5,存在名称不匹配。删除现有模型并重新导入正确的模型:
# 删除错误导入的模型 curl -X DELETE http://localhost:9200/_ml/trained_models/sentence-transformers__msmarco-minilm-l12-cos-v5 # 重新导入目标模型 eland_import_hub_model --url http://localhost:9200 --hub-model-id sentence-transformers/msmarco-MiniLM-L12-cos-v5 --task-type text_embedding --start
(2)检查架构兼容性
日志显示运行环境为aarch64(ARM64)架构,Elasticsearch 8.13.4的PyTorch推理组件在ARM架构上可能存在兼容性问题。尝试:
- 将Elasticsearch升级到最新稳定版本(如8.14.x及以上),新版本通常会修复架构兼容问题
- 确认模型支持ARM64架构,或切换到x86_64环境测试
(3)增加资源配额
PyTorch进程崩溃可能是内存不足导致,调整Docker容器的内存限制:
- 启动Elasticsearch容器时增加内存分配,例如:
docker run -d -m 8g --name es -p 9200:9200 -e "discovery.type=single-node" elasticsearch:8.13.4 - 导入模型时指定内存限制参数:
eland_import_hub_model --url http://localhost:9200 --hub-model-id sentence-transformers/msmarco-MiniLM-L12-cos-v5 --task-type text_embedding --start --memory-limit 4g
(4)验证ML插件状态
确保Elasticsearch已启用xpack.ml功能,在elasticsearch.yml中确认:
xpack.ml.enabled: true
同时确保运行ES的节点满足ML节点的硬件要求(至少4GB内存,支持AVX2指令集的CPU,ARM架构需确认官方支持)。
内容的提问来源于stack exchange,提问作者Likealam
相关产品推荐
相关产品推荐

