机器学习API

edit

您可以使用以下API来检索与Elastic Stack机器学习功能相关的信息:

以下API在您升级时非常有用:

另请参阅 机器学习异常检测API, 机器学习数据框分析API, 和 机器学习训练模型API.

获取机器学习信息 API

edit

返回机器学习使用的默认值和限制。

请求

edit

GET _ml/info

先决条件

edit

需要 monitor_ml 集群权限。此权限包含在 machine_learning_user 内置角色中。

描述

edit

此端点旨在供需要完全理解机器学习配置的用户界面使用,其中某些选项未指定,这意味着应使用默认值。此端点可用于查找这些默认值。它还提供了有关当前集群配置中可以运行的机器学习作业最大大小的信息。

示例

edit

该端点不接受任何参数:

GET _ml/info

这是一个可能的响应:

{
  "defaults" : {
    "anomaly_detectors" : {
      "categorization_analyzer" : {
        "char_filter" : [
          "first_line_with_letters"
        ],
        "tokenizer" : "ml_standard",
        "filter" : [
          {
            "type" : "stop",
            "stopwords" : [
              "Monday",
              "Tuesday",
              "Wednesday",
              "Thursday",
              "Friday",
              "Saturday",
              "Sunday",
              "Mon",
              "Tue",
              "Wed",
              "Thu",
              "Fri",
              "Sat",
              "Sun",
              "January",
              "February",
              "March",
              "April",
              "May",
              "June",
              "July",
              "August",
              "September",
              "October",
              "November",
              "December",
              "Jan",
              "Feb",
              "Mar",
              "Apr",
              "May",
              "Jun",
              "Jul",
              "Aug",
              "Sep",
              "Oct",
              "Nov",
              "Dec",
              "GMT",
              "UTC"
            ]
          },
          {
            "type": "limit",
            "max_token_count": "100"
          }
        ]
      },
      "model_memory_limit" : "1gb",
      "categorization_examples_limit" : 4,
      "model_snapshot_retention_days" : 10,
      "daily_model_snapshot_retention_after_days" : 1
    },
    "datafeeds" : {
      "scroll_size" : 1000
    }
  },
  "upgrade_mode": false,
  "native_code" : {
    "version": "7.0.0",
    "build_hash": "99a07c016d5a73"
  },
  "limits" : {
    "effective_max_model_memory_limit": "28961mb",
    "total_ml_memory": "86883mb",
    "total_ml_processors": 16,
    "max_single_ml_node_processors": 16
  }
}

获取机器学习内存统计信息API

edit

返回有关机器学习如何使用内存的信息。

请求

edit

GET _ml/memory/_stats
GET _ml/memory//_stats

先决条件

edit

需要 monitor_ml 集群权限。此权限包含在 machine_learning_user 内置角色中。

描述

edit

获取有关机器学习作业和训练模型如何在每个节点上使用内存的信息,包括在JVM堆内和JVM外的原生使用情况。

路径参数

edit
<node_id>
(可选,字符串) 集群中特定节点的名称,用于指定目标节点。 例如,nodeId1,nodeId2ml:true。有关节点选择选项, 请参阅 节点规范

查询参数

edit
human
指定此查询参数以在响应中包含带单位的字段。 否则,响应中仅返回_in_bytes大小的字段。
master_timeout
(可选,时间单位) 等待主节点的时间段。如果在超时到期之前主节点不可用,请求将失败并返回错误。默认为30s。 也可以设置为-1,表示请求不应超时。
timeout
(可选,时间单位) 在更新集群元数据后,等待集群中所有相关节点响应的时间段。 如果在超时到期之前未收到响应,集群元数据更新仍然适用,但响应将表明它未被完全确认。 默认为 30s。 也可以设置为 -1 以指示请求不应超时。

响应体

edit
_nodes

(对象) 包含关于请求选择的节点数量的统计信息。

Properties of _nodes
failed
(整数) 拒绝请求或未能响应的节点数量。如果此值不为0,响应中会包含拒绝或失败的原因。
successful
(整数) 成功响应请求的节点数量。
total
(整数) 请求选择的节点总数。
cluster_name
(字符串) 集群的名称。基于cluster.name设置。
nodes

(对象) 包含请求选择的节点的统计信息。

Properties of nodes

(对象) 包含节点的统计信息。

Properties of
attributes
(对象) 列出节点的属性,如 ml.machine_memoryml.max_open_jobs 设置。
ephemeral_id
(字符串) 节点的临时ID。
jvm

(对象) 包含节点的Java虚拟机(JVM)统计信息。

Properties of jvm
heap_max
(字节值) 堆可用的最大内存量。
heap_max_in_bytes
(整数) 堆可用的最大内存量,以字节为单位。
java_inference
(字节值) 当前用于缓存推理模型的Java堆量。
java_inference_in_bytes
(整数) 当前用于缓存推理模型的Java堆量,以字节为单位。
java_inference_max
(字节值) 用于缓存推理模型的Java堆的最大量。
java_inference_max_in_bytes
(整数) 用于缓存推理模型的Java堆的最大量,以字节为单位。
mem

(对象) 包含关于节点内存使用情况的统计信息。

Properties of mem
adjusted_total
(字节值) 如果使用 es.total_memory_bytes 系统属性覆盖了物理内存量,则报告覆盖的值。否则,它报告与 total 相同的值。
adjusted_total_in_bytes
(整数) 如果使用 es.total_memory_bytes 系统属性覆盖了物理内存量,则以字节为单位报告覆盖的值。否则,它报告与 total_in_bytes 相同的值。
ml

(对象) 包含关于节点上机器学习使用本机内存的统计信息。

Properties of ml
anomaly_detectors
(字节值) 为异常检测作业预留的本机内存量。
anomaly_detectors_in_bytes
(整数) 为异常检测作业预留的本机内存量,以字节为单位。
data_frame_analytics
(字节值) 为数据框分析作业预留的本机内存量。
data_frame_analytics_in_bytes
(整数) 为数据框分析作业预留的本机内存量,以字节为单位。
max
(字节值) 机器学习本机进程可能使用的最大本机内存量(与JVM堆分开)。
max_in_bytes
(整数) 机器学习本机进程可能使用的最大本机内存量(与JVM堆分开),以字节为单位。
native_code_overhead
(字节值) 为加载机器学习本机代码共享库预留的本机内存量。
native_code_overhead_in_bytes
(整数) 为加载机器学习本机代码共享库预留的本机内存量,以字节为单位。
native_inference
(字节值) 为具有PyTorch model_type 的训练模型预留的本机内存量。
native_inference_in_bytes
(整数) 为具有PyTorch model_type 的训练模型预留的本机内存量,以字节为单位。
total
(字节值) 物理内存总量。
total_in_bytes
(整数) 物理内存总量,以字节为单位。
name
(字符串) 节点的可读标识符。基于 节点名称设置
roles
(字符串数组) 分配给节点的角色。参见 节点
transport_address
(字符串) 接受传输HTTP连接的主机和端口。

示例

edit
GET _ml/memory/_stats?human

这是一个可能的响应:

{
  "_nodes": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "cluster_name": "my_cluster",
  "nodes": {
    "pQHNt5rXTTWNvUgOrdynKg": {
      "name": "node-0",
      "ephemeral_id": "ITZ6WGZnSqqeT_unfit2SQ",
      "transport_address": "127.0.0.1:9300",
      "attributes": {
        "ml.machine_memory": "68719476736",
        "ml.max_jvm_size": "536870912"
      },
      "roles": [
        "data",
        "data_cold",
        "data_content",
        "data_frozen",
        "data_hot",
        "data_warm",
        "ingest",
        "master",
        "ml",
        "remote_cluster_client",
        "transform"
      ],
      "mem": {
        "total": "64gb",
        "total_in_bytes": 68719476736,
        "adjusted_total": "64gb",
        "adjusted_total_in_bytes": 68719476736,
        "ml": {
          "max": "19.1gb",
          "max_in_bytes": 20615843020,
          "native_code_overhead": "0b",
          "native_code_overhead_in_bytes": 0,
          "anomaly_detectors": "0b",
          "anomaly_detectors_in_bytes": 0,
          "data_frame_analytics": "0b",
          "data_frame_analytics_in_bytes": 0,
          "native_inference": "0b",
          "native_inference_in_bytes": 0
        }
      },
      "jvm": {
        "heap_max": "512mb",
        "heap_max_in_bytes": 536870912,
        "java_inference_max": "204.7mb",
        "java_inference_max_in_bytes": 214748364,
        "java_inference": "0b",
        "java_inference_in_bytes": 0
      }
    }
  }
}

设置升级模式 API

edit

设置一个集群范围的 upgrade_mode 设置,为机器学习索引准备升级。

请求

edit

POST _ml/set_upgrade_mode

先决条件

edit

需要 manage_ml 集群权限。此权限包含在 machine_learning_admin 内置角色中。

描述

edit

在升级集群时,在某些情况下,您必须重启节点并重新索引机器学习索引。在这些情况下,不能有机器学习作业在运行。您可以关闭机器学习作业,进行升级,然后再次打开所有作业。或者,您可以使用此API临时停止与作业和数据馈送相关的任务,并防止新作业打开。在不需要重新索引机器学习索引的升级过程中,您也可以使用此API,尽管在这种情况下停止作业并不是必需的。

更多信息,请参阅升级Elastic Stack

enabled=true时,此API会暂时停止所有作业和数据馈送任务,并禁止新的作业和数据馈送任务启动。

随后,您可以调用API并将enabled参数设置为false,这将使机器学习作业和数据馈送返回到其期望状态。

您可以通过使用获取机器学习信息API来查看当前的upgrade_mode设置值。

upgrade_mode 设置为 true 时,无法开启新的机器学习任务。

查询参数

edit
enabled
(可选,布尔值) 当 true 时,启用 upgrade_mode。默认为 false
timeout
(可选,时间) 等待请求完成的时间。默认值为30秒。

示例

edit

以下示例为集群启用了upgrade_mode

POST _ml/set_upgrade_mode?enabled=true&timeout=10m

当调用成功时,会返回一个确认的响应。例如:

{
  "acknowledged": true
}

确认的响应只有在所有机器学习作业和数据馈送完成向机器学习内部索引写入后才会返回。这意味着在重新索引这些内部索引时不会导致失败。在重新索引之前,您必须等待确认的响应,以确保所有写入操作都已完成。

当升级完成后,您必须将 upgrade_mode 设置为 false,以便机器学习作业能够重新开始运行。例如:

POST _ml/set_upgrade_mode?enabled=false&timeout=10m