第 5 章 使用 Training Operator 调整模型
要使用 Kubeflow Training Operator 调整模型,您需要配置和运行培训作业。
另外,您可以使用 Low-Rank Adaptation (LoRA)高效地微调大型语言模型,如 Llama 3。该集成可优化计算要求并减少内存占用量,从而允许对消费者级 GPU 进行微调。该解决方案结合了 PyTorch Fully Sharded Data Parallel (FSDP)和 LoRA 的组合,以启用可扩展、经济型模型的培训和认证,从而增强了 OpenShift 环境中 AI 工作负载的灵活性和性能。
5.1. 配置培训作业 复制链接链接已复制到粘贴板!
在使用培训作业调优模型之前,您必须配置培训工作。本节中的培训工作示例基于 GitHub 中提供的 IBM 和 Hugging Face 调优示例。
先决条件
流程
在一个终端窗口中,如果您还没有登录到 OpenShift 集群,请登录到 OpenShift CLI,如下例所示:
oc login <openshift_cluster_url> -u <username> -p <password>
$ oc login <openshift_cluster_url> -u <username> -p <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置培训工作,如下所示:
-
创建名为
config_trainingjob.yaml的 YAML 文件。 添加
ConfigMap对象定义,如下所示:training-job 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要使用 Low Rank Adaptation (LoRA)微调,请按如下所示更新
config.json部分:-
将
peft_method参数设置为"lora"。 添加
lora_r,lora_alpha,lora_dropout,bias, 和target_modules参数。LoRA 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
将
可选: 要使用 Quantized Low Rank Adaptation (QLoRA)微调,请按如下所示更新
config.json部分:-
将
use_flash_attn参数设置为"true"。 -
将
peft_method参数设置为"lora"。 -
添加 LoRA 参数:
lora_r,lora_alpha,lora_dropout,bias, 和target_modules。 -
添加 QLoRA 强制参数:
auto_gptq、torch_dtype和fp16。 如果需要,添加 QLoRA 可选参数:
fused_lora和fast_kernels。QLoRA 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
将
按照下表所示,编辑 training-job 配置的元数据。
Expand 表 5.1. training-job 配置元数据 参数 value 名称training-job 配置的名称
namespace项目的名称
按照下表所示,编辑 training-job 配置的参数。
Expand 表 5.2. training-job 配置参数 参数 value model_name_or_path预遍历模型或 training-job 容器中模型的路径的名称;在本例中,模型名称取自 Hugging Face 网页
training_data_path您在
training_data.yamlConfigMap 中设置的培训数据的路径output_dir模型的输出目录
save_model_dir保存 tuned 模型的目录
num_train_epochs培训的时期数;在本示例中,培训工作设置为运行 10 次
per_device_train_batch_size批处理大小,要一起处理的数据集示例;在此示例中,培训作业处理 4 个示例
per_device_eval_batch_size批处理大小、每个 GPU 或 TPU 内核或 CPU 共同处理的示例;在这个示例中,培训作业处理 4 个示例。
gradient_accumulation_steps科学累积步骤数量
save_strategy模型检查点可以保存的频率;默认值为
"epoch" (保存模型检查点每个时),其他可能的值是"steps" (每个培训步骤保存模型检查点)和"no" (不要保存模型检查点)save_total_limit要保存的模型检查点数;如果
save_strategy设为"no"(没有保存模型检查点,则省略)learning_rate培训学习率
weight_decay要应用的权重 decay
lr_scheduler_type可选:要使用的调度程序类型;默认值为
"linear",其他可能的值是 "cosine",,"cosine_with_restarts""polynomial","constant", 和"constant_with_warmup"include_tokens_per_second可选:对于培训速度指标,是否计算每个设备每秒令牌数
response_template响应的模板格式化
dataset_text_field培训输出的 dataset 字段,如
training_data.yaml配置映射中设置padding_free是否使用技术在单个批处理中处理多个示例,而无需添加浪费计算资源的 padding 令牌;如果使用,此参数必须设置为
["huggingface"]multipack是否使用多GPU培训技术来平衡每个设备中处理的令牌数量,以最大程度缩短等待时间;您可以使用不同的值,找到您的培训工作的最佳价值。
use_flash_attn是否使用闪存关注
peft_method调优方法:要完全微调,请省略此参数;对于 LoRA 和 QLoRA,设置为
"lora";对于提示调整,设置为"pt"lora_rLoRA:选择低等级的 decom 组成
lora_alphaLoRA:扩展低承诺,以控制其对模型适应的影响
lora_dropoutLoRA: Dropout rate applied to the LoRA 层,这是一种常规技术以防止过度处理
biasLoRA:是否要适应模型中的双向术语;将bias 设为
"none"表示,不会适应任何双向术语target_modulesLoRA:要应用 LoRA 的模块名称;包括所有线性层,设置为"all_linear";某些模型的可选参数
auto_gptqQLoRA:使用 AutoGPTQ 设置 4 位 GPTQ-LoRA;使用时,此参数必须设置为
["triton_v2"]torch_dtypeQLoRA: Tensor datatype; 使用时,此参数必须设置为
float16fp16QLoRA:是否要使用半精确浮动点格式;当使用时,此参数必须设置为
truefused_loraQLoRA:是否要将 fused LoRA 培训用于更有效的 LoRA 培训;如果使用,此参数必须设置为
["auto_gptq", true]fast_kernelsQLoRA:是否使用快速跨熵、rope、rms 丢失内核;如果使用,此参数必须设置为
[true, true, true]-
在
config_trainingjob.yaml文件中保存您的更改。 应用配置以创建
training-config对象:oc apply -f config_trainingjob.yaml
$ oc apply -f config_trainingjob.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
创建名为
创建培训数据。
注意本简单示例中的培训数据仅用于演示目的,不适用于生产用途。提供培训数据的常见方法是使用持久卷。
-
创建名为
training_data.yaml的 YAML 文件。 添加以下
ConfigMap对象定义:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将示例命名空间值
kfto替换为项目的名称。 - 使用培训数据替换示例培训数据。
-
在
training_data.yaml文件中保存您的更改。 应用配置来创建培训数据:
oc apply -f training_data.yaml
$ oc apply -f training_data.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
创建名为
创建持久性卷声明(PVC),如下所示:
-
创建名为
trainedmodelpvc.yaml的 YAML 文件。 添加以下
PersistentVolumeClaim对象定义:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将示例命名空间值
kfto替换为项目的名称,并更新其他参数以适合您的环境。要计算存储值,请将模型大小乘以 epoch 的数量,然后添加很少的额外作为缓冲区。 -
在
trainedmodelpvc.yaml文件中保存您的更改。 应用配置来为培训作业创建持久性卷声明(PVC):
oc apply -f trainedmodelpvc.yaml
$ oc apply -f trainedmodelpvc.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
创建名为
验证
- 在 OpenShift 控制台中,从 Project 列表中选择您的项目。
-
点 ConfigMaps 并验证是否列出了
training-config和twitter-complaintsConfigMap。 -
点 Search。在 Resources 列表中,选择 PersistentVolumeClaim 并验证是否列出了
trained-modelPVC。