【RK芯片学习笔记】RK3588开发板上大语言模型转换教程

目录

[1. RKLLM-Toolkit](#1. RKLLM-Toolkit)

[2. RKLLM-Toolkit安装](#2. RKLLM-Toolkit安装)

[3. 模型转换](#3. 模型转换)


本文主要讲述在已有环境下,在PC端进行大语言模型转换,使得转换之后的模型可在RK3588开发板上进行部署和推理。注意:模型转换需要在X86架构上进行。

重要参考文档:https://doc.embedfire.com/linux/rk356x/Ai/zh/latest/README.html

1. RKLLM-Toolkit

RKLLM-Toolkit 是为用户提供在计算机上进行大语言模型的量化、转换的开发套件。通过该工具提供的接口可以便捷地完成模型转换和模型量化。

2. RKLLM-Toolkit安装

拉取RKLLM源码以及目录文件说明:

复制代码
# 拉取源码
git clone https://github.com/airockchip/rknn-llm.git

# 目录说明
.
├── benchmark.md  # 相关模型的测试性能
├── CHANGELOG.md  # 更新日志
├── doc           # RKLLM用户手册
├── examples      # 模型转换示例
├── LICENSE
├── README.md
├── res
├── rkllm-runtime  # 板端部署的库和例程
├── rkllm-toolkit  # rkllm-toolkit包
├── rknpu-driver   # RKNPU驱动
└── scripts        # 固定cpu、ddr、npu频率的脚本

8 directories, 4 files

使用conda创建一个rkllm1.2.1环境:

复制代码
# 创建RKLLM_Toolkit环境
conda create -n rkllm1.2.1 python=3.10
conda activate rkllm1.2.1

# 切换到前面拉取工程的rkllm-toolkit目录下
cd rknn-llm/rknn-toolkit/

# 安装rkllm_toolkit(文件请根据具体版本修改),会自动下载RKLLM-Toolkit工具所需要的相关依赖包。
(rkllm1.2.1) llh@llh:/xxx/rknn-llm/rkllm-toolkit$ pip3 install rkllm_toolkit-1.2.1-cp310-cp310-linux_x86_64.whl

简单检测下安装的RKLLM-Toolkit,正常是没有错误输出:

复制代码
(rkllm1.2.1) llh@llh:/xxx$ python3
Python 3.10.18 (main, Jun  5 2025, 13:14:17) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from rkllm.api import RKLLM
>>>

3. 模型转换

RKLLM-Toolkit提供模型的转换、量化功能,将Hugging Face格式或者GGUF格式的大语言模型转换为RKLLM模型,然后使用RKLLM Runtime的接口实现板端推理。

目前支持的模型有 LLAMA models, TinyLLAMA models, Qwen2/Qwen2.5/Qwen3, Phi2/Phi3, ChatGLM3-6B, Gemma2/Gemma3, InternLM2 models, MiniCPM3/MiniCPM4, TeleChat2, Qwen2-VL-2B-Instruct/Qwen2-VL-7B-Instruct/Qwen2.5-VL-3B-Instruct, MiniCPM-V-2_6,DeepSeek-R1-Distill,Janus-Pro-1B,InternVL2-1B,SmolVLM,RWKV7, 最新支持情况请查看 rknn-llm文档

模型导出程序export_rkllm.py(位于\rknn-llm-main\examples\rkllm_api_demo\export路径下)如下:

bash 复制代码
from rkllm.api import RKLLM
import argparse

if __name__ == "__main__":
    argparse = argparse.ArgumentParser()
    argparse.add_argument('--modelpath', type=str, default='Qwen-1_8B-Chat', help='model path', required=True)
    argparse.add_argument('--target-platform', type=str, default='rk3588', help='target platform', required=False)
    argparse.add_argument("--dataset_path", type=str, help="calibration data path")
    argparse.add_argument('--num_npu_core', type=int, default=3, help='npu core num(rk3588:0-3, rk3576:0-2)', required=False)
    argparse.add_argument('--optimization_level', type=int, default=1, help='optimization_level(0 or 1)', required=False)
    argparse.add_argument('--quantized_dtype', type=str, default='w8a8', help='quantized dtype(rk3588:w8a8/w8a8_g128/w8a8_g256/w8a8_g512....)', required=False)
    argparse.add_argument('--quantized_algorithm', type=str, default='normal', help='quantized algorithm(normal/grq/gdq)', required=False)
    argparse.add_argument('--device', type=str, default='cpu', help='device(cpu/cuda)', required=False)
    argparse.add_argument('--savepath', type=str, default='Qwen-1_8B-Chat.rkllm', help='save path', required=False)
    args = argparse.parse_args()

    qparams = None # Use extra_qparams

    # init
    llm = RKLLM()

    # Load model
    ret = llm.load_huggingface(model=args.modelpath, model_lora = None, device=args.device, dtype="float32", custom_config=None, load_weight=True)
    # ret = llm.load_gguf(model = modelpath)
    if ret != 0:
        print('Load model failed!')
        exit(ret)

    # Build model
    ret = llm.build(do_quantization=True, optimization_level=args.optimization_level, quantized_dtype=args.quantized_dtype,
                    quantized_algorithm=args.quantized_algorithm, target_platform=args.target_platform,
                    num_npu_core=args.num_npu_core, extra_qparams=qparams, dataset=args.dataset_path)
    if ret != 0:
        print('Build model failed!')
        exit(ret)

    # Export rkllm model
    ret = llm.export_rkllm(savepath)
    if ret != 0:
        print('Export model failed!')
        exit(ret)

1、调用RKLLM-Toolkit提供的接口,初始化RKLLM对象,然后调用rkllm.load_huggingface()函数加载模型;

2、通过rkllm.build()函数对RKLLM模型的构建,需要设置参数do_quantization是否量化, 设置目标平台等等,详细参数请参考 rknn-llm文档 ;

3、最后通过rkllm.export_rkllm()函数将模型导出为RKLLM模型文件。

在运行export_rkllm.py程序之前,可以先根据模型特点与使用场景准备生成量化的校准样本, 运行程序generate_quant_data.py生成量化校正数据集,该数据集用于后面模型量化,如果没有相关数据,可以不设置rkllm.build()的dataset参数。

运行export_rkllm.py,转换模型为RKLLM模型。RKLLM模型转换成功后,会在当前目录生成qwen.rkllm文件,然后将该文件到板卡系统中(用于后面部署测试)。

注意点:

export目录下一共存在两个py文件,generate_data_quant.py用于生成后续量化所使用的测试数据,即data_quant.json文件,export_rkllm.py则用于模型转换。


相关推荐
J ..1 天前
MeloTTS 生成 RKNN 模型
rk3588·tts·melo
农夫山泉2号6 天前
【rk】——rk3588推理获得logits
人工智能·rk3588·ppl
~光~~7 天前
【嵌入式linux学习】04_Pinctrl 和 GPIO子系统
linux·rk3588·嵌入式linux
Industio_触觉智能7 天前
瑞芯微RK3588核心板规格书,详细参数配置,定位ARM高端AIOT智能模组,板对板连接器320Pin 间距0.5 B to B连接器
arm开发·rk3588·开发板·开源鸿蒙·核心板·瑞芯微·rk3588j
信工 180214 天前
RK3588系统烧录后扩容
linux·rk3588
peixiuhui19 天前
突破边界!RK3576边缘计算网关:为工业智能注入“芯”动力
人工智能·物联网·边缘计算·rk3588·iot·rk3568·rk3576
农夫山泉2号19 天前
【rk3588】——在rk3588上,用python进行qwen3-vl模型推理
python·flask·rk3588·qwen3-vl
peixiuhui19 天前
OpenPLC与RK3576边缘计算网关中结合应用的技术案例与分析
人工智能·边缘计算·rk3588·rk3568·openplc·rk3576·g8701
peixiuhui19 天前
RK3576加持的G8701边缘计算网关深度评测:工业级AIoT的终极解决方案
人工智能·边缘计算·rk3588·嵌入式开发·aiot·工业控制·rk3576