3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KibanaのMLアイテム(Job, Trained Model)のスペース間共有

Posted at

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関連のオブジェクトを他のスペースで利用したい場合には、この記事を参考にしてください。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?