掘金 人工智能 9小时前
LLaMA Factory 角色扮演模型微调实践记录
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细记录了作者首次使用LLaMA Factory进行模型微调的完整流程,旨在为初学者提供一份详实的参考。文章涵盖了数据准备阶段的角色知识库构建和指令生成,环境准备中的服务器选择与配置,以及模型下载、LLaMA Factory安装与数据集注册。重点介绍了通过WebUI进行模型训练的参数设置和操作步骤,并对训练后的模型进行了聊天测试和系统提示词的优化建议。最后,详细阐述了模型导出与量化的过程,包括解决导出过程中可能遇到的库依赖问题,帮助读者掌握端到端的模型微调技能。

💡 **数据准备与角色知识库构建**:为提升模型对话能力,作者通过构建小型知识库,包含角色基本信息、用户角色信息及双方互动模式,并结合AI分析生成导演指令,为模型提供更丰富的上下文和行为动机,有效解决模型“不会聊天”及“吃书”的问题。

🖥️ **环境配置与模型下载**:文章指导用户如何在AutoDL服务器上租用GPU资源,并详细说明了使用`huggingface-cli`进行登录认证、安装`hf_transfer`加速工具、设置国内镜像源以高效下载Mistral-Nemo-Instruct-2407模型的过程,确保了后续训练的基础环境。

🔧 **LLaMA Factory安装与数据集注册**:介绍了如何克隆LLaMA Factory仓库、安装必要的依赖包,并通过修改`dataset_info.json`文件来注册自定义的数据集,为模型训练做好数据对接准备。

🚀 **WebUI训练与参数调优**:详细阐述了启动LLaMA Factory的WebUI界面,通过代理访问后,介绍了关键的训练参数设置,如`finetuning_type`、`model_name_or_path`、`lora_rank`、`output_dir`等,并提供了作者的个人参数配置作为参考,指导用户开始训练。

📦 **模型导出与量化优化**:在模型训练完成后,文章指导了如何通过WebUI的export功能导出模型,并重点解决了导出模型过大的问题,通过再次加载模型进行4-bit量化导出,同时列举了导出过程中可能遇到的`optimum`和`gptqmodel`库缺失等问题及解决方案,确保模型能高效部署。

注:本人之前从未接触过模型微调,这篇文章更多是记录微调流程,方便自己后续参考。有问题欢迎勘误,或者如果有更好的微调思路也还请不吝赐教

数据准备

由于我们使用 LLaMA Factory 进行微调,数据处理方面可以参考数据处理 - LLaMA Factory

另外,因为之前训练模型的时候效果不是很理想,模型真的很不会聊天,而且很容易吃书,所以我额外想了以下办法进行改进

    写了个角色的小型知识库

      角色的基本信息,包括角色的年龄、性别、生日、性格、家人、重要经历等user 所扮演角色的基本信息(同上)该角色和 user 所扮演的角色之间的相处模式、共同的记忆等

    写了个脚本,将每一轮对话内容 + 知识库一起发给相对比较聪明的 ai(如 deepseek)处理,让 ai 分析角色这么说的动机,然后作为导演指令放入 instruction

    在后续训练完模型进入聊天测试的环节时,在 system prompt 里放入第一步写的知识库(这个放到后面训练完再具体说)

环境准备

租个 AutoDL 服务器

地址:autodl.com

选服务器的时候,个人觉得最好选那种 GPU 空闲多的,不然上班时间有可能抢不到有卡模式开机,不方便后续训练

我租的服务器配置如下:

不过因为只有 24G,后续微调的时候一度出现过显存爆了导致微调失败的情况 =-=,有能力的话可以租好点的服务器,不过如果只是为了练手的话配置低点也 ok

租好了之后点开机,然后点击“快捷工具 - JupyterLab”进入服务器

下载模型

因为下载模型比下 LLaMA Fatcory 慢很多,所以我们先下这个

此处模型使用 mistralai/Mistral-Nemo-Instruct-2407 · Hugging Face。可以根据自己需要选择其他模型

hugging face 登录认证(所使用的模型不需要登录访问的可以跳过该步骤)

由于我选择的模型需要登录后访问,因此需要先登录 hugging face、进入该模型仓库页面后点击同意条款,然后在 autodl 服务器里认证个人的 hugging face 账号

    点击右上头像 - Access Tokens

    在跳转后的页面点击 +Create new token

    选择 Read,并且随便填个 Token 名

    保存 Access Token 内容回到 autodl 服务器,运行登录 huggingface 的命令
# 如果没有安装 hugging-face cli,需要先安装pip install -U "huggingface_hub[cli]"# 登录 hugging face 账号huggingface-cli login
    输入刚刚保存的 Access Token 内容,回车接下来会问你是否将令牌另存为 git 凭据。如果想在本地使用 git,可以选 y

拉取模型到本地

由于众所周知的原因,直接拉模型会很慢。之前试过一些办法,下面这套流程是亲测速度最快的

安装加速工具 hf_transfer
pip install hf_transfer
设置 hugging face 镜像

为了绕过网络问题,我们需要将下载地址指向国内的镜像站

export HF_ENDPOINT=https://hf-mirror.com
下载模型
pip install huggingface_hub

下面安装模型命令里的 local-dir 可以自定义,但据说安装在 autodl-tmp 会更好一些。如果打算用其他模型的话,记得把 Mistral 模型替换成自己的

huggingface-cli download \  --resume-download \  --local-dir-use-symlinks False \  --exclude "*.gguf" \  --local-dir /root/autodl-tmp/models/Mistral-Nemo-Instruct-2407 \  mistralai/Mistral-Nemo-Instruct-2407

下载 LLaMA Factory

等待模型下载的时间,可以另开一个终端下 LLaMA Factory

根据官方文档安装 - LLaMA Factory,因为 autodl 服务器已经下好 CUDA 了,这里我直接跳到 Linux 安装的步骤

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.gitcd LLaMA-Factorypip install -e ".[torch,metrics]"

安装完成后,可以通过 llamafactory-cli version 来快速校验安装是否成功

注册数据集

进入 LLaMA Factory 仓库根目录下的 data 目录,将你的 json 数据集上传到该目录,并编辑 dataset_info.json

这里 file_name 填你实际的 json 数据集名称,columns 填数据形状,至于键名可以随意,之后选择数据集的列表里会以这个键名标识数据集

训练模型

可以通过命令行训练,也可以通过 WebUI。此处记录一下 WebUI 的操作流程

启动 WebUI

首先运行如下命令行启动 WebUI

llamafactory-cli webui

然后回到 autodl 控制台,安装一下 autodl 的这个隧道工具,然后进行如下代理操作

代理成功后,可以通过 http://127.0.0.1:7860/ 访问 webui 了

参数设置

这里的参数可能因人而异,可以向 gpt 之类的 ai 寻求建议。以下是我个人的参数:

cutoff_len: 4096dataset: ivandataset_dir: /root/autodl-tmp/LLaMA-Factory/dataddp_timeout: 180000000do_train: truedouble_quantization: trueenable_thinking: truefinetuning_type: loraflash_attn: autofp16: truegradient_accumulation_steps: 8include_num_input_tokens_seen: truelearning_rate: 5.0e-05logging_steps: 10lora_alpha: 8lora_dropout: 0lora_rank: 4lora_target: alllr_scheduler_type: cosinemax_grad_norm: 1.0max_samples: 100000model_name_or_path: /root/autodl-tmp/models/Mistral-Nemo-Instruct-2407num_train_epochs: 3.0optim: adamw_torchoutput_dir: saves/Mistral-Nemo-Instruct-2407/lora/train_2025-07-21-19-06-09packing: falseper_device_train_batch_size: 2plot_loss: truepreprocessing_num_workers: 16quantization_bit: 4quantization_method: bnbreport_to: nonesave_steps: 100stage: sfttemplate: mistraltrust_remote_code: truewarmup_steps: 0

主要的改动应该是:(这里是后期补的图。我又换了个新模型测试,正常填入自己用的 model name 和 model 所在路径就行。如果用 mistral 的话,这里的 chat template 要换成 mistraltrainable modulesq_proj,v_proj

设置完之后,就可以点击 start 开始训练了

模型聊天测试

最激动人心的环节来了。模型训练完之后,可以切换到 chat 的这个 tab,加载一下 checkpoint path 换成我们刚刚训练好的那个模型,再点 load model,就可以看到模型已经加载好、可以聊天了(不用管我这里提示的错误,因为我是第二天才复盘,这个时候 WebUI 已经断开连接了,所以这样显示)

记得先在 system prompt 里贴上人物设定,唤醒一下 ai,不然只会告诉你它是一个 ai 智能助手……

如果发现只会念数据集的回答,可以把 temperature 调高;若发现它忘设定很严重,可以把 temperature 调低

当你打算重新训练一个新模型的话,重新加载新模型的时候记得先 Unload model,然后再重新 Load model

另外,页面放置时间过长可能会导致连接断开,需要重新运行 webui 启动命令,然后重开一下 autodl 的隧道工具代理

模型的导出与整合

切换到 export 的 tab,ai 建议我把 Export device 改成 auto。其他不变,然后点 export

但是我们会发现,当前生成的模型还是太大了,竟然高达 23 G

(此处使用的命令:du -sh /root/autodl-tmp/merged_models/ivan_mistral_nemo_merged,具体路径需要换成你实际合并导出的模型所在路径)

而且又因为是 QLoRA 训练的产物,其实没办法在 export 时就选择量化(Export quantization bit 会自动加载为 none 且禁用),所以这里我们可以把合并好的模型再次加载,量化后再 export

这里主要需要改的地方是,往 model path 填入上边合并后的模型的所在路径,Export quantization bit 改成 4,显存多的情况下可以 把Export device 改成 auto(像我只有 24 的就老老实实默认吧)。注意 checkpoint path 务必留空,然后点 export

(如果 Export quantization bit 被禁用,可以刷新页面重进)

不过我实际 export 的时候先后报错说找不到 optimumgptqmodel,所以还得 pip install optimum>=1.24.0 pip install gptqmodel>=2.0.0

注意,如果 export 时又报错说找不到其他库,那需要先 Ctrl + C 中断 webui 运行,然后再重启,刷新页面重新 export,不然就算安装了也会继续报错说找不到

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

模型微调 LLaMA Factory AI模型训练 Mistral QLoRA
相关文章