opensearch-docs-cn/_ml-commons-plugin/api.md

19 KiB

layout title has_children nav_order
default API false 99

ML Commons API


Table of contents

  • TOC {:toc}

The Machine Learning (ML) commons API lets you create, train, and store machine learning algorithms both synchronously and asynchronously.

In order to train tasks through the API, three inputs are required.

  • Algorithm name: Usually FunctionaName. This determines what algorithm the ML Engine runs.
  • Model hyper parameters: Adjust these parameters to make the model train better. You can also implement MLAgoParamas to build custom parameters for each model.
  • Input data: The data input that teaches the ML model. To input data, query against your index or use data frame.

Train model

Training can occur both synchronously and asynchronously.

Request

The following examples use the kmeans algorithm to train index data.

Train with kmeans synchronously

POST /_plugins/_ml/_train/kmeans
{
    "parameters": {
        "centroids": 3,
        "iterations": 10,
        "distance_type": "COSINE"
    },
    "input_query": {
        "_source": ["petal_length_in_cm", "petal_width_in_cm"],
        "size": 10000
    },
    "input_index": [
        "iris_data"
    ]
}

Train with kmeans asynchronously

POST /_plugins/_ml/_train/kmeans?async=true
{
    "parameters": {
        "centroids": 3,
        "iterations": 10,
        "distance_type": "COSINE"
    },
    "input_query": {
        "_source": ["petal_length_in_cm", "petal_width_in_cm"],
        "size": 10000
    },
    "input_index": [
        "iris_data"
    ]
}

Response

Synchronously

For synchronous responses, the API returns the model_id, which can be used to get info or modify the model.

{
  "model_id" : "lblVmX8BO5w8y8RaYYvN",
  "status" : "COMPLETED"
}

Asynchronously

For asynchronous responses, the API returns the task_id, which can be used to get info or modify a task.

{
  "task_id" : "lrlamX8BO5w8y8Ra2otd",
  "status" : "CREATED"
}

Get model information

You can retrieve information on your model using the model_id.

GET /_plugins/_ml/models/<model-id>

Response

The API returns information on the model, the algorithm used, and the content found within the model.

{
  "name" : "KMEANS",
  "algorithm" : "KMEANS",
  "version" : 1,
  "content" : ""
}

Get task information

You can retrieve information about a task using the task_id.

GET /_plugins/_ml/tasks/<task_id>

Response

The response includes information about the task.

{
  "model_id" : "l7lamX8BO5w8y8Ra2oty",
  "task_type" : "TRAINING",
  "function_name" : "KMEANS",
  "state" : "COMPLETED",
  "input_type" : "SEARCH_QUERY",
  "worker_node" : "54xOe0w8Qjyze00UuLDfdA",
  "create_time" : 1647545342556,
  "last_update_time" : 1647545342587,
  "is_async" : true
}

Predict

ML commons can predict new data with your trained model either from indexed data or a data frame.

POST /_plugins/_ml/_predict/<algorithm_name>/<model_id>

Request

POST /_plugins/_ml/_predict/kmeans/<model-id>
{
    "input_query": {
        "_source": ["petal_length_in_cm", "petal_width_in_cm"],
        "size": 10000
    },
    "input_index": [
        "iris_data"
    ]
}

Response

{
  "status" : "COMPLETED",
  "prediction_result" : {
    "column_metas" : [
      {
        "name" : "ClusterID",
        "column_type" : "INTEGER"
      }
    ],
    "rows" : [
      {
        "values" : [
          {
            "column_type" : "INTEGER",
            "value" : 1
          }
        ]
      },
      {
        "values" : [
          {
            "column_type" : "INTEGER",
            "value" : 1
          }
        ]
      },
      {
        "values" : [
          {
            "column_type" : "INTEGER",
            "value" : 0
          }
        ]
      },
      {
        "values" : [
          {
            "column_type" : "INTEGER",
            "value" : 0
          }
        ]
      },
      {
        "values" : [
          {
            "column_type" : "INTEGER",
            "value" : 0
          }
        ]
      },
      {
        "values" : [
          {
            "column_type" : "INTEGER",
            "value" : 0
          }
        ]
      }
    ]
  }

Train and Predict

Use to train and then immediately predict against the same training data set. Can only be used with synchronous models and the kmeans algorithm.

Example: Train and predict with Indexed data

POST /_plugins/_ml/_train_predict/kmeans
{
    "parameters": {
        "centroids": 2,
        "iterations": 10,
        "distance_type": "COSINE"
    },
    "input_query": {
        "query": {
            "bool": {
                "filter": [
                    {
                        "range": {
                            "k1": {
                                "gte": 0
                            }
                        }
                    }
                ]
            }
        },
        "size": 10
    },
    "input_index": [
        "test_data"
    ]
}

Example: Train and predict with data directly

POST /_plugins/_ml/_train_predict/kmeans
{
    "parameters": {
        "centroids": 2,
        "iterations": 1,
        "distance_type": "EUCLIDEAN"
    },
    "input_data": {
        "column_metas": [
            {
                "name": "k1",
                "column_type": "DOUBLE"
            },
            {
                "name": "k2",
                "column_type": "DOUBLE"
            }
        ],
        "rows": [
            {
                "values": [
                    {
                        "column_type": "DOUBLE",
                        "value": 1.00
                    },
                    {
                        "column_type": "DOUBLE",
                        "value": 2.00
                    }
                ]
            },
            {
                "values": [
                    {
                        "column_type": "DOUBLE",
                        "value": 1.00
                    },
                    {
                        "column_type": "DOUBLE",
                        "value": 4.00
                    }
                ]
            },
            {
                "values": [
                    {
                        "column_type": "DOUBLE",
                        "value": 1.00
                    },
                    {
                        "column_type": "DOUBLE",
                        "value": 0.00
                    }
                ]
            },
            {
                "values": [
                    {
                        "column_type": "DOUBLE",
                        "value": 10.00
                    },
                    {
                        "column_type": "DOUBLE",
                        "value": 2.00
                    }
                ]
            },
            {
                "values": [
                    {
                        "column_type": "DOUBLE",
                        "value": 10.00
                    },
                    {
                        "column_type": "DOUBLE",
                        "value": 4.00
                    }
                ]
            },
            {
                "values": [
                    {
                        "column_type": "DOUBLE",
                        "value": 10.00
                    },
                    {
                        "column_type": "DOUBLE",
                        "value": 0.00
                    }
                ]
            }
        ]
    }
}

Response

Response for index data

{
  "status" : "COMPLETED",
  "prediction_result" : {
    "column_metas" : [
      {
        "name" : "ClusterID",
        "column_type" : "INTEGER"
      }
    ],
    "rows" : [
      {
        "values" : [
          {
            "column_type" : "INTEGER",
            "value" : 0
          }
        ]
      },
      {
        "values" : [
          {
            "column_type" : "INTEGER",
            "value" : 0
          }
        ]
      },
      {
        "values" : [
          {
            "column_type" : "INTEGER",
            "value" : 0
          }
        ]
      },
      {
        "values" : [
          {
            "column_type" : "INTEGER",
            "value" : 0
          }
        ]
      },
      {
        "values" : [
          {
            "column_type" : "INTEGER",
            "value" : 0
          }
        ]
      },
      {
        "values" : [
          {
            "column_type" : "INTEGER",
            "value" : 0
          }
        ]
      }
    ]
  }
}

Response for data input directly

{
  "status" : "COMPLETED",
  "prediction_result" : {
    "column_metas" : [
      {
        "name" : "score",
        "column_type" : "DOUBLE"
      },
      {
        "name" : "anomaly_grade",
        "column_type" : "DOUBLE"
      },
      {
        "name" : "timestamp",
        "column_type" : "LONG"
      }
    ],
    "rows" : [
      {
        "values" : [
          {
            "column_type" : "DOUBLE",
            "value" : 0.0
          },
          {
            "column_type" : "DOUBLE",
            "value" : 0.0
          },
          {
            "column_type" : "LONG",
            "value" : 1404187200000
          }
        ]
      },
      ...
    ]
  }
}

Execute

Use the Execute API to run no-model-based algorithms. You do not need to train a model in order to receive results from your chosen algorithm.

POST _plugins/_ml/_execute/<algorithm_name>

Example: Execute sample calculator, supported "operation": max/min/sum

POST _plugins/_ml/_execute/local_sample_calculator
{
    "operation": "max",
    "input_data": [1.0, 2.0, 3.0]
}

Example: Execute anomaly localization

POST /_plugins/_ml/_execute/anomaly_localization
{
  "index_name": "rca-index",
  "attribute_field_names": [
    "attribute"
  ],
  "aggregations": [
    {
      "sum": {
        "sum": {
          "field": "value"
        }
      }
    }
  ],
  "time_field_name": "timestamp",
  "start_time": 1620630000000,
  "end_time": 1621234800000,
  "min_time_interval": 86400000,
  "num_outputs": 2
}

Response

Sample calculator response

{
  "sample_result" : 3.0
}

Sample anomaly response

{
  "results" : [
    {
      "name" : "sum",
      "result" : {
        "buckets" : [
          {
            "start_time" : 1620630000000,
            "end_time" : 1620716400000,
            "overall_aggregate_value" : 65.0
          },
          {
            "start_time" : 1620716400000,
            "end_time" : 1620802800000,
            "overall_aggregate_value" : 75.0,
            "entities" : [
              {
                "key" : [
                  "attr0"
                ],
                "contribution_value" : 1.0,
                "base_value" : 2.0,
                "new_value" : 3.0
              },
              {
                "key" : [
                  "attr1"
                ],
                "contribution_value" : 1.0,
                "base_value" : 3.0,
                "new_value" : 4.0
              }
            ]
          },
          {
            "start_time" : 1620802800000,
            "end_time" : 1620889200000,
            "overall_aggregate_value" : 85.0,
            "entities" : [
              {
                "key" : [
                  "attr0"
                ],
                "contribution_value" : 2.0,
                "base_value" : 2.0,
                "new_value" : 4.0
              },
              {
                "key" : [
                  "attr1"
                ],
                "contribution_value" : 2.0,
                "base_value" : 3.0,
                "new_value" : 5.0
              }
            ]
          },
          {
            "start_time" : 1620889200000,
            "end_time" : 1620975600000,
            "overall_aggregate_value" : 95.0,
            "entities" : [
              {
                "key" : [
                  "attr0"
                ],
                "contribution_value" : 3.0,
                "base_value" : 2.0,
                "new_value" : 5.0
              },
              {
                "key" : [
                  "attr1"
                ],
                "contribution_value" : 3.0,
                "base_value" : 3.0,
                "new_value" : 6.0
              }
            ]
          },
          {
            "start_time" : 1620975600000,
            "end_time" : 1621062000000,
            "overall_aggregate_value" : 105.0,
            "entities" : [
              {
                "key" : [
                  "attr0"
                ],
                "contribution_value" : 4.0,
                "base_value" : 2.0,
                "new_value" : 6.0
              },
              {
                "key" : [
                  "attr1"
                ],
                "contribution_value" : 4.0,
                "base_value" : 3.0,
                "new_value" : 7.0
              }
            ]
          },
          {
            "start_time" : 1621062000000,
            "end_time" : 1621148400000,
            "overall_aggregate_value" : 115.0,
            "entities" : [
              {
                "key" : [
                  "attr0"
                ],
                "contribution_value" : 5.0,
                "base_value" : 2.0,
                "new_value" : 7.0
              },
              {
                "key" : [
                  "attr1"
                ],
                "contribution_value" : 5.0,
                "base_value" : 3.0,
                "new_value" : 8.0
              }
            ]
          },
          {
            "start_time" : 1621148400000,
            "end_time" : 1621234800000,
            "overall_aggregate_value" : 125.0,
            "entities" : [
              {
                "key" : [
                  "attr0"
                ],
                "contribution_value" : 6.0,
                "base_value" : 2.0,
                "new_value" : 8.0
              },
              {
                "key" : [
                  "attr1"
                ],
                "contribution_value" : 6.0,
                "base_value" : 3.0,
                "new_value" : 9.0
              }
            ]
          }
        ]
      }
    }
  ]
}

Search model

Use this command to search models you're already created.

POST /_plugins/_ml/models/_search
{query}

Example 1: Query all models

POST /_plugins/_ml/models/_search
{
  "query": {
    "match_all": {}
  },
  "size": 1000
}

Example 2: Query models with algorithm "BATCh_RCF"

POST /_plugins/_ml/models/_search
{
  "query": {
    "term": {
      "algorithm": {
        "value": "BATCH_RCF"
      }
    }
  }
}

Response

{
    "took" : 8,
    "timed_out" : false,
    "_shards" : {
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
    },
    "hits" : {
      "total" : {
        "value" : 2,
        "relation" : "eq"
      },
      "max_score" : 2.4159138,
      "hits" : [
        {
          "_index" : ".plugins-ml-model",
          "_type" : "_doc",
          "_id" : "-QkKJX8BvytMh9aUeuLD",
          "_version" : 1,
          "_seq_no" : 12,
          "_primary_term" : 15,
          "_score" : 2.4159138,
          "_source" : {
            "name" : "FIT_RCF",
            "version" : 1,
            "content" : "xxx",
            "algorithm" : "FIT_RCF"
          }
        },
        {
          "_index" : ".plugins-ml-model",
          "_type" : "_doc",
          "_id" : "OxkvHn8BNJ65KnIpck8x",
          "_version" : 1,
          "_seq_no" : 2,
          "_primary_term" : 8,
          "_score" : 2.4159138,
          "_source" : {
            "name" : "FIT_RCF",
            "version" : 1,
            "content" : "xxx",
            "algorithm" : "FIT_RCF"
          }
        }
      ]
    }
  }

Delete task

Delete a task based on the task_id.

DELETE /_plugins/_ml/tasks/{task_id}

Response

{
  "_index" : ".plugins-ml-task",
  "_type" : "_doc",
  "_id" : "xQRYLX8BydmmU1x6nuD3",
  "_version" : 4,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 42,
  "_primary_term" : 7
}

Search task

Search tasks based on parameters indicated in the request body.

GET /_plugins/_ml/tasks/_search
{query body}

Example: Search task which "function_name" is "KMEANS"

GET /_plugins/_ml/tasks/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "function_name": "KMEANS"
          }
        }
      ]
    }
  }
}
{
  "took" : 12,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.0,
    "hits" : [
      {
        "_index" : ".plugins-ml-task",
        "_type" : "_doc",
        "_id" : "_wnLJ38BvytMh9aUi-Ia",
        "_version" : 4,
        "_seq_no" : 29,
        "_primary_term" : 4,
        "_score" : 0.0,
        "_source" : {
          "last_update_time" : 1645640125267,
          "create_time" : 1645640125209,
          "is_async" : true,
          "function_name" : "KMEANS",
          "input_type" : "SEARCH_QUERY",
          "worker_node" : "jjqFrlW7QWmni1tRnb_7Dg",
          "state" : "COMPLETED",
          "model_id" : "AAnLJ38BvytMh9aUi-M2",
          "task_type" : "TRAINING"
        }
      },
      {
        "_index" : ".plugins-ml-task",
        "_type" : "_doc",
        "_id" : "wwRRLX8BydmmU1x6I-AI",
        "_version" : 3,
        "_seq_no" : 38,
        "_primary_term" : 7,
        "_score" : 0.0,
        "_source" : {
          "last_update_time" : 1645732766656,
          "create_time" : 1645732766472,
          "is_async" : true,
          "function_name" : "KMEANS",
          "input_type" : "SEARCH_QUERY",
          "worker_node" : "A_IiqoloTDK01uZvCjREaA",
          "state" : "COMPLETED",
          "model_id" : "xARRLX8BydmmU1x6I-CG",
          "task_type" : "TRAINING"
        }
      }
    ]
  }
}

Stats

Get statistics related to the number of tasks.

To receive all stats, use:

GET /_plugins/_ml/stats

To receive stats for a specific node, use:

GET /_plugins/_ml/<nodeId>/stats/

To receive starts for a specific node and return a specified stat, use:

GET /_plugins/_ml/<nodeId>/stats/<stat>

To receive information on a specific stat from all nodes, use:

GET /_plugins/_ml/stats/<stat>

Example: Get all stats

GET /_plugins/_ml/stats

Response

{
  "zbduvgCCSOeu6cfbQhTpnQ" : {
    "ml_executing_task_count" : 0
  },
  "54xOe0w8Qjyze00UuLDfdA" : {
    "ml_executing_task_count" : 0
  },
  "UJiykI7bTKiCpR-rqLYHyw" : {
    "ml_executing_task_count" : 0
  },
  "zj2_NgIbTP-StNlGZJlxdg" : {
    "ml_executing_task_count" : 0
  },
  "jjqFrlW7QWmni1tRnb_7Dg" : {
    "ml_executing_task_count" : 0
  },
  "3pSSjl5PSVqzv5-hBdFqyA" : {
    "ml_executing_task_count" : 0
  },
  "A_IiqoloTDK01uZvCjREaA" : {
    "ml_executing_task_count" : 0
  }
}