LoRA模型微调过程记录

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

总结自视频(很强的小姐姐视频,讲解清晰明了):【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 虚拟环境安装到数据盘(这一步也可不做)

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,这些修改conda的配置,将虚拟环境配置在数据盘,这样关闭机器后,此虚拟环境不会清空,且此机器资源不足时,可以将此虚拟环境克隆到另一个空闲机器上。

创建 conda 虚拟环境 ( 一定要 3.10 python 版本,不然和 LLaMA-Factory 不兼容 )
conda create -n llama-factory python = 3 .10

激活虚拟环境
conda activate llama-factory
如果报错如下。

则init shell,输入命令:

conda init

source ~/.bashrc

conda activate llama-factory

在虚拟环境中安装 LLaMA Factory 相关依赖(半个小时时间,torch耗时)

pip install -e ".[torch,metrics]"

注意:如报错 bash: pip: command not found ,先执行 conda install pip 即可

检验是否安装成功

llamafactory-cli version 

启动 LLama-Factory 的可视化微调界面
llamafactory-cli webui

4. HuggingFace基座模型

4.1 从 HuggingFace 上下载基座模型
创建文件夹统一存放所有基座模型
mkdir Hugging-Face
开启一个新的terminal,输入上面的命令。

修改 HuggingFace 的镜像源
export HF_ENDPOINT = https://hf-mirror.com
修改模型下载的默认位置
export HF_HOME = /root/autodl-tmp/Hugging-Face
注意:这种配置方式只在当前 shell 会话中有效,如果你希望这个环境变量在每次启动终端时都生效,可以将其
添加到你的用户配置文件中(修改 ~/.bashrc ~/.zshrc
检查环境变量是否生效
echo $HF_ENDPOINT
echo $HF_HOME
4.2 安装 HuggingFace 官方下载工具
pip install -U huggingface_hub

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

复制模型完整名称。 

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

注意:如果直接本机下载了模型压缩包,如何放到你的服务器上? —— AutoDL 上打开 JupyterLab 直接上传,或者
下载软件通过 SFTP 协议传送
4.3 可视化页面上加载模型测试,检验是否加载成功
注意:这里的路径是模型文件夹内部的 模型特定快照的唯一哈希值 ,而不是整个模型文件夹

加载模型。 

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

回复在上面。

5. 微调大模型

5.1 准备数据集

自定义数据集,可参考官方文档教程。

按照格式准备用于微调的数据集 magic_conch.json ,数据示例(官方identity.json):

  • 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)复制命令到终端启动训练;

实践中推荐用 nohup 命令将训练任务放到后台执行,这样即使关闭终端任务也会继续运行。同时将日志重定向到文件中保存下来

梯度下降较慢,可以把学习率调大。

5.3 评估

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

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

5.4 导出合并后的模型

LoRA算法是通过低秩矩阵调整原始模型的权重,并没有修改权重本身,所以需要将LoRA权重合并到原始权重,生成一个新的完整权重。

创建目录,放置新权重。

mkdir -p Models/deepseek-r1-1.5b-merged

在页面配置导出路径,并导出。

6. 模型部署和前端调用

6.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

6.2 通过 FastAPI 部署模型并暴露 HTTP 接口

创建 App 文件夹
mkdir App
创建 main.py 文件,作为启动应用的入口
touch main.py
修改 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}
进入包含 main.py 文件的目录,然后运行以下命令来启动 FastAPI 应用
uvicorn main:app --reload --host 0.0.0.0
- `main` Python 文件名(要注意不包含 `.py` 扩展名)
- `app` FastAPI 实例的变量名(代码中 `app = FastAPI()`
- `--reload` 使代码更改后可以自动重载,适用于开发环境
- `host 0.0.0.0` :将 FastAPI 应用绑定到所有可用的网络接口,这样我们的本机就可以通过内网穿透访问该服务

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

浏览器输入以下 url ,测试服务是否启动成功
http://localhost:8000/docs

这和B站大佬的回复不一样,估计是我的模型训练还不够。

或者你也可以通过 postMan 来测试

http://localhost:8000/generate?prompt= 你是谁?

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值