Ray Tune
W&Bは、軽量な2つのインテグレーションを提供することでRayと統合します。
1つは WandbLoggerCallback で、これはTuneに報告されたメトリクスを自動的にWandb APIにログします。もう1つは @wandb_mixin デコレーターで、これは関数APIと一緒に使用できます。これにより、Tuneのトレーニング情報でWandb APIが自動的に初期化されます。通常通りWandb APIを使用することができ、例として wandb.log() を使ってトレーニングプロセスをログします。
WandbLoggerCallback
from ray.air.integrations.wandb import WandbLoggerCallback
Wandbの設定は、tune.run() のconfig引数にwandbキーを渡すことで行います(以下の例を参照)。
wandbの設定エントリの内容は、キーワード引数として wandb.init() に渡されます。ただし、以下の設定は WandbLoggerCallback 自体の設定に使用されます。
パラメータ
api_key_file (str) – Wandb API KEY を含むファイルのパス。
api_key (str) – Wandb APIキー。api_key_fileを設定する代わりに使用します。
excludes (list) – logから除外されるメトリクスのリスト。
log_config (bool) – 結果辞書の設定引数をログするかどうかを示すブール値。これは例えば PopulationBasedTraining でパラメータがトレーニング中に変わる場合に意味があります。デフォルトはFalseです。
例
from ray import tune, train
from ray.tune.logger import DEFAULT_LOGGERS
from ray.air.integrations.wandb import WandbLoggerCallback
def train_fc(config):
for i in range(10):
train.report({"mean_accuracy":(i + config['alpha']) / 10})
search_space = {
'alpha': tune.grid_search([0.1, 0.2, 0.3]),
'beta': tune.uniform(0.5, 1.0)
}
analysis = tune.run(
train_fc,
config=search_space,
callbacks=[WandbLoggerCallback(
project="<your-project>",
api_key="<your-name>",
log_config=True
)]
)
best_trial = analysis.get_best_trial("mean_accuracy", "max", "last")
wandb_mixin
ray.tune.integration.wandb.wandb_mixin(func)
このRay TuneのTrainable mixinは、Trainableクラスや関数APIで @wandb_mixin と使うためにWandb APIを初期化するのに役立ちます。
基本的な使い方としては、トレーニング関数の前に @wandb_mixin デコレータを付けるだけです:
from ray.tune.integration.wandb import wandb_mixin
@wandb_mixin
def train_fn(config):
wandb.log()
Wandbの設定は、 tune.run() の config 引数に wandb key を渡すことで行います(以下の例を参照)。
wandbの設定エントリの内容は、キーワード引数として wandb.init() に渡されます。ただし、以下の設定は WandbTrainableMixin 自体の設定に使用されます。
パラメータ
api_key_file (str) – Wandb API KEY を含むファイルのパス。
api_key (str) – Wandb APIキー。api_key_fileを設定する代わりに使用します。
Wandbの group、run_id、run_name はTuneによって自動的に選択されますが、各設定値を入力することで上書き可能です。
他の有効な設定については、こちらをご覧ください: https://docs.wandb.com/library/init
例:
from ray import tune
from ray.tune.integration.wandb import wandb_mixin
@wandb_mixin
def train_fn(config):
for i in range(10):
loss = self.config["a"] + self.config["b"]
wandb.log({"loss": loss})
tune.report(loss=loss)
tune.run(
train_fn,
config={
# ここで探索空間を定義
"a": tune.choice([1, 2, 3]),
"b": tune.choice([4, 5, 6]),
# wandbの設定
"wandb": {"project": "Optimization_Project", "api_key_file": "/path/to/file"},
},
)
コード例
インテグレーションの動作を確認するいくつかの例を作成しました: