已训练模型
当您使用数据帧分析作业执行分类或回归分析时,它会创建一个根据标记数据集进行训练和测试的机器学习模型。当您对已训练模型感到满意时,可以使用它对新数据进行预测。例如,您可以在采集管道的处理器中使用它,或者在搜索查询中的管道聚合中使用它。有关此过程的更多信息,请参阅《监督学习简介》、《分类推理》和《回归》。
在 Kibana 中,您可以在**堆栈管理 (Stack Management)** > **告警与洞察 (Alerts and Insights)** > **机器学习 (Machine Learning)** 和 **机器学习 (Machine Learning)** > **模型管理 (Model Management)** 中查看和管理您的已训练模型。
或者,您可以使用诸如 获取已训练模型 (get trained models) 和 删除已训练模型 (delete trained models) 之类的 API。
“已训练模型”页面上可用的操作取决于模型类型
- 数据帧分析模型:使用**部署模型**来创建推理管道。请参阅“数据帧分析训练的模型”。
- NLP 模型(例如 ELSER 和 E5):从**操作**菜单下载、启动、更新和测试部署。请参阅“部署已训练模型”。
- 重排序模型(例如 Elastic 重排序,从 9.5 版本开始提供):使用**操作**菜单中的**启动部署**和**更新部署**。部署模态框不包含**优化用例 (Optimize for use case)** 选择器(采集、搜索、平衡),因为此优化不适用于重排序模型。
要在管道中部署数据帧分析模型,请导航至主菜单中的 Trained models(已训练模型)页面,或使用 Kibana 中的全局搜索字段。
在列表中找到要部署的模型,然后在 Actions(操作)菜单中点击 Deploy model(部署模型)。
- 创建推理管道,以便能够通过管道对新数据使用该模型。添加名称和描述,或者使用默认值。
- 配置管道处理器或使用默认设置。
- 配置处理写入失败的方式或使用默认设置。
- (可选)通过运行管道模拟来测试管道,以确认其生成预期的结果。
- 检查设置并点击 Create pipeline(创建管道)。
模型已部署,可随时通过推理管道使用。
您还可以提供并非由数据帧分析作业创建但符合相应 JSON 模式的已训练模型。同样,您可以使用第三方模型来执行自然语言处理 (NLP) 任务。如果您想在 Elastic Stack 中使用这些已训练模型,则必须使用 创建已训练模型 API 将它们存储在 Elasticsearch 文档中。有关 NLP 模型的更多信息,请参阅*《部署已训练模型》*。
在 Elasticsearch 中训练的模型是可移植的,可以在集群之间进行传输。当模型在与其用于推理的集群隔离的环境中进行训练时,这特别有用。以下说明展示了如何使用 curl 和 jq 将模型导出为 JSON 并将其导入到另一个集群。
- 给定一个模型*名称*,找到模型 *ID*。您可以使用
curl调用 获取已训练模型 API 来列出所有模型及其 ID。
curl -s -u username:password \
-X GET "https://:9200/_ml/trained_models" \
| jq . -C \
| more
如果您只想显示可用的模型 ID,请使用 jq 选择子集。
curl -s -u username:password \
-X GET "https://:9200/_ml/trained_models" \
| jq -C -r '.trained_model_configs[].model_id'
flights1-1607953694065
flights0-1607953585123
lang_ident_model_1
在此示例中,您将导出 ID 为 flights1-1607953694065 的模型。
- 在命令行中使用
curl,再次使用 获取已训练模型 API 来导出整个模型定义并将其保存到 JSON 文件中。
curl -u username:password \
-X GET "https://:9200/_ml/trained_models/flights1-1607953694065?exclude_generated=true&include=definition&decompress_definition=false" \
| jq '.trained_model_configs[0] | del(.model_id)' \
> flights1.json
一些注意事项
- 导出模型需要使用
curl或类似的工具,该工具可以通过 HTTP 将模型**流式传输**到文件中。如果您使用 Kibana 控制台,由于导出模型的大小,浏览器可能会无响应。 - 请注意导出期间使用的查询参数。这些参数对于以可以稍后再次导入并用于推理的方式导出模型是必需的。
- 您必须将 JSON 对象取消嵌套一层,以仅提取模型定义。您还必须删除现有的模型 ID,以免在再次导入时出现 ID 冲突。您可以使用
jq内联执行这些步骤,或者在下载后使用jq或其他工具对生成的 JSON 文件执行这些步骤。
- 使用
curl将保存的模型导入,将 JSON 文件上传到 创建已训练模型 API。指定 URL 时,您还可以通过 URL 的最后一部分路径将模型 ID 设置为新值。
curl -u username:password \
-H 'Content-Type: application/json' \
-X PUT "https://:9200/_ml/trained_models/flights1-imported" \
--data-binary @flights1.json
- 从 获取已训练模型 API 导出的模型受 Elasticsearch 中 http.max_content_length 全局配置值的大小限制。默认值为
100mb,可能需要根据所导出的模型大小进行增加。 - 可能会发生连接超时,例如,当模型非常大或集群负载过重时。如果需要,您可以增加
curl(例如curl --max-time 600)或您选择的客户端的 超时配置。
如果您还想将数据帧分析作业复制到新集群,可以在 Kibana 的**堆栈管理**应用中导出和导入作业。请参阅《导出和导入机器学习作业》。
即使模型不是由 Elastic 数据帧分析训练的,也可以将其导入到 Elasticsearch 集群中。Eland 支持直接通过其 API 导入模型。有关支持的模型类型以及使用 Eland 导入模型的更多详细信息,请参阅最新的 Eland 文档。