一、整体流程概览
- 环境搭建:AutoDL GPU实例 + Python虚拟环境 + LLaMA Factory
- 数据准备:构建ShareGPT格式数据集,注册到项目中
- 模型获取:下载DeepSeek-R1-Distill-Qwen-7B基础模型
- 指令微调:使用LoRA方法进行高效微调
- 权重合并:将LoRA适配器合并到基础模型
- 模型转换:通过RKLLM-Toolkit 1.2.3转换为RK3588支持的.rkllm格式
- 开发板部署:将模型传输至瑞芯微开发板运行
二、环境搭建细节
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 found | LLaMA Factory版本与数据格式不匹配 | 升级LLaMA Factory或改用旧版ShareGPT格式(conversations+from/value) |
| No kernel image available | PyTorch不支持新显卡架构 | 升级PyTorch至对应CUDA版本,或更换4090显卡 |
| Killed | 内存/磁盘不足 | 创建swap,清理系统盘,数据盘存储大文件 |
| Not enough free space to write | RKLLM导出时占用受限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 许可协议。转载请注明来源。