LlamaFactory微调智能问答系统

项目背景

针对特定领域或特定任务问答场景,通用大模型存在术语不精准、逻辑不严谨等问题,本项目通过领域微调构建高效智能问答系统,提升模型对专业内容的生成质量,结合前后端形成可落地应用方案。

环境准备

算力平台

https://www.autodl.com/

稳定组合:PyTorch  2.1.0+Python  3.10+Cuda  12.1,RTX 4090 * 1卡(就用1卡吧,多卡真用不起了)

VSCode

使用本地VSCode进行远程开发,需要安装插件Remote-SSH,再进行配置。

配置参照:AutoDL帮助文档,写的挺详细。

nvitop

查看配置及资源占用:pip install nvitop

微调

环境

官网参考

LlamaFactory:

https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/installation.html

vLLM: 看中文的

https://vllm.hyper.ai/docs/

LlamaFactory

安装框架

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git

注意:

  1. 先学术加速可能会更快(source /etc/network_turbo)
  2. autodl一定放在数据盘拉取(autodl-tmp)
安装依赖
先进目录

cd LLaMA-Factory/

安装依赖

pip install -e .

验证安装

查看LlamaFactory的版本信息:llamafactory-cli env

vLLM

conda环境:

创建一个新的 conda 环境:

conda create -n myenv python=3.10 -y

conda activate myenv

这里单独安装隔离环境,

  • 避免依赖冲突‌:不同项目可能依赖同一库的不同版本,独立环境可隔离版本差异,防止因版本不兼容导致的运行错误‌
  • ‌资源隔离‌:单独环境可限制 vLLM 的 CPU/GPU 资源占用,避免与其他进程竞争资源,尤其在多任务场景下提升推理稳定性‌
安装框架

pip install vllm

验证安装

vllm --version

其他:

如果依赖的包不存在错误,直接安装即可。

数据

下载数据集

开源数据集:https://www.modelscope.cn/datasets/xiaofengalg/HuatuoGPT-sft-data-v1/dataPeview

上传至服务器

利用服务器的算力对数据集进行处理,故上传

格式转化

选择数据集格式

由于,

  • 不同大模型微调框架来说,数据集的格式不同,这里是LlamaFactory框架;
  • 同时,在医疗领域,上下文信息对生成回答的影响较大

所以,

  • 选择带多轮对话的指令监督微调数据集,其格式要求 如下
数据集格式转换

将jsonl转成json格式且符合LlamaFactory框架支持的监督微调格式

转化前

转换后

226043行,318M

文件名:HuatuoGPT_sft_data_v1.jsonl

3056516行,516M,多轮对话模式拆分了更多的行

文件名:huatuo.json

转化:/root/autodl-tmp/project/huatuo/data/huatuo.json

数据集较大,跑了2个小时,还没收敛,为了往下继续,裁剪数据集(141条)

数据集配置

将格式化的数据拷贝到LlamaFactory的data目录,并添加到data_info.json配置文件中,这样LlamaFactory才能识别到。

注意,通过多轮对话,columns字段请正确对应,尤其是history

数据集切分

  1. 比例:小数据集(6训练:2测试:2验证),小数据集(7训练:2测试:1验证)
  2. 所有数据皆同一来源,免因来源差异导致评估偏差
  3. 训练集包含所有数据,测试集直接从训练集中随机筛选出一部分
  4. 通过合理划分数据集并结合任务特性调整策略,可有效提升模型泛化能力与评估可靠性

模型

硬件需求

GPU选择

目前微调项目模型(1.5-8B),8B可满足中小企业对话需求,2张及以上24GB以上显存(RTX4090)

硬件配套

主要是CUP、内存、存储,影响数据的加载、预处理,避免在此处产生瓶颈。

基座模型

选择模型

BASE模型主要是用来理解数据本身特征含义,但选择模型要考虑:

  1. 数据规模匹陪:较少的数据集难以撼动较大的模型微调,即大的模型难以在小数量的数据集上收敛
  2. 垂直领域匹配:优先选择在目标领域有预训练基础的模型,较少知识重构成本

所以,选择基座模型时,不选过大的,够用就行;可以先不做训练直接拿原始数据对模型进行测试,通过对比找出表现较好的模型。

7B的,训练时间太长了,用1.5B的演示。

下载模型

下载模型时间较长,可以使用无卡模型开始,省钱。

根据提示:pip install modelscope

训练

启动web服务

cd LLaMA-Factory/

llamafactory-cli webui

nohup llamafactory-cli webui &(后台运行)


配置训练参数

  1. 模型路径:本地路径(私有化部署),否则从Huggingface上在线下载
  2. 对话模版:选择
  3. LoRa微调:主流的核心微调方法(默认选择)
  4. 训练轮数:可以多给一些,看情况主动停止
  5. 最大样本数:防止数据集过大,造成内存溢出问题,所以根据数据集真实情况来判定
  6. 验证集比例:0.02做验证集,其余做训练集
  7. LoRA 参数设置:经验值,LoRA秩*2=缩放系数

开始训练

点击“开始”,则启动微调训练。

资源最优化

通过不断调整微调参数,以最大化资源利用率目标,不断调整,直至最优化。

何时停止?
  1. 需要结合验证集性能收敛‌和过拟合信号来终止;
  2. 在医疗问答系统的微调项目中,泛化能力强的模型通常优于过拟合的模型,但具体需结合场景权衡
  3. 观察训练状态,实际上,
    1. 只要loss一直往下降,就可以继续训练;
    2. 当loss躺平,可以通过主观评测,如果结果错误,再继续训练,直至精度95%以上,可停下来

太好了,不用等半天还没收敛,这里很快躺平了;躺平说明收敛,是否达到预期需实际测试才知道。

训练后合并

通过评估测试,确认模型效果后,通过合并导出操作完成模型的训练(阶段)。

评测

主观评测

通过LLaMA-Factory的Chat模块加载微调模型,通过交互式对话测试生成质量;

当然,也可以使用其他方法或框架进行主观评估判断,只是这里使用LlamaFactory更方便,直接chat也不用对模型进行Merge操作,加载检查点即可完成评估操作。

参数配置:

通过LLaMA-Factory的Chat模块加载微调模型,通过交互式对话测试生成质量;下面,关键参数配置后,点击加载模型,可以进行chat推理


模型推理

将准备好的问题,输入模型,通过对话判断训练的效果;

客观评测

评估数据集
上传数据集

数据集配置

配置评测参数

开始评估测试
  1. 点击“开始”,进行评估测试
  2. 点击开始后,看vscode控制台,报错,提示安装包,直接安装后再点击开始直至正常

pip install jieba //分词工具

pip install nltk

pip install rouge_chinese

输出评估结果

准确率(predict_bleu-4)和召回率(predict_rouge-1)都高,结果才有效

上面得分,BLEU-4和ROUGE系列指标得分高,生成文本与目标文本匹配度高。模型准备时间短,但运行效率较低,处理速度有待提升。总体而言,在质量和效率间取得了一定平衡,适用于多种文本生成任务。

评测结果处理

如果评测未达预期,可以回到训练阶段,重新进行训练,即:

设定参数(学习率、训练轮次、批处理大小等超参数)->微调->评测,不断迭代,直至达标。

部署

vLLM服务

准备环境

在“环境准备”已经安装,下面激活该环境。

准备聊天模版

DeepSeek-R1是带有思维链的模型;蒸馏模型“DeepSeek-R1-Distill-Qwen”经过定制化训练之后,其输入格式已与Qwen完全不同;所以,在进行推理时候,需要明确指定微调时使用的模版,否则在服务器将无法处理聊天请,聊天请求将出错或推理时微调效果会被遗忘。

启服务开端口

vllm serve <model> --chat-template ./path-to-chat-template.jinja

验证

单轮对话

多轮对话

前端

后端

日志

日期内容
2025-3-16搞了小一天,充了2次值
想一下子把将其呈现出来还真不是件容易的事
整理过程发现很多细节,真想停下来想一想
明天又是周一
### 影刀RPA 实现淘宝网页自动化 #### 使用影刀RPA进行淘宝网页自动化的教程示例 为了实现淘宝网页的自动化,可以通过影刀RPA来完成一系列的任务。具体来说,影刀RPA能够模拟人类在电脑和平板上的操作行为,包括Web自动化、桌面软件自动化以及手机APP自动化等[^1]。 对于淘宝网页自动化而言,主要涉及以下几个方面: - **登录淘宝账号** 需要先打开浏览器并导航到淘宝网站,输入用户名和密码以完成登录过程。这一步骤通常涉及到定位页面中的特定元素(如用户名框、密码框),并通过发送键入命令来进行交互。 ```python from RPA.Browser.Selenium import Selenium browser = Selenium() browser.open_available_browser("https://www.taobao.com/") browser.input_text('css:#fm-login-id', 'your_username') browser.input_text('css:#fm-login-password', 'your_password') ``` - **搜索商品** 登录成功之后,可以利用关键词搜索功能查找所需的商品类别或单品。此环节同样依赖于识别搜索栏位置,并向其传递指定字符串参数。 ```python search_box = "id=q" keyword = "笔记本电脑" browser.input_text(search_box, keyword) browser.press_keys(search_box, "ENTER") ``` - **提取商品信息** 当目标列表展示出来以后,则需进一步解析各个条目的详情页链接、图片地址、价格区间等内容项。借助XPath表达式或其他选择器语法可精准锁定这些节点对象。 ```python items = [] elements = browser.find_elements('xpath://div[@class="items"]/div[contains(@class,"item")]') for element in elements[:5]: # 只取前五件商品作为示范 title = element.find_element_by_css_selector('.title').text.strip() price = element.find_element_by_css_selector('.price').text.replace("¥", "").strip() link = element.find_element_by_tag_name('a').get_attribute('href') item_info = { "Title": title, "Price": float(price), "Link": link } items.append(item_info) print(items) ``` 最后,上述收集的数据还可以被导出至Excel文件中以便后续分析处理[^2]。 ```python import pandas as pd df = pd.DataFrame(items) df.to_excel('./taobao_items.xlsx', index=False) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值