# Beeuniでモデルのファインチューニング実験を実行・評価する

エージェントに学習データを準備させ、接続済みの学習用コンピューターでファインチューニングを実行し、失敗を調べ、モデルの出力を比較します。

Canonical page: https://beeuni.ai/blog/ja/run-model-fine-tuning-with-beeuni

学習スクリプトが夜のうちに終了しました。出力フォルダーには、学習途中のある時点のモデル状態を保存したチェックポイントがありますが、ログは評価の前で途切れています。学習は完了したのでしょうか。保存されたモデルを読み込めるでしょうか。どの設定で作られたのでしょうか。Beeuniエージェントにファイルとログの確認、チェックポイントの読み込みを任せれば、どこまで完了したかを把握してから、再実行が必要か判断できます。

学習用コンピューターにアクセスできれば、エージェントはコードやデータを調べ、コマンドを実行し、ログを読み、評価結果を集められます。モデルと、何を改善とみなすかは自分で決めます。Beeuniは、そのコンピューターで利用できる学習ソフトウェアと計算資源を使って作業を進めます。

## まず、変えたい動作を一つ決める

[データセットガイド](/blog/ja/build-ai-training-dataset-jsonl)で取り上げたサポート依頼分類器を考えてみましょう。依頼を請求、アカウントへのアクセス、製品に関する問い合わせ、要確認に振り分けます。指示を与えたベースモデルよりも、ファインチューニングしたモデルのほうが正しいカテゴリに安定して分類できるかを確かめます。アクセスと請求の両方に関わる例も残しておきましょう。1件の依頼に複数の問題があるとき、どのカテゴリを優先するか学習できたかを確認できます。

ラベルの定義、確認済みの学習データ、そして分けておいた評価データをエージェントに渡します。重みを変更する前に、評価データに対してベースモデルを実行させましょう。モデルの識別情報、指示、生成設定、予測結果を保存します。このベースラインがなければ、学習コマンドが正常に終わっても、追加の作業が役に立ったかはほとんど判断できません。

## 学習用コンピューターへのアクセスを設定する

実験を実行するコンピューターを[Computer Tunnel](/docs/ja/connect/computers)で接続し、現在のプロファイルで選択します。学習用ディレクトリへのファイルシステムとシェルのアクセスを許可してください。リポジトリ、データセットの場所、Python環境をエージェントに伝えます。GPUを使う場合は、設定を決める前に、利用可能なデバイス、メモリ、ドライバー、フレームワークとの互換性を確認するよう依頼しましょう。

必要なメモリと計算能力は、ベースモデルと学習方法によって異なります。アダプター方式では、ベースモデルの重みを固定し、少数の追加パラメーターを学習します。すべての重みを更新する場合は、通常、より多くのリソースが必要です。Beeuniエージェントに学習スクリプトと利用可能なハードウェアを調べさせ、予定の設定で実行できるか説明してもらいましょう。パッケージのインストール、モデルのダウンロード、環境の変更は、開始前に確認してください。

```
Use the connected training computer and repository I specify.
Inspect the training script, model access, Python environment, and available devices.
Validate the reviewed dataset and keep the evaluation set separate.
Run the base-model evaluation and save its predictions.
Propose a small fine-tuning run with the settings and output directory shown.
Wait for my approval before starting training or changing the environment.
Save the command, configuration, logs, and evaluation results for each run.
```

## 最初の実行は、内容を確認できる規模にする

本格的に実行する前に、少量の学習データで一連の処理を確かめましょう。トークナイザーはデータを読み込めるでしょうか。ラベルの表記は一貫しているでしょうか。モデルは意図した文章を予測するよう学習しているでしょうか。スクリプトはチェックポイントを保存し、読み込んで依頼に回答できるでしょうか。こうした確認で、データセット全体の学習に時間を使う前に設定の不備を見つけられます。

学習スクリプトが実際に読み込む形で、例を1件表示するようBeeuniエージェントに頼みましょう。モデルが予測するよう学習する文章と、文脈として渡すだけの文章を区別してもらいます。学習損失は、その予測の誤りを測る値です。スクリプトが誤ったフィールドを対象にしていると、学習は正常に動いても、望ましくない動作を教えてしまいます。損失のグラフを頼りにする前に、この例を確認してください。

実験ごとに出力ディレクトリを分けます。コードのリビジョン、データセットのバージョン、ベースモデル、学習方法、シード、設定を記録してください。アダプターだけを保存する方法なら、それを使う際に必要なベースモデルも記録します。重みのファイルは、モデルを再び読み込むのに必要な情報と一緒に保管しましょう。

## ジョブを再実行せずに学習の進捗を確認する

学習用コンピューターのジョブランナーか、接続を切っても維持されるターミナルセッションを使い、ログをディスクに書き込みましょう。エージェントには、ジョブの確認方法と停止方法も記録させます。ツール呼び出し中に起動したコマンドには、個別のプロセス管理が必要です。開始したことを示す記録がチャット接続だけにならないようにしましょう。

進捗を尋ねれば、エージェントは記録されたジョブを確認し、最新のログを読み、保存済みチェックポイントを調べられます。接続が切れた場合は、同じジョブがまだ動いているか確認してから、別のジョブを起動してください。チェックポイントから再開できるかは、学習フレームワークが何を保存したかによります。必要に応じて、オプティマイザーやスケジューラーの状態も確認します。

メモリ不足で失敗した場合は、設定を変える前に、失敗したときの設定を残してエラーを読むようエージェントに指示しましょう。バッチサイズの縮小、シーケンス長の短縮、学習方法の変更は、メモリ使用量だけでなく実験内容にも影響します。設定を変更した場合は別の実行として記録し、比較が分かるようにしてください。

## 間違いを比べて、何を残すか決める

ファインチューニングしたモデルには、ベースモデルの評価と同じ例で回答させます。これらの例は学習データに含めず、予測の設定と採点ルールも固定してください。サポート依頼分類器では、カテゴリごとの結果を比較し、分類が変わった依頼を確認します。全体の正解率が上がっていても、重要なまれなケースへの対応が悪化していることがあります。

| 確認する例 | 比較で確かめること |
| --- | --- |
| 明確な請求への異議申し立て | 基本的な請求分類が引き続きできるか |
| ログインの問題と解約が組み合わさった依頼 | 複数の意図が競合するときのルールに従うか |
| 追加情報が不足しているメッセージ | 推測せず「要確認」ラベルを使うか |
| 承認済みの選択肢にないラベル | 出力形式やラベルの制約を見直す必要があるか |

予測が変わった箇所を、元の例や実行設定と結び付けたレポートをBeeuniに作成させましょう。これらの誤りを確認してデータセットを修正する場合、最終判断には別のテストセットを使ってください。同じ例を繰り返し調整に使うと、新しい依頼への性能が向上していなくても、評価結果が良く見えることがあります。

採用する重みやアダプター、読み込み手順、環境の詳細、評価レポートをまとめて保管しましょう。新しいプロセスで結果を読み込めるか確認してください。比較結果を採用できると判断したら、デプロイに進めます。それまでは、実験を分離したまま、既存のモデルでアプリケーションを稼働させておけます。
