基于llamafactory微调与vllm部署的LLM情感模型示例

基于llamafactory微调与vllm部署的LLM情感模型示例

环境需求:

  • 服务器:AutoDL
  • PyTorch 2.1.0
  • Python 3.10 (Ubuntu 22.04)
  • Cuda 12.1
  • 4090(24GB)

1. 下载llamafactory

  1. 创建虚拟环境
conda create -n llamafactory python=3.10 -y conda activate llamafactory 
  1. 下载到数据盘
cd ./autodl-tmp/ git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e .

将数据集拷贝至:/root/autodl-tmp/LLaMA-Factory/data,煮饱这里自己准备了名称为llamafactory_style_data的数据集

在这里插入图片描述

并将data_info.json中添加数据集:

# 这里使用相对路径就可以了"llamafactory_style_data":{"file_name":"llamafactory_style_data.json"}, 

2. 模型微调

  1. 下载模型,没有vpn的同学可以使用魔塔社区:魔塔社区模型库
    有vpn的同学可以使用huggingface:huggingface模型库
    这里演示选择了qwen1.5-4B-Chat模型
from modelscope import snapshot_download model_dir = snapshot_download('Qwen/Qwen1.5-4B-Chat',cache_dir="/root/autodl-tmp/models")
  1. 启动 Web UI:
cd LLaMA-Factory llamafactory-cli webui 
  1. 模型微调,需要调整的参数:
  • 模型名称:Qwen1.5-4B-Chat
  • 模型路径:/root/autodl-tmp/models/Qwen/Qwen1.5-4B-Chat
  • 量化等级:8(可不开,缩小模型加速训练的)
  • 训练轮次:300(建议给大点,反正能随时停)
  • 最大样本数:1000
  • 截断长度:512(我的文本没那么大,这个看自己情况)
  • batch_size:12(看自己cpu,别cuda out of memory就行)

验证集比例:0.02(也是看个人)

在这里插入图片描述

模型导出
自创导出目录/root/autodl-tmp/models_merge/qwen,导出设备选择auto可以加快导出

在这里插入图片描述

模型对话:
选择刚训练出的权重/root/autodl-tmp/LLaMA-Factory/saves/Qwen1.5-4B-Chat/lora/train_2025-12-14-19-49-11/checkpoint-300,放在检查路径,推理模型选择huggingface
注:如果推理模型选择vllm,需要和llamafactory装在同一虚拟环境中,并且指定vllm==0.11.0

在这里插入图片描述

3. vllm部署

  1. 下载vllm
pip installvllm==0.11.0 
  1. 部署,这里很容易出现显存不足的情况,本质是vllm在启动时会预分配显存用于 KV Cache(键值缓存),导致启动失败,此时最佳解决方案就是稍微调小最大序列长度
# vllm默认端口为 8000 vllm serve /root/autodl-tmp/models_merge/qwen --max-model-len 32000
在这里插入图片描述


3. 写一个app.py进行验证
注意:response中的model需要指定你merge后的模型绝对路径,不然在使用streamlit对话框时会报错:
Error code: 404 - {‘error’: {‘message’: ‘The model Qwen1___5-1___8B-Chatdoes not exist.’, ‘type’: ‘NotFoundError’, ‘param’: None, ‘code’: 404}}

import streamlit as st from openai import OpenAI st.set_page_config(page_title="VLLM Chat Demo", page_icon="🤖") st.title("VLLM Chat Demo")# 初始化 OpenAI 客户端连接到 [email protected]_resourcedefinit_client(): client = OpenAI( base_url="http://localhost:8000/v1", api_key="not-needed"# VLLM 通常不需要 API 密钥)return client # 初始化 VLLM 客户端if"client"notin st.session_state: st.session_state.client = init_client()# 初始化聊天历史if"messages"notin st.session_state: st.session_state.messages =[{"role":"assistant","content":"你好,我是AI助手,有什么我可以帮助你的吗?"}]# 显示聊天历史for message in st.session_state.messages:with st.chat_message(message["role"]): st.write(message["content"])# 清空聊天历史函数defclear_chat_history(): st.session_state.messages =[{"role":"assistant","content":"你好,我是AI助手,有什么我可以帮助你的吗?"}]# 侧边栏清空按钮 st.sidebar.button('清空聊天历史', on_click=clear_chat_history)# 生成回复函数defgenerate_response(prompt_input):try:# 构建消息历史 messages = st.session_state.messages.copy()# 调用 VLLM API response = st.session_state.client.chat.completions.create( model="/root/autodl-tmp/models_merge/qwen",# 模型名称,应与 VLLM 启动时的名称一致 messages=messages, temperature=0.7, max_tokens=512, stream=False# 设置为 True 可以启用流式输出)return response.choices[0].message.content except Exception as e:returnf"请求出错: {str(e)}"# 处理用户输入if prompt := st.chat_input("请输入您的问题:"):# 添加用户消息到历史 st.session_state.messages.append({"role":"user","content": prompt})# 显示用户消息with st.chat_message("user"): st.write(prompt)# 生成并显示助手回复with st.chat_message("assistant"):with st.spinner("正在思考..."): response = generate_response(prompt) st.write(response)# 添加助手回复到历史 st.session_state.messages.append({"role":"assistant","content": response})# 侧边栏信息 st.sidebar.markdown("### 配置信息") st.sidebar.info(f"模型: Qwen1.5-4B-Chat") st.sidebar.info(f"API端点: http://localhost:8000/v1")
  1. 验证微调效果:
streamlit run ./app.py 

streamlit默认端口为http://localhost:8501/

在这里插入图片描述


貌似效果一般。。。训练的时候可以多训练两轮!

Read more

ClawdBot入门指南:Web Dashboard访问失败的4种原因与修复方案

ClawdBot入门指南:Web Dashboard访问失败的4种原因与修复方案 ClawdBot 是一个你可以在自己设备上运行的个人 AI 助手,本应用使用 vLLM 提供后端模型能力。它不像云端服务那样需要注册账号、等待排队或担心隐私泄露,而是一个真正属于你自己的本地化智能中枢——能对话、能推理、能调用工具、还能通过 Web 界面直观管理所有功能。 但很多用户在首次部署后会遇到同一个问题:打开浏览器输入 http://localhost:7860 或类似地址,页面却显示“无法访问此网站”“连接被拒绝”“空白页”甚至直接 404。这不是模型没跑起来,也不是代码写错了,而是 ClawdBot 的 Web Dashboard 有一套主动安全机制:它默认不对外暴露,也不自动放行任何访问请求。就像家门装了智能门锁,钥匙得亲手配、访客得亲自确认。 本文不讲原理、不堆参数,只聚焦一个目标:让你的 Dashboard 在

一键启动SenseVoiceSmall:Gradio WebUI免配置环境实战教程

一键启动SenseVoiceSmall:Gradio WebUI免配置环境实战教程 1. 学习目标与前置知识 你是否还在为语音识别工具操作复杂、依赖繁多而烦恼?今天要介绍的 SenseVoiceSmall 模型,不仅支持中、英、日、韩、粤五种语言的高精度转写,还能“听懂”说话人的情绪和背景音中的掌声、笑声等事件。更关键的是——我们已经为你打包好了完整的运行环境,只需一键部署,就能通过浏览器直接使用。 本文适合: * 对语音识别感兴趣但不想折腾环境的新手 * 需要快速验证语音情感分析能力的产品经理或开发者 * 希望在本地搭建可视化语音处理工具的技术人员 不需要你懂模型原理,也不用手动安装几十个依赖库。只要你会点鼠标、会复制粘贴命令,5分钟内就能让这个强大的语音AI跑起来。 2. 为什么选择 SenseVoiceSmall? 2.1 它不只是“语音转文字” 传统语音识别(ASR)只能告诉你“说了什么”,而 SenseVoiceSmall 能进一步回答:“是怎么说的?”以及“周围发生了什么?”。 举个例子:

网页抓取(Web Scraping)完整技术指南:从原理到实战

在数据驱动的时代,结构化信息已成为企业决策、AI 训练与市场分析的核心资源。网页抓取(Web Scraping) 作为从非结构化网页中提取结构化数据的关键技术,广泛应用于电商、金融、舆情监测、学术研究等领域。 本文将系统解析网页抓取的工作原理、工具链、反爬对抗策略与法律边界,并提供可落地的工程建议。 一、什么是网页抓取? 网页抓取是指通过程序自动访问网页,解析 HTML/JSON 内容,并将目标数据提取、转换为结构化格式(如 CSV、数据库记录)的过程。 与网络爬虫(Crawler)的区别:爬虫:广度优先遍历全站链接(如搜索引擎);抓取:深度聚焦特定页面的数据字段(如商品价格、评论)。 典型应用场景包括: * 电商比价(Amazon、Shopee 商品监控) * 招聘数据聚合(职位趋势分析) * 社交媒体舆情监测(公开评论情感分析) * 学术数据采集(论文元数据批量下载)

【前端】前端面试题

【前端】前端面试题

前端面试题 闭包 1. 定义: 闭包(Closure) 是指一个函数能够访问并记住其外部作用域中的变量,即使外部函数已经执行完毕。闭包由两部分组成: * 一个函数(通常是内部函数)。 * 该函数被创建时所在的作用域(即外部函数的变量环境) functionouter(){let count =0;// 外部函数的变量functioninner(){ count++;// 内部函数访问外部变量 console.log(count);}return inner;}const counter =outer();counter();// 输出 1counter();// 输出 2 2. 闭包的核心原理 * 作用域链:函数在定义时,会记住自己的词法环境(即外部作用域)。当内部函数访问变量时,会沿着作用域链向上查找。 * 变量持久化:闭包使得外部函数的变量不会被垃圾回收,因为内部函数仍持有对它们的引用 3. 闭包的常见用途 3.1 私有变量封装 通过闭包隐藏内部变量,