LLM项目实战:使用Llama-factory进行DPO训练

前言

LLM训练三板斧,预训练,微调,RHLF。DPO属于是最后环节RHLF中的一个方法,关于RLHF主流方法有PPO,DPO,GROP。关于这三种介绍RLHF方法,我之前分享过对着三种方法的一些思考,有兴趣的同学可以看看。

因为DPO对硬件的需求最小,显存占用最低,所以我们先采用DPO进行训练。

硬件信息:

4070 12g*2 、64g内存、操作系统:Ubuntu24.04、模型:QWEN-3vl-2B(因为我这个模型是上个多模态任务sft过的,所以选择vl模型,没有图片输入需求的同学可以下载纯语言模型)

本篇教程仅关于DPO训练,请提前配置好环境和下载好LLamafactory(关于llamafactory环境配置其实也是一大头疼的点,注意如果想要使用分布式训练,llamafactory仅支持到deeospeed10.0-16.0,截止到2025年11月20日llamafactory还没有完成对deepspeed最新版本的适配

碎碎念:很多初学大模型的同学还是使用Windows系统进行训练,本人之前也是。但是由于Windows总是出现各种奇怪的报错和显存不稳定等情况,尤其是在多卡训练中,这种情况会更加明显。后来也尝试过wsl2其他替代方案,最后还是发现linux系统有着win无法替代的优势。所以还是建议如果真想长期学习LLM的同学,直接一步到位到linux系统,少走弯路 :)

llamafactory以下简称LF

STEP1 从hugging face下载我们需要的数据库

这里采用的是hugging face中的一个医疗DPO数据集

from datasets import load_dataset # 加载数据集 ds = load_dataset("HANI-LAB/Med-REFL-DPO",'reasoning_enhancement') 
print(ds['train'][:1])

这里看到数据是可以正常加载的

STEP2 对数据进行预处理

由于我们需要使用llamafactory的框架进行dpo训练,所以需要把源arrow格式的文件转为lf能识别的json格式。下面这是官方文档中的规范格式,我们编写一个python程序完成格式的对齐

[ { "instruction": "人类指令(必填)", "input": "人类输入(选填)", "chosen": "优质回答(必填)", "rejected": "劣质回答(必填)" } ]
import json from datasets import load_dataset import os def convert_arrow_to_json(dataset_path, output_json_path): """ 将 Arrow 格式的数据集转换为指定的 JSON 格式 Args: dataset_path: Arrow 数据集的路径或 Hugging Face 数据集标识 output_json_path: 输出 JSON 文件的路径 """ # 加载数据集 # 如果是本地文件,可以使用 'load_from_disk' if os.path.exists(dataset_path): # 加载本地的 Arrow 数据集 dataset = load_dataset('arrow', data_files=dataset_path) else: dataset = load_dataset(dataset_path, name='reasoning_enhancement') # 获取训练集(根据你的描述,数据在 train split 中) train_dataset = dataset['train'] # 转换为所需的 JSON 格式 output_data = [] for item in train_dataset: # 确保所有必填字段都存在 if 'instruction' in item and 'chosen' in item and 'rejected' in item: json_item = { "instruction": item['instruction'], "input": item.get('input', ''), # input 是选填的,默认空字符串 "chosen": item['chosen'], "rejected": item['rejected'] } output_data.append(json_item) # 保存为 JSON 文件 with open(output_json_path, 'w', encoding='utf-8') as f: json.dump(output_data, f, ensure_ascii=False, indent=2) print(f"转换完成!共处理了 {len(output_data)} 条数据") print(f"JSON 文件已保存到: {output_json_path}") def main(): # 本地 Arrow 文件路径 arrow_file_path = "path/to/your/Reasoning Enhancement.arrow" # 输出 JSON 文件路径 output_json_path = "med_refl_dpo.json" # 执行转换 convert_arrow_to_json(arrow_file_path, output_json_path) if __name__ == "__main__": main() 

完成数据集的标准化后,我们将获得的json文件复制到lf的data目录下。

之后我们需要修改 LLaMaFactory data目录下的dataset_info.json,增加自定义数据集:(官网也给出了添加数据集的标准格式)

"数据集名称": { "file_name": "data.json", "ranking": true, "columns": { "prompt": "instruction", "query": "input", "chosen": "chosen", "rejected": "rejected" } }
"MED_DPO": { "file_name": "/home/zadyd/桌面/xza/LLaMA-Factory/data/med_dpo.json", "ranking": true, "columns": { "prompt": "instruction", "query": "input", "chosen": "chosen", "rejected": "rejected" } },

STEP3 启动LF,选择合适的参数

在lm文件夹下启动终端,输入llamafactory-cli webui启动我们的可视化ui

如果是windows系统,则打开终端cd到lf目录

在网页端设置我们需要的参数,一般像我这样设置就可以

因为我是多卡训练,所以选择了 deepspeed,单卡训练的同学不需要勾选这个选项,本次训练需要 24g 左右的显存,这个显存大小有点尴尬,可以通过开启量化或者减少序列长度节约显存

大概需要 12 个小时,这一步很容易遇到环境不兼容的问题,需要耐心调整,不要心急

STEP4 合并模型

训练完成之后在 export 模块,选择训练好的文件位置,和原始文件进行合并

Read more

买不起显卡怎么玩AI语音?Whisper云端镜像5分钟上手

买不起显卡怎么玩AI语音?Whisper云端镜像5分钟上手 你是不是也遇到过这样的情况:想做一个酷炫的AI语音项目参加比赛,但家里电脑配置太低,连个独立显卡都没有?父母一听要花上万块买设备就摇头,而你又不想放弃这个展示创意的机会。别急——现在有一种方法,不用买显卡、不依赖高性能电脑,也能在5分钟内跑通最先进的语音识别模型。 这就是我们要聊的主角:Whisper云端镜像。它基于OpenAI开源的Whisper语音识别技术,专为资源有限的小白用户设计。无论你是高中生做AI创新赛项目,还是初学者想试试语音转文字功能,都可以通过ZEEKLOG提供的预置镜像,在云端快速部署并使用强大的语音识别能力。 这篇文章就是为你量身打造的实战指南。我会带你一步步操作,从零开始,不需要懂代码细节,也不需要自己装环境,只要跟着步骤点击几下,就能让Whisper模型帮你把录音自动转成文字,甚至还能支持多语言翻译和时间戳标注!整个过程就像打开一个网页应用那么简单。 学完这篇,你能做到: * 理解Whisper是什么、能干什么 * 在低配电脑上实现高精度语音转写 * 快速部署并调用云端AI模型服务

本地部署AI绘画就这么简单,麦橘超然实操笔记

本地部署AI绘画就这么简单,麦橘超然实操笔记 1. 开门见山:不用折腾显卡,8GB显存也能跑出专业级画质 你是不是也试过下载一堆AI绘画工具,结果刚点开就弹出“CUDA out of memory”?或者被复杂的环境配置、模型下载、依赖冲突搞得头大,最后连第一张图都没生成出来?别急,这次真不一样。 麦橘超然 - Flux 离线图像生成控制台,不是又一个需要你手动编译、调参、查报错的实验项目。它是一套开箱即用、专为中低显存设备打磨的完整方案——模型已打包进镜像,代码已写好,连端口转发都给你配好了命令行模板。你只需要三步:复制脚本、运行命令、打开浏览器,就能在自己的电脑或远程服务器上,亲手生成一张赛博朋克雨夜街景。 它背后用的是当前图像生成领域最前沿的 Flux.1 架构,但做了关键改造:DiT主干网络用 float8 量化压缩,文本编码器和VAE保持高保真精度,再配合 CPU 卸载机制,把原本动辄12GB显存的模型,硬生生压进6–

突破性能瓶颈:llama.cpp多GPU分布式计算优化实践指南

突破性能瓶颈:llama.cpp多GPU分布式计算优化实践指南 【免费下载链接】llama.cppPort of Facebook's LLaMA model in C/C++ 项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp 你是否还在为大模型推理时单GPU显存不足而苦恼?是否遇到过模型加载缓慢、生成效率低下的问题?本文将从实战角度出发,系统讲解llama.cpp项目的多GPU性能优化方案,帮你解决分布式推理中的设备调度、显存分配和并行效率三大核心难题。读完本文,你将掌握多GPU环境配置、性能监控与问题诊断的完整流程,让本地大模型部署效率提升300%。 多GPU架构解析:从设备发现到任务调度 llama.cpp通过GGML后端实现跨设备计算调度,其核心机制位于src/llama.cpp的设备管理模块。系统启动时会自动扫描所有可用计算设备,按优先级分为GPU、集成GPU(iGPU)和RPC服务器三类,相关代码逻辑如下: // 设备分类与优先级排序(

ComfyUI Manager终极指南:5步快速搭建AI绘画插件生态

ComfyUI Manager终极指南:5步快速搭建AI绘画插件生态 【免费下载链接】ComfyUI-Manager 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Manager 想要让ComfyUI发挥最大潜力?ComfyUI Manager就是你的AI绘画插件管理中心,它能让你一键安装数百种自定义节点、智能管理模型文件、轻松备份工作流配置。无论是AI绘画新手还是资深创作者,这个插件管理器都能让你的创作效率提升数倍。 🎨 揭秘ComfyUI Manager的核心价值 ComfyUI Manager不仅仅是一个插件管理器,更是你AI创作工作流的得力助手。通过这个工具,你可以: 插件生态扩展 * 🚀 发现并安装海量自定义节点 * 📦 智能管理依赖项和模型文件 * 🔄 实时更新插件版本 * 💾 快速备份和恢复配置 创作效率提升 * 通过js/comfyui-manager.js实现界面优化 * 利用glob/manager_core.py进行核心配置管理 * 借助snapshots/目录进行工作流快