教程

AutoDL 大模型微调与边缘端转换实战指南

一、整体流程概览

  1. 环境搭建:AutoDL GPU实例 + Python虚拟环境 + LLaMA Factory
  2. 数据准备:构建ShareGPT格式数据集,注册到项目中
  3. 模型获取:下载DeepSeek-R1-Distill-Qwen-7B基础模型
  4. 指令微调:使用LoRA方法进行高效微调
  5. 权重合并:将LoRA适配器合并到基础模型
  6. 模型转换:通过RKLLM-Toolkit 1.2.3转换为RK3588支持的.rkllm格式
  7. 开发板部署:将模型传输至瑞芯微开发板运行

二、环境搭建细节

2.1 AutoDL实例选择

  • 显卡:推荐RTX 4090(24GB),可完美支持7B模型LoRA微调。若选RTX 5090需额外配置PyTorch最新版,过程繁琐。
  • 镜像:选择预装PyTorch 2.0+、CUDA 11.8/12.1的官方镜像,避免手动安装驱动。

2.2 创建虚拟环境

为避免Conda网络问题,直接使用Python venv:

bash

cd /root/autodl-tmp/LLaMA-Factory

python3 -m venv venv_llama

source venv_llama/bin/activate

pip install –upgrade pip

pip install -e “.[torch,metrics]”

2.3 修复常见环境问题

  • conda activate失败:执行conda init bash && source ~/.bashrc
  • CUDA不可用:若PyTorch与驱动版本不匹配,重装兼容版本,如pip install torch torchvision torchaudio –index-url https://download.pytorch.org/whl/cu118
  • bitsandbytes缺失:需要4bit量化时安装pip install bitsandbytes,但7B模型LoRA训练在4090上无需量化,直接关闭可避免兼容问题。

三、数据集准备

3.1 数据格式要求

采用ShareGPT格式(早期LLaMA Factory版本兼容from-value结构):

json

[

  {

    “conversations”: [

      {“from”: “system”, “value”: “你是一位比特币分析师…”},

      {“from”: “human”, “value”: “BTC现价$69,200…”},

      {“from”: “gpt”, “value”: “【数据解读】…”}

    ]

  }

]

若原始数据为OpenAI的messages格式,可使用Python脚本转换为上述格式(见附录)。

3.2 注册数据集

在LLaMA-Factory/data/dataset_info.json中添加:

json

{

  “btc_trading_data”: {

    “file_name”: “btc_data_sharegpt.json”,

    “formatting”: “sharegpt”

  }

}

关键:确保文件为有效JSON数组,字段名与格式化器匹配(旧版用conversations,新版可直接用messages,但建议统一使用conversations+sharegpt格式化)。

3.3 常见数据错误

  • KeyError: ‘conversations’:注册时未指定columns映射且数据字段为messages。解决方案:改为”formatting”: “sharegpt”并确保数据字段为conversations。
  • JSON解析失败:检查文件是否为有效JSON数组,无多余逗号,无BOM头。
  • Dataset converter not found:LLaMA Factory版本过旧,更新或改用旧版ShareGPT格式。

四、模型下载

使用ModelScope国内源,避免HuggingFace连接问题:

bash

pip install modelscope

mkdir -p /root/autodl-tmp/models

modelscope download –model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B –local_dir /root/autodl-tmp/models/DeepSeek-R1-Distill-Qwen-7B

五、微调配置与启动

5.1 训练YAML文件(deepseek_btc_train.yaml)

yaml

model_name_or_path: /root/autodl-tmp/models/DeepSeek-R1-Distill-Qwen-7B

dataset: btc_trading_data

dataset_dir: /root/autodl-tmp/LLaMA-Factory/data

template: deepseek

output_dir: /root/autodl-tmp/llama_factory_output

do_train: true

finetuning_type: lora

lora_rank: 8

lora_alpha: 16

lora_target: q_proj,v_proj

per_device_train_batch_size: 1

gradient_accumulation_steps: 8

learning_rate: 1.0e-4

num_train_epochs: 3

max_length: 2048

bf16: true

# quantization_bit: 4   # 注释掉,避免bitsandbytes兼容问题

5.2 启动训练

bash

cd /root/autodl-tmp/LLaMA-Factory

source venv_llama/bin/activate

llamafactory-cli train deepseek_btc_train.yaml

5.3 训练过程监控

  • 实时显示损失值,7B模型几百条数据通常30-60分钟。
  • 训练完成后模型自动保存在output_dir。

六、模型合并导出

创建导出配置export.yaml:

yaml

model_name_or_path: /root/autodl-tmp/models/DeepSeek-R1-Distill-Qwen-7B

adapter_name_or_path: /root/autodl-tmp/llama_factory_output

template: deepseek

finetuning_type: lora

export_dir: /root/autodl-tmp/DeepSeek-R1-BTC-merged

export_size: 5

export_legacy_format: false

执行:llamafactory-cli export export.yaml

七、转换为RK3588开发板模型

7.1 获取RKLLM-Toolkit 1.2.3

国内网络从Gitee镜像克隆:

bash

cd /root/autodl-tmp

git clone https://gitee.com/waynezhang1984/rknn-llm.git

cd rknn-llm && git checkout release-v1.2.3

# 创建Python3.10环境

conda create -n rkllm_env python=3.10 -y

conda activate rkllm_env

pip install rkllm-toolkit/packages/rkllm_toolkit-1.2.3-cp310-cp310-linux_x86_64.whl

7.2 转换脚本(避免空间不足)

python

import os, sys, shutil

from rkllm.api import RKLLM

MODEL_PATH = “/root/autodl-tmp/DeepSeek-R1-BTC-merged”

TEMP_OUT = “/dev/shm/btc_7b.rkllm”   # 写入内存盘,绕过tmpfs限制

FINAL_OUT = “/root/autodl-tmp/deepseek-r1-btc-7b_W8A8_RK3588.rkllm”

llm = RKLLM()

ret = llm.load_huggingface(model=MODEL_PATH)

# … 略,同正文

ret = llm.export_rkllm(TEMP_OUT)

if ret == 0:

    shutil.move(TEMP_OUT, FINAL_OUT)

    print(“✅ 转换成功”)

重点:使用/dev/shm作为临时导出目录,成功后再移到数据盘,彻底解决“Not enough free space”问题。

7.3 部署到开发板

  • 将.rkllm文件传输至RK3588开发板
  • NPU驱动版本v0.9.8与RKLLM-Toolkit 1.2.3完美兼容
  • 使用RKLLM Runtime加载并执行推理

八、避坑指南

错误现象原因解决方法
Dataset converter not foundLLaMA Factory版本与数据格式不匹配升级LLaMA Factory或改用旧版ShareGPT格式(conversations+from/value)
No kernel image availablePyTorch不支持新显卡架构升级PyTorch至对应CUDA版本,或更换4090显卡
Killed内存/磁盘不足创建swap,清理系统盘,数据盘存储大文件
Not enough free space to writeRKLLM导出时占用受限tmpfs使用/dev/shm作为中间输出路径
conda activate失败shell未初始化conda init bash && source ~/.bashrc
JSON解析错误数据格式非法严格检查JSON结构,用python -m json.tool验证

九、总结

通过本次实践,我们打通了从数据采集、云端微调到边缘端部署的全链路。核心经验包括:选择成熟显卡避免环境折腾、优先使用venv隔离环境、数据集严格遵循LLaMA Factory兼容格式、转换阶段利用内存盘绕过磁盘限制。这套方法论可复用于其他大模型的定制化微调与嵌入式部署场景。

文章作者: luanpacom

文章链接: http://www.luanpa.com/2026/08/autodl-llama-factory/

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源。

luanpacom