Skip to content
Go back

在 Linux 系统上微调、部署、前端展示大模型

Published:  at  03:00 PM

本文为转载记录

目录

一、简介

本期视频主要分为以下五部分:

1. 需求和技术
2. 整体步骤说明
3. 模型微调
4. 模型部署和暴露接口
5. web后端调用

二、需求和技术

1. 企业对于大模型的不同类型个性化需求
2. SFT(有监督微调)、RLHF(强化学习)、RAG(检索增强生成)
2.1 SFT(Supervised Fine-Tuning)有监督微调
2.2 RLHF(Reinforcement Learning from Human Feedback)强化学习
2.3 RAG(Retrieval-Augmented Generation)检索增强生成
3. 微调还是RAG?
4. SFT(有监督微调)

通过提供人工标注的数据,进一步训练预训练模型,让模型能够更加精准地处理特定领域的任务

如:对话系统
{
    "instruction": "请问你是谁",
    "input": "",
    "output": "您好,我是蟹堡王的神奇海螺,很高兴为您服务!我可以回答关于蟹堡王和汉堡制作的任何问题,您有什么需要帮助的吗?"
},
5. LoRA 微调算法
6. 微调常见实现框架

三、整体步骤说明

四、模型微调

1. 准备硬件资源、搭建环境
2. 本机通过 SSH 连接到远程服务器
3. LLaMA-Factory 安装部署

LLaMA-Factory 的 Github地址:https://github.com/hiyouga/LLaMA-Factory

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
mkdir -p /root/autodl-tmp/conda/pkgs 
conda config --add pkgs_dirs /root/autodl-tmp/conda/pkgs 
mkdir -p /root/autodl-tmp/conda/envs 
conda config --add envs_dirs /root/autodl-tmp/conda/envs
conda create -n llama-factory python=3.10
conda activate llama-factory
pip install -e ".[torch,metrics]"
注意:如报错 bash: pip: command not found ,先执行 conda install pip 即可
llamafactory-cli version
4. 启动 LLama-Factory 的可视化微调界面 (由 Gradio 驱动)
llamafactory-cli webui
5. 配置端口转发
ssh -CNg -L 7860:127.0.0.1:7860 root@123.125.240.150 -p 42151
6. 从 HuggingFace 上下载基座模型

HuggingFace 是一个集中管理和共享预训练模型的平台 https://huggingface.co; 从 HuggingFace 上下载模型有多种不同的方式,可以参考:如何快速下载huggingface模型——全方法总结

mkdir Hugging-Face
export HF_ENDPOINT=https://hf-mirror.com
export HF_HOME=/root/autodl-tmp/Hugging-Face
echo $HF_ENDPOINT
echo $HF_HOME
pip install -U huggingface_hub
huggingface-cli download --resume-download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
7. 可视化页面上加载模型测试,检验是否加载成功
/root/autodl-tmp/Hugging-Face/hub/models--deepseek-ai--DeepSeek-R1-Distill-Qwen-1.5B/snapshots/530ca3e1ad39d440e182c2e4317aa40f012512fa
8. 准备用于训练的数据集,添加到指定位置
[
  {
    "instruction": "请问你是谁",
    "input": "",
    "output": "您好,我是蟹堡王的神奇海螺,很高兴为您服务!我可以回答关于蟹堡王和汉堡制作的任何问题,您有什么需要帮助的吗?"
  },
  {
    "instruction": "怎么修复这个报错",
    "input": "我正在使用蟹堡王全自动智能汉堡制作机,报错信息是:汉堡食谱为空",
    "output": "根据您提供的错误信息,'汉堡食谱为空' 可能是因为系统没有加载正确的食谱文件或食谱文件被删除。您可以尝试以下步骤:\n1. 检查食谱文件是否存在,并确保文件路径正确。\n2. 重新加载或更新食谱文件。\n3. 如果问题依然存在,尝试重启机器并检查是否有软件更新。\n希望这些步骤能帮助您修复问题。如果仍有困难,请与蟹堡王技术支持联系。"
  }
]
"magic_conch": {
"file_name": "magic_conch.json"
},
9. 在页面上进行微调的相关设置,开始微调
10. 微调结束,评估微调效果
11. 导出合并后的模型
mkdir -p Models/deepseek-r1-1.5b-merged

五、模型部署和暴露接口

1. 创建新的 conda 虚拟环境用于部署模型
conda create -n fastApi python=3.10
conda activate fastApi
conda install -c conda-forge fastapi uvicorn transformers pytorch
pip install safetensors sentencepiece protobuf
2. 通过 FastAPI 部署模型并暴露 HTTP 接口
mkdir App
touch main.py
from fastapi import FastAPI
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

app = FastAPI()

# 模型路径
model_path = "/root/autodl-tmp/Models/deepseek-r1-1.5b-merged"

# 加载 tokenizer (分词器)
tokenizer = AutoTokenizer.from_pretrained(model_path)

# 加载模型并移动到可用设备(GPU/CPU)
device = "cuda" if torch.cuda.is_available() else "cpu"
model = AutoModelForCausalLM.from_pretrained(model_path).to(device)

@app.get("/generate")
async def generate_text(prompt: str):
    # 使用 tokenizer 编码输入的 prompt
    inputs = tokenizer(prompt, return_tensors="pt").to(device)
    
    # 使用模型生成文本
    outputs = model.generate(inputs["input_ids"], max_length=150)
    
    # 解码生成的输出
    generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
    
    return {"generated_text": generated_text}
uvicorn main:app --reload --host 0.0.0.0
- `main` 是 Python 文件名(要注意不包含 `.py` 扩展名)
- `app` 是 FastAPI 实例的变量名(代码中 `app = FastAPI()`)
- `--reload` 使代码更改后可以自动重载,适用于开发环境
- `host 0.0.0.0`:将 FastAPI 应用绑定到所有可用的网络接口,这样我们的本机就可以通过内网穿透访问该服务
http://localhost:8000/docs
http://localhost:8000/generate?prompt=你是谁?

六、web后端调用

1. pom.xml 导入依赖
<dependency>  
    <groupId>org.apache.httpcomponents.client5</groupId>  
    <artifactId>httpclient5</artifactId>  
    <version>5.2.1</version>  
</dependency>
2. 自定义方法发送并处理 HTTP 请求,实现对话功能
@Service  
public class ChatServiceImpl implements ChatService {  
      
    @Autowired  
    private RestTemplate restTemplate;  
    @Autowired  
    private AiServiceConfig aiServiceConfig;  
  
    @Override  
    public String callAiForOneReply(String prompt) {  
        // 获取基础URL http://localhost:8000  
        String baseUrl = aiServiceConfig.getBaseUrl();  
        // 构建完整的请求URL http://localhost:8000/generate?prompt=XXX  
        String url = String.format("%s/generate?prompt=%s", baseUrl, prompt);  
        // 发送GET请求并获取响应  
        GenerateResponse response = restTemplate.getForObject(url, GenerateResponse.class);  
        // 从响应中取出 generated_text 字段值返回  
        return response != null ? response.getGenerated_text() : "";  
    }  
}
3. 本机启动 Demo 前后端工程,测试对话效果
3.1 启动前端工程
https://github.com/huangyf2013320506/magic_conch_frontend.git
npm install
npm run dev
3.2 启动后端工程
https://github.com/huangyf2013320506/magic_conch_backend.git
mvn clean install
4. FastAPI 支持自定义多种请求响应格式,可自行探索
5. 如何开放服务端口到公网
6. 企业部署还需考虑高并发、高可用、安全机制等问题

Suggest Changes
Share this post on:

Previous Post
如何 Review 一篇文章?
Next Post
智海拾贝:AI科研进阶之路——2025人工智能学院科研经验交流分享会(笔记)