1. 機械学習ワークフロー管理のkedroで開発初期段階の環境を構築する
機械学習分野で開発しているとスクリプトが乱造されてすぐに収拾つかなくなってしまいます。
少しでも生成物を整理したいのでワークフロー管理のkedroを試してみます。
2. 開発初期段階を想定したkedro環境
この記事では開発初期段階を想定したkedro環境開発を目標とします。
ディレクトリやスクリプトがきれいに整理分割されたパイプラインができれば良いのでしょうが開発初期段階からそこを目指すのは違うような気がします。
開発初期段階ではまず動くものを作成して、それからリファクタリングする流れが一般的でしょう。
kedroのチュートリアルはリファクタリング後のきれいすぎる環境に感じました。その前段階のまずは動くものを作成する環境を構築します。
3. 公式のチュートリアルについて
公式のTutorialが充実しているので基本的にはそちらを参照すれば事足りるでしょう。
ただ、Hello World Example は単純すぎるし、Tutorialは最初に触るには複雑すぎます。
この2つの中間ぐらいの単純すぎず複雑過ぎない環境を構築してみます。
4. プロジェクトの処理内容
今回はモデルを構築することではなく環境構築にフォーカスしています。
実現する処理はシンプルです。csvファイルをコピーするだけです。
01_row/test.csv を 02_preprocessed_test.csvにコピーします。
この処理をnodeとpipelineで実現します。
5. 環境構築手順
5.1. venv環境作成
python -m venv venv
source venv/bin/activate
5.2. kedroのインストール
pip install kedro
5.3. kedroプロジェクト作成
プロジェクト概要のconfig.ymlを作成します。
cat <<'EOL' > config.yml
output_dir: .
project_name: trial
repo_name: trial
python_package: trial
include_example: false
EOL
config.ymlを読み込んでプロジェクトを作成します。
kedro new -c ./config.yml
cd trial
5.4. 必要なパッケージのインストール
必要なパッケージをsrc/requirements.txtで定義しkedro installします。
cat <<'EOL' > src/requirements.txt
ipython
pandas
EOL
kedro install
5.5. test.csv作成
cat <<'EOL' > data/01_raw/test.csv
var1, var2
1,a
2,b
EOL
5.6. catalog.yml作成
慣れるまでは少し難し感じますがkedroで一番大事なのはcatalog.ymlだと考えています。詳細は公式のマニュアルを良く読んで理解しましょう。
kedro ipythonを実行するとcatalog.ymlの内容がcatalogオブジェクトとして参照できます。
cat <<'EOL' > conf/base/catalog.yml
test:
type: pandas.CSVDataSet
filepath: data/01_raw/test.csv
preprocessed_test:
type: pandas.CSVDataSet
filepath: data/02_intermediate/preprocessed_test.csv
EOL
5.7. readwrite.py作成
開発の初期段階ということで処理する関数とnodeとpipelineと実行を一つのスクリプトにまとめます。
cat <<'EOL' > src/trial/pipelines/readwrite.py
from kedro.pipeline import node, Pipeline
from kedro.runner import SequentialRunner
def preprocess_test(test):
return test
pipeline = Pipeline(
[
node(
func=preprocess_test,
inputs="test",
outputs="preprocessed_test",
name="preprocessing_test",
),
]
)
SequentialRunner().run(pipeline, catalog=catalog)
EOL
5.8. 実行
kedro ipython
#%load src/trial/pipelines/readwrite.py
6. まとめ
実際に手を動かしたことでkedro環境についての理解が深まりました。
公式のtutorialをなぞるだけでは分からないことも多かったので今後もいろいろ試したいと思います。
最後に今回の処理をまとめたシェルスクリプトです。
python -m venv venv
source venv/bin/activate
pip install kedro
cat <<'EOL' > config.yml
output_dir: .
project_name: trial
repo_name: trial
python_package: trial
include_example: false
EOL
kedro new -c ./config.yml
cd trial
cat <<'EOL' > src/requirements.txt
ipython
pandas
EOL
kedro install
cat <<'EOL' > data/01_raw/test.csv
var1, var2
1,a
2,b
EOL
cat <<'EOL' > conf/base/catalog.yml
test:
type: pandas.CSVDataSet
filepath: data/01_raw/test.csv
preprocessed_test:
type: pandas.CSVDataSet
filepath: data/02_intermediate/preprocessed_test.csv
EOL
cat <<'EOL' > src/trial/pipelines/readwrite.py
from kedro.pipeline import node, Pipeline
from kedro.runner import SequentialRunner
def preprocess_test(test):
return test
pipeline = Pipeline(
[
node(
func=preprocess_test,
inputs="test",
outputs="preprocessed_test",
name="preprocessing_test",
),
]
)
SequentialRunner().run(pipeline, catalog=catalog)
EOL
kedro ipython
# %load src/trial/pipelines/readwrite.py