模型微调笔记,初入门0基础通俗认识模型微调
A: 使用以下命令启动 LoRA 微调训练:命令解析:A: 使用以下命令进行模型生成效果评估:命令解析:BLEU 和 ROUGE 是自然语言生成任务中常用的评估指标:A: 使用以下命令启动模型服务:命令解析:A: 推理测试(Inference Testing)是在模型训练完成后进行的一个重要验证步骤,用于评估模型在实际应用场景中的表现。主要作用:验证模型性能:功能测试:实际应用测试:使用方法:这个
LLM 微调学习笔记
常用指令与解释
Q: 如何启动 LoRA 微调训练?
A: 使用以下命令启动 LoRA 微调训练:
CUDA_VISIBLE_DEVICES=0,1,2 llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
命令解析:
CUDA_VISIBLE_DEVICES=0,1,2:指定使用的 GPU 设备号,这里使用了 3 张 GPU(0、1、2号)llamafactory-cli train:LLaMA Factory 的训练入口命令examples/train_lora/llama3_lora_sft.yaml:训练配置文件路径,包含了模型、数据集、训练参数等配置
Q: LLaMA Factory 常用命令总览
| 功能 | 命令 | 说明 | 配置文件示例 |
|---|---|---|---|
| 模型评估 | CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/extras/nlg_eval/llama3_lora_predict.yaml |
计算BLEU、ROUGE等指标 | llama3_lora_predict.yaml |
| 模型部署 | API_PORT=8000 CUDA_VISIBLE_DEVICES=0,1 llamafactory-cli api examples/inference/llama3_full_sft.yaml |
启动模型服务 | llama3_full_sft.yaml |
| 推理测试 | python /data2/vehicle_command/LLaMA-Factory/scripts/full_test.py |
验证模型表现 | - |
Q: 推理测试的作用和使用场景
| 测试类型 | 主要作用 | 测试内容 | 使用时机 |
|---|---|---|---|
| 模型性能验证 | 评估模型质量 | - 响应质量 - 文本连贯性 - 资源使用情况 |
- 训练完成后 - 修改配置后 |
| 功能测试 | 验证模型功能 | - 输入格式处理 - 边界情况测试 - 行为特征检查 |
- 部署前 - 环境变更时 |
| 应用场景测试 | 验证实际效果 | - 真实场景模拟 - 具体任务测试 - 领域需求验证 |
- 上线前 - 稳定性验证时 |
Q: LLaMA Factory 的推理方式对比
| 推理方式 | 适用场景 | 启动命令 | 特点 |
|---|---|---|---|
| 命令行对话 | 快速测试和开发 | llamafactory-cli chat inference_config.yaml |
- 简单直接 - 适合调试 |
| Web界面对话 | 演示和用户交互 | llamafactory-cli webchat inference_config.yaml |
- 可视化好 - 用户友好 |
| VLLM批量推理 | 大规模数据处理 | python scripts/vllm_infer.py --model_name_or_path path_to_model --dataset dataset_name |
- 处理效率高 - 适合批量任务 |
| API服务调用 | 系统集成和远程调用 | llamafactory-cli api inference_config.yaml |
- 便于集成 - 支持远程访问 |
Q: 推理引擎特点对比
| 特性 | Huggingface(默认) | VLLM |
|---|---|---|
| 兼容性 | 较好 | 一般 |
| 使用难度 | 简单 | 需要额外配置 |
| 性能表现 | 一般 | 较好 |
| 配置方式 | 默认配置即可 | 需要 infer_backend: vllm |
Q: 如何进行模型评估(计算 BLEU、ROUGE 等指标)?
A: 使用以下命令进行模型生成效果评估:
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/extras/nlg_eval/llama3_lora_predict.yaml
命令解析:
CUDA_VISIBLE_DEVICES=0:仅使用单张 GPU(0号)进行评估examples/extras/nlg_eval/llama3_lora_predict.yaml:评估配置文件,包含了评估数据集、指标设置等
BLEU 和 ROUGE 是自然语言生成任务中常用的评估指标:
- BLEU:衡量生成文本与参考文本的相似度
- ROUGE:评估生成文本的召回率相关指标
Q: 如何部署模型服务?
A: 使用以下命令启动模型服务:
API_PORT=8000 CUDA_VISIBLE_DEVICES=0,1 llamafactory-cli api examples/inference/llama3_full_sft.yaml
命令解析:
API_PORT=8000:指定 API 服务端口号CUDA_VISIBLE_DEVICES=0,1:使用 2 张 GPU 进行服务部署examples/inference/llama3_full_sft.yaml:服务配置文件,包含模型路径、推理参数等
Q: 推理测试是什么?它的作用是什么?
A: 推理测试(Inference Testing)是在模型训练完成后进行的一个重要验证步骤,用于评估模型在实际应用场景中的表现。
主要作用:
-
验证模型性能:
- 测试模型对新输入的响应质量
- 检查生成文本的连贯性和准确性
- 评估响应时间和计算资源使用情况
-
功能测试:
- 验证模型是否能正确处理各种输入格式
- 测试特殊字符、长文本等边界情况
- 检查模型是否保持了预期的行为特征
-
实际应用测试:
- 模拟真实场景下的用户输入
- 测试模型在具体任务上的表现
- 验证模型是否满足特定领域的要求
使用方法:
python /data2/vehicle_command/LLaMA-Factory/scripts/full_test.py
这个测试脚本会:
- 运行一系列预定义的测试用例
- 收集模型响应和性能指标
- 生成测试报告供分析
建议在以下情况下进行推理测试:
- 完成模型训练后
- 修改模型配置后
- 部署到新环境前
- 需要验证模型稳定性时
Q: LLaMA Factory 的推理方式和配置详解?
A: LLaMA Factory 支持多种推理方式,每种方式都有其特定的配置要求和使用场景。
- 推理方式概述:
-
命令行对话:适合快速测试和开发
llamafactory-cli chat inference_config.yaml -
Web界面对话:适合演示和用户交互
llamafactory-cli webchat inference_config.yaml -
VLLM批量推理:适合大规模数据处理
python scripts/vllm_infer.py --model_name_or_path path_to_model --dataset dataset_name -
API服务调用:适合系统集成和远程调用
llamafactory-cli api inference_config.yaml
- 推理引擎选择:
-
Huggingface(默认):
- 兼容性好
- 适用性广
- 配置简单
-
VLLM:
- 推理速度更快
- 需要额外配置
- 通过
infer_backend: vllm启用
- 配置文件详解:
原始模型配置示例:
### examples/inference/llama3.yaml
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct # 模型路径或名称
template: llama3 # 对话模板
infer_backend: huggingface # 推理引擎选择
字段说明:
-
model_name_or_path:- 模型的本地路径或Hugging Face模型名称
- 必须与template匹配
- 示例:meta-llama/Meta-Llama-3-8B-Instruct
-
template:- 对话模板类型
- 决定输入输出格式
- 常用选项:llama3、vicuna、chatglm等
-
infer_backend:- 推理引擎选择
- 可选值:huggingface、vllm
- 影响推理速度和资源使用
微调模型配置示例:
### examples/inference/llama3_lora_sft.yaml
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct # 基础模型
adapter_name_or_path: saves/llama3-8b/lora/sft # LoRA适配器路径
template: llama3 # 对话模板
finetuning_type: lora # 微调类型
infer_backend: huggingface # 推理引擎
额外字段说明:
-
adapter_name_or_path:- 微调模型的适配器路径
- 用于加载训练好的权重
- 示例:saves/llama3-8b/lora/sft
-
finetuning_type:- 微调方法类型
- 常用选项:lora、qlora等
- 必须与训练时使用的方法一致
- 重要注意事项:
-
配置文件要求:
- 模型路径必须存在
- 模型与模板必须匹配
- 微调模型需要额外配置项
-
推理引擎选择:
- Huggingface:通用性好,默认选项
- VLLM:性能更好,需要额外配置
-
资源使用:
- 根据模型大小选择合适的GPU
- 注意显存使用情况
- 考虑批处理大小的影响
- 使用建议:
-
开发测试阶段:
- 使用命令行对话
- 选择Huggingface后端
- 关注日志输出
-
生产部署阶段:
- 考虑使用VLLM后端
- 配置API服务
- 做好性能优化
-
大规模推理:
- 使用VLLM批量推理
- 优化批处理参数
- 注意结果保存
Q: inference_config.yaml 配置文件如何编写?
A: inference_config.yaml 是 LLaMA Factory 推理配置文件,根据不同使用场景有不同的配置方式。以下是详细说明:
- 基础配置项(所有场景必需):
model_name_or_path: "模型路径" # 模型路径或huggingface模型名称
template: "对话模板" # 如llama3、vicuna等
infer_backend: "推理后端" # 可选 huggingface 或 vllm
- 微调模型额外配置:
adapter_name_or_path: "适配器路径" # 如 saves/llama3-8b/lora/sft
finetuning_type: "微调类型" # 如 lora、qlora 等
- 完整配置示例:
原始模型配置:
# 原始模型配置示例
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
template: llama3
infer_backend: huggingface
max_length: 2048 # 可选:最大生成长度
temperature: 0.7 # 可选:采样温度
top_p: 0.9 # 可选:核采样参数
微调模型配置:
# 微调模型配置示例
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
template: llama3
finetuning_type: lora
infer_backend: huggingface
batch_size: 8 # 可选:批处理大小
max_length: 2048 # 可选:最大生成长度
多模态模型配置:
# 多模态模型配置示例
model_name_or_path: llava-hf/llava-1.5-7b-hf
template: vicuna
infer_backend: huggingface
重要说明:
-
model_name_or_path:- 可以是本地模型路径
- 可以是Hugging Face模型名称
- 必须与template匹配
-
infer_backend选择:- huggingface:默认选项,适用性更广
- vllm:推理速度更快,但可能有兼容性限制
-
template选择:- 需要与模型类型匹配
- 常用选项:llama3、vicuna、chatglm等
- 影响对话格式和生成效果
-
性能相关参数:
- batch_size:批处理大小,影响推理速度和显存使用
- max_length:最大生成长度,影响生成文本的长度限制
- temperature:温度参数,影响生成文本的随机性
- top_p:核采样参数,影响生成文本的多样性
Q: LLaMA Factory 的主要操作和配置有哪些?
A: 以下是 LLaMA Factory 主要操作及其配置说明:
| 操作类型 | 配置文件命名 | 主要配置项 | 作用 | 执行命令 |
|---|---|---|---|---|
| SFT训练 | train_sft.yaml |
- model_name_or_path - dataset_dir - output_dir - num_train_epochs - learning_rate |
全参数指令微调训练 | llamafactory-cli train train_sft.yaml |
| LoRA训练 | train_lora.yaml |
- model_name_or_path - dataset_dir - lora_rank - lora_alpha - lora_dropout |
使用LoRA方法进行参数高效微调 | llamafactory-cli train train_lora.yaml |
| 模型评估 | eval.yaml |
- model_name_or_path - dataset_dir - metric_for_best_model - evaluation_strategy |
评估模型性能(准确率、BLEU等) | llamafactory-cli eval eval.yaml |
| 命令行推理 | inference.yaml |
- model_name_or_path - template - infer_backend - max_length |
命令行交互式对话 | llamafactory-cli chat inference.yaml |
| Web界面 | inference.yaml |
- model_name_or_path - template - infer_backend - share (可选) |
启动Web交互界面 | llamafactory-cli webchat inference.yaml |
| API服务 | api.yaml |
- model_name_or_path - template - infer_backend - port |
部署REST API服务 | llamafactory-cli api api.yaml |
| 批量推理 | batch_infer.yaml |
- model_name_or_path - dataset - batch_size - output_dir |
对大规模数据集进行批量推理 | python scripts/vllm_infer.py --config batch_infer.yaml |
补充说明:
-
训练相关配置:
- dataset_dir:训练数据集路径
- output_dir:模型保存路径
- num_train_epochs:训练轮数
- learning_rate:学习率
- batch_size:批次大小
- gradient_accumulation_steps:梯度累积步数
-
LoRA特有配置:
- lora_rank:LoRA秩
- lora_alpha:LoRA alpha值
- lora_dropout:LoRA dropout率
- target_modules:目标更新的模块
-
评估配置:
- metric_for_best_model:最优模型选择指标
- evaluation_strategy:评估策略(steps/epoch)
- eval_steps:评估间隔步数
-
推理配置:
- max_length:最大生成长度
- temperature:采样温度
- top_p:核采样参数
- repetition_penalty:重复惩罚系数
-
资源配置:
- fp16:是否使用半精度
- deepspeed:是否使用DeepSpeed
- gradient_checkpointing:是否使用梯度检查点
参考文档:
Q: 命令行推理和Web界面推理有什么区别?
A: 命令行推理和Web界面推理虽然使用相同的配置文件格式,但在使用场景和功能特点上有明显区别:
- 配置文件对比:
# 命令行推理配置 (inference.yaml)
model_name_or_path: "模型路径"
template: "对话模板"
infer_backend: "huggingface"
max_length: 2048
temperature: 0.7
# Web界面配置 (inference.yaml)
model_name_or_path: "模型路径"
template: "对话模板"
infer_backend: "huggingface"
share: true # Web界面特有:是否公开分享
port: 7860 # Web界面特有:服务端口
- 使用方式对比:
| 特性 | 命令行推理 | Web界面推理 |
|---|---|---|
| 启动命令 | llamafactory-cli chat inference.yaml |
llamafactory-cli webchat inference.yaml |
| 交互方式 | 命令行输入输出 | 图形化界面 |
| 使用场景 | 开发测试、快速验证 | 演示展示、用户友好交互 |
| 历史记录 | 仅当前会话可见 | 可视化对话历史 |
| 多轮对话 | 支持但不直观 | 支持且可视化清晰 |
| 特殊功能 | 支持管道和脚本集成 | 支持文件上传、图片显示等 |
- 各自优势:
命令行推理优势:
- 启动速度快
- 资源占用少
- 易于集成到脚本
- 支持管道操作
- 适合自动化测试
Web界面优势:
-
用户界面友好
-
对话历史可视化
-
支持更多交互功能
-
适合演示和分享
-
支持多模态输入输出
- 使用建议:
选择命令行推理的场景:
- 快速测试模型响应
- 集成到自动化流程
- 服务器环境使用
- 资源受限环境
选择Web界面的场景:
- 模型演示展示
- 需要友好交互界面
- 多人协作使用
- 需要可视化对话历史
注意事项:
- 两种方式使用相同的配置文件格式,但Web界面可能需要额外的配置项
- Web界面会占用额外的系统资源(内存、端口等)
- 命令行模式更适合脚本集成和自动化操作
- Web界面更适合非技术用户使用
Q: LLaMA Factory 常用参数详解?
A: 以下是 LLaMA Factory 中最常用的一些重要参数及其详细说明:
- 生成参数(GeneratingArguments):
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| temperature | float | 0.95 | 生成文本的随机性控制。值越高生成越随机,越低则更确定 |
| top_p | float | 0.7 | 控制候选token集合大小。例如0.7表示选择概率最高的tokens直到总和超过0.7 |
| top_k | int | 50 | 仅从概率最高的k个token中采样 |
| max_length | int | 1024 | 文本最大长度(包括输入和输出) |
| max_new_tokens | int | 1024 | 生成文本的最大长度(会覆盖max_length) |
| repetition_penalty | float | 1.0 | 重复token的惩罚系数。>1降低重复概率,<1提高重复概率 |
配置示例:
# 生成配置示例
temperature: 0.7 # 降低随机性
top_p: 0.9 # 提高采样范围
max_new_tokens: 2048 # 允许更长的生成
repetition_penalty: 1.1 # 稍微降低重复
- LoRA 参数(LoraArguments):
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| lora_rank | int | 8 | LoRA的秩,越大可训练的参数越多 |
| lora_alpha | int | None | LoRA缩放系数,通常为lora_rank * 2 |
| lora_dropout | float | 0.0 | LoRA层的dropout率 |
| lora_target | str | “all” | 应用LoRA的模块名称,用逗号分隔 |
配置示例:
# LoRA配置示例
lora_rank: 16 # 增加可训练参数
lora_alpha: 32 # rank * 2
lora_dropout: 0.1 # 添加一些正则化
lora_target: "q_proj,v_proj" # 指定目标层
- 基础训练参数:
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| batch_size | int | 4 | 训练的批次大小 |
| num_train_epochs | int | 3 | 训练轮数 |
| learning_rate | float | 2e-5 | 学习率 |
| gradient_accumulation_steps | int | 1 | 梯度累积步数 |
| fp16 | bool | False | 是否使用半精度训练 |
配置示例:
# 训练配置示例
batch_size: 8
num_train_epochs: 5
learning_rate: 1e-4
gradient_accumulation_steps: 4
fp16: true
- 评估参数(EvalArguments):
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| task | str | None | 评估任务名称(如mmlu_test, ceval_validation) |
| batch_size | int | 4 | 评估的批次大小 |
| n_shot | int | 5 | few-shot示例数量 |
配置示例:
# 评估配置示例
task: "mmlu_test"
batch_size: 8
n_shot: 3
- 重要注意事项:
-
生成参数调优:
- temperature和top_p是控制生成质量的关键
- repetition_penalty可以改善重复问题
- max_length要根据实际需求设置
-
LoRA训练:
- rank值越大效果可能越好但显存占用更多
- alpha通常设置为rank的2倍
- target_modules的选择会影响训练效果
-
训练优化:
- batch_size要根据显存大小调整
- gradient_accumulation_steps可以模拟更大batch
- fp16可以降低显存占用
参考文档:
Q: 关于adapter、原始模型和微调模型的详细解释?
A: 让我们逐一解答这些重要概念:
- adapter 和 adapter_name_or_path 解释:
-
adapter(适配器)是一种参数高效微调(PEFT)的方法,它不直接修改原始模型的权重,而是:
- 在原始模型中添加少量可训练的参数
- 保持原始模型参数不变
- 只训练和保存这些新增的参数
-
adapter_name_or_path 指的是:
- 保存的adapter参数的路径
- 例如:saves/llama3-8b/lora/sft
- 包含了微调过程中学习到的新参数
- adapter与训练方式的关系:
-
不是只有 LoRA 才使用 adapter:
- LoRA 是最常用的 adapter 方法之一
- QLoRA、AdaLoRA 等也使用 adapter
- Prefix-tuning、P-tuning 等也属于 adapter 类方法
-
不使用 adapter 的训练方式:
- 全参数微调(Full Fine-tuning)
- 部分参数冻结训练(Freeze)
- 原始模型(Original Model)说明:
-
原始模型包括:
- 预训练的基座模型(Base Model)
例如:meta-llama/Meta-Llama-3-8B-Instruct - 通过全参数微调得到的模型
例如:直接基于基座模型全量训练得到的模型
- 预训练的基座模型(Base Model)
-
原始模型特点:
- 完整的模型权重
- 不需要额外的adapter
- 可以直接加载使用
- 微调模型推理说明:
-
微调模型不仅限于 LoRA:
- 包括所有使用adapter方法训练的模型
- 包括QLoRA、Prefix-tuning等方法
- 需要同时加载基座模型和adapter
-
推理配置区别:
原始模型配置:
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
template: llama3
infer_backend: huggingface
使用adapter的模型配置:
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct # 基座模型
adapter_name_or_path: saves/llama3-8b/lora/sft # adapter路径
template: llama3
finetuning_type: lora # 微调方法
- 重要概念澄清:
-
基座模型:
- 是经过预训练的原始模型
- 可以直接使用
- 也可以作为微调的基础
-
全参数微调模型:
- 直接修改原始模型权重
- 不使用adapter
- 生成新的完整模型
-
adapter微调模型:
- 基于基座模型
- 使用adapter方法训练
- 需要同时加载基座模型和adapter
使用建议:
-
选择原始模型场景:
- 有足够的计算资源
- 需要最好的性能
- 不需要频繁切换任务
-
选择adapter方法场景:
- 计算资源有限
- 需要快速适应新任务
- 需要多个不同任务版本
Q: LLaMA Factory 全参训练和 LoRA 训练的文件结构详解?
A: LLaMA Factory 在不同的训练方式下会生成不同的文件结构,让我们详细了解这些文件的组织方式和用途。
- 目录结构对比:
全参数训练目录结构:
saves/
└── [model_name]/
└── full/
└── sft/
├── checkpoint-[step]/ # 训练过程中的检查点
│ ├── config.json # 模型配置
│ ├── generation_config.json # 生成配置
│ ├── pytorch_model.bin # 完整模型权重
│ └── training_args.bin # 训练参数
├── tokenizer/ # 分词器相关文件
└── final_checkpoint/ # 最终模型
LoRA 训练目录结构:
saves/
└── [model_name]/
└── lora/
└── sft/
├── checkpoint-[step]/ # 训练过程中的检查点
│ ├── adapter_config.json # LoRA配置
│ ├── adapter_model.safetensors # LoRA权重
│ └── training_args.bin # 训练参数
├── tokenizer/ # 分词器相关文件
└── final_checkpoint/ # 最终模型
- 核心文件说明:
基础文件(两种训练方式都会生成):
| 文件名 | 用途 | 内容说明 | 重要性 |
|---|---|---|---|
| training_args.bin | 保存训练参数 | 学习率、批次大小等配置 | 高 |
| tokenizer_config.json | 分词器配置 | 分词规则和参数 | 高 |
| trainer_state.json | 记录训练状态 | 训练步数、损失等信息 | 中 |
| train_results.json | 训练结果统计 | 最终指标和评估结果 | 中 |
全参数训练特有文件:
| 文件名 | 用途 | 内容说明 | 重要性 |
|---|---|---|---|
| pytorch_model.bin | 存储完整模型权重 | 完整的模型参数(体积大) | 极高 |
| config.json | 定义模型架构 | 模型结构和参数配置 | 高 |
LoRA 训练特有文件:
| 文件名 | 用途 | 内容说明 | 重要性 |
|---|---|---|---|
| adapter_config.json | LoRA适配器配置 | rank、alpha等参数 | 高 |
| adapter_model.safetensors | 存储LoRA权重 | 增量训练的参数(体积小) | 极高 |
- 辅助文件说明:
| 文件名 | 用途 | 内容说明 | 重要性 |
|---|---|---|---|
| all_results.json | 记录评估结果 | 每个检查点的评估指标 | 中 |
| special_tokens_map.json | 特殊token映射 | 特殊标记的处理规则 | 中 |
| merges.txt | BPE合并规则 | 分词器的子词处理规则 | 中 |
- 重要区别:
存储空间对比:
| 训练方式 | 检查点大小 | 存储特点 | 版本管理 |
|---|---|---|---|
| 全参数训练 | 几GB到几十GB | 需要大量存储空间 | 不适合保存多个版本 |
| LoRA训练 | 几MB到几十MB | 存储空间需求小 | 可以方便地保存多个版本 |
加载方式对比:
| 训练方式 | 加载要求 | 推理速度 | 灵活性 |
|---|---|---|---|
| 全参数训练 | 直接加载完整模型 | 较快 | 较低 |
| LoRA训练 | 需要基座模型 + 适配器权重 | 需要合并计算 | 高 |
- 使用建议:
文件管理:
- 定期清理旧检查点,避免占用过多存储空间
- 为重要的中间版本添加说明文件
- 使用有意义的命名方式标记不同版本
- 重要检查点单独备份
备份策略:
| 训练方式 | 重点备份文件 | 备份频率 | 注意事项 |
|---|---|---|---|
| 全参数训练 | pytorch_model.bin + 配置文件 | 较低 | 需要大容量存储设备 |
| LoRA训练 | adapter_model.safetensors | 可以频繁 | 可以保存多个实验版本 |
-
实践建议:
-
版本管理:
- 使用有意义的检查点命名
- 记录每个版本的训练参数
- 保存实验日志和评估结果
-
存储优化:
- 只保留必要的检查点
- 压缩存储不常用的版本
- 使用版本控制工具管理配置文件
-
推理部署:
- 全参数模型:直接使用final_checkpoint
- LoRA模型:确保基座模型和适配器版本匹配
- 保存推理配置文件
Q: LoRA 训练的本质是什么?适配器如何工作?
A: LoRA 训练的核心是训练一个轻量级的适配器(adapter),而不是完整的模型。让我们详细了解这个概念:
- LoRA 训练的本质:
- 确实只训练出一个适配器(adapter)
- 不是训练出两个完整的模型
- 基座模型在训练过程中保持不变
- 适配器的特点:
- 只包含训练过程中学到的参数变化
- 文件体积很小(通常只有几MB到几十MB)
- 不能独立工作,必须依附于基座模型
-
工作原理:
基座模型(7B/13B等) 适配器(几MB) ↓ ↓ [原始参数] + [参数变化] = 最终效果 -
使用流程:
- 推理时需要同时加载:
- 基座模型(例如:Meta-Llama-3-8B-Instruct)
- 适配器文件(例如:saves/llama3-8b/lora/sft)
- 系统会自动将适配器的参数变化应用到基座模型上
这就像是:
- 基座模型是一台完整的机器
- 适配器是一个微小的"调节器"
- 必须两者配合才能发挥训练后的效果
配置文件示例:
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct # 基座模型
adapter_name_or_path: saves/llama3-8b/lora/sft # 适配器路径
这种设计的优势:
-
节省存储空间:
- 不需要存储完整模型副本
- 适配器文件体积小
-
便于切换任务:
- 可以为同一个基座模型训练多个适配器
- 不同任务使用不同适配器
-
高效灵活:
- 适配器体积小,易于分享
- 便于部署和版本管理
- 可以快速切换不同的训练版本
Q: model_name_or_path 和 adapter_name_or_path 的路径要求是什么?
A: 让我们详细了解这两种路径的具体要求:
- model_name_or_path 路径说明:
支持两种形式:
-
在线模型仓库ID:
meta-llama/Meta-Llama-3-8B-Instruct # Hugging Face模型 modelscope/Llama-2-7b-chat # ModelScope模型 -
本地模型路径:
/path/to/model/ # 本地完整模型目录 saves/llama2-7b/full/sft/ # 项目相对路径
本地模型目录必需文件:
model目录/
├── config.json # 必需:模型配置文件
├── pytorch_model.bin # 必需:模型权重文件(或.safetensors)
├── tokenizer.json # 必需:分词器文件
├── tokenizer_config.json # 必需:分词器配置
└── special_tokens_map.json # 可选:特殊token映射
- adapter_name_or_path 路径说明:
支持的路径形式:
saves/llama2-7b/lora/sft/ # 项目中的LoRA保存路径
/absolute/path/to/adapter/ # 绝对路径
adapter目录必需文件:
adapter目录/
├── adapter_config.json # 必需:adapter配置文件
├── adapter_model.safetensors # 必需:adapter权重文件
└── training_args.bin # 可选但推荐:训练参数记录
- 路径验证检查表:
基座模型路径检查:
- config.json 存在且格式正确
- 模型权重文件存在(.bin或.safetensors)
- 分词器相关文件完整
- 文件权限正确(可读)
适配器路径检查:
-
adapter_config.json 存在
-
adapter权重文件存在
-
配置与基座模型匹配
-
文件格式版本兼容
- 常见错误和解决方案:
基座模型常见问题:
- 路径不完整:需要指向包含完整文件集的目录
- 权限问题:确保有读取权限
- 文件缺失:检查必需文件是否完整
- 版本不匹配:确认模型版本与代码兼容
适配器常见问题:
-
配置不匹配:adapter_config.json与训练时不一致
-
路径层级错误:需要指向包含adapter文件的直接父目录
-
文件损坏:重新导出或下载adapter文件
-
命名规范:确保文件名符合要求
- 使用建议:
路径组织:
project_root/
├── saves/
│ └── model_name/
│ ├── full/
│ │ └── sft/
│ │ └── [完整模型文件]
│ └── lora/
│ └── sft/
│ └── [adapter文件]
└── configs/
└── [配置文件]
最佳实践:
-
使用规范的目录结构
-
保持文件命名一致性
-
定期验证文件完整性
-
做好版本管理和备份
-
配置示例:
正确的配置:
# 使用在线模型
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
# 使用本地模型
model_name_or_path: /path/to/model/directory
adapter_name_or_path: /path/to/adapter/directory
错误的配置:
# ❌ 错误:指向单个文件而不是目录
model_name_or_path: /path/to/model/pytorch_model.bin
# ❌ 错误:adapter路径不完整
adapter_name_or_path: saves/llama3-8b/lora
Q: llama3_lora_sft.yaml 训练配置文件详解?
A: 让我们详细分析 LoRA 训练配置文件的每个参数及其作用:
-
模型基础配置:
### model model_name_or_path: /data2/wjj/model/qwen2.5-3b-instruct # 基座模型路径 trust_remote_code: true # 信任远程代码
参数说明:
-
model_name_or_path:- 作用:指定基座模型的路径或在线模型ID
- 格式:本地路径或Hugging Face/ModelScope模型ID
- 示例:可以是本地路径或"Qwen/Qwen1.5-7B-Chat"等
-
trust_remote_code:- 作用:是否信任模型提供的自定义代码
- 默认值:false
- 使用场景:加载一些特殊模型(如Qwen、ChatGLM等)时需要设置为true
-
训练方法配置:
### method stage: sft # 训练阶段 do_train: true # 是否进行训练 finetuning_type: lora # 微调方法 deepspeed: examples/deepspeed/ds_z3_config.json # DeepSpeed配置 lora_rank: 256 # LoRA秩 lora_target: all # LoRA目标层
参数说明:
-
stage:- 作用:指定训练阶段
- 可选值:pt(预训练)、sft(有监督微调)、rm(奖励模型)、ppo、dpo
- 使用场景:根据任务类型选择
-
do_train:- 作用:是否执行训练
- 默认值:true
- 注意:设为false时仅加载模型不训练
-
finetuning_type:- 作用:指定微调方法
- 可选值:lora、qlora、full(全参数)等
- 使用场景:根据资源和需求选择
-
deepspeed:- 作用:指定DeepSpeed配置文件
- 用途:启用分布式训练优化
- 可选:不需要时可以删除此参数
-
lora_rank:- 作用:LoRA的秩,决定可训练参数量
- 推荐值:8~256之间
- 注意:值越大效果可能越好但显存占用更多
-
lora_target:- 作用:指定应用LoRA的模型层
- 可选值:all或特定层名称(如q_proj,v_proj)
- 使用场景:可以针对特定层进行微调
-
数据集配置:
### dataset dataset: v2_train # 数据集名称 template: qwen # 对话模板 cutoff_len: 1024 # 最大序列长度 preprocessing_num_workers: 16 # 数据预处理线程数 overwrite_cache: true # 是否重写缓存
参数说明:
-
dataset:- 作用:指定训练数据集
- 格式:数据集名称或路径
- 注意:需要符合LLaMA Factory的数据格式要求
-
template:- 作用:指定对话模板
- 选项:根据模型选择(如qwen、llama、chatglm等)
- 重要性:必须与模型类型匹配
-
cutoff_len:- 作用:限制输入序列的最大长度
- 建议:根据显存和任务需求设置
- 注意:过长会增加显存使用
-
preprocessing_num_workers:- 作用:数据预处理的并行线程数
- 建议:根据CPU核心数设置
- 影响:影响数据加载速度
-
输出配置:
### output output_dir: /data2/vehicle_command/model/qwen2.5_3b_command # 输出目录 logging_steps: 10 # 日志记录间隔 save_steps: 5000 # 保存检查点间隔 plot_loss: true # 是否绘制损失曲线 overwrite_output_dir: true # 是否覆盖输出目录
参数说明:
-
output_dir:- 作用:指定模型和日志的保存路径
- 格式:完整的目录路径
- 注意:确保有写入权限
-
logging_steps:- 作用:每多少步记录一次日志
- 建议:较小值有助于监控训练过程
- 范围:通常5~50之间
-
save_steps:- 作用:每多少步保存一次检查点
- 建议:根据训练总步数合理设置
- 注意:过于频繁会占用存储空间
-
plot_loss:- 作用:是否生成损失曲线图
- 用途:帮助分析训练过程
- 建议:建议开启以便监控训练
-
训练超参数:
### train per_device_train_batch_size: 4 # 每个设备的批次大小 gradient_accumulation_steps: 8 # 梯度累积步数 learning_rate: 2.0e-5 # 学习率 num_train_epochs: 1.0 # 训练轮数 lr_scheduler_type: cosine # 学习率调度器 warmup_ratio: 0.1 # 预热比例 bf16: true # 是否使用bf16精度 ddp_timeout: 180000 # DDP超时时间
参数说明:
-
per_device_train_batch_size:- 作用:每个GPU的批次大小
- 建议:根据显存大小调整
- 注意:过大可能导致OOM
-
gradient_accumulation_steps:- 作用:梯度累积步数
- 用途:模拟更大的批次大小
- 计算:实际批次大小 = per_device_train_batch_size * gradient_accumulation_steps
-
learning_rate:- 作用:学习率大小
- 推荐范围:1e-5 ~ 5e-5
- 注意:太大可能不稳定,太小收敛慢
-
num_train_epochs:- 作用:训练轮数
- 建议:根据数据集大小和任务难度设置
- 范围:通常1~5轮
-
lr_scheduler_type:- 作用:学习率调度策略
- 选项:cosine、linear、constant等
- 推荐:cosine通常效果较好
-
warmup_ratio:- 作用:学习率预热比例
- 范围:通常0.1~0.3
- 作用:帮助训练初期稳定
-
bf16:- 作用:是否使用bf16精度训练
- 优势:相比fp16更稳定
- 要求:需要硬件支持
-
评估配置(已注释):
### eval # eval_dataset: alpaca_en_demo # val_size: 0.1 # per_device_eval_batch_size: 1 # eval_strategy: steps # eval_steps: 500
这些是可选的评估参数,可以根据需要取消注释并设置:
eval_dataset:评估数据集val_size:验证集比例eval_strategy:评估策略eval_steps:评估间隔
使用建议:
-
显存优化:
- 适当调整 batch_size 和 gradient_accumulation_steps
- 使用 bf16 或 fp16 精度
- 根据需要调整 cutoff_len
-
训练效果优化:
- 合理设置 learning_rate 和 warmup_ratio
- 调整 lora_rank 寻找效果与效率平衡点
- 适当增加 num_train_epochs
-
监控和调试:
- 使用较小的 logging_steps 监控训练
- 开启 plot_loss 观察损失变化
- 合理设置 save_steps 保存检查点
Q: LLaMA Factory 的 API 调用结构是什么?
A: LLaMA Factory 提供了类似 OpenAI API 的 REST API 服务接口。让我们详细了解其结构:
- API 服务启动:
# 启动API服务
API_PORT=8000 CUDA_VISIBLE_DEVICES=0 llamafactory-cli api inference_config.yaml
- API 端点(Endpoints):
主要端点:
POST /v1/chat/completions # 聊天补全接口
POST /v1/completions # 文本补全接口
GET /v1/models # 获取模型信息
- 请求结构:
Chat Completions 请求格式:
{
"messages": [
{
"role": "system",
"content": "你是一个AI助手"
},
{
"role": "user",
"content": "你好"
}
],
"model": "qwen2.5-3b", // 可选,模型标识符
"temperature": 0.7, // 可选,生成温度
"top_p": 0.9, // 可选,核采样参数
"max_tokens": 2048, // 可选,最大生成长度
"stream": false, // 可选,是否流式输出
"stop": [" ", "Human:"], // 可选,停止词
"frequency_penalty": 0, // 可选,频率惩罚
"presence_penalty": 0 // 可选,存在惩罚
}
Completions 请求格式:
{
"prompt": "你好,请介绍一下你自己",
"model": "qwen2.5-3b",
"temperature": 0.7,
"max_tokens": 2048,
"stream": false
}
- 响应结构:
Chat Completions 响应格式:
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677858242,
"model": "qwen2.5-3b",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "你好!我是一个AI助手。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 20,
"total_tokens": 30
}
}
流式响应格式:
{
"id": "chatcmpl-123",
"object": "chat.completion.chunk",
"created": 1677858242,
"model": "qwen2.5-3b",
"choices": [
{
"index": 0,
"delta": {
"content": "你"
},
"finish_reason": null
}
]
}
- Python 调用示例:
基础调用:
import requests
def chat_completion(messages, api_url="http://localhost:8000/v1/chat/completions"):
headers = {"Content-Type": "application/json"}
data = {
"messages": messages,
"temperature": 0.7,
"top_p": 0.9,
"max_tokens": 2048
}
response = requests.post(api_url, headers=headers, json=data)
return response.json()
# 使用示例
messages = [
{"role": "system", "content": "你是一个AI助手"},
{"role": "user", "content": "你好"}
]
result = chat_completion(messages)
print(result["choices"][0]["message"]["content"])
流式调用:
import requests
import json
def stream_chat_completion(messages, api_url="http://localhost:8000/v1/chat/completions"):
headers = {"Content-Type": "application/json"}
data = {
"messages": messages,
"temperature": 0.7,
"stream": True
}
response = requests.post(api_url, headers=headers, json=data, stream=True)
for line in response.iter_lines():
if line:
chunk = json.loads(line.decode("utf-8"))
if chunk["choices"][0]["delta"].get("content"):
yield chunk["choices"][0]["delta"]["content"]
# 使用示例
messages = [
{"role": "system", "content": "你是一个AI助手"},
{"role": "user", "content": "你好"}
]
for token in stream_chat_completion(messages):
print(token, end="", flush=True)
- 错误处理:
API 可能返回的错误格式:
{
"error": {
"message": "错误信息",
"type": "错误类型",
"param": null,
"code": "错误代码"
}
}
常见错误类型:
-
400 Bad Request: 请求格式错误
-
401 Unauthorized: 认证失败
-
404 Not Found: 资源不存在
-
429 Too Many Requests: 请求过于频繁
-
500 Internal Server Error: 服务器内部错误
-
最佳实践:
-
错误处理:
def safe_chat_completion(messages, api_url="http://localhost:8000/v1/chat/completions"): try: response = requests.post(api_url, json={"messages": messages}) response.raise_for_status() # 检查HTTP错误 return response.json() except requests.exceptions.RequestException as e: print(f"API调用错误: {e}") return None except json.JSONDecodeError: print("响应解析错误") return None -
重试机制:
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
def retry_chat_completion(messages):
response = requests.post(“http://localhost:8000/v1/chat/completions”,
json={“messages”: messages})
response.raise_for_status()
return response.json()
3. 批量处理:
```python
def batch_process(messages_list, batch_size=5):
results = []
for i in range(0, len(messages_list), batch_size):
batch = messages_list[i:i + batch_size]
batch_results = [chat_completion(msgs) for msgs in batch]
results.extend(batch_results)
return results
-
注意事项:
-
性能优化:
- 使用连接池管理HTTP连接
- 适当的批处理大小
- 合理的超时设置
-
安全考虑:
- 添加适当的认证机制
- 设置请求速率限制
- 数据验证和清理
-
监控和日志:
- 记录API调用情况
- 监控响应时间
- 错误追踪和报告
Q: LLaMA Factory API 常见错误及解决方案?
A: 让我们分析一些常见的API错误及其解决方案:
- 缺少必需字段错误:
{
"object": "error",
"message": "[{'type': 'missing', 'loc': ('body', 'model'), 'msg': 'Field required'}]",
"type": "BadRequestError",
"code": 400
}
错误分析:
- 错误类型:BadRequestError (400)
- 具体原因:请求体中缺少必需的
model字段 - 影响:API无法处理请求,直接返回错误
解决方案:
-
确保请求体包含所有必需字段:
model:必需,指定使用的模型标识符messages:必需,包含对话历史
-
正确的请求格式:
{ "messages": [...], "model": "qwen2.5-3b_intent", // 必需字段 "temperature": 0.4, // 可选参数 "max_tokens": 128 // 可选参数 } -
字段说明:
-
必需字段:
model:模型标识符messages:对话消息数组
-
可选字段:
temperature:生成温度top_p:核采样参数max_tokens:最大生成长度
- 最佳实践:
- 创建请求前检查必需字段
- 使用try-catch捕获可能的错误
- 实现错误重试机制
- 保持请求格式的一致性
示例代码:
def safe_chat_completion(messages, model_id, **kwargs):
"""安全的API调用函数"""
# 确保必需字段存在
data = {
"messages": messages,
"model": model_id, # 必需字段
**kwargs # 其他可选参数
}
try:
response = requests.post(API_URL, json=data)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"API调用错误: {e}")
return None
使用示例:
messages = [
{"role": "system", "content": "根据我的回答分类我的意图"},
{"role": "user", "content": "我好热"}
]
response = safe_chat_completion(
messages=messages,
model_id="qwen2.5-3b_intent",
temperature=0.4,
max_tokens=128
)
Q: nvitop 的常用命令和快捷键有哪些?
A: nvitop 是一个强大的 NVIDIA GPU 监控工具,提供了丰富的命令和交互式界面。以下是常用的命令和操作方式:
- 基础命令:
# 启动交互式界面(最常用)
nvitop
# 以紧凑模式启动
nvitop --monitor compact
# 显示指定GPU的信息
nvitop --only 0 1
# 指定刷新间隔(秒)
nvitop --interval 2.0
# 只显示一次信息后退出
nvitop --once
- 进程监控命令:
# 按用户筛选GPU进程
nvitop --user username
# 按进程ID筛选
nvitop --pid 1234 5678
# 只显示计算任务
nvitop --only-compute
# 只显示图形任务
nvitop --only-graphics
- 显示选项:
# 使用ASCII字符显示(适用于某些终端)
nvitop --ascii
# 强制使用彩色输出
nvitop --force-color
# 使用浅色主题
nvitop --light
- 交互式界面快捷键:
| 快捷键 | 功能 |
|---|---|
| q, Ctrl+C | 退出程序 |
| h, ? | 显示帮助 |
| f | 切换全屏模式 |
| 1, 2, 3 | 切换不同显示模式 |
| m | 切换显示模式 |
| p | 暂停/继续更新 |
| ↑, ↓ | 选择进程 |
| Space | 标记/取消标记选中的进程 |
| k | 发送SIGTERM信号到选中的进程 |
| K | 发送SIGKILL信号到选中的进程 |
| s | 按列排序 |
| r | 反转排序顺序 |
| c | 配置显示的列 |
| w | 保存当前配置 |
- 显示字段说明:
-
GPU信息:
Util:GPU利用率Mem:显存使用情况Power:功耗Temp:温度Fan:风扇转速
-
进程信息:
PID:进程IDUser:用户名GPU-Mem:显存使用量CPU%:CPU使用率Host%:主机内存使用率Command:命令行
- 常用监控场景:
训练模型时:
# 持续监控特定GPU
nvitop --only 0 --monitor full
# 监控特定用户的GPU任务
nvitop --user $USER
调试时:
# 完整信息模式
nvitop --monitor full
# 快速查看状态
nvitop --once
- 性能优化建议:
- 使用 --once 快速查看状态
- 适当增加刷新间隔(–interval参数)
- 按需选择显示的GPU(–only参数)
- 使用紧凑模式减少输出(–monitor compact)
- 及时清理僵尸进程
- 注意事项:
- 需要NVIDIA驱动支持
- 某些功能需要root权限
- 大量进程时可能影响性能
- 建议配合nvidia-smi使用
- 保存配置需要写权限
Q: 如何在 nvitop 中实现频谱样式显示?
A: nvitop 支持频谱样式的显示模式,可以更直观地展示 GPU 使用情况。以下是具体的实现方法:
- 基础频谱显示命令:
# 启用频谱样式显示
nvitop --colorful --monitor full
# 调整更新间隔获得更流畅的显示效果
nvitop --colorful --monitor full --interval 0.5
# 在支持256色的终端中获得更好的显示效果
TERM=xterm-256color nvitop --colorful --monitor full
- 显示效果优化:
# 使用浅色主题
nvitop --colorful --light
# 强制使用彩色输出
nvitop --colorful --force-color
# 自定义显示的GPU
nvitop --colorful --only 0,1 --monitor full
# 显示更多历史数据
nvitop --colorful --monitor full --history-size 100
- 注意事项:
-
终端要求:
- 确保终端支持彩色显示
- 推荐使用支持Unicode的现代终端
- 某些终端可能需要设置TERM环境变量
-
显示优化:
- 调整终端窗口大小以获得更好的显示效果
- 选择合适的字体
- 根据需要调整更新频率
-
性能考虑:
- 频谱显示可能会增加CPU使用率
- 更新频率越高,系统负担越大
- 建议根据实际需求选择合适的更新间隔
- 最佳实践:
-
监控训练过程:
# 持续监控特定GPU的详细信息 nvitop --colorful --only 0 --monitor full --interval 1 -
系统调试:
# 显示所有GPU的详细信息 nvitop --colorful --monitor full --force-color -
长期监控:
# 使用较长的更新间隔减少系统负担 nvitop --colorful --monitor full --interval 2 --history-size 200
- 显示内容说明:
-
频谱图表现了:
- GPU利用率历史变化
- 显存使用率趋势
- 温度变化曲线
- 功耗波动情况
-
颜色含义:
- 不同颜色代表不同的数值区间
- 颜色深浅表示数值大小
- 图表动态更新展示实时变化
这种频谱样式的显示方式可以帮助用户:
- 直观了解GPU使用状态
- 发现性能瓶颈
- 监控长期运行趋势
- 优化资源使用效率
Q: 配置文件类型对比
| 配置类型 | 基础配置项 | 额外配置项 | 使用场景 |
|---|---|---|---|
| 原始模型配置 | - model_name_or_path - template - infer_backend |
- max_length - temperature - top_p |
直接使用预训练模型 |
| 微调模型配置 | - model_name_or_path - template - infer_backend |
- adapter_name_or_path - finetuning_type - batch_size |
使用经过微调的模型 |
| 多模态模型配置 | - model_name_or_path - template - infer_backend |
- vision_config - image_processor |
处理图像等多模态任务 |
Q: LLaMA Factory 主要操作和配置总览
| 操作类型 | 配置文件 | 主要配置项 | 执行命令 | 作用 |
|---|---|---|---|---|
| SFT训练 | train_sft.yaml | - model_name_or_path - dataset_dir - output_dir - learning_rate |
llamafactory-cli train train_sft.yaml |
全参数指令微调训练 |
| LoRA训练 | train_lora.yaml | - model_name_or_path - dataset_dir - lora_rank - lora_alpha |
llamafactory-cli train train_lora.yaml |
使用LoRA方法进行参数高效微调 |
| 模型评估 | eval.yaml | - model_name_or_path - dataset_dir - metric_for_best_model |
llamafactory-cli eval eval.yaml |
评估模型性能 |
| 命令行推理 | inference.yaml | - model_name_or_path - template - max_length |
llamafactory-cli chat inference.yaml |
命令行交互式对话 |
| Web界面 | inference.yaml | - model_name_or_path - template - share |
llamafactory-cli webchat inference.yaml |
启动Web交互界面 |
| API服务 | api.yaml | - model_name_or_path - template - port |
llamafactory-cli api api.yaml |
部署REST API服务 |
| 批量推理 | batch_infer.yaml | - model_name_or_path - dataset - batch_size |
python scripts/vllm_infer.py --config batch_infer.yaml |
对大规模数据集进行批量推理 |
Q: 命令行推理和Web界面推理对比
| 特性 | 命令行推理 | Web界面推理 |
|---|---|---|
| 启动命令 | llamafactory-cli chat inference.yaml |
llamafactory-cli webchat inference.yaml |
| 交互方式 | 命令行输入输出 | 图形化界面 |
| 使用场景 | 开发测试、快速验证 | 演示展示、用户友好交互 |
| 历史记录 | 仅当前会话可见 | 可视化对话历史 |
| 多轮对话 | 支持但不直观 | 支持且可视化清晰 |
| 特殊功能 | 支持管道和脚本集成 | 支持文件上传、图片显示等 |
Q: 常用参数分类对比
| 参数类型 | 参数名称 | 默认值 | 说明 |
|---|---|---|---|
| 生成参数 | temperature | 0.95 | 生成文本的随机性控制 |
| top_p | 0.7 | 控制候选token集合大小 | |
| top_k | 50 | 仅从概率最高的k个token中采样 | |
| max_length | 1024 | 文本最大长度 | |
| LoRA参数 | lora_rank | 8 | LoRA的秩 |
| lora_alpha | None | LoRA缩放系数 | |
| lora_dropout | 0.0 | LoRA层的dropout率 | |
| 基础训练参数 | batch_size | 4 | 训练的批次大小 |
| num_train_epochs | 3 | 训练轮数 | |
| learning_rate | 2e-5 | 学习率 | |
| 评估参数 | task | None | 评估任务名称 |
| batch_size | 4 | 评估的批次大小 | |
| n_shot | 5 | few-shot示例数量 |
Q: 全参训练和 LoRA 训练的文件结构对比
| 特性 | 全参数训练 | LoRA 训练 |
|---|---|---|
| 目录结构 | saves/[model_name]/full/sft/ | saves/[model_name]/lora/sft/ |
| 核心文件 | - pytorch_model.bin - config.json - training_args.bin |
- adapter_model.safetensors - adapter_config.json - training_args.bin |
| 存储空间 | 几GB到几十GB | 几MB到几十MB |
| 版本管理 | 不适合保存多个版本 | 可以方便地保存多个版本 |
| 加载方式 | 直接加载完整模型 | 需要基座模型 + 适配器权重 |
| 推理速度 | 较快 | 需要合并计算 |
| 灵活性 | 较低 | 高 |
Q: 适配器(Adapter)工作原理对比
| 方面 | 全参数训练 | LoRA 训练 |
|---|---|---|
| 训练对象 | 完整模型参数 | 轻量级适配器 |
| 基座模型 | 直接修改 | 保持不变 |
| 参数存储 | 存储全部参数 | 只存储参数变化 |
| 文件大小 | 较大 | 很小 |
| 使用方式 | 独立使用 | 依附基座模型 |
| 任务切换 | 需要完整模型副本 | 切换适配器即可 |
| 部署难度 | 较高 | 较低 |
Q: 路径要求对比
| 路径类型 | 支持的形式 | 必需文件 | 注意事项 |
|---|---|---|---|
| model_name_or_path | - 在线模型仓库ID - 本地模型路径 |
- config.json - pytorch_model.bin - tokenizer.json - tokenizer_config.json |
- 路径必须完整 - 文件集合完整 - 权限正确 |
| adapter_name_or_path | - 项目相对路径 - 绝对路径 |
- adapter_config.json - adapter_model.safetensors - training_args.bin |
- 配置匹配 - 版本兼容 - 指向正确目录 |
Q: nvitop 命令和快捷键总览
| 类别 | 命令/快捷键 | 功能 | 说明 |
|---|---|---|---|
| 基础命令 | nvitop | 启动交互式界面 | 最常用的监控方式 |
| nvitop --monitor compact | 紧凑模式启动 | 节省显示空间 | |
| nvitop --interval 2.0 | 指定刷新间隔 | 控制更新频率 | |
| 进程监控 | nvitop --user username | 按用户筛选 | 监控特定用户的任务 |
| nvitop --pid 1234 | 按进程ID筛选 | 监控特定进程 | |
| nvitop --only-compute | 只显示计算任务 | 过滤显示内容 | |
| 交互快捷键 | q, Ctrl+C | 退出程序 | 随时可用 |
| h, ? | 显示帮助 | 查看命令说明 | |
| f | 切换全屏模式 | 扩大显示区域 | |
| m | 切换显示模式 | 改变显示方式 | |
| k | 发送SIGTERM信号 | 温和地结束进程 | |
| K | 发送SIGKILL信号 | 强制结束进程 |
Q: nvitop 显示字段说明
| 类别 | 字段 | 含义 | 重要性 |
|---|---|---|---|
| GPU信息 | Util | GPU利用率 | 高 |
| Mem | 显存使用情况 | 高 | |
| Power | 功耗 | 中 | |
| Temp | 温度 | 中 | |
| Fan | 风扇转速 | 低 | |
| 进程信息 | PID | 进程ID | 高 |
| User | 用户名 | 中 | |
| GPU-Mem | 显存使用量 | 高 | |
| CPU% | CPU使用率 | 中 | |
| Host% | 主机内存使用率 | 中 | |
| Command | 命令行 | 高 |
Q: nvitop 频谱显示模式配置
| 配置类型 | 命令 | 作用 | 注意事项 |
|---|---|---|---|
| 基础频谱显示 | nvitop --colorful --monitor full |
启用频谱样式显示 | 需要终端支持彩色显示 |
| 流畅显示优化 | nvitop --colorful --monitor full --interval 0.5 |
提高更新频率 | 更新频率越高系统负担越大 |
| 终端优化 | TERM=xterm-256color nvitop --colorful --monitor full |
获得更好的显示效果 | 需要终端支持256色 |
| 主题切换 | nvitop --colorful --light |
使用浅色主题 | 适合浅色终端背景 |
| 强制彩色 | nvitop --colorful --force-color |
强制使用彩色输出 | 某些终端可能显示异常 |
| 选择性显示 | nvitop --colorful --only 0,1 --monitor full |
显示指定GPU | 减少输出内容 |
| 历史数据 | nvitop --colorful --monitor full --history-size 100 |
显示更多历史数据 | 占用更多内存 |
Q: 频谱显示的应用场景
| 场景 | 推荐配置 | 优势 | 注意事项 |
|---|---|---|---|
| 监控训练过程 | nvitop --colorful --only 0 --monitor full --interval 1 |
- 实时监控单GPU - 合理的更新频率 - 资源占用适中 |
长期运行时注意系统负载 |
| 系统调试 | nvitop --colorful --monitor full --force-color |
- 显示所有GPU - 强制彩色输出 - 便于问题诊断 |
输出信息较多 |
| 长期监控 | nvitop --colorful --monitor full --interval 2 --history-size 200 |
- 较低系统负担 - 更多历史记录 - 适合长期运行 |
更新频率较低 |
Q: 频谱显示的颜色含义
| 颜色类型 | 数值范围 | 表示含义 | 使用场景 |
|---|---|---|---|
| 绿色 | 0-30% | 低负载 | 空闲或轻负载状态 |
| 黄色 | 31-70% | 中等负载 | 正常工作负载 |
| 红色 | 71-100% | 高负载 | 满负载或过载状态 |
| 蓝色 | 特殊值 | 监控指标 | 显存、温度等指标 |
| 灰色 | 0% | 未使用 | 空闲资源 |
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)