第2章 モデルのトレーニング
RHEL AI は、タクソノミーツリーと合成データを使用して、複数フェーズトレーニングと評価を通じてドメイン固有のナレッジやスキルでトレーニングされたモデルを新たに作成できます。生成した合成データセットを使用して、完全なトレーニングおよび評価プロセスを実行できます。複数フェーズトレーニングの LAB 最適化手法は、複数の段階のトレーニングと評価を行う LLM トレーニングの一種です。これらのさまざまな段階で、RHEL AI はトレーニングプロセスを実行し、モデルチェックポイントを生成します。次のフェーズに最適なチェックポイントが選択されます。このプロセスでは、多数のチェックポイントが作成され、最高スコアのチェックポイントが選択されます。この最高スコアのチェックポイントが、トレーニングされた新規 LLM になります。
プロセス全体では、新規生成モデルを作成し、タクソノミーツリーからの合成データを使用してトレーニングおよび評価します。
2.1. データでモデルのトレーニング リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux AI を使用すると、合成生成されたデータを使用してモデルをトレーニングできます。次の手順では、LAB 複数フェーズトレーニングストラテジーを使用してこれを行う方法を示します。
Red Hat Enterprise Linux AI の一般公開 (GA) は、トレーニングと推論サービングを同時に実行するサポートは提供していません。推論サーバーが実行中の場合は、トレーニングプロセスを開始する前に閉じる必要があります。
前提条件
- 起動可能なコンテナーイメージを使用して RHEL AI をインストールしている。
-
granite-7b-starterモデルがダウンロードされている。 -
ナレッジデータを含むカスタム
qna.yamlファイルが作成されている。 - 合成データ生成 (SDG) プロセスを実行した。
-
prometheus-8x7b-v2-0ジャッジモデルをダウンロードしている。 - マシンの root ユーザーアクセス権がある。
手順
SDG から生成されたデータファイルを使用して次のコマンドを実行すると、マルチフェーズのトレーニングと評価を実行できます。
注記トレーニングログを表示するには、
ilab model trainコマンドで--enable-serving-outputフラグを使用できます。$ ilab model train --strategy lab-multiphase \ --phased-phase1-data ~/.local/share/instructlab/datasets/<generation-date>/<knowledge-train-messages-jsonl-file> \ --phased-phase2-data ~/.local/share/instructlab/datasets/<generation-date>/<skills-train-messages-jsonl-file>以下は、
- <generation-date>
- Synthetic Data Generation (SDG) を実行する日付。
- <knowledge-train-messages-file>
-
SDG 中に生成された
knowledge_messages.jsonlファイルのロケーションを指定します。RHEL AI は、この.jsonlファイルのデータを使用して、学生モデルgranite-7b-starterをトレーニングします。パスの例は、~/.local/share/instructlab/datasets/2024-09-07_194933/knowledge_train_msgs_2024-09-07T20_54_21.jsonlです。 - <skills-train-messages-file>
-
SDG 中に生成された
skills_messages.jsonlファイルのロケーションを指定します。RHEL AI は、.jsonlファイルのデータを使用して学生モデルgranite-7b-starterをトレーニングします。パスの例は、~/.local/share/instructlab/datasets/2024-09-07_194933/skills_train_msgs_2024-09-07T20_54_21.jsonlです。
--strategy lab-skills-only の値を使用して、モデルに対してスキルのみのトレーニングを実行できます。
スキルのみのトレーニングコマンドの例:
$ ilab model train --strategy lab-skills-only --phased-phase2-data ~/.local/share/instructlab/datasets/<skills-train-messages-jsonl-file>
最初のフェーズでは、ナレッジの提供から得られた合成データを使用してモデルをトレーニングします。
トレーニングナレッジの出力例
Training Phase 1/2... TrainingArgs for current phase: TrainingArgs(model_path='/opt/app-root/src/.cache/instructlab/models/granite-7b-starter', chat_tmpl_path='/opt/app-root/lib64/python3.11/site-packages/instructlab/training/chat_templates/ibm_generic_tmpl.py', data_path='/tmp/jul19-knowledge-26k.jsonl', ckpt_output_dir='/tmp/e2e/phase1/checkpoints', data_output_dir='/opt/app-root/src/.local/share/instructlab/internal', max_seq_len=4096, max_batch_len=55000, num_epochs=2, effective_batch_size=128, save_samples=0, learning_rate=2e-05, warmup_steps=25, is_padding_free=True, random_seed=42, checkpoint_at_epoch=True, mock_data=False, mock_data_len=0, deepspeed_options=DeepSpeedOptions(cpu_offload_optimizer=False, cpu_offload_optimizer_ratio=1.0, cpu_offload_optimizer_pin_memory=False, save_samples=None), disable_flash_attn=False, lora=LoraOptions(rank=0, alpha=32, dropout=0.1, target_modules=('q_proj', 'k_proj', 'v_proj', 'o_proj'), quantize_data_type=<QuantizeDataType.NONE: None>))- 次に、RHEL AI は次のフェーズで使用する最適なチェックポイントを選択します。
次のフェーズでは、スキルデータからの合成データを使用してモデルをトレーニングします。
トレーニングスキルの出力例
Training Phase 2/2... TrainingArgs for current phase: TrainingArgs(model_path='/tmp/e2e/phase1/checkpoints/hf_format/samples_52096', chat_tmpl_path='/opt/app-root/lib64/python3.11/site-packages/instructlab/training/chat_templates/ibm_generic_tmpl.py', data_path='/usr/share/instructlab/sdg/datasets/skills.jsonl', ckpt_output_dir='/tmp/e2e/phase2/checkpoints', data_output_dir='/opt/app-root/src/.local/share/instructlab/internal', max_seq_len=4096, max_batch_len=55000, num_epochs=2, effective_batch_size=3840, save_samples=0, learning_rate=2e-05, warmup_steps=25, is_padding_free=True, random_seed=42, checkpoint_at_epoch=True, mock_data=False, mock_data_len=0, deepspeed_options=DeepSpeedOptions(cpu_offload_optimizer=False, cpu_offload_optimizer_ratio=1.0, cpu_offload_optimizer_pin_memory=False, save_samples=None), disable_flash_attn=False, lora=LoraOptions(rank=0, alpha=32, dropout=0.1, target_modules=('q_proj', 'k_proj', 'v_proj', 'o_proj'), quantize_data_type=<QuantizeDataType.NONE: None>))次に、RHEL AI は、Multi-turn Benchmark (MT-Bench) を使用してフェーズ 2 モデルトレーニングのすべてのチェックポイントを評価し、最もパフォーマンスの高いチェックポイントを、完全にトレーニングされた出力モデルとして返します。
スキル評価の出力例
MT-Bench evaluation for Phase 2... Using gpus from --gpus or evaluate config and ignoring --tensor-parallel-size configured in serve vllm_args INFO 2024-08-15 10:04:51,065 instructlab.model.backends.backends:437: Trying to connect to model server at http://127.0.0.1:8000/v1 INFO 2024-08-15 10:04:53,580 instructlab.model.backends.vllm:208: vLLM starting up on pid 79388 at http://127.0.0.1:54265/v1 INFO 2024-08-15 10:04:53,580 instructlab.model.backends.backends:450: Starting a temporary vLLM server at http://127.0.0.1:54265/v1 INFO 2024-08-15 10:04:53,580 instructlab.model.backends.backends:465: Waiting for the vLLM server to start at http://127.0.0.1:54265/v1, this might take a moment... Attempt: 1/300 INFO 2024-08-15 10:04:58,003 instructlab.model.backends.backends:465: Waiting for the vLLM server to start at http://127.0.0.1:54265/v1, this might take a moment... Attempt: 2/300 INFO 2024-08-15 10:05:02,314 instructlab.model.backends.backends:465: Waiting for the vLLM server to start at http://127.0.0.1:54265/v1, this might take a moment... Attempt: 3/300 moment... Attempt: 3/300 INFO 2024-08-15 10:06:07,611 instructlab.model.backends.backends:472: vLLM engine successfully started at http://127.0.0.1:54265/v1トレーニングが完了すると、確認が表示され、最もパフォーマンスの良かったチェックポイントが表示されます。
完全な複数フェーズトレーニング実行の出力例
Training finished! Best final checkpoint: samples_1945 with score: 6.813759384このチェックポイントは評価とサービングに必要なパスなので、メモしておいてください。
検証
ilab model trainを使用してモデルをトレーニングする場合は、トレーニングされたデータポイントの数に基づいて、複数のチェックポイントがsamples_接頭辞とともに保存されます。これらは~/.local/share/instructlab/phase/ディレクトリーに保存されます。$ ls ~/.local/share/instructlab/phase/<phase1-or-phase2>/checkpoints/新しいモデルの出力例
samples_1711 samples_1945 samples_1456 samples_1462 samples_1903
2.1.1. トレーニングランの継続または再開 リンクのコピーリンクがクリップボードにコピーされました!
RHEL AI を使用すると、マルチフェーズのトレーニング中に失敗した可能性のあるトレーニング実行を続行できます。トレーニング実行が失敗する原因はいくつかあります。
- vLLM サーバーが正しく起動しない可能性があります。
- アクセラレーターまたは GPU がフリーズし、トレーニングが中止される可能性があります。
-
InstructLab
config.yamlファイルにエラーがある可能性があります。
マルチフェーズのトレーニングを初めて実行すると、初期トレーニングデータが journalfile.yaml ファイルに保存されます。必要に応じて、ファイル内のこのメタデータを使用して、失敗したトレーニングを再開できます。
マルチフェーズのトレーニングを実行する際に、CLI プロンプトに従ってトレーニングデータをクリアするトレーニング実行を再開することもできます。
前提条件
- 合成データを使用してマルチフェーズのトレーニングを実行したが、失敗した。
手順
マルチフェーズのトレーニングコマンドを再度実行します。
$ ilab model train --strategy lab-multiphase \ --phased-phase1-data ~/.local/share/instructlab/datasets/<generation-date>/<knowledge-train-messages-jsonl-file> \ --phased-phase2-data ~/.local/share/instructlab/datasets/<generation-date>/<skills-train-messages-jsonl-file>Red Hat Enterprise Linux AI CLI は、
journalfile.yamlファイルが存在するかどうかを読み取り、その時点からトレーニング実行を続行します。CLI は、前回のトレーニング実行を続行するか、最初から開始するかを尋ねます。
プレビューのトレーニング実行を続行するには、シェルに
nと入力します。Metadata (checkpoints, the training journal) may have been saved from a previous training run. By default, training will resume from this metadata if it exists Alternatively, the metadata can be cleared, and training can start from scratch Would you like to START TRAINING FROM THE BEGINNING? nトレーニング実行を再開するには、ターミナルに
yと入力します。Metadata (checkpoints, the training journal) may have been saved from a previous training run. By default, training will resume from this metadata if it exists Alternatively, the metadata can be cleared, and training can start from scratch Would you like to START TRAINING FROM THE BEGINNING? y再起動すると、システムキャッシュから以前のチェックポイント、ジャーナルファイル、その他のトレーニングデータもクリアされます。