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)是在模型训练完成后进行的一个重要验证步骤,用于评估模型在实际应用场景中的表现。

主要作用:

  1. 验证模型性能:

    • 测试模型对新输入的响应质量
    • 检查生成文本的连贯性和准确性
    • 评估响应时间和计算资源使用情况
  2. 功能测试:

    • 验证模型是否能正确处理各种输入格式
    • 测试特殊字符、长文本等边界情况
    • 检查模型是否保持了预期的行为特征
  3. 实际应用测试:

    • 模拟真实场景下的用户输入
    • 测试模型在具体任务上的表现
    • 验证模型是否满足特定领域的要求

使用方法:

python /data2/vehicle_command/LLaMA-Factory/scripts/full_test.py

这个测试脚本会:

  • 运行一系列预定义的测试用例
  • 收集模型响应和性能指标
  • 生成测试报告供分析

建议在以下情况下进行推理测试:

  • 完成模型训练后
  • 修改模型配置后
  • 部署到新环境前
  • 需要验证模型稳定性时

Q: LLaMA Factory 的推理方式和配置详解?

A: LLaMA Factory 支持多种推理方式,每种方式都有其特定的配置要求和使用场景。

  1. 推理方式概述:
  • 命令行对话:适合快速测试和开发

    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
    
  1. 推理引擎选择:
  • Huggingface(默认):

    • 兼容性好
    • 适用性广
    • 配置简单
  • VLLM:

    • 推理速度更快
    • 需要额外配置
    • 通过 infer_backend: vllm 启用
  1. 配置文件详解:

原始模型配置示例:

### 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等
    • 必须与训练时使用的方法一致
  1. 重要注意事项:
  • 配置文件要求:

    • 模型路径必须存在
    • 模型与模板必须匹配
    • 微调模型需要额外配置项
  • 推理引擎选择:

    • Huggingface:通用性好,默认选项
    • VLLM:性能更好,需要额外配置
  • 资源使用:

    • 根据模型大小选择合适的GPU
    • 注意显存使用情况
    • 考虑批处理大小的影响
  1. 使用建议:
  • 开发测试阶段:

    • 使用命令行对话
    • 选择Huggingface后端
    • 关注日志输出
  • 生产部署阶段:

    • 考虑使用VLLM后端
    • 配置API服务
    • 做好性能优化
  • 大规模推理:

    • 使用VLLM批量推理
    • 优化批处理参数
    • 注意结果保存

Q: inference_config.yaml 配置文件如何编写?

A: inference_config.yaml 是 LLaMA Factory 推理配置文件,根据不同使用场景有不同的配置方式。以下是详细说明:

  1. 基础配置项(所有场景必需):
model_name_or_path: "模型路径"    # 模型路径或huggingface模型名称
template: "对话模板"             # 如llama3、vicuna等
infer_backend: "推理后端"        # 可选 huggingface 或 vllm
  1. 微调模型额外配置:
adapter_name_or_path: "适配器路径"  # 如 saves/llama3-8b/lora/sft
finetuning_type: "微调类型"        # 如 lora、qlora 等
  1. 完整配置示例:

原始模型配置:

# 原始模型配置示例
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

重要说明:

  1. model_name_or_path

    • 可以是本地模型路径
    • 可以是Hugging Face模型名称
    • 必须与template匹配
  2. infer_backend选择:

    • huggingface:默认选项,适用性更广
    • vllm:推理速度更快,但可能有兼容性限制
  3. template选择:

    • 需要与模型类型匹配
    • 常用选项:llama3、vicuna、chatglm等
    • 影响对话格式和生成效果
  4. 性能相关参数:

    • 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

补充说明:

  1. 训练相关配置:

    • dataset_dir:训练数据集路径
    • output_dir:模型保存路径
    • num_train_epochs:训练轮数
    • learning_rate:学习率
    • batch_size:批次大小
    • gradient_accumulation_steps:梯度累积步数
  2. LoRA特有配置:

    • lora_rank:LoRA秩
    • lora_alpha:LoRA alpha值
    • lora_dropout:LoRA dropout率
    • target_modules:目标更新的模块
  3. 评估配置:

    • metric_for_best_model:最优模型选择指标
    • evaluation_strategy:评估策略(steps/epoch)
    • eval_steps:评估间隔步数
  4. 推理配置:

    • max_length:最大生成长度
    • temperature:采样温度
    • top_p:核采样参数
    • repetition_penalty:重复惩罚系数
  5. 资源配置:

    • fp16:是否使用半精度
    • deepspeed:是否使用DeepSpeed
    • gradient_checkpointing:是否使用梯度检查点

参考文档:

Q: 命令行推理和Web界面推理有什么区别?

A: 命令行推理和Web界面推理虽然使用相同的配置文件格式,但在使用场景和功能特点上有明显区别:

  1. 配置文件对比:
# 命令行推理配置 (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界面特有:服务端口
  1. 使用方式对比:
特性 命令行推理 Web界面推理
启动命令 llamafactory-cli chat inference.yaml llamafactory-cli webchat inference.yaml
交互方式 命令行输入输出 图形化界面
使用场景 开发测试、快速验证 演示展示、用户友好交互
历史记录 仅当前会话可见 可视化对话历史
多轮对话 支持但不直观 支持且可视化清晰
特殊功能 支持管道和脚本集成 支持文件上传、图片显示等
  1. 各自优势:

命令行推理优势:

  • 启动速度快
  • 资源占用少
  • 易于集成到脚本
  • 支持管道操作
  • 适合自动化测试

Web界面优势:

  • 用户界面友好

  • 对话历史可视化

  • 支持更多交互功能

  • 适合演示和分享

  • 支持多模态输入输出

  1. 使用建议:

选择命令行推理的场景:

  • 快速测试模型响应
  • 集成到自动化流程
  • 服务器环境使用
  • 资源受限环境

选择Web界面的场景:

  • 模型演示展示
  • 需要友好交互界面
  • 多人协作使用
  • 需要可视化对话历史

注意事项:

  • 两种方式使用相同的配置文件格式,但Web界面可能需要额外的配置项
  • Web界面会占用额外的系统资源(内存、端口等)
  • 命令行模式更适合脚本集成和自动化操作
  • Web界面更适合非技术用户使用

Q: LLaMA Factory 常用参数详解?

A: 以下是 LLaMA Factory 中最常用的一些重要参数及其详细说明:

  1. 生成参数(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 # 稍微降低重复
  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"  # 指定目标层
  1. 基础训练参数:
参数名称 类型 默认值 说明
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
  1. 评估参数(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
  1. 重要注意事项:
  • 生成参数调优:

    • temperature和top_p是控制生成质量的关键
    • repetition_penalty可以改善重复问题
    • max_length要根据实际需求设置
  • LoRA训练:

    • rank值越大效果可能越好但显存占用更多
    • alpha通常设置为rank的2倍
    • target_modules的选择会影响训练效果
  • 训练优化:

    • batch_size要根据显存大小调整
    • gradient_accumulation_steps可以模拟更大batch
    • fp16可以降低显存占用

参考文档:

Q: 关于adapter、原始模型和微调模型的详细解释?

A: 让我们逐一解答这些重要概念:

  1. adapter 和 adapter_name_or_path 解释:
  • adapter(适配器)是一种参数高效微调(PEFT)的方法,它不直接修改原始模型的权重,而是:

    • 在原始模型中添加少量可训练的参数
    • 保持原始模型参数不变
    • 只训练和保存这些新增的参数
  • adapter_name_or_path 指的是:

    • 保存的adapter参数的路径
    • 例如:saves/llama3-8b/lora/sft
    • 包含了微调过程中学习到的新参数
  1. adapter与训练方式的关系:
  • 不是只有 LoRA 才使用 adapter:

    • LoRA 是最常用的 adapter 方法之一
    • QLoRA、AdaLoRA 等也使用 adapter
    • Prefix-tuning、P-tuning 等也属于 adapter 类方法
  • 不使用 adapter 的训练方式:

    • 全参数微调(Full Fine-tuning)
    • 部分参数冻结训练(Freeze)
  1. 原始模型(Original Model)说明:
  • 原始模型包括:

    • 预训练的基座模型(Base Model)
      例如:meta-llama/Meta-Llama-3-8B-Instruct
    • 通过全参数微调得到的模型
      例如:直接基于基座模型全量训练得到的模型
  • 原始模型特点:

    • 完整的模型权重
    • 不需要额外的adapter
    • 可以直接加载使用
  1. 微调模型推理说明:
  • 微调模型不仅限于 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                                   # 微调方法
  1. 重要概念澄清:
  • 基座模型:

    • 是经过预训练的原始模型
    • 可以直接使用
    • 也可以作为微调的基础
  • 全参数微调模型:

    • 直接修改原始模型权重
    • 不使用adapter
    • 生成新的完整模型
  • adapter微调模型:

    • 基于基座模型
    • 使用adapter方法训练
    • 需要同时加载基座模型和adapter

使用建议:

  1. 选择原始模型场景:

    • 有足够的计算资源
    • 需要最好的性能
    • 不需要频繁切换任务
  2. 选择adapter方法场景:

    • 计算资源有限
    • 需要快速适应新任务
    • 需要多个不同任务版本

Q: LLaMA Factory 全参训练和 LoRA 训练的文件结构详解?

A: LLaMA Factory 在不同的训练方式下会生成不同的文件结构,让我们详细了解这些文件的组织方式和用途。

  1. 目录结构对比:

全参数训练目录结构:

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/     # 最终模型
  1. 核心文件说明:

基础文件(两种训练方式都会生成):

文件名 用途 内容说明 重要性
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权重 增量训练的参数(体积小) 极高
  1. 辅助文件说明:
文件名 用途 内容说明 重要性
all_results.json 记录评估结果 每个检查点的评估指标
special_tokens_map.json 特殊token映射 特殊标记的处理规则
merges.txt BPE合并规则 分词器的子词处理规则
  1. 重要区别:

存储空间对比:

训练方式 检查点大小 存储特点 版本管理
全参数训练 几GB到几十GB 需要大量存储空间 不适合保存多个版本
LoRA训练 几MB到几十MB 存储空间需求小 可以方便地保存多个版本

加载方式对比:

训练方式 加载要求 推理速度 灵活性
全参数训练 直接加载完整模型 较快 较低
LoRA训练 需要基座模型 + 适配器权重 需要合并计算
  1. 使用建议:

文件管理:

  • 定期清理旧检查点,避免占用过多存储空间
  • 为重要的中间版本添加说明文件
  • 使用有意义的命名方式标记不同版本
  • 重要检查点单独备份

备份策略:

训练方式 重点备份文件 备份频率 注意事项
全参数训练 pytorch_model.bin + 配置文件 较低 需要大容量存储设备
LoRA训练 adapter_model.safetensors 可以频繁 可以保存多个实验版本
  1. 实践建议:

  2. 版本管理:

    • 使用有意义的检查点命名
    • 记录每个版本的训练参数
    • 保存实验日志和评估结果
  3. 存储优化:

    • 只保留必要的检查点
    • 压缩存储不常用的版本
    • 使用版本控制工具管理配置文件
  4. 推理部署:

    • 全参数模型:直接使用final_checkpoint
    • LoRA模型:确保基座模型和适配器版本匹配
    • 保存推理配置文件

Q: LoRA 训练的本质是什么?适配器如何工作?

A: LoRA 训练的核心是训练一个轻量级的适配器(adapter),而不是完整的模型。让我们详细了解这个概念:

  1. LoRA 训练的本质:
  • 确实只训练出一个适配器(adapter)
  • 不是训练出两个完整的模型
  • 基座模型在训练过程中保持不变
  1. 适配器的特点:
  • 只包含训练过程中学到的参数变化
  • 文件体积很小(通常只有几MB到几十MB)
  • 不能独立工作,必须依附于基座模型
  1. 工作原理:

    基座模型(7B/13B等)     适配器(几MB)
        ↓                  ↓
     [原始参数]     +    [参数变化]    =    最终效果
    
  2. 使用流程:

  • 推理时需要同时加载:
    • 基座模型(例如: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          # 适配器路径

这种设计的优势:

  1. 节省存储空间:

    • 不需要存储完整模型副本
    • 适配器文件体积小
  2. 便于切换任务:

    • 可以为同一个基座模型训练多个适配器
    • 不同任务使用不同适配器
  3. 高效灵活:

    • 适配器体积小,易于分享
    • 便于部署和版本管理
    • 可以快速切换不同的训练版本

Q: model_name_or_path 和 adapter_name_or_path 的路径要求是什么?

A: 让我们详细了解这两种路径的具体要求:

  1. 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映射
  1. 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                # 可选但推荐:训练参数记录
  1. 路径验证检查表:

基座模型路径检查:

  • config.json 存在且格式正确
  • 模型权重文件存在(.bin或.safetensors)
  • 分词器相关文件完整
  • 文件权限正确(可读)

适配器路径检查:

  • adapter_config.json 存在

  • adapter权重文件存在

  • 配置与基座模型匹配

  • 文件格式版本兼容

  1. 常见错误和解决方案:

基座模型常见问题:

  • 路径不完整:需要指向包含完整文件集的目录
  • 权限问题:确保有读取权限
  • 文件缺失:检查必需文件是否完整
  • 版本不匹配:确认模型版本与代码兼容

适配器常见问题:

  • 配置不匹配:adapter_config.json与训练时不一致

  • 路径层级错误:需要指向包含adapter文件的直接父目录

  • 文件损坏:重新导出或下载adapter文件

  • 命名规范:确保文件名符合要求

  1. 使用建议:

路径组织:

project_root/
├── saves/
│   └── model_name/
│       ├── full/
│       │   └── sft/
│       │       └── [完整模型文件]
│       └── lora/
│           └── sft/
│               └── [adapter文件]
└── configs/
    └── [配置文件]

最佳实践:

  1. 使用规范的目录结构

  2. 保持文件命名一致性

  3. 定期验证文件完整性

  4. 做好版本管理和备份

  5. 配置示例:

正确的配置:

# 使用在线模型
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 训练配置文件的每个参数及其作用:

  1. 模型基础配置:

    ### 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
  1. 训练方法配置:

    ### 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)
    • 使用场景:可以针对特定层进行微调
  1. 数据集配置:

    ### 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核心数设置
    • 影响:影响数据加载速度
  1. 输出配置:

    ### 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

    • 作用:是否生成损失曲线图
    • 用途:帮助分析训练过程
    • 建议:建议开启以便监控训练
  1. 训练超参数:

    ### 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更稳定
    • 要求:需要硬件支持
  1. 评估配置(已注释):

    ### 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:评估间隔

使用建议:

  1. 显存优化:

    • 适当调整 batch_size 和 gradient_accumulation_steps
    • 使用 bf16 或 fp16 精度
    • 根据需要调整 cutoff_len
  2. 训练效果优化:

    • 合理设置 learning_rate 和 warmup_ratio
    • 调整 lora_rank 寻找效果与效率平衡点
    • 适当增加 num_train_epochs
  3. 监控和调试:

    • 使用较小的 logging_steps 监控训练
    • 开启 plot_loss 观察损失变化
    • 合理设置 save_steps 保存检查点

Q: LLaMA Factory 的 API 调用结构是什么?

A: LLaMA Factory 提供了类似 OpenAI API 的 REST API 服务接口。让我们详细了解其结构:

  1. API 服务启动:
# 启动API服务
API_PORT=8000 CUDA_VISIBLE_DEVICES=0 llamafactory-cli api inference_config.yaml
  1. API 端点(Endpoints):

主要端点:

POST /v1/chat/completions    # 聊天补全接口
POST /v1/completions        # 文本补全接口
GET /v1/models             # 获取模型信息
  1. 请求结构:

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
}
  1. 响应结构:

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
        }
    ]
}
  1. 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)
  1. 错误处理:

API 可能返回的错误格式:

{
    "error": {
        "message": "错误信息",
        "type": "错误类型",
        "param": null,
        "code": "错误代码"
    }
}

常见错误类型:

  • 400 Bad Request: 请求格式错误

  • 401 Unauthorized: 认证失败

  • 404 Not Found: 资源不存在

  • 429 Too Many Requests: 请求过于频繁

  • 500 Internal Server Error: 服务器内部错误

  1. 最佳实践:

  2. 错误处理:

    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
    
  3. 重试机制:

    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
  1. 注意事项:

  2. 性能优化:

    • 使用连接池管理HTTP连接
    • 适当的批处理大小
    • 合理的超时设置
  3. 安全考虑:

    • 添加适当的认证机制
    • 设置请求速率限制
    • 数据验证和清理
  4. 监控和日志:

    • 记录API调用情况
    • 监控响应时间
    • 错误追踪和报告

Q: LLaMA Factory API 常见错误及解决方案?

A: 让我们分析一些常见的API错误及其解决方案:

  1. 缺少必需字段错误:
{
    "object": "error",
    "message": "[{'type': 'missing', 'loc': ('body', 'model'), 'msg': 'Field required'}]",
    "type": "BadRequestError",
    "code": 400
}

错误分析:

  • 错误类型:BadRequestError (400)
  • 具体原因:请求体中缺少必需的model字段
  • 影响:API无法处理请求,直接返回错误

解决方案:

  1. 确保请求体包含所有必需字段:

    • model:必需,指定使用的模型标识符
    • messages:必需,包含对话历史
  2. 正确的请求格式:

    {
     "messages": [...],
     "model": "qwen2.5-3b_intent",  // 必需字段
     "temperature": 0.4,            // 可选参数
     "max_tokens": 128              // 可选参数
    }
    
  3. 字段说明:

  • 必需字段:

    • model:模型标识符
    • messages:对话消息数组
  • 可选字段:

    • temperature:生成温度
    • top_p:核采样参数
    • max_tokens:最大生成长度
  1. 最佳实践:
  • 创建请求前检查必需字段
  • 使用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 监控工具,提供了丰富的命令和交互式界面。以下是常用的命令和操作方式:

  1. 基础命令:
# 启动交互式界面(最常用)
nvitop

# 以紧凑模式启动
nvitop --monitor compact

# 显示指定GPU的信息
nvitop --only 0 1

# 指定刷新间隔(秒)
nvitop --interval 2.0

# 只显示一次信息后退出
nvitop --once
  1. 进程监控命令:
# 按用户筛选GPU进程
nvitop --user username

# 按进程ID筛选
nvitop --pid 1234 5678

# 只显示计算任务
nvitop --only-compute

# 只显示图形任务
nvitop --only-graphics
  1. 显示选项:
# 使用ASCII字符显示(适用于某些终端)
nvitop --ascii

# 强制使用彩色输出
nvitop --force-color

# 使用浅色主题
nvitop --light
  1. 交互式界面快捷键:
快捷键 功能
q, Ctrl+C 退出程序
h, ? 显示帮助
f 切换全屏模式
1, 2, 3 切换不同显示模式
m 切换显示模式
p 暂停/继续更新
↑, ↓ 选择进程
Space 标记/取消标记选中的进程
k 发送SIGTERM信号到选中的进程
K 发送SIGKILL信号到选中的进程
s 按列排序
r 反转排序顺序
c 配置显示的列
w 保存当前配置
  1. 显示字段说明:
  • GPU信息:

    • Util:GPU利用率
    • Mem:显存使用情况
    • Power:功耗
    • Temp:温度
    • Fan:风扇转速
  • 进程信息:

    • PID:进程ID
    • User:用户名
    • GPU-Mem:显存使用量
    • CPU%:CPU使用率
    • Host%:主机内存使用率
    • Command:命令行
  1. 常用监控场景:

训练模型时:

# 持续监控特定GPU
nvitop --only 0 --monitor full

# 监控特定用户的GPU任务
nvitop --user $USER

调试时:

# 完整信息模式
nvitop --monitor full

# 快速查看状态
nvitop --once
  1. 性能优化建议:
  • 使用 --once 快速查看状态
  • 适当增加刷新间隔(–interval参数)
  • 按需选择显示的GPU(–only参数)
  • 使用紧凑模式减少输出(–monitor compact)
  • 及时清理僵尸进程
  1. 注意事项:
  • 需要NVIDIA驱动支持
  • 某些功能需要root权限
  • 大量进程时可能影响性能
  • 建议配合nvidia-smi使用
  • 保存配置需要写权限

Q: 如何在 nvitop 中实现频谱样式显示?

A: nvitop 支持频谱样式的显示模式,可以更直观地展示 GPU 使用情况。以下是具体的实现方法:

  1. 基础频谱显示命令:
# 启用频谱样式显示
nvitop --colorful --monitor full

# 调整更新间隔获得更流畅的显示效果
nvitop --colorful --monitor full --interval 0.5

# 在支持256色的终端中获得更好的显示效果
TERM=xterm-256color nvitop --colorful --monitor full
  1. 显示效果优化:
# 使用浅色主题
nvitop --colorful --light

# 强制使用彩色输出
nvitop --colorful --force-color

# 自定义显示的GPU
nvitop --colorful --only 0,1 --monitor full

# 显示更多历史数据
nvitop --colorful --monitor full --history-size 100
  1. 注意事项:
  • 终端要求:

    • 确保终端支持彩色显示
    • 推荐使用支持Unicode的现代终端
    • 某些终端可能需要设置TERM环境变量
  • 显示优化:

    • 调整终端窗口大小以获得更好的显示效果
    • 选择合适的字体
    • 根据需要调整更新频率
  • 性能考虑:

    • 频谱显示可能会增加CPU使用率
    • 更新频率越高,系统负担越大
    • 建议根据实际需求选择合适的更新间隔
  1. 最佳实践:
  • 监控训练过程:

    # 持续监控特定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
    
  1. 显示内容说明:
  • 频谱图表现了:

    • 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% 未使用 空闲资源
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐