RHEL AI を使用したカスタム LLM の生成
SDG、トレーニング、評価を使用してカスタム LLM を作成する
概要
第1章 SDG を使用した新しいデータセットの生成 リンクのコピーリンクがクリップボードにコピーされました!
タクソノミーツリーをカスタマイズした後、Red Hat Enterprise Linux AI の合成データ生成 (SDG) プロセスを使用して合成データセットを生成できます。SDG は、提供された例に基づいて実際のデータに似せて人工的に生成されたデータセットを作成するプロセスです。SDG は、質問と回答のペアを含む YAML ファイルを入力データとして使用します。これらの例では、SDG は mixtral-8x7b-instruct-v0-1 LLM を教師モデルとして使用して、同様の質問と回答のペアを生成します。SDG パイプラインでは、多くの質問が生成され、品質に基づいて採点されます。mixtral-8x7b-instruct-v0-1 教師モデルがこれらの関連性と一貫性を評価します。次に、パイプラインはフィルタリングメカニズムを適用して、最もスコアの高い質問を選択し、対応する回答を生成し、元のサンプルの質問に基づいてその精度をさらに評価します。最終的に作成された高品質な質問と回答のペアのセットは、トレーニングに使用される合成データセットに組み込まれます。
1.1. 例を使用した標準データセットの作成 リンクのコピーリンクがクリップボードにコピーされました!
例を使用して SDG プロセスを実行し、合成データセットを作成できます。
4xL40 を搭載したシステムで SDG を実行している場合に、SDG を適切に実行するには次のパラメーターを使用する必要があります。
ilab data generate --num-cpus 4
ilab data generate --num-cpus 4
前提条件
- 起動可能なコンテナーイメージを使用して RHEL AI をインストールしている。
-
ナレッジデータを含むカスタム
qna.yamlファイルが作成されている。 -
SDG 用の
mixtral-8x7B-instruct-v0-1教師モデルをダウンロードしている。 -
skills-adapter-v3:1.5およびknowledge-adapter-v3:1.5LoRA 階層化スキルおよびナレッジアダプターをダウンロードしている。 - マシンの root ユーザーアクセス権がある。
手順
ナレッジを含むカスタムのタクソノミーに基づいて新しい合成データセットを生成するには、次のコマンドを実行します。
ilab data generate
$ ilab data generateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ilab data generateコマンドを実行するときに--enable-serving-outputフラグを使用すると、vLLM 起動ログを表示できます。SDG プロセスの開始時に、vLLM は
mixtral-8x7B-instruct教師モデルをホストするためのサーバーを起動しようとします。vLLM がサーバーの起動を試みているときの出力例
Starting a temporary vLLM server at http://127.0.0.1:47825/v1 INFO 2024-08-22 17:01:09,461 instructlab.model.backends.backends:480: Waiting for the vLLM server to start at http://127.0.0.1:47825/v1, this might take a moment... Attempt: 1/120 INFO 2024-08-22 17:01:14,213 instructlab.model.backends.backends:480: Waiting for the vLLM server to start at http://127.0.0.1:47825/v1, this might take a moment... Attempt: 2/120
Starting a temporary vLLM server at http://127.0.0.1:47825/v1 INFO 2024-08-22 17:01:09,461 instructlab.model.backends.backends:480: Waiting for the vLLM server to start at http://127.0.0.1:47825/v1, this might take a moment... Attempt: 1/120 INFO 2024-08-22 17:01:14,213 instructlab.model.backends.backends:480: Waiting for the vLLM server to start at http://127.0.0.1:47825/v1, this might take a moment... Attempt: 2/120Copy to Clipboard Copied! Toggle word wrap Toggle overflow vLLM が接続すると、SDG プロセスは
qna.yamlファイル内のシード例に基づいて合成データの作成を開始します。vLLM 接続および SDG 生成の出力例
INFO 2024-08-22 15:16:43,497 instructlab.model.backends.backends:480: Waiting for the vLLM server to start at http://127.0.0.1:49311/v1, this might take a moment... Attempt: 74/120 INFO 2024-08-22 15:16:45,949 instructlab.model.backends.backends:487: vLLM engine successfully started at http://127.0.0.1:49311/v1 Generating synthetic data using '/usr/share/instructlab/sdg/pipelines/agentic' pipeline, '/var/home/cloud-user/.cache/instructlab/models/mixtral-8x7b-instruct-v0-1' model, '/var/home/cloud-user/.local/share/instructlab/taxonomy' taxonomy, against http://127.0.0.1:49311/v1 server INFO 2024-08-22 15:16:46,594 instructlab.sdg:375: Synthesizing new instructions. If you aren't satisfied with the generated instructions, interrupt training (Ctrl-C) and try adjusting your YAML files. Adding more examples may help.
INFO 2024-08-22 15:16:43,497 instructlab.model.backends.backends:480: Waiting for the vLLM server to start at http://127.0.0.1:49311/v1, this might take a moment... Attempt: 74/120 INFO 2024-08-22 15:16:45,949 instructlab.model.backends.backends:487: vLLM engine successfully started at http://127.0.0.1:49311/v1 Generating synthetic data using '/usr/share/instructlab/sdg/pipelines/agentic' pipeline, '/var/home/cloud-user/.cache/instructlab/models/mixtral-8x7b-instruct-v0-1' model, '/var/home/cloud-user/.local/share/instructlab/taxonomy' taxonomy, against http://127.0.0.1:49311/v1 server INFO 2024-08-22 15:16:46,594 instructlab.sdg:375: Synthesizing new instructions. If you aren't satisfied with the generated instructions, interrupt training (Ctrl-C) and try adjusting your YAML files. Adding more examples may help.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
CLI が新しいデータセットのロケーションを表示すると、SDG プロセスが完了します。
SDG 実行が成功した出力例
INFO 2024-08-16 17:12:46,548 instructlab.sdg.datamixing:200: Mixed Dataset saved to /home/example-user/.local/share/instructlab/datasets/skills_train_msgs_2024-08-16T16_50_11.jsonl INFO 2024-08-16 17:12:46,549 instructlab.sdg:438: Generation took 1355.74s
INFO 2024-08-16 17:12:46,548 instructlab.sdg.datamixing:200: Mixed Dataset saved to /home/example-user/.local/share/instructlab/datasets/skills_train_msgs_2024-08-16T16_50_11.jsonl INFO 2024-08-16 17:12:46,549 instructlab.sdg:438: Generation took 1355.74sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記このプロセスは、ハードウェアの仕様に応じて時間がかかる場合があります。
検証
SDG ファイルが作成されたことを確認するには、
~/.local/share/instructlab/datasets/ディレクトリーに移動し、データが生成された日付に対応するファイルをリスト表示します。以下に例を示します。ls 2024-03-24_194933
$ ls 2024-03-24_194933Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
knowledge_recipe_2024-03-24T20_54_21.yaml skills_recipe_2024-03-24T20_54_21.yaml knowledge_train_msgs_2024-03-24T20_54_21.jsonl skills_train_msgs_2024-03-24T20_54_21.jsonl messages_granite-7b-lab-Q4_K_M_2024-03-24T20_54_21.jsonl node_datasets_2024-03-24T15_12_12/
knowledge_recipe_2024-03-24T20_54_21.yaml skills_recipe_2024-03-24T20_54_21.yaml knowledge_train_msgs_2024-03-24T20_54_21.jsonl skills_train_msgs_2024-03-24T20_54_21.jsonl messages_granite-7b-lab-Q4_K_M_2024-03-24T20_54_21.jsonl node_datasets_2024-03-24T15_12_12/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要最新の
knowledge_train_msgs.jsonlおよびskills_train_msgs.jsonlファイルをメモします。マルチフェーズのトレーニング中に、このファイルを指定する必要があります。各 JSONL のファイルにタイムスタンプがあります (例:knowledge_train_msgs_2024-08-08T20_04_28.jsonl)。トレーニング時には最新のファイルを使用します。オプション:
~/.local/share/datasets/<generation-date>ディレクトリーに移動してJSONLファイルを開くと、SDG の出力を表示できます。cat ~/.local/share/datasets/<generation-date>/<jsonl-dataset>
$ cat ~/.local/share/datasets/<generation-date>/<jsonl-dataset>Copy to Clipboard Copied! Toggle word wrap Toggle overflow SDG JSONL ファイルの出力例
{"messages":[{"content":"I am, Red Hat\u00ae Instruct Model based on Granite 7B, an AI language model developed by Red Hat and IBM Research, based on the Granite-7b-base language model. My primary function is to be a chat assistant.","role":"system"},{"content":"<|user|>\n### Deep-sky objects\n\nThe constellation does not lie on the [galactic\nplane](galactic_plane \"wikilink\") of the Milky Way, and there are no\nprominent star clusters. [NGC 625](NGC_625 \"wikilink\") is a dwarf\n[irregular galaxy](irregular_galaxy \"wikilink\") of apparent magnitude\n11.0 and lying some 12.7 million light years distant. Only 24000 light\nyears in diameter, it is an outlying member of the [Sculptor\nGroup](Sculptor_Group \"wikilink\"). NGC 625 is thought to have been\ninvolved in a collision and is experiencing a burst of [active star\nformation](Active_galactic_nucleus \"wikilink\"). [NGC\n37](NGC_37 \"wikilink\") is a [lenticular\ngalaxy](lenticular_galaxy \"wikilink\") of apparent magnitude 14.66. It is\napproximately 42 [kiloparsecs](kiloparsecs \"wikilink\") (137,000\n[light-years](light-years \"wikilink\")) in diameter and about 12.9\nbillion years old. [Robert's Quartet](Robert's_Quartet \"wikilink\")\n(composed of the irregular galaxy [NGC 87](NGC_87 \"wikilink\"), and three\nspiral galaxies [NGC 88](NGC_88 \"wikilink\"), [NGC 89](NGC_89 \"wikilink\")\nand [NGC 92](NGC_92 \"wikilink\")) is a group of four galaxies located\naround 160 million light-years away which are in the process of\ncolliding and merging. They are within a circle of radius of 1.6 arcmin,\ncorresponding to about 75,000 light-years. Located in the galaxy ESO\n243-49 is [HLX-1](HLX-1 \"wikilink\"), an [intermediate-mass black\nhole](intermediate-mass_black_hole \"wikilink\")\u2014the first one of its kind\nidentified. It is thought to be a remnant of a dwarf galaxy that was\nabsorbed in a [collision](Interacting_galaxy \"wikilink\") with ESO\n243-49. Before its discovery, this class of black hole was only\nhypothesized.\n\nLying within the bounds of the constellation is the gigantic [Phoenix\ncluster](Phoenix_cluster \"wikilink\"), which is around 7.3 million light\nyears wide and 5.7 billion light years away, making it one of the most\nmassive [galaxy clusters](galaxy_cluster \"wikilink\"). It was first\ndiscovered in 2010, and the central galaxy is producing an estimated 740\nnew stars a year. Larger still is [El\nGordo](El_Gordo_(galaxy_cluster) \"wikilink\"), or officially ACT-CL\nJ0102-4915, whose discovery was announced in 2012.{"messages":[{"content":"I am, Red Hat\u00ae Instruct Model based on Granite 7B, an AI language model developed by Red Hat and IBM Research, based on the Granite-7b-base language model. My primary function is to be a chat assistant.","role":"system"},{"content":"<|user|>\n### Deep-sky objects\n\nThe constellation does not lie on the [galactic\nplane](galactic_plane \"wikilink\") of the Milky Way, and there are no\nprominent star clusters. [NGC 625](NGC_625 \"wikilink\") is a dwarf\n[irregular galaxy](irregular_galaxy \"wikilink\") of apparent magnitude\n11.0 and lying some 12.7 million light years distant. Only 24000 light\nyears in diameter, it is an outlying member of the [Sculptor\nGroup](Sculptor_Group \"wikilink\"). NGC 625 is thought to have been\ninvolved in a collision and is experiencing a burst of [active star\nformation](Active_galactic_nucleus \"wikilink\"). [NGC\n37](NGC_37 \"wikilink\") is a [lenticular\ngalaxy](lenticular_galaxy \"wikilink\") of apparent magnitude 14.66. It is\napproximately 42 [kiloparsecs](kiloparsecs \"wikilink\") (137,000\n[light-years](light-years \"wikilink\")) in diameter and about 12.9\nbillion years old. [Robert's Quartet](Robert's_Quartet \"wikilink\")\n(composed of the irregular galaxy [NGC 87](NGC_87 \"wikilink\"), and three\nspiral galaxies [NGC 88](NGC_88 \"wikilink\"), [NGC 89](NGC_89 \"wikilink\")\nand [NGC 92](NGC_92 \"wikilink\")) is a group of four galaxies located\naround 160 million light-years away which are in the process of\ncolliding and merging. They are within a circle of radius of 1.6 arcmin,\ncorresponding to about 75,000 light-years. Located in the galaxy ESO\n243-49 is [HLX-1](HLX-1 \"wikilink\"), an [intermediate-mass black\nhole](intermediate-mass_black_hole \"wikilink\")\u2014the first one of its kind\nidentified. It is thought to be a remnant of a dwarf galaxy that was\nabsorbed in a [collision](Interacting_galaxy \"wikilink\") with ESO\n243-49. Before its discovery, this class of black hole was only\nhypothesized.\n\nLying within the bounds of the constellation is the gigantic [Phoenix\ncluster](Phoenix_cluster \"wikilink\"), which is around 7.3 million light\nyears wide and 5.7 billion light years away, making it one of the most\nmassive [galaxy clusters](galaxy_cluster \"wikilink\"). It was first\ndiscovered in 2010, and the central galaxy is producing an estimated 740\nnew stars a year. Larger still is [El\nGordo](El_Gordo_(galaxy_cluster) \"wikilink\"), or officially ACT-CL\nJ0102-4915, whose discovery was announced in 2012.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2. バックグラウンドでの Synthetic Data Generation (SDG) の実行 リンクのコピーリンクがクリップボードにコピーされました!
SDG プロセスを管理および操作する方法は複数あります。
SDG をバックグラウンドで実行すると、SDG がまだ実行中でもターミナルを引き続き使用できます。
前提条件
- 起動可能なコンテナーイメージを使用して RHEL AI をインストールしている。
-
ナレッジデータを含むカスタム
qna.yamlファイルが作成されている。 -
SDG 用の
mixtral-8x7B-instruct-v0-1教師モデルをダウンロードしている。 -
skills-adapter-v3:1.5およびknowledge-adapter-v3:1.5LoRA 階層化スキルおよびナレッジアダプターをダウンロードしている。 - マシンの root ユーザーアクセス権がある。
手順
バックグラウンドで SDG プロセスを開始するには、次のコマンドを実行します。
ilab data generate -dt
$ ilab data generate -dtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 正常に起動した場合の出力例
INFO 2025-01-15 11:36:47,557 instructlab.process.process:236: Started subprocess with PID 68289. Logs are being written to /Users/<user-name>/.local/share/instructlab/logs/generation/generation-e85623ac-d35e-11ef-bc70-2a1c6126d703.log.
$ INFO 2025-01-15 11:36:47,557 instructlab.process.process:236: Started subprocess with PID 68289. Logs are being written to /Users/<user-name>/.local/share/instructlab/logs/generation/generation-e85623ac-d35e-11ef-bc70-2a1c6126d703.log.Copy to Clipboard Copied! Toggle word wrap Toggle overflow デタッチされた SDG プロセスの管理、表示、および対話には、いくつかの方法があります。
以下のコマンドを入力して、現在実行中のプロセスおよびそれらのステータスをすべて表示できます。
ilab process list
$ ilab process listCopy to Clipboard Copied! Toggle word wrap Toggle overflow リスト表示されているプロセスの出力例
+------------+-------+--------------------------------------+----------------------------------------------------------------------------------------------------------------+----------+---------+ | Type | PID | UUID | Log File | Runtime | Status | +------------+-------+--------------------------------------+----------------------------------------------------------------------------------------------------------------+----------+---------+ | Generation | 30334 | f2623406-de55-11ef-b684-2a1c6126d703 | /Users/<user-name>/.local/share/instructlab/logs/generation/generation-f2623406-de55-11ef-b684-2a1c6126d703.log| 00:08:30 | Running | +------------+-------+--------------------------------------+----------------------------------------------------------------------------------------------------------------+----------+---------+
+------------+-------+--------------------------------------+----------------------------------------------------------------------------------------------------------------+----------+---------+ | Type | PID | UUID | Log File | Runtime | Status | +------------+-------+--------------------------------------+----------------------------------------------------------------------------------------------------------------+----------+---------+ | Generation | 30334 | f2623406-de55-11ef-b684-2a1c6126d703 | /Users/<user-name>/.local/share/instructlab/logs/generation/generation-f2623406-de55-11ef-b684-2a1c6126d703.log| 00:08:30 | Running | +------------+-------+--------------------------------------+----------------------------------------------------------------------------------------------------------------+----------+---------+Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行すると、最新のプロセスを参加および表示できます。
警告すでにアタッチ済みの SDG プロセスからデタッチすることはできません。
ilab process attach --latest
$ ilab process attach --latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.3. llama-3.3-70B-Instruct モデルを教師モデルとして使用する (テクノロジープレビュー) リンクのコピーリンクがクリップボードにコピーされました!
RHEL AI バージョン 1.5 では、合成データ生成 (SDG) を実行するときに llama-3.3-70b-Instruct を教師モデルとして使用することがサポートされています。SDG での教師モデルの利用方法の詳細は、SDG を使用した新しいデータセットの生成 を参照してください。llama-3.3-70b-Instruct モデルなど、より大きなパラメーターを持つ教師モデルを使用すると、合成生成された質問と回答のペアをより効果的に評価できるため、元のシードファイルに適した、より高品質で正確なデータセットが生成されます。
`llama-3.3-70b-Instruct` の教師モデルとしての使用は、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
前提条件
- 起動可能なコンテナーイメージを使用して RHEL AI をインストールしている。
-
ナレッジまたはスキルデータを含むカスタムの
qna.yamlファイルを作成している。 -
skills-adapter-v3:1.5およびknowledge-adapter-v3:1.5LoRA 階層化スキルおよびナレッジアダプターをダウンロードしている。
手順
-
次のコマンドを実行して、
llama-3.3-70b-Instructを RHEL AI システムにダウンロードします。
ilab model download --repository docker://registry.redhat.io/rhelai1/llama-3.3-70b-Instruct --release latest
$ ilab model download --repository docker://registry.redhat.io/rhelai1/llama-3.3-70b-Instruct --release latest
-
次のコマンドを実行して、
llama-3.3-70b-Instructモデルを教師モデルとして SDG を実行できます。
ilab data generate --pipeline llama
$ ilab data generate --pipeline llama
第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>$ 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>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は、
- <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>
$ 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>))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>))Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 次に、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>))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>))Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次に、RHEL AI は、Multi-turn Benchmark (MT-Bench) を使用してフェーズ 2 モデルトレーニングのすべてのチェックポイントを評価し、最もパフォーマンスの高いチェックポイントを、完全にトレーニングされた出力モデルとして返します。
スキル評価の出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow トレーニングが完了すると、確認が表示され、最もパフォーマンスの良かったチェックポイントが表示されます。
完全な複数フェーズトレーニング実行の出力例
Training finished! Best final checkpoint: samples_1945 with score: 6.813759384
Training finished! Best final checkpoint: samples_1945 with score: 6.813759384Copy to Clipboard Copied! Toggle word wrap Toggle overflow このチェックポイントは評価とサービングに必要なパスなので、メモしておいてください。
検証
ilab model trainを使用してモデルをトレーニングする場合は、トレーニングされたデータポイントの数に基づいて、複数のチェックポイントがsamples_接頭辞とともに保存されます。これらは~/.local/share/instructlab/phase/ディレクトリーに保存されます。ls ~/.local/share/instructlab/phase/<phase1-or-phase2>/checkpoints/
$ ls ~/.local/share/instructlab/phase/<phase1-or-phase2>/checkpoints/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいモデルの出力例
samples_1711 samples_1945 samples_1456 samples_1462 samples_1903
samples_1711 samples_1945 samples_1456 samples_1462 samples_1903Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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>$ 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>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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? nCopy to Clipboard Copied! Toggle word wrap Toggle overflow トレーニング実行を再開するには、ターミナルに
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
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? yCopy to Clipboard Copied! Toggle word wrap Toggle overflow 再起動すると、システムキャッシュから以前のチェックポイント、ジャーナルファイル、その他のトレーニングデータもクリアされます。
第3章 モデルの評価 リンクのコピーリンクがクリップボードにコピーされました!
新しいモデルの改善を測定する場合は、評価プロセスを使用してそのパフォーマンスをベースモデルと比較できます。また、モデルと直接チャットして、新しいモデルが作成したナレッジを学習したかどうかを定性的に確認することもできます。モデルの改善についてより定量的な結果が必要な場合は、RHEL AI CLI で評価プロセスを実行できます。
3.1. 新しいモデルの評価 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順に従って、RHEL AI CLI で評価プロセスを実行できます。
前提条件
- 起動可能なコンテナーイメージを使用して RHEL AI をインストールしている。
-
スキルまたはナレッジを盛り込んだカスタムの
qna.yamlファイルを作成している。 - データ生成プロセスが実行されている。
- RHEL AI トレーニングプロセスを使用してモデルがトレーニングされている。
-
prometheus-8x7b-v2-0ジャッジモデルをダウンロードしている。 - マシンの root ユーザーアクセス権がある。
手順
-
qna.yamlファイルを作成した作業中の Git ブランチに移動します。 さまざまなベンチマークで評価プロセスを実行できるようになりました。各コマンドには、評価するトレーニング済み
samplesモデルへのパスが必要です。これらのチェックポイントには~/.local/share/instructlab/checkpointsフォルダーからアクセスできます。MMLU_BRANCH ベンチマーク - ナレッジの貢献がモデルにどのような影響を与えたかを測定する場合は、次のコマンドを実行して
mmlu_branchベンチマークを実行します。ilab model evaluate --benchmark mmlu_branch --model ~/.local/share/instructlab/phased/phase2/checkpoints/hf_format/<checkpoint> \ --tasks-dir ~/.local/share/instructlab/datasets/<generation-date>/<node-dataset> \ --base-model ~/.cache/instructlab/models/granite-7b-starter$ ilab model evaluate --benchmark mmlu_branch --model ~/.local/share/instructlab/phased/phase2/checkpoints/hf_format/<checkpoint> \ --tasks-dir ~/.local/share/instructlab/datasets/<generation-date>/<node-dataset> \ --base-model ~/.cache/instructlab/models/granite-7b-starterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は、
- <checkpoint>
- 複数フェーズトレーニング中に生成された最高スコアのチェックポイントファイルを指定します。
- <node-dataset>
モデルのトレーニングに使用された .jsonl ファイルと同じタイムスタンプを持つ、SDG 中に生成された
node_datasetsディレクトリーを~/.local/share/instructlab/datasets/<generation-date>ディレクトリーに指定します。出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
MT_BENCH_BRANCH ベンチマーク - スキルの貢献がモデルにどのような影響を与えたかを測定する場合は、次のコマンドを実行して
mt_bench_branchベンチマークを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は、
- <checkpoint>
- 複数フェーズトレーニング中に生成された最高スコアのチェックポイントファイルを指定します。
- <worker-branch>
- タクソノミーツリーにデータを追加するときに使用したブランチを指定します。
- <num-gpus>
評価に使用する GPU の数を指定します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
オプション: MMLU および MT_BENCH ベンチマークを使用して、各チェックポイントを手動で評価できます。標準化されたナレッジやスキルのセットに対して任意のモデルを評価できるため、独自のモデルのスコアを他の LLM と比較できます。
MMLU - 標準化されたナレッジデータセットに対する新しいモデルの評価スコアを確認する場合は、次のコマンドを実行して
mmluベンチマークを設定します。ilab model evaluate --benchmark mmlu --model ~/.local/share/instructlab/phased/phase2/checkpoints/hf_format/samples_665 --skip-server
$ ilab model evaluate --benchmark mmlu --model ~/.local/share/instructlab/phased/phase2/checkpoints/hf_format/samples_665 --skip-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は、
- <checkpoint>
複数フェーズトレーニング中に生成されたチェックポイントファイルの 1 つを指定します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
MT_BENCH - 標準化されたスキルセットに対する新しいモデルの評価スコアを確認する場合は、次のコマンドを実行して
mt_benchベンチマークを設定します。ilab model evaluate --benchmark mt_bench --model ~/.local/share/instructlab/phased/phases2/checkpoints/hf_format/samples_665
$ ilab model evaluate --benchmark mt_bench --model ~/.local/share/instructlab/phased/phases2/checkpoints/hf_format/samples_665Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は、
- <checkpoint>
複数フェーズトレーニング中に生成されたチェックポイントファイルの 1 つを指定します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.1. Domain-Knowledge ベンチマーク評価 リンクのコピーリンクがクリップボードにコピーされました!
Domain-Knowledge ベンチマーク評価は、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
RHEL AI、MMLU、および MMLU_branch における現在のナレッジ評価ベンチマークは、複数の選択問題に回答する機能についてモデルを評価します。モデルの回答がある程度正しい場合や間違っている場合に、評価を与える方法がありませんでした。
Domain-Knowledge ベンチマーク (DK-bench) の評価では、カスタム評価用の質問を作成し、モデルの回答をスケールに基づいて採点することができます。
各回答は参照回答と比較され、ジャッジモデルによって以下のスケールで採点されます。
| スコア | 基準 |
|---|---|
| 1 | その回答は完全に誤っているか、無関係であるか、または参照回答と意味のある形で一致していません。 |
| 2 | 回答は参照回答と一部一致しているものの、大きな誤り、重要な省略、または無関係な情報が含まれています。 |
| 3 | 回答は全体的に参照回答と一致しているものの、詳細や明確さが不足している、または軽微な誤りが含まれています。 |
| 4 | 回答はほぼ正確で、参照回答と高い整合性があり、軽微な問題や省略がある程度です。 |
| 5 | 回答は完璧で、参照回答と完全に一致しており、明確で、綿密かつ詳細に渡っています。 |
前提条件
- 起動可能なコンテナーイメージを使用して RHEL AI をインストールしている。
- RHEL AI トレーニングプロセスを使用してモデルがトレーニングされている。
- prometheus-8x7b-v2-0 judge モデルをダウンロードしている。
- マシンの root ユーザーアクセス権がある。
手順
カスタム評価を利用するには、モデルに回答させて評価したいすべての質問を含む
jsonlファイルを作成する必要があります。DK-bench
jsonlファイルの例{"user_input":"What is the capital of Canada?","reference":"The capital of Canada is Ottawa."}{"user_input":"What is the capital of Canada?","reference":"The capital of Canada is Ottawa."}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は、
- user_input
- モデルへの質問が含まれています。
- reference
- 質問への回答が含まれています。
カスタム評価の質問を使用して DK-bench ベンチマークを実行するには、以下のコマンドを実行します。
ilab model evaluate --benchmark dk_bench --input-questions <path-to-jsonl-file> --model <path-to-model>
$ ilab model evaluate --benchmark dk_bench --input-questions <path-to-jsonl-file> --model <path-to-model>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は、
- <path-to-jsonl-file>
-
質問と回答が含まれる
jsonlファイルへのパスを指定します。 - <path-to-model>
評価するモデルへのパスを指定します。
コマンドの例
ilab model evaluate --benchmark dk_bench --input-questions /home/use/path/to/questions.jsonl --model ~/.cache/instructlab/models/instructlab/granite-7b-lab
$ ilab model evaluate --benchmark dk_bench --input-questions /home/use/path/to/questions.jsonl --model ~/.cache/instructlab/models/instructlab/granite-7b-labCopy to Clipboard Copied! Toggle word wrap Toggle overflow domain-Knowledge ベンチマーク評価の出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第4章 新しいモデルのサービングおよびチャット リンクのコピーリンクがクリップボードにコピーされました!
モデルをサービングして、モデルをマシンにデプロイする必要があります。これにより、モデルがデプロイされ、対話やチャットにモデルを使用できるようになります。
4.1. 新しいモデルのサービング リンクのコピーリンクがクリップボードにコピーされました!
新しいモデルを操作するには、サービングを通じてマシン内でモデルをアクティブ化する必要があります。ilab model serve コマンドは、モデルとチャットできる vLLM サーバーを起動します。
前提条件
- 起動可能なコンテナーイメージを使用して RHEL AI をインストールしている。
- InstructLab を初期化している。
- タクソノミーツリーをカスタマイズし、合成データ生成を実行して、新しいモデルをトレーニングして評価している。
- マシンで root ユーザーアクセス権がある。
手順
次のコマンドを実行して、モデルを提供できます。
ilab model serve --model-path <path-to-best-performed-checkpoint>
$ ilab model serve --model-path <path-to-best-performed-checkpoint>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は、
- <path-to-best-performed-checkpoint>
トレーニング後に構築したチェックポイントへのフルパスを指定します。最もパフォーマンスの高いチェックポイントが新しいモデルになり、トレーニング後にファイルパスが表示されます。
コマンドの例:
ilab model serve --model-path ~/.local/share/instructlab/phased/phase2/checkpoints/hf_format/samples_1945/
$ ilab model serve --model-path ~/.local/share/instructlab/phased/phase2/checkpoints/hf_format/samples_1945/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要モデルパスの最後にスラッシュ
/があることを確認してください。ilab model serveコマンドの出力例ilab model serve --model-path ~/.local/share/instructlab/phased/phase2/checkpoints/hf_format/<checkpoint> INFO 2024-03-02 02:21:11,352 lab.py:201 Using model /home/example-user/.local/share/instructlab/checkpoints/hf_format/checkpoint_1945 with -1 gpu-layers and 4096 max context size. Starting server process After application startup complete see http://127.0.0.1:8000/docs for API. Press CTRL+C to shut down the server.
$ ilab model serve --model-path ~/.local/share/instructlab/phased/phase2/checkpoints/hf_format/<checkpoint> INFO 2024-03-02 02:21:11,352 lab.py:201 Using model /home/example-user/.local/share/instructlab/checkpoints/hf_format/checkpoint_1945 with -1 gpu-layers and 4096 max context size. Starting server process After application startup complete see http://127.0.0.1:8000/docs for API. Press CTRL+C to shut down the server.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2. 新しいモデルとのチャット リンクのコピーリンクがクリップボードにコピーされました!
データを使用してトレーニングされたモデルとチャットできます。
前提条件
- 起動可能なコンテナーイメージを使用して RHEL AI をインストールしている。
- InstructLab を初期化している。
- タクソノミーツリーをカスタマイズし、合成データ生成を実行して、新しいモデルをトレーニングして評価している。
- チェックポイントモデルがサービングされている。
- マシンで root ユーザーアクセス権がある。
手順
- 1 つのターミナルウィンドウでモデルをサービングしているため、モデルとチャットするには新しいターミナルウィンドウを開く必要があります。
新しいモデルとチャットするには、次のコマンドを実行します。
ilab model chat --model <path-to-best-performed-checkpoint-file>
$ ilab model chat --model <path-to-best-performed-checkpoint-file>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は、
- <path-to-best-performed-checkpoint-file>
トレーニング後に構築した新しいモデルチェックポイントを指定します。最もパフォーマンスの高いチェックポイントが新しいモデルになり、トレーニング後にファイルパスが表示されます。
コマンドの例:
ilab model chat --model ~/.local/share/instructlab/phased/phase2/checkpoints/hf_format/samples_1945
$ ilab model chat --model ~/.local/share/instructlab/phased/phase2/checkpoints/hf_format/samples_1945Copy to Clipboard Copied! Toggle word wrap Toggle overflow
InstructLab チャットボットの出力例
ilab model chat ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────── system ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ Welcome to InstructLab Chat w/ CHECKPOINT_1945 (type /h for help) │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ >> [S][default]
$ ilab model chat ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────── system ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ Welcome to InstructLab Chat w/ CHECKPOINT_1945 (type /h for help) │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ >>> [S][default]Copy to Clipboard Copied! Toggle word wrap Toggle overflow チャットボットを終了するには
exitと入力します。