業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【AI・機械学習】
AI

執筆者:Handbook編集部

Kedroの環境設定

はじめに

データサイエンス開発におけるパイプライン作成をサポートしてくれるKedroでは、Configurationを使って環境を切り替えることが出来る。

環境を変えることで、参照するファイルパスを簡単に変更することが出来る。例えば開発者毎、プロジェクトごとに参照するファイルパスを変えたい場合などに有用である。

本稿では公式ドキュメントを参照し、Kedroにおける環境設定及び各ymlファイルの使い方について解説する。

使い方

Kedroの環境はconfディレクトリ内に設定する。デフォルトでは

  • base
  • local

という二つの環境が設定されており、その中に

  • catalog.yml
  • globals.yml
  • parameters.yml
  • logging.yml

といった名前のファイルを設定する。各ファイルの具体的な使い方に関しては後述する。

また、base, local以外の環境を自分で設定することも出来る。例えば、devという名前の環境であればconf内にdevという名前のサブフォルダを作成し、その中に上記のファイルを置けばよい。

環境はkedro runする際に指定することが出来る。例えば、devという名前の環境であれば

$ kedro run --env==dev

と打てば実行できる。また、kedro ipythonkedro jupyter notebookを使う際に環境を指定したい際は、環境変数KEDRO_ENVをあらかじめ設定すればよい。Macであればexport, Windowsであればsetコマンドを使えばよい。

$ export KEDRO_ENV=dev

尚、--envを特に指定しなければlocal環境の設定がconf/baseを上書きし、実行される。

各ymlファイルの使い方

以下では、conf/base, conf/localなどのフォルダ内に置く.ymlファイルの使い方について説明する。

catalog.yml

入出力するデータを設定する。使い方の詳細に関しては公式ドキュメントや、Hakky Handbook, Kedroとはを参照されたい。

globals.yml

環境変数を辞書形式で設定することが出来る。設定した変数は他のファイル(例えばcatalog.yml)から参照することが出来る。

公式ドキュメントからコピーしたものだが、conf/base/globals.ymlに以下の内容を入力することを考える。

bucket_name: "my_s3_bucket"
key_prefix: "my/key/prefix/"

datasets:
    csv: "pandas.CSVDataSet"
    spark: "spark.SparkDataSet"

folders:
    raw: "01_raw"
    int: "02_intermediate"
    pri: "03_primary"
    fea: "04_feature"

また、src/プロジェクト名/hooks.py内のProjectHooksクラスの中にregister_config_loader関数が以下の様に設定されているとする。

class ProjectHooks:
    @hook_impl
    def register_config_loader(self, conf_paths: Iterable[str]) -> ConfigLoader:
        return TemplatedConfigLoader(
            conf_paths,
            globals_pattern="*globals.yml",  # read the globals dictionary from project config
            globals_dict={  # extra keys to add to the globals dictionary, take precedence over globals_pattern
                "bucket_name": "another_bucket_name",
                "non_string_key": 10,
            },
        )

このhooks.pyではbucket_name, non_string_keyという名前の変数が設定されている他、globals.ymlを読み込むように指定している。

この時、環境変数が以下の様に辞書形式で設定される。

{
    "bucket_name": "another_bucket_name",
    "non_string_key": 10,
    "key_prefix": "my/key/prefix",
    "datasets": {"csv": "pandas.CSVDataSet", "spark": "spark.SparkDataSet"},
    "folders": {
        "raw": "01_raw",
        "int": "02_intermediate",
        "pri": "03_primary",
        "fea": "04_feature",
    },
}

bucket_nameの様にhooks.pyglobals.ymlの両方で設定されている変数はhooks.py側の値が優先される。設定された環境変数は、例えばcatalog.yml内で以下の様に使うことが出来る。

raw_boat_data:
    type: "${datasets.spark}"  # nested paths into global dict are allowed
    filepath: "s3a://${bucket_name}/${key_prefix}/${folders.raw}/boats.csv"
    file_format: parquet

raw_car_data:
    type: "${datasets.csv}"
    filepath: "s3://${bucket_name}/data/${key_prefix}/${folders.raw}/${filename|cars.csv}"  # default to 'cars.csv' if the 'filename' key is not found in the global dict

parameters.yml

parameters.ymlに辞書形式でパラメータを設定することで、node内で設定したパラメータを呼び出せるようになる。例えばconf/base/parameters.yml

step_size: 1
learning_rate: 0.01

と設定したとき、node内でparams:と接頭辞を付ければパラメータを呼び出せる。

def increase_volume(volume, step):
    return volume + step


# in pipeline definition
node(
    func=increase_volume,
    inputs=["input_volume", "params:step_size"],
    outputs="output_volume",
)

この機能を使えば、例えば機械学習のパイプラインを作成する際にハイパーパラメータの管理を一元的に行うことが出来るようになる。また、nodeの入力(input)にparametersを設定し、node内で辞書的にパラメータを設定することも出来る。

def increase_volume(volume, params):
    step = params["step_size"]
    return volume + step


# in pipeline definition
node(
    func=increase_volume, inputs=["input_volume", "parameters"], outputs="output_volume"
)

また、kedro runする際に直接的にパラメータを利用することも出来る。

$ kedro run --params "key1:value with spaces,key2:value"

尚、設定したキーや値に関しては変換できる場合はfloatint形式になるが、出来ない場合はstring形式で読み込まれる。

参考文献

2025年06月15日に最終更新
読み込み中...