跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

基于 LLaMA-Factory 微调与 vLLM 部署的大语言模型实战

在 AutoDL 环境中利用 LLaMA-Factory 对 Qwen1.5-4B-Chat 进行微调,并通过 vLLM 实现高效推理。流程涵盖环境配置、数据集准备、WebUI 参数调整及模型导出。针对 vLLM 启动时显存预分配导致的 OOM 问题,提供调整最大序列长度的解决方案。最后通过 Streamlit 搭建本地聊天界面,验证微调后模型的对话能力,并指出模型路径配置的关键点以避免 404 错误。

菩提发布于 2026/4/9更新于 2026/6/822 浏览
基于 LLaMA-Factory 微调与 vLLM 部署的大语言模型实战

环境准备

本次实战基于 AutoDL 服务器环境,具体配置如下:

  • 操作系统:Ubuntu 22.04
  • Python 版本:3.10
  • PyTorch:2.1.0
  • CUDA:12.1
  • 显卡:RTX 4090 (24GB)

1. 搭建 LLaMA-Factory 环境

首先创建独立的虚拟环境并激活:

conda create -n llamafactory python=3.10 -y
conda activate llamafactory

将项目克隆至数据盘(例如 /root/autodl-tmp),并以可编辑模式安装依赖:

cd ./autodl-tmp/
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .

数据集准备

将准备好的数据集文件拷贝至 data 目录下。假设数据集名为 llamafactory_style_data,需确保目录结构正确。

同时,在 data/data_info.json 中注册该数据集,使用相对路径即可:

"llamafactory_style_data": {
    "file_name": "llamafactory_style_data.json"
}

2. 模型微调流程

下载基座模型

若无法直接访问 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")

启动 Web UI 进行训练

进入项目目录启动 WebUI:

cd LLaMA-Factory
llamafactory-cli webui

在界面中配置以下关键参数,根据显存情况灵活调整:

  • 模型名称:Qwen1.5-4B-Chat
  • 模型路径:指向本地下载的模型目录
  • 量化等级:8bit(可选,有助于节省显存)
  • 训练轮次:300(建议设置稍大,可随时中断)
  • 最大样本数:1000
  • 截断长度:512(视文本长度而定)
  • Batch Size:12(注意避免 OOM)
  • 验证集比例:0.02

导出合并后的模型

训练完成后,需要合并 LoRA 权重。新建导出目录(如 /root/autodl-tmp/models_merge/qwen),设备选择 auto 以加速导出过程。

推理验证

在 WebUI 的推理模块中,加载训练好的权重路径(通常位于 saves/{model_name}/lora/train_{date}/checkpoint-{step})。推理后端建议选择 huggingface;若选择 vllm,需确保已安装兼容版本(如 vllm==0.11.0)且在同一环境中。

3. vLLM 部署与服务

安装 vLLM

pip install vllm==0.11.0

启动服务

vLLM 启动时会预分配 KV Cache 显存,若遇显存不足,最佳方案是调小最大序列长度:

# 默认端口为 8000
vllm serve /root/autodl-tmp/models_merge/qwen --max-model-len 32000

构建验证应用

为了直观测试效果,可以使用 Streamlit 编写一个简单的聊天前端。注意 model 参数必须指定合并后模型的绝对路径,否则可能报 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")

@st.cache_resource
def init_client():
    client = OpenAI(
        base_url="http://localhost:8000/v1",
        api_key="not-needed"
    )
    return client

if "client" not in st.session_state:
    st.session_state.client = init_client()

if "messages" not in 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"])

def clear_chat_history():
    st.session_state.messages = [{"role": "assistant", "content": "你好,我是 AI 助手,有什么我可以帮助你的吗?"}]

st.sidebar.button('清空聊天历史', on_click=clear_chat_history)

def generate_response(prompt_input):
    try:
        messages = st.session_state.messages.copy()
        response = st.session_state.client.chat.completions.create(
            model="/root/autodl-tmp/models_merge/qwen",
            messages=messages,
            temperature=0.7,
            max_tokens=512,
            stream=False
        )
        return response.choices[0].message.content
    except Exception as e:
        return f"请求出错:{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")

运行应用:

streamlit run ./app.py

默认访问地址为 http://localhost:8501/。若微调效果未达预期,可适当增加训练轮次或优化数据集质量。

目录

  1. 环境准备
  2. 1. 搭建 LLaMA-Factory 环境
  3. 数据集准备
  4. 2. 模型微调流程
  5. 下载基座模型
  6. 启动 Web UI 进行训练
  7. 导出合并后的模型
  8. 推理验证
  9. 3. vLLM 部署与服务
  10. 安装 vLLM
  11. 启动服务
  12. 默认端口为 8000
  13. 构建验证应用
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • MCP 集成实战:连接 AI 与外部系统
  • 字节跳动发布豆包大模型,行业价格进入厘时代
  • 多智能体强化学习(MARL)核心概念与算法概览
  • 大模型时代程序员的自我成长路径:ChatGPT 两周年回顾
  • 命令行大模型交互工具 MCPHost 实战指南
  • 三种方法让老板秒懂大模型
  • Z-Image-Turbo 镜像快速搭建与 AI 绘画教学指南
  • STL vector 常用接口使用及底层原理与实现
  • OpenClaw 入门指南:本地部署与 AI 智能体实操
  • 中小团队低成本搭建项目管理系统:Ubuntu 下 DooTask 私有化部署实战
  • WebStorm 下载与安装配置指南
  • 链表算法实战:相交节点查找与回文结构判断
  • 原生 JavaScript 打造动态滑动拼图验证码
  • LeetCode 49. 字母异位词分组 Java 实现
  • 树莓派 4B 连接大疆 M300 无人机开发教程
  • HarmonyOS6 RcImage 组件核心架构与状态管理机制
  • FPGA 卷积神经网络硬件加速:从部署到性能优化
  • AI 如何助力六花直装 V8.3.9 的自动化开发与测试
  • VSCode 禁用 GitHub Copilot 功能设置指南
  • JavaScript 数组扁平化实战:不依赖 flat 方法的三种实现

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online