一、环境之前介绍过本地部署LLaMaFactory微调平台https://blog.csdn.net/m0_73982863/article/details/159208213?spm1001.2014.3001.5501如果你还在为设备问题而烦恼那就来薅羊毛吧手动狗头。首先注册魔搭社区绑定个人阿里云账号即可详情见https://www.modelscope.cn/my/mynotebook 然后就可免费获得36小时GPU环境。8核CPU有8个核心主要负责数据的调度和预处理32GB内存数据从硬盘加载后会暂时存放这里显存24G比我自己的老古董好多 T-TUbuntu 22.04Linux操作系统CUDA 12.8.1英伟达的并行计算平台。12.8版本意味着它支持最新的RTX 40系列或H系列显卡Python 3.11编程语言版本PyTorch 2.9.1目前最主流的深度学习框架2.9.1也是比较新的版本1.35.0预装的ModelScope版本号安装LLaMaFactory老操作了这里就不过多赘述git克隆llama-factory项目执行 【pip install -e .】结果出现提示错误信息表示 pip 在安装新包时检测到依赖冲突为避免 pip 导致权限混乱这里推荐使用虚拟环境venv创建虚拟环境创建虚拟环境python -m venv llmVenv llmVenv可自定义名称激活虚拟环境source llmVenv/bin/activate退出虚拟环境deactivate在虚拟环境中执行升级pip install --upgrade pip后续老操作【pip install -e .】和【pip install -r requirements/metrics.txt】执行【llamafactory-cli webui】可以启动并在控制台中直接点击【http://127.0.0.1:7860】可完成浏览器访问二、模型选择2.1. 模型分类和区别此处我随手选中一个模型【Qwen3-4B-Base】跳出了告警提示。这是因为【Base】表示基座模型而不是经过指令微调【Instruct】的模型。两者区别在于Base基座模型只完成了预训练擅长续写文本不擅长直接理解并回答人类的问题或指令。Instruct指令模型在基座模型的基础上使用大量【用户指令和期望回答】的数据进行微调能够正确理解并遵循人类指令。后续选择【Qwen3.5-2B-Base】此时模型名称同样带【Base】却没有弹出告警提示。Qwen3.5是后训练模型已经经历了至少一轮指令微调或强化学习RL具备对话能力。RL训练的模型其指令遵循能力通常优于单纯的监督微调SFT模型。2.2.加载模型对话我们可以点击【Chat】进行加载模型对话可以看到其中的如下参数2.2.1.【推理引擎】Hugging Face transformers 库是 LLM 领域最通用的原生推理框架。开箱即用配置灵活适合调试、开发、原型验证。默认使用PyTorch动态图速度相对较慢显存占用较高。vLLM高性能和服务框架专为高吞吐、低延迟设计。支持连续批处理自动合并请求提高吞吐。适合生产环境部署、高并发API服务、需要最大化吞吐量的离线推理。SGLang较新的推理框架专注于结构化生成和复杂推理任务。吞吐量接近vLLM适合需要复杂生成逻辑对推理过程有精细控制要求的场景。2.2.2.【推理数据类型】控制模型加载和推理时使用的数值精度。auto自动选择框架会根据模型配置和硬件能力自动决定最优精度。如果支持bfloat16通常会优先使用否则回退到float16或32。float32最精确显存占用最大速度最慢通常不推荐用于推理。float16显存较fp32减半速度更快精度损失小。大多数GPU支持。bfloat16与fp16同显存占用但动态范围更大训练和推理更稳定。2.2.3.【额外参数】{vllm_enforce_eager: true}vLLM专用参数在vLLM中会强制使用eager模式不使用CUDA图优化通常用于调试或避免某些显存问题此处当前推理引擎是 huggingface理论上这个参数不会生效但是我这里默认自带还是手动删除即仅保留 {}否则会出现Json格式错误点击【加载模型】后可以看到控制台会自动下载对应的模型。当然也可以手动下载魔搭社区的模型默认存储路径也是一样的访问https://modelscope.cn/models 此处以Qwen3.5-2B举例modelscope download --model Qwen/Qwen3.5-2B 详情见https://www.modelscope.cn/models/Qwen/Qwen3.5-2B之前文章提到过这里就不过多赘述。有兴趣的同学可以看https://blog.csdn.net/m0_73982863/article/details/159208213?fromshareblogdetailsharetypeblogdetailsharerId159208213sharereferPCsharesourcesharefromfrom_link 中的4.1.2.3这里等待模型加载成功后就可以正常聊天了。三、数据集魔搭社区中提供大量数据集我们学习过程中可以下载使用详情见https://www.modelscope.cn/datasets3.1. 获取源数据此处随便举个例子随手拿了个【蚂蚁金融语义相似度数据集】详情见https://www.modelscope.cn/datasets/modelscope/afqmc在【数据集文件】中下载【train.csv】下载完成后我可能可以得到如下数据可以看出此数据集是用于评估问题间的语义相似性。【sentence1 句子1】【sentence2 句子2】【label 0表示两者语义不同、1表示语义相同】3.2. 编写转换脚本我们通过脚本将csv转换成LLaMaFactory需要的json格式脚本如下不熟练的小伙伴可借助AI工具。3.3. 生成数据集在py脚本目录下执行【python csv2Json.py】可以得到目标文件json如下将生成的 【ant_finance_same.json】移动至【LLaMA-Factory】项目中的【data】文件夹中再修改【dataset_info.json】加入刚才生成的json其余保持不动dataset_info.json是LLaMaFactory中用于注册和管理数据集的配置文件。主要作用是配置数据集文件路径。四、训练4.1.加载并预览数据集现在我们就可以在【数据集】中选中刚才配置的数据点击【预览数据集】后可以看到示例4.2.执行微调点击【开始】微调模型大约一两分钟后可以看到下方控制台输出日志然后就是耐心的等待GPU环境超过1小时无操作将触发自动关闭功能要记得点下控制台上图可知此次训练需要大约10.5小时但是单次实例连接时间最长是8小时尽管可以中途中断后续再继续但是我执行1个小时后环境直接卡死什么都动不了。本次演示我还是希望能够走完一遍流程于是将数据集做了份删减版。mini版数据集仅1000条数据训练需要不到20分钟上图中右边的趋势图表示训练过程中损失值Loss随训练步数Step变化的曲线用于监控模型的学习情况。original原始曲线每个记录点实际计算出的损失值由于单批次数据存在随机性曲线往往会有很多噪声毛刺smoothed平滑曲线对原始损失进行移动平均或指数平滑后的曲线能更加清晰地反映损失的整体变化趋势滤除短期波动4.3.导出微调结果等到【训练完毕】我们可以在【检查点路径】找到刚才微调后的模型导出完成后我们可以看到路径下对应的文件我们尝试加载微调后的模型进行对话。五、转换GGUF为了能够让 ollama 或 llama.cpp 直接使用需要将 Hugging Face 格式模型转换成GGUF格式的文件。5.1.创建环境为避免冲突建议创建一个独立的Python环境python -m venv cppVenvsource cppVenv/bin/activate克隆llama.cpp该工具可转换GGUFgit clone https://github.com/ggerganov/llama.cpp.gitcd llama.cpppip install -r requirements.txt5.2.执行转换python convert_hf_to_gguf.py /mnt/workspace/models/Qwen3.5-2B-output --outfile /mnt/workspace/gguf/Qwen3.5-2B-output.gguf --outtype q8_0Qwen3.5-2B-output 为【model.safetensors】文件所在路径--outtype q8_0 表示量化类型默认输出f16格式执行过程中会出现异常File /mnt/workspace/git_src/llama.cpp/cppVenv/lib/python3.11/site-packages/transformers/models/auto/tokenization_auto.py, line 1153, in from_pretrainedraise ValueError(ValueError: Tokenizer class TokenizersBackend does not exist or is not currently imported.原因是在合并模型时无法正确加载模型的tokenizer导致的通常是因为模型文件夹中的 tokenizer_config.json 配置缺少必要的tokenizer文件。1.检查当前 tokenizer_config.json 内容cat /mnt/workspace/models/Qwen3.5-2B-output/tokenizer_config.json | grep tokenizer_class2.Qwen3.5-2B模型对应的tokenizer类是Qwen2Tokenizer使用sed直接替换sed -i s/tokenizer_class: TokenizersBackend/tokenizer_class: Qwen2Tokenizer/g /mnt/workspace/models/Qwen3.5-2B-output/tokenizer_config.json替换后再执行转换命令即可最后可以得到GGUF文件。六、总结终于我们在不花费一毛钱的前提下完成了环境搭建到模型微调的整个流程。欢迎继续关注后续的分享我下次再来填坑。