0
0

More than 1 year has passed since last update.

Pythonモジュール(eland)のソース(CLI)をローカルでインストールしないで動かす

Posted at

動機

ElasticではelandというML周りのPythonライブラリを提供していて、例えばsklearnで作成したデータフレーム分析モデルをElasticsearchにアップロードしたりできます。同様にNLPのモデルをHugging FaceからダウンロードしてElasticsearchにアップロードするためのCLIツール eland_import_hub_model もこのライブラリにバンドルされています。

最近この eland_import_hub_model日本語のモデルに対応させようと思ってコードに手を入れていたのですが、その際に変更したツールをローカルで動作させるための方法がわからなかったのでメモしておこうと思います。同様にVSCodeでデバッグ実行する方法についても記載します。

例題としてelandを取り上げていますが、基本的にPython一般の話です。

PYTHONPATHを使った実行

まずはgithubからコードをcloneします。

$ git clone git@github.com:elastic/eland.git

完了したらcloneしてできたディレクトリでbin/eland_import_hub_modelを実行すると、以下のような結果になります。

$ cd eland
$ bin/eland_import_hub_model -h
2023-05-03 10:44:51,912 ERROR : Failed to run because module 'eland' is not available.

カレントディレクトリにあるelandディレクトリ配下がモジュールパスとして認識されていないようです。Pythonにモジュールの探索パスを追加するには環境変数PYTHONPATHを使います。

$ export PYTHONPATH=.:$PYTHONPATH
$ bin/eland_import_hub_model -h
usage: eland_import_hub_model [-h] (--url URL | --cloud-id CLOUD_ID) --hub-model-id HUB_MODEL_ID [--es-model-id ES_MODEL_ID] [-u ES_USERNAME]
                              [-p ES_PASSWORD] [--es-api-key ES_API_KEY]
                              [--task-type {text_embedding,text_expansion,zero_shot_classification,pass_through,question_answering,ner,text_similarity,fill_mask,text_classification}]
                              [--quantize] [--start] [--clear-previous] [--insecure] [--ca-certs CA_CERTS]
...

エラーなく実行できました。これでコードを変更してもpip installなどをせずに実行できます。

VSCodeからデバッグ実行する

コードを変更して動かしたりするときはなるべくデバッグ実行する環境が欲しいですね。今回はVSCodeで実行しようと思います。

コマンドラインからeland_import_hub_modelを実行する場合は以下のような使い方になります。

eland_import_hub_model \
--url http://elastic:password@localhost:9200 \
--hub-model-id cl-tohoku/bert-base-japanese-v2 \
--task-type text_embedding \
--clear-previous \
--start

先述の環境変数を設定しつつ、このようなコマンド引数を与えて実行するには、VSCodeのlaunch.jsonに以下のように記載します。

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "import bert-base-japanese-v2",
      "type": "python",
      "request": "launch",
      "program": "${workspaceFolder}/bin/eland_import_hub_model",
      "console": "integratedTerminal",
      "justMyCode": true,
      "args": [
        "--url=http://elastic:password@localhost:9200",
        "--hub-model-id=cl-tohoku/bert-base-japanese-v2",
        "--task-type=text_embedding",
        "--clear-previous",
        "--start"
      ],
      "env": {
        "PYTHONPATH": ".:$PYTHONPATH"
      }
    }
  ]
}

見てわかる通り環境変数はenvに、コマンド引数はargsに素直に設定すればOKです。またプログラムの実行パスはトップディレクトリを${workspaceFolder}として指定できます。

そうするとVSCodeのビルドタブで実行のプルダウンに今設定したimport bert-base-japanese-v2という構成が選択できるようになっているので、これを選んで実行するとブレイクポイントやステップ実行などが可能な状態で当該のeland_import_hub_modelを実行できます。

image.png

0
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
0
0