一、背景与硬件信息

  • 显卡:NVIDIA GeForce RTX 5080(16GB 显存,计算能力 sm_120
  • 系统:Windows 11
  • 模型:Llama-3.1-8B-Instruct
  • 微调方法:LoRA

RTX 5080 基于 Blackwell 架构,旧版 PyTorch(如 2.3.0)仅支持到 sm_90,直接训练会报错:

text

UserWarning: NVIDIA GeForce RTX 5080 with CUDA capability sm_120 is not compatible with the current PyTorch installation.

因此必须安装支持 sm_120 的 PyTorch Nightly 版本(CUDA 12.8)。


二、环境准备

2.1 安装 Miniconda(如已安装请跳过)

官网 下载并安装 Miniconda(Python 3.11 版本)。

2.2 创建并激活虚拟环境

powershell

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

2.3 安装支持 RTX 5080 的 PyTorch

powershell

pip install --upgrade pip
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128

验证安装:

python

python -c "import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.cuda.get_device_capability())"

预期输出:

text

2.8.0.dev20260320+cu128
True
(12, 0)

2.4 安装 LLaMA Factory

powershell

git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"

若需量化,可同时安装 bitsandbytes(Windows 下推荐使用 bitsandbytes-windows),但本文训练时关闭量化,避免兼容性问题。


三、准备数据集

3.1 数据格式

使用 messages 格式,每行一个 JSON 对象。例如:

json

{"messages": [
    {"role": "system", "content": "你是一个专业客服,不能说自己是AI。"},
    {"role": "user", "content": "你好"},
    {"role": "assistant", "content": "您好,请问有什么可以帮您?"}
]}

3.2 注册数据集

编辑 LLaMA-Factory/data/dataset_info.json,添加自定义数据集:

json

"my_custom": {
    "file_name": "my_data.json",
    "format": "messages",
    "columns": {
        "messages": "messages"
    },
    "tags": {
        "role_tag": "role",
        "content_tag": "content",
        "user_tag": "user",
        "assistant_tag": "assistant",
        "system_tag": "system"
    }
}

四、训练参数设置(关键)

4.1 启动 WebUI

powershell

llamafactory-cli webui

浏览器访问 http://localhost:7860

4.2 模型加载

  • 模型名称/路径E:\LLM\LLaMAWork\models\Meta-Llama-3.1-8B-Instruct(本地路径)
  • 量化等级None(关闭量化)
  • 提示模板llama3

4.3 训练参数(避免常见错误)

参数 推荐值 说明
学习率 2e-4 LoRA 常用值
训练轮数 3 根据数据量调整
最大梯度范数 1.0 梯度裁剪
计算类型 bf16 RTX 5080 支持
截断长度 1024 客服对话足够,避免过大
批处理大小 1 8B 模型+16GB 显存
梯度累积 4 有效 batch size = 4
验证集比例 0 数据少时暂不划分
学习率调节器 cosine 稳定收敛

LoRA 参数

  • LoRA 秩:16
  • LoRA 缩放系数:32
  • LoRA 随机丢弃:0.0
  • LoRA 作用模块:留空

4.4 开始训练

点击 开始 按钮。训练过程中可观察终端输出的 loss 值。

常见错误:梯度累积设为 1024 会导致训练极慢(1000 条数据需 10+ 小时)。正确值为 4


五、导出合并模型

训练完成后,需要将 LoRA 适配器与基础模型合并,得到完整的 Hugging Face 格式模型。

5.1 使用命令行导出(推荐)

powershell

llamafactory-cli export `
    --model_name_or_path "E:\LLM\LLaMAWork\models\Meta-Llama-3.1-8B-Instruct" `
    --adapter_name_or_path "E:\LLM\LLaMA-Factory\saves\Llama-3.1-8B-Instruct\lora\train_1" `
    --export_dir "E:\LLM\llamaModels\exported_hf_model" `
    --export_device auto
  • --export_device auto 优先使用 GPU,若显存不足可改为 cpu
  • 确保导出目录为空且磁盘剩余空间 ≥20 GB。

5.2 验证导出

导出成功后,目录下应包含 config.jsonmodel.safetensorstokenizer.json 等文件。


六、转换为 GGUF 格式(用于 llama.cpp)

6.1 准备 llama.cpp 工具

下载支持 CUDA 的预编译版本(文件名含 cu12),例如:

  • llama-b4232-bin-win-cu12.4-x64.zip

解压到 E:\LLM\llama.cpp,确保目录下有 llama-server.exequantize.exeggml-cuda.dll 等文件。

6.2 转换 Hugging Face 模型为 GGUF(FP16)

powershell

cd E:\LLM\llama.cpp-src   # 源码目录,包含 convert_hf_to_gguf.py
python convert_hf_to_gguf.py "E:\LLM\llamaModels\exported_hf_model" --outfile "E:\LLM\llamaModels\new\llama-3.1-8b-custom.gguf" --outtype f16

如果 llama.cpp-src 中没有该脚本,可从 GitHub 下载源码。

6.3 量化为 q4_k_m

powershell

cd E:\LLM\llama.cpp
.\quantize.exe "E:\LLM\llamaModels\new\llama-3.1-8b-custom.gguf" "E:\LLM\llamaModels\new\llama-3.1-8b-custom_Q4_K_M.gguf" q4_k_m

量化后文件约 5-6 GB,适合本地推理。

6.4 验证模型

powershell

.\main.exe -m "E:\LLM\llamaModels\new\llama-3.1-8b-custom_Q4_K_M.gguf" -p "你好" -n 32

七、在 llama.cpp 中运行模型(API 服务器)

7.1 启动服务器(支持局域网访问)

使用以下 PowerShell 脚本启动服务器,并允许局域网访问:

powershell

# 固定端口
$port = 8000

# llama-server.exe 路径
$serverExe = "E:\LLM\llama.cpp\llama-server.exe"

# 打开文件选择对话框
Add-Type -AssemblyName System.Windows.Forms
$openFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$openFileDialog.InitialDirectory = "E:\LLM\llamaModels"
$openFileDialog.Filter = "GGUF 模型 (*.gguf)|*.gguf|所有文件 (*.*)|*.*"
$openFileDialog.Title = "请选择要运行的 GGUF 模型文件"

if ($openFileDialog.ShowDialog() -eq 'OK') {
    $modelPath = $openFileDialog.FileName
    Write-Host "选择的模型: $modelPath"
    Write-Host "正在启动服务器,端口 $port ..."
    & $serverExe -m "$modelPath" --port $port --host 0.0.0.0 -ngl 99
} else {
    Write-Host "未选择模型,退出。"
    pause
}

关键参数

  • --host 0.0.0.0:允许通过局域网 IP 访问。
  • -ngl 99:将 99 层加载到 GPU(根据显存调整)。

7.2 访问服务器

  • 本机:http://localhost:8000
  • 局域网其他设备:http://<本机IP>:8000(如 192.168.66.110:8000

7.3 防火墙设置

如果无法从局域网访问,添加防火墙规则:

powershell

New-NetFirewallRule -DisplayName "LLaMA Server" -Direction Inbound -LocalPort 8000 -Protocol TCP -Action Allow

八、基础模型直接转换 GGUF(不微调)

如果你想直接使用原始 Llama-3.1-8B-Instruct,无需合并 LoRA,可以按以下步骤转换:

8.1 转换为 FP16 GGUF

powershell

cd E:\LLM\llama.cpp-src
python convert_hf_to_gguf.py "E:\LLM\LLaMAWork\models\Meta-Llama-3.1-8B-Instruct" `
    --outfile "E:\LLM\llamaModels\base\llama-3.1-8b-instruct-f16.gguf" `
    --outtype f16

8.2 量化为 q4_k_m

powershell

cd E:\LLM\llama.cpp
.\quantize.exe "E:\LLM\llamaModels\base\llama-3.1-8b-instruct-f16.gguf" `
    "E:\LLM\llamaModels\base\llama-3.1-8b-instruct-Q4_K_M.gguf" q4_k_m

为什么不能一步到位?convert_hf_to_gguf.py 只支持输出 FP16、FP32 或 q8_0 等基础类型,更高级的量化(如 q4_k_m)需通过 quantize 工具单独完成。


九、常见问题与解决方案

问题 原因 解决方案
段错误 3221225477 PyTorch 不支持 RTX 5080 安装 Nightly 版本(CUDA 12.8)
bitsandbytes 缺失 量化选项未关闭 训练时关闭量化(量化等级=None
训练集为空 验证集比例过大且数据少 将验证集比例设为 0
训练极慢(10+ 小时) 梯度累积设置过大(如 1024) 改为 4
导出时连接断开 内存不足 改用 --export_device cpu
convert_hf_to_gguf.py 找不到 未在正确目录或未下载 从 GitHub 下载脚本
GPU 未启用(llama.cpp) 使用了 CPU 版本或缺少 CUDA 依赖 下载含 cu12 的预编译包,或自行编译指定 -DCMAKE_CUDA_ARCHITECTURES=120
无法通过局域网 IP 访问 服务器未绑定 0.0.0.0 添加 --host 0.0.0.0 参数
防火墙阻止端口 Windows 防火墙规则未放行 添加入站规则(见 7.3)

十、一键脚本(导出并转换)

将以下内容保存为 export_and_convert.ps1,右键“使用 PowerShell 运行”:

powershell

# 1. 导出合并模型
llamafactory-cli export `
    --model_name_or_path "E:\LLM\LLaMAWork\models\Meta-Llama-3.1-8B-Instruct" `
    --adapter_name_or_path "E:\LLM\LLaMA-Factory\saves\Llama-3.1-8B-Instruct\lora\train_1" `
    --export_dir "E:\LLM\llamaModels\exported_hf_model" `
    --export_device auto

# 2. 转换为 GGUF (FP16)
cd E:\LLM\llama.cpp-src
python convert_hf_to_gguf.py "E:\LLM\llamaModels\exported_hf_model" --outfile "E:\LLM\llamaModels\new\llama-3.1-8b-custom.gguf" --outtype f16

# 3. 量化为 q4_k_m
cd E:\LLM\llama.cpp
.\quantize.exe "E:\LLM\llamaModels\new\llama-3.1-8b-custom.gguf" "E:\LLM\llamaModels\new\llama-3.1-8b-custom_Q4_K_M.gguf" q4_k_m

Write-Host "完成!模型路径: E:\LLM\llamaModels\new\llama-3.1-8b-custom_Q4_K_M.gguf"

十一、总结

本文详细介绍了在 RTX 5080 显卡上从零开始微调 Llama-3.1-8B 模型,并导出为 GGUF 格式在 llama.cpp 中运行的全过程。通过合理设置训练参数(避免梯度累积过大等陷阱),你可以在 1 小时内完成 1000 条数据的 LoRA 微调。最终得到的量化模型可在本地高效推理,支持局域网访问。

希望这篇教程能帮助你顺利部署自己的大模型应用。如有疑问,欢迎在评论区交流。


最后更新:2026-03-23
适用版本:LLaMA Factory 0.9.5+,PyTorch 2.8.0+cu128,llama.cpp b4232+(CUDA 12.4)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐