在 AIStudio 开发机中使用 LLaMA Factory 微调 LlaMA 3 模型
LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调。本教程将基于 Meta AI 开源的 LlaMA 3 8B 模型,介绍如何在 AIStudio 开发机中使用 LLaMA Factory 训练框架完成模型的中文化与角色扮演微调和评估。
前置准备
在开始本教程之前,您需要:
- 已有 AIStudio 平台账号并完成实名认证
- 具备基础的 Linux 命令行操作知识
- 了解大模型微调的基本概念
步骤一:创建开发机并使用 LLaMA Factory 镜像
选择合适的 GPU 规格
为了确保微调过程的顺利进行,建议选择以下 GPU 配置:
- 推荐配置:RTX 4090 (24GB 显存) 或更高
- 最低配置:RTX 3090 (24GB 显存)
- 不推荐:显存小于 20GB 的 GPU
创建开发机
登录 AIStudio 平台,进入开发机管理页面
在创建开发机页面,完成以下配置:
- 镜像选择:选择自定义镜像中的 LLaMA Factory 镜像(参考 使用 Dockerfile 快捷安装 LLaMA Factory 提前构建)
- GPU 配置:选择 RTX 4090 或同等配置
- 存储配置:建议挂载至少 100GB 的共享存储用于存放数据集和模型
等待开发机启动完成,状态显示为"运行中"
验证环境
开发机启动后,通过 Web Terminal 登录,验证 LLaMA Factory 环境:
# 验证 LLaMA Factory 安装
llamafactory-cli version
# 检查 GPU 状态
nvidia-smi
# 进入 LLaMA Factory 目录
cd /LLaMA-Factory
步骤二:准备训练数据集
LLaMA-Factory 项目内置了丰富的数据集,统一存储于 data
目录下。您可以跳过本步骤,直接使用内置数据集。您也可以准备自定义数据集,将数据处理为框架特定的格式,放在 data
下,并且修改 dataset_info.json
文件。
在本教程中,我们提供了一份多轮对话数据集,执行以下命令下载数据。
cd /LLaMA-Factory
wget https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/llama_factory/data.zip
mv data rawdata && unzip data.zip -d data
数据集中的样本为多轮对话形式,每轮对话都由一条用户指令和一条模型回答组成,微调过程中模型不断学习样本中的回答风格,从而达到中文化与角色扮演的目的。该数据集分为训练集和验证集两个文件,其中训练集共包含 320 组多轮对话样本,验证集共包含 30 组多轮对话样本,数据样例如下所示:
[
{
"conversations": [
{
"from": "human",
"value": "模仿西游记的孙悟空的语气和我聊天。如果你把水冻住,你会得到什么?"
},
{
"from": "gpt",
"value": "哈哈,这问题还难倒俺老孙吗?把水冻住就是变成冰啦!不过若是在取经的路上用得着这冰来做啥,比如过火焰山时,那可就是解渴消暑的好东西了!你觉得呢?还有没有更有趣的问题让俺老孙来解答?"
},
{
"from": "human",
"value": "那怎么做才可以把水冻住"
},
{
"from": "gpt",
"value": "哈哈,对俺老孙来说,这可是轻而易举的事情!只需将水放在凉快的地方,或者使用法力,一吹仙气,水便能迅速结冰啦!当然,在你的世界里,把水放进冰箱的冷冻室里等一阵子,水就会变成冰块了。要是嫌慢,可以尝试用点干冰或液氮什么的,不过得小心使用哈!毕竟不像俺老孙有抗寒法力。"
}
]
}
]
步骤三:启动 LLaMA Factory Web UI
启动 Web 界面
# 确保在 LLaMA Factory 目录
cd /LLaMA-Factory
# 启动 Web UI(使用 ModelScope 作为模型源)
export USE_MODELSCOPE_HUB=1
llamafactory-cli webui --host 0.0.0.0 --port 7860
访问 Web 界面
有两种方式访问 Web UI:
方式一:使用开发机 Web 应用预览功能
- 在创建开发机时,配置 Web 应用预览端口为
7860
- 开发机启动后,点击"预览链接"直接访问
方式二:使用 SSH 端口转发
- 获取开发机的 SSH 连接信息
- 在本地终端执行端口转发:
# 替换为实际的 SSH 连接信息
ssh -L 7860:localhost:7860 root@your-devmachine-ssh-host -p your-ssh-port
- 在本地浏览器访问
http://localhost:7860
步骤四:配置微调参数
在 Web UI 中进行以下配置:
基本设置
- 语言 (Language):选择
zh
(中文) - 模型名称 (Model name):选择
LLaMA3-8B-Chat
- 微调方法 (Finetuning type):选择
lora
数据集设置
- 数据集 (Dataset):选择
custom_train
(如使用自定义数据集)或其他内置数据集 - 点击预览数据集按钮查看数据格式
训练参数
推荐配置如下:
参数 | 推荐值 | 说明 |
---|---|---|
学习率 (Learning rate) | 1e-4 | 有利于模型拟合 |
计算类型 (Compute type) | bf16 | RTX 4090 推荐使用 bf16 |
梯度累计 (Gradient accumulation) | 2 | 提高训练稳定性 |
LoRA+ 学习率比例 | 16 | 提高续写效果 |
LoRA 作用模块 | all | 在所有线性层上应用 LoRA |
训练轮数 (Epochs) | 3.0 | 根据数据集大小调整 |
批次大小 (Batch size) | 1 | 根据显存大小调整 |
输出设置
- 输出目录 (Output dir):设置为
train_llama3_custom
步骤五:开始微调训练
- 配置完成后,点击预览命令查看完整的训练参数
- 点击开始按钮启动微调训练
- 训练过程中可以观察:
- 训练进度条
- 实时损失曲线
- GPU 使用率和显存占用
训练时间根据数据集大小和 GPU 性能而定,通常需要 20-60 分钟。
步骤六:模型评估
加载训练好的适配器
- 训练完成后,点击页面顶部的刷新适配器
- 在**适配器路径 (Adapter path)**下拉菜单中选择
train_llama3_custom
运行评估
- 切换到 Evaluate & Predict 标签页
- 配置评估参数:
- 数据集:选择
custom_eval
(验证集) - 输出目录:设置为
eval_llama3_custom
- 数据集:选择
- 点击开始启动评估
评估完成后,会显示 ROUGE 分数等指标,用于衡量模型微调效果。
步骤七:模型对话测试
加载微调模型
- 切换到 Chat 标签页
- 确保适配器路径选择了
train_llama3_custom
- 点击加载模型
测试对话效果
在对话框中输入测试问题,例如:
你好,能模仿孙悟空的语气和我聊天吗?
观察模型是否能够:
- 使用合适的语气和词汇
- 保持角色一致性
- 给出有逻辑的回答
对比原始模型
为了验证微调效果:
- 点击卸载模型
- 清空适配器路径设置
- 重新加载模型(此时加载的是原始模型)
- 使用相同的问题测试,对比回答差异
常见问题与解决方案
显存不足
现象:训练过程中出现 CUDA out of memory 错误
解决方案:
- 减小批次大小 (Batch size)
- 增加梯度累计步数
- 使用更高精度的计算类型(如 fp16)
- 选择更高显存的 GPU
模型下载失败
现象:无法下载 LLaMA 3 模型
解决方案:
- 确保网络连接正常
- 使用 ModelScope 镜像:
export USE_MODELSCOPE_HUB=1
- 手动预下载模型到共享存储
Web UI 无法访问
现象:无法通过浏览器访问 Web UI
解决方案:
- 检查开发机 Web 预览端口配置
- 确认 LLaMA Factory 启动时绑定了
0.0.0.0:7860
- 使用 SSH 端口转发作为备选方案
高级功能
模型导出
训练完成后,可以将 LoRA 权重合并到原始模型:
llamafactory-cli export \
--model_name_or_path meta-llama/Llama-3-8b-chat \
--adapter_name_or_path train_llama3_custom \
--template llama3 \
--finetuning_type lora \
--export_dir merged_model \
--export_size 2 \
--export_legacy_format False
注意事项
- 存储管理:开发机根分区空间有限,建议将大文件存储在挂载的共享存储中
- 资源监控:定期监控 GPU 使用率和显存占用,避免资源浪费
- 数据备份:及时备份训练好的模型权重和重要数据
- 版本管理:记录使用的 LLaMA Factory 版本和训练参数,便于复现