第 2 章 培训模型
RHEL AI 可以使用您的税务树和复合数据,通过多阶段培训和认证和评估,创建具有特定领域知识或技能的新培训模型。您可以使用您生成的合成数据集运行完整的培训和评估过程。LAB 优化多阶段培训的技术是 LLM 培训类型,经过多个阶段的培训和认证。在这些不同阶段,RHEL AI 运行培训流程并生成模型检查点。为下一阶段选择最佳检查点。这个过程创建多个检查点,并选择最佳分数检查点。这个最佳分数点是您最近被培训的 LLM。
整个过程会创建一个新生成的模型,该模型使用来自您的税务树中的合成数据进行培训并进行评估。
2.1. 培训您的数据模型 复制链接链接已复制到粘贴板!
您可以使用 Red Hat Enterprise Linux AI 通过您合成生成的数据为模型进行培训。以下流程演示了如何使用 LAB 多阶段培训策略进行此操作。
Red Hat Enterprise Linux AI 正式发布版本不支持更新和推测服务。如果您有一个 inference 服务器正在运行,则必须在开始培训过程前将其关闭。
先决条件
- 已使用可引导容器镜像安装了 RHEL AI。
-
您下载了
granite-7b-starter模型。 -
已使用知识数据创建自定义
qna.yaml文件。 - 您运行复合数据生成(SDG)进程。
-
您下载了
prometheus-8x7b-v2-0judge 模型。 - 在机器上具有 root 用户访问权限。
流程
您可以使用 SDG 生成的数据文件运行以下命令来运行多阶段培训和认证:
注意您可以使用带有
ilab 模型的--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>其中
- 运行 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 值来仅 培训仅针对技能的模型。
仅培训命令的示例:
$ 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 模型培训的模型时,会根据培训过多少数据点,使用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 会提示您继续运行以前的培训,或者从开始时开始。
在 shell 中键入
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重启也会清除之前检查点、日志文件和其他培训数据的系统缓存。