总结自视频(很强的小姐姐视频,讲解清晰明了):【DeepSeek+LoRA+FastAPI】开发人员如何微调大模型并暴露接口给后端调用_哔哩哔哩_bilibili
1. 安装vs code
https://code.visualstudio.com/
安装remote插件

2. 购买配置资源
AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL

这里的按照量计费,是开机使用则开始计费,关机这不计费。

注意关机后,可以此机器后会被其他人征用,再次开机需等待他的释放。
开机后的界面如下,复制ssh


回车后,会弹出下面界面,选择用户配置。

添加成功。

登录远程连接。

连接linux(上面机器资源是ubuntu)

连接成功,continue

输入密码界面



打开终端,出现购买的资源4090机器的信息。说明连接成功。


可以看到远程端的数据盘是/root/autodl-tmp,可以通过vs直接打开此盘。如下。

再次输入密码确认。


进入远程文件夹目录。


3. Llama-Factory安装部署
在远程端安装Llama-Factory。
github地址:https://github.com/hiyouga/LLaMA-Factory
直接clone下来:git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git

有点慢,甚至clone失败,多试几次(上午11点76kb/s),不行话试试晚上

clone成功。

cd 进入工程目录。
![]()
修改配置,将 conda 虚拟环境安装到数据盘(这一步也可不做)
机器自带了conda,这些修改conda的配置,将虚拟环境配置在数据盘,这样关闭机器后,此虚拟环境不会清空,且此机器资源不足时,可以将此虚拟环境克隆到另一个空闲机器上。



则init shell,输入命令:
conda init
source ~/.bashrc
conda activate llama-factory
在虚拟环境中安装 LLaMA Factory 相关依赖(半个小时时间,torch耗时)
注意:如报错 bash: pip: command not found ,先执行 conda install pip 即可

检验是否安装成功
llamafactory-cli version



4. HuggingFace基座模型

下载模型:https://huggingface.co/models?sort=trending&search=deepseek

复制模型完整名称。

执行下载命令:huggingface-cli download --resume-download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B




加载模型。

测试聊天功能。最后面输入。

回复在上面。

5. 微调大模型
5.1 准备数据集
自定义数据集,可参考官方文档教程。


- instruction: 指令,问题等;
- input: 上下文环境,比如问题发生的背景知识;
- output: 模型回复
```
[
{
"instruction": "请问你是谁",
"input": "",
"output": "您好,我是蟹堡王的神奇海螺,很高兴为您服务!我可以回答关于蟹堡王和汉堡制作的任何问题,您有什么需要帮助的吗?"
},
{
"instruction": "怎么修复这个报错",
"input": "我正在使用蟹堡王全自动智能汉堡制作机,报错信息是:汉堡食谱为空",
"output": "根据您提供的错误信息,'汉堡食谱为空' 可能是因为系统没有加载正确的食谱文件或食谱文件被删除。您可以尝试以下步骤:\n1. 检查食谱文件是否存在,并确保文件路径正确。\n2. 重新加载或更新食谱文件。\n3. 如果问题依然存在,尝试重启机器并检查是否有软件更新。\n希望这些步骤能帮助您修复问题。如果仍有困难,请与蟹堡王技术支持联系。"
}
]
完整内容可参考:GitHub - huangyf2013320506/magic_conch_backend
复制完整内容,并在data目录下创建自定义的json数据集文件。如下。

配置dataset_info.json,使得程序能够找到自定义数据文件。


5.2 训练参数

训练方式有两种:(1)页面上点击启动训练 ;(2)复制命令到终端启动训练;


5.3 评估
可以直接在chat界面测试问答。需要先配置权重,Lora算法需要配置AB权重。

先点击卸载模型,卸载deepseek-r1-1.5b-distill模型,再加载微调后的模型。


5.4 导出合并后的模型
LoRA算法是通过低秩矩阵调整原始模型的权重,并没有修改权重本身,所以需要将LoRA权重合并到原始权重,生成一个新的完整权重。
创建目录,放置新权重。
在页面配置导出路径,并导出。



6. 模型部署和前端调用
6.1 创建新的conda环境
此环境专门用于部署模型。
6.2 通过 FastAPI 部署模型并暴露 HTTP 接口
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}
- `main` 是 Python 文件名(要注意不包含 `.py` 扩展名)- `app` 是 FastAPI 实例的变量名(代码中 `app = FastAPI()` )- `--reload` 使代码更改后可以自动重载,适用于开发环境- `host 0.0.0.0` :将 FastAPI 应用绑定到所有可用的网络接口,这样我们的本机就可以通过内网穿透访问该服务

配置端口转发,使得本机可以访问该服务:AutoDL帮助文档



这和B站大佬的回复不一样,估计是我的模型训练还不够。
或者你也可以通过 postMan 来测试


5045

被折叠的 条评论
为什么被折叠?



