news 2026/5/1 8:29:19

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【RK芯片学习笔记】RK3588开发板上大语言模型转换教程

目录

1. RKLLM-Toolkit

2. RKLLM-Toolkit安装

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路径下)如下:

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则用于模型转换。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 5:21:53

RexUniNLU合规适配:GDPR数据不出境、本地化部署满足等保2.0要求

RexUniNLU合规适配:GDPR数据不出境、本地化部署满足等保2.0要求 1. 为什么NLU系统必须考虑合规性? 你有没有遇到过这样的情况:业务部门急着上线一个智能客服,技术团队三天就搭好了意图识别模块,结果法务一票否决——…

作者头像 李华
网站建设 2026/5/1 5:21:35

基于SpringBoot的学生网上选课系统毕设

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于SpringBoot框架的学生网上选课系统。该系统旨在解决传统选课模式中存在的诸多问题,如选课效率低下、信息不对称、选课过…

作者头像 李华
网站建设 2026/5/1 5:21:57

基于SpringBoot的宽带业务管理系统毕业设计

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。 一、研究目的 本研究旨在构建一个基于SpringBoot框架的宽带业务管理系统,以实现宽带业务的智能化管理。具体研究目的如下: 首先,提高宽…

作者头像 李华
网站建设 2026/5/1 5:23:20

直播弹幕自动回复?IndexTTS 2.0虚拟主播语音集成

直播弹幕自动回复?IndexTTS 2.0虚拟主播语音集成 你有没有试过在直播时,一边手忙脚乱打字回弹幕,一边还要保持语速流畅、情绪饱满?弹幕刷到“主播笑死我了”,你刚想接一句“那我再讲个冷笑话”,结果开口就…

作者头像 李华
网站建设 2026/5/1 5:23:39

GPEN算力优化技巧:低显存显卡也能流畅运行人脸修复模型

GPEN算力优化技巧:低显存显卡也能流畅运行人脸修复模型 1. 为什么GPEN值得你花时间了解 你有没有试过翻出十年前的毕业照,却发现像素糊得连自己都认不出来?或者用AI画图时,人物五官突然“错位”——眼睛一大一小、嘴角歪斜、头发…

作者头像 李华
网站建设 2026/5/1 5:23:38

Qwen3-Embedding-4B企业落地:汽车4S店客户咨询语义聚类与话术优化

Qwen3-Embedding-4B企业落地:汽车4S店客户咨询语义聚类与话术优化 1. 为什么传统客服分析总在“猜”客户真正想问什么? 你有没有遇到过这样的情况: 一位客户在4S店官网留言说“车启动时有哒哒声,是不是气门有问题?”…

作者头像 李华