動機
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
を実行できます。