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

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

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

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

OpenAI のファインチューニング API と W&B を統合し、ファインチューニングのメトリクスと設定を 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 の自動スキャン機能

ファインチューニングをSyncする

スクリプトから結果をSyncする
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
)

リファレンス

ArgumentDescription
fine_tune_job_idclient.fine_tuning.jobs.create を使用してファインチューニング ジョブを作成したときに取得する OpenAI Fine-Tune ID です。この引数が None (デフォルト) の場合、まだ Sync されていないすべての OpenAI ファインチューニング ジョブが W&B に Sync されます。
openai_client初期化済みの OpenAI クライアントを sync に渡します。クライアントが指定されていない場合は、ロガー自身がクライアントを初期化します。デフォルトでは None です。
num_fine_tunesID が指定されていない場合、まだ Sync されていないすべてのファインチューニングが W&B にログされます。この引数を使用すると、Sync する直近のファインチューニング数を選択できます。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 に Sync されます。デフォルトは True です。
model_artifact_nameログされるモデル artifact の名前です。デフォルトは "model-metadata" です。
model_artifact_typeログされるモデル artifact のタイプです。デフォルトは "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 Artifact としてログします。 このモデル (メタデータ) の Artifact は、さらに W&B Registry 内のモデルにリンクできます。
OpenAI モデルのメタデータ

よくある質問

W&Bのチームでファインチューニング結果を共有するにはどうすればよいですか

次を使用して、ファインチューニング ジョブをチームアカウントにログしてください。
WandbLogger.sync(entity="YOUR_TEAM_NAME")

run を整理するにはどうすればよいですか?

W&B の run は自動的に整理され、ジョブタイプ、base model、学習率、トレーニングファイル名、その他のハイパーパラメーターなど、任意の設定パラメーターに基づいてフィルターや並べ替えを行えます。 さらに、run の名前を変更したり、メモを追加したり、タグを作成してグループ化したりできます。 整理できたら、Workspace を保存し、それを使用して Reports を作成できます。run や保存済みの Artifacts (トレーニング/検証ファイル) からデータを取り込めます。

ファインチューニングしたモデルにアクセスするにはどうすればよいですか?

ファインチューニングしたモデルのIDは、Artifacts (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 を取得できます。

ファインチューニング の Sync に失敗した場合はどうなりますか?

ファインチューニング の情報が W&B に正常にログされなかった場合は、overwrite=True を使用し、ファインチューニング のジョブ ID を渡すことができます。
WandbLogger.sync(
    fine_tune_job_id="FINE_TUNE_JOB_ID",
    overwrite=True,
)

W&B でデータセットとモデルをトラッキングできますか?

トレーニングデータと検証データは、自動的に Artifacts として W&B にログされます。ファインチューニングしたモデルの ID を含むメタデータも、Artifacts としてログされます。 wandb.Artifactwandb.Run.log などの低レベルの wandb API を使えば、いつでもパイプラインを制御できます。これにより、データとモデルを完全に追跡可能にできます。
OpenAI のトラッキングに関する FAQ

リソース