メインコンテンツへスキップ
Colab で試す OpenAI GPT-3.5 または GPT-4 モデルのファインチューニングのメトリクスと設定を W&B にログとして記録します。W&B エコシステムを活用して、ファインチューニングの実験、モデル、データセットを追跡し、結果をチームメンバーと共有できます。
ファインチューニング可能なモデルの一覧については、OpenAI ドキュメントを参照してください。
W&B を OpenAI と連携してファインチューニングを行う方法に関する補足情報については、OpenAI ドキュメント内の「W&B Integration」セクションを参照してください。

OpenAI Python API をインストールまたは更新する

W&B の OpenAI ファインチューニングインテグレーションは、バージョン 1.0 以降の OpenAI と動作します。最新バージョンについては、OpenAI Python API ライブラリの PyPI ドキュメントを参照してください。 OpenAI Python API をインストールするには、次のコマンドを実行します:
pip install openai
すでに OpenAI Python API をインストールしている場合は、次のコマンドで更新できます:
pip install -U openai

OpenAI のファインチューニング結果を同期する

W&B を OpenAI のファインチューニング API と連携させて、ファインチューニングのメトリクスと設定を W&B に記録します。これを行うには、wandb.integration.openai.fine_tuning モジュールの WandbLogger クラスを使用します。
from wandb.integration.openai.fine_tuning import WandbLogger

# ファインチューニングのロジック

WandbLogger.sync(fine_tune_job_id=FINETUNE_JOB_ID)
OpenAI 自動スキャン機能

ファインチューニング結果を同期する

スクリプトで得られた結果を同期します
from wandb.integration.openai.fine_tuning import WandbLogger

# 1行コマンド
WandbLogger.sync()

# オプションパラメータを渡す
WandbLogger.sync(
    fine_tune_job_id=None,
    num_fine_tunes=None,
    project="OpenAI-Fine-Tune",
    entity=None,
    overwrite=False,
    model_artifact_name="model-metadata",
    model_artifact_type="model",
    **kwargs_wandb_init
)

Reference

ArgumentDescription
fine_tune_job_idこれは、client.fine_tuning.jobs.create を使ってファインチューニングジョブを作成したときに取得できる OpenAI Fine-Tune ID です。この引数が None(デフォルト)の場合、まだ同期されていないすべての OpenAI ファインチューニングジョブが W&B に同期されます。
openai_client初期化済みの OpenAI クライアントを sync に渡します。クライアントが指定されない場合は、ロガー側でクライアントが初期化されます。デフォルトでは None です。
num_fine_tunesID が指定されていない場合、同期されていないすべてのファインチューニングジョブが W&B にログされます。この引数を使うと、同期する直近のファインチューニングジョブの数を指定できます。num_fine_tunes が 5 の場合、直近 5 件のファインチューニングジョブが対象になります。
projectファインチューニングのメトリクス、モデル、データなどをログする W&B のプロジェクト名です。デフォルトのプロジェクト名は “OpenAI-Fine-Tune” です。
entityrun を送信する先の W&B のユーザー名またはチーム名です。デフォルトでは、通常あなたのユーザー名であるデフォルト entity が使用されます。
overwriteログの記録を強制し、同じファインチューニングジョブに対応する既存の wandb run を上書きします。デフォルトでは False です。
wait_for_job_successOpenAI のファインチューニングジョブが開始されると、完了までに少し時間がかかることがあります。ファインチューニングジョブ完了後すぐにメトリクスが W&B にログされるように、この設定は 60 秒ごとにファインチューニングジョブのステータスが succeeded に変わるかどうかを確認します。ジョブが成功したと検出されると、メトリクスは自動的に W&B に同期されます。デフォルトで True に設定されています。
model_artifact_nameログされるモデルアーティファクトの名前です。デフォルトは "model-metadata" です。
model_artifact_typeログされるモデルアーティファクトの種類です。デフォルトは "model" です。
**kwargs_wandb_initwandb.init() に直接渡される任意の追加引数

データセットのバージョン管理と可視化

バージョニング

ファインチューニングのために OpenAI にアップロードした学習および検証データは、バージョン管理を容易にするために自動的に W&B Artifacts としてログされます。下図は Artifacts 内の学習ファイルの表示例です。ここでは、このファイルをログした W&B run、そのログ時刻、このファイルがどのバージョンのデータセットに対応するか、メタデータ、および学習データから学習済みモデルまでの DAG による系譜情報を確認できます。
W&B Artifacts による学習データセット

可視化

データセットは W&B Tables として可視化されるため、データセットを探索・検索したり、対話的に操作できます。以下は、W&B Tables を使って可視化した学習サンプルです。
OpenAI データ

ファインチューニング済みモデルとモデルのバージョニング

OpenAI はファインチューニング済みモデルの ID を返します。モデルの重みにはアクセスできないため、WandbLoggerfine_tuned_model の ID とともに、モデルのすべての詳細情報(ハイパーパラメータ、データファイルの ID など)を含む model_metadata.json ファイルを作成し、それを W&B のアーティファクトとして記録します。 このモデル(メタデータ)のアーティファクトは、W&B Registry 内のモデルに関連付けることができます。
OpenAI model metadata

よくある質問

W&B でファインチューニング結果をチームと共有するには?

次のようにして、ファインチューニングジョブをチームアカウントにログします:
WandbLogger.sync(entity="YOUR_TEAM_NAME")

run をどのように整理できますか?

W&B の run は自動的に整理され、ジョブタイプ、ベースモデル、学習率、学習ファイル名、その他のハイパーパラメータなど、任意の設定パラメータに基づいてフィルタやソートを行うことができます。 さらに、run の名前を変更したり、メモを追加したり、タグを作成してグループ化することもできます。 満足いく形に整理できたら、Workspace を保存し、その Workspace を使って run や保存されたアーティファクト(学習/検証ファイル)からデータをインポートし、レポートを作成できます。

ファインチューニング済みモデルにはどうやってアクセスできますか?

ファインチューニング済みモデルの ID は、model_metadata.json というアーティファクトおよび設定情報として W&B に記録されます。
import wandb
    
with wandb.init(project="OpenAI-Fine-Tune", entity="YOUR_TEAM_NAME") as run:
    ft_artifact = run.use_artifact("ENTITY/PROJECT/model_metadata:VERSION")
    artifact_dir = ft_artifact.download()
ここで VERSION は次のいずれかです:
  • v2 のようなバージョン番号
  • ft-xxxxxxxxx のようなファインチューニング ID
  • latest のように自動で追加される、または手動で追加されたエイリアス
その後、ダウンロードした model_metadata.json ファイルを読み込むことで、fine_tuned_model の ID を確認できます。

ファインチューニングが正常に同期されなかった場合はどうすればよいですか?

ファインチューニングが W&B に正常にログ記録されなかった場合は、overwrite=True を使用し、ファインチューニングジョブ ID を渡してください。
WandbLogger.sync(
    fine_tune_job_id="FINE_TUNE_JOB_ID",
    overwrite=True,
)

W&B でデータセットやモデルを追跡できますか?

学習データと検証データは、アーティファクトとして自動的に W&B にログされます。ファインチューニングしたモデルの ID を含むメタデータも、アーティファクトとしてログされます。 wandb.Artifactwandb.Run.log などの低レベルな wandb API を使って、パイプラインを細かく制御できます。これにより、データとモデルの完全な追跡可能性を確保できます。
OpenAI tracking FAQ

リソース