KibanaのMLアイテム(Job, Trained Model)のスペース間共有 #機械学習 - Qiita

ElasticsearchのMLとKibanaのSaved Object

Elasticsearchでは機械学習(ML)関連の機能をいくつか提供しています。

  • Anomaly Detection(異常検知)
  • Data Frame Analytics(データフレーム分析)
  • Trained Models (自然言語モデルのアップロードなど。ELSERやE5なども含む。)

基本的にこれらのMLの機能はElasticsearchが(Kibanaとは独立して)提供しています。

ただし、例えばKibana上からAnomaly Detectionジョブを作成すると、そのジョブは作成した時のKibana Spaceに紐づいた状態となります。複数のSpaceがある環境の場合、Spaceを切り替えると元のSpaceで作成したジョブは見えなくなるはずです。

これはKibanaがJobを作成する場合、直接ElasticsearchのML関連のデータを参照するのではなく、KibanaのSaved Objectを介して参照しているためです。このデータ構造については以下の記事でも紹介しました。

Saved Objectの検索

KibanaのSaved Objectは.kibanaというシステムインデックス(エイリアス)に保存されています。私の環境では.kibana_8.11.1_001が実インデックスとして使われていました。これらのインデックスは、KibanaのSaved Objectを管理するためのもので、通常は直接操作することはありませんが、実際のデータ構造を理解するために、直接検索することは可能です。(現時点では。今後変わる可能性はあります。8系で試していますが、9.0でもまだアクセスできることは確認しました。)

.kibanaインデックスではtypeフィールドにSaved Objectの種類を示す値が格納されています。これを使って、特定のSaved Objectを検索することができます。

ML関連のSaved Objectのtypeは以下のようになっています。

  • Anomaly Detection, Data Frame Analytics : ml-job
  • Trained Models : ml-trained-model

ml-trained-modelのSaved Objectを検索してみましょう。

GET .kibana/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "type": {
              "value": "ml-trained-model"
            }
          }
        }
      ]
    }
  }
}

以下のような内容が取得できます。

{
    "_index": ".kibana_8.11.1_001",
    "_id": "ml-trained-model:tohoku-nlp__bert-base-japanese-v3",
    "_score": 0,
    "_source": {
        "ml-trained-model": {
            "model_id": "tohoku-nlp__bert-base-japanese-v3",
            "job": null
        },
        "type": "ml-trained-model",
        "references": [],
        "managed": false,
        "namespaces": [
            "default"
        ],
        "coreMigrationVersion": "8.8.0",
        "typeMigrationVersion": "7.10.0",
        "updated_at": "2024-02-27T06:50:32.951Z",
        "created_at": "2024-02-27T06:50:32.951Z"
    }
}

Spaceの関連付けの更新

KibanaのSaved Objectは、Spaceに関連付けられた状態で保存されます。これを更新するには、Update saved objects in spaces API を使用します。このAPIを使用すると、特定のSaved Objectを指定したSpaceに追加(あるいは削除)することができます。

よくある操作として、アップロードしたモデルを複数のスペースで使いたいというものがあります。KibanaのTrained Modelsの画面上からはできないので、Dev Toolsを利用して以下のようにKibana APIを利用して変更します。

POST kbn:/api/spaces/_update_objects_spaces
{
  "objects": [
    {
      "id": ".elser_model_2_linux-x86_64",
      "type": "ml-trained-model"
    }
  ],
  "spacesToAdd": [
    "default",
    "test"
  ],
  "spacesToRemove": []
}

idにはドキュメントのIDではなく、モデルのid(ml-jobの場合はjob_id)を直接指定します。

このようにKibanaのAPIを利用することで、Saved ObjectのSpaceの関連付けを変更することができます。これにより、特定のSpaceに関連付けられたSaved Objectを他のSpaceでも利用できるようになります。

まとめ

ElasticsearchのML関連の機能は、KibanaのSaved Objectを介してSpaceに関連付けられています。これを変更するためには、KibanaのUpdate saved objects in spaces API を利用します。

特定のスペースで作成したML関連のオブジェクトを他のスペースで利用したい場合には、この記事を参考にしてください。



フラッグシティパートナーズ海外不動産投資セミナー 【DMM FX】入金

Source link