ROCKCHIP 平台 大语言模型 1.RKLLM 介绍 RKLLM SDK可以帮助用户快速将大语言模型部署到GS1-N2上。 SDK下载 1.1 RKLLM-Toolkit 功能介绍 RKLLM-Toolkit 是为用户提供在计算机上进行大语言模型的量化、转换的开发套 件。通过该工具提供的 Python 接口可以便捷地完成以下功能: 模型转换:支持将 Hugging Face 格式的大语言模型(Large Language Model, LLM)转换为RKLLM 模型,转换后的 RKLLM 模型能够在 Rockchip NPU 平台上加 载使用。 量化功能:支持将浮点模型量化为定点模型,目前支持的量化类型包括 w4a16 和 w8a8。 1.2 RKLLM Runtime 功能介绍 RKLLM Runtime 主 要 负 责 加 载 RKLLM-Toolkit 转换得到的 RKLLM 模型, 并在GS1-N2 板端通过调用 NPU 驱动在 Rockchip NPU 上实现 RKLLM 模型的推 理。在推理RKLLM 模型时,用户可以自行定义 RKLLM 模型的推理参数设置,定 义不同的文本生成方式,并通过预先定义的回调函数不断获得模型的推理结果。 2.RKLLM-Toolkit 安装 RKLLM-Toolkit目前只适用于Linux PC,建议使用"Ubuntu20.04(x64)"。因为系 统中可能同时有多个版本的 Python 环境,建议使用 miniforge3 管理 Python 环境。 # 检查是否安装 miniforge3 和 conda 版本信息,若已安装则可省略此小节步骤。 conda -V # 下载 miniforge3 安装包 wget -c https://mirrors.bfsu.edu.cn/github-release/conda-forge/miniforge/LatestRelease/Miniforge3-Linux-x86_64.sh # 安装 miniforge3 chmod 777 Miniforge3-Linux-x86_64.sh bash Miniforge3-Linux-x86_64.sh # 进入Conda base 环境,miniforge3 为安装目录 source ~/miniforge3/bin/activate # 创建一个 Python3.8 版本(建议版本)名为 RKLLM-Toolkit 的 Conda 环境 conda create -n RKLLM-Toolkit python=3.8 # 进入 RKLLM-Toolkit Conda 环境 conda activate RKLLM-Toolkit # 安装 RKLLM-Toolkit,如rkllm_toolkit-1.1.4-cp38-cp38-linux_x86_64.whl pip3 install rkllm-toolkit/rkllm_toolkit-1.1.4-cp38-cp38-linux_x86_64.whl 若执行以下命令没有报错,则安装成功。 python from rkllm.api import RKLLM 3.大语言模型部署例程 RKLLM已支持的大模型如下 3.1 大语言模型转换运行Demo 下面以RKLLM SDK的"DeepSeek-R1-Distill-Qwen-1.5B_Demo"为例演示如何转换 、量化、导出大语言模型,最后在板端部署运行。 3.1.1 在 PC 上转换模型 DeepSeek-R1-Distill-Qwen-1.5B 为例,依据表格链接,找到对应 模型仓库 ,克隆"完整仓库"内容。 在前述RKLLM-Toolkit安装正确的前提下,进入 Conda 环境。然后执行"generate_data_quant.py"生成量化标定数据。 # 注意设置正确的模型仓库路径 cd export python3 generate_data_quant.py -m ~/DeepSeek-R1-Distill-Qwen-1.5B 如下按实际情况修改"export_rkllm.py"之后。执行"export_rkllm.py"。即可得 到转换模型。 # 修改为实际路径 modelpath = '/rkllm/rkllm_model/DeepSeek-R1-Distill-Qwen-1.5B' # 对于 RK3576, 量化方式为W4A16,且为双核NPU。RK3588则无需修改。 target_platform = "RK3576" quantized_dtype = "W4A16" num_npu_core = 2 (RKLLM-Toolkit-1.1.4) root@ea5d57ca8e66:/rkllm/rknn-llm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export# python3 export_rkllm.py INFO: rkllm-toolkit version: 1.1.4 WARNING: Cuda device not available! switch to cpu device! The argument `trust_remote_code` is to be used with Auto classes. It has no effect here and is ignored. Downloading data files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 15307.68it/s] Extracting data files: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 2377.72it/s] Generating train split: 21 examples [00:00, 3327.05 examples/s] Optimizing model: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 28/28 [21:16<00:00, 45.59s/it] Building model: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 399/399 [00:07<00:00, 52.78it/s] WARNING: The bos token has two ids: 151646 and 151643, please ensure that the bos token ids in config.json and tokenizer_config.json are consistent! INFO: The token_id of bos is set to 151646 INFO: The token_id of eos is set to 151643 INFO: The token_id of pad is set to 151643 Converting model: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 339/339 [00:00<00:00, 2494507.12it/s] INFO: Exporting the model, please wait .... [=================================================>] 597/597 (100%) INFO: Model has been saved to ./DeepSeek-R1-Distill-Qwen-1.5B_W8A8_RK3588.rkllm! 3.1.2 在 GS1-N2 上部署运行RKLLM模型 3.1.2.1 板端内核要求 在板端使用RKLLM Runtime 进行模型推理前,首先需要确认板端的NPU 内核是否 为"v0.9.8"版本以上 root@firefly:/# cat /sys/kernel/debug/rknpu/version RKNPU driver: v0.9.8 若所查询的 NPU 内核版本低于 v0.9.8,请前往官方固件地址下载最新固件进行 更新 3.1.2.2 RKLLM Runtime 的编译要求 在使用 RKLLM Runtime 的过程中,需要注意gcc交叉编译工具的版本。推荐下载 交叉编译工具 gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu cd deploy # 修改 build-linux.sh,设置交叉编译器路径为本地工具所在路径 GCC_COMPILER_PATH=~/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu # 添加可执行权限 chmod +x ./build-linux.sh # 编译 ./build-linux.sh 3.1.2.3 板端运行推理 编译完成后生成可执行程序"install/demo_Linux_aarch64/llm_demo",将编译 得到的"llm_demo"和库文件"rknn-llm/rkllm- runtime/Linux/librkllm_api/aarch64/librkllmrt.so"以及定频脚本"rknn- llm/scripts/fix_freq_rk3588.sh"一并通过"scp"推送到板端。 # 执行定频脚本,以最高频率运行 firefly@firefly:~$ ./fix_freq_rk3588.sh # 指定函数库路径,运行demo firefly@firefly:~$ export LD_LIBRARY_PATH=./lib firefly@firefly:~$ taskset f0 ./llm_demo ./DeepSeek-R1-Distill-Qwen-1.5B_W8A8_RK3588.rkllm 2048 4096 rkllm init start I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3588 rkllm init success **********************可输入以下问题对应序号获取回答/或自定义输入******************** [0] 现有一笼子,里面有鸡和兔子若干只,数一数,共有头14个,腿38条,求鸡和兔子各有多少只? [1] 有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位? ************************************************************************* user: 你是谁? robot: 您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。 user: 3.1.2.4 聊天模板 LLM 的一个常见应用场景是聊天。在聊天上下文中,不再是连续的文本字符串构 成的语句,聊天模型由一条或多条消息组成的对话组成,每条消息都有一个“用 户“或“助手”等角色,还包括消息文本。然而不同的模型对聊天的输入格式要求 也不同。聊天模板用于将问答的对话内容转换为模型的输入prompt。倘若使用空 的聊天模板或者使用默认的聊天模板,与模型在训练期间看到的消息格式不匹配 ,可能会导致性能下降。 例如查看ChatGLM3的 聊天模板 <|system|> You are ChatGLM3, a large language model trained by Zhipu.AI. Follow the user's instructions carefully. Respond using markdown. <|user|> Hello <|assistant|> Hello, I'm ChatGLM3. What can I assist you today? 4.其他 更多demo和api使用请参考RKLLM SDK例程和文档。 5.FAQs Q1:转换模型失败? A1:检查 PC 可用运行内存,参数量越大的模型转换或者运行时所需的内存越大 ,可以尝试增大 swapfile 或者使用大内存的 PC。 人工智能算法部署 GS1-N2支持一系列主流人工智能算法的部署,支持但不限于以下算法类別: 除了以上人工智能算法,更多RK官方例程请参考 rknn_model_zoo 。GS1-N2还支持大语言模型,大语言模型部署请参考 大模型部署 这一章节 1.1 NPU使用 GS1-N2 内置 NPU 模块, 处理性能最高可达6TOPS。使用该NPU需要下载 RKNN SDK ,RKNN SDK 提供 C++/python 编程接口,能够帮助用户部署使用 RKNN- Toolkit2 导出的 RKNN 模型,加速 AI 应用的落地。RKNN 的整体开发步骤,流 程主要分为3 个部分:模型转换、模型评估和板端部署运行。 模型转换: 支持 Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch 等模型转为 RKNN 模型,并支持 RKNN 模型导 入导出,RKNN 模型能够在 Rockchip NPU 平台上加载使用。

模型评估: 模型评估阶段帮助用户量化和分析模型性 能,包括精度、连板推理性能和内存占用等关键指标。

板端部署运行: 加载 RKNN 模型到 RKNPU 平台,进 行模型前处理、推理、后处理、释放等流程。

1.2 RKNN-Toolkit2工具 RKNN-Toolkit2 是为用户提供在"PC"、Rockchip NPU 平台上进行模型转换、推 理和性能评估的开发套件,用户通过该工具提供的 Python 接口可以便捷地完成 各种操作。 注意 :RKNN-Toolkit2 开发套件运行在"PC x86_64"平台上,请勿安装在GS1-N2板端 。 1.2.1 RKNN-Toolkit2安装 RKNN SDK 提供两种RKNN-Toolkit2安装方式,通过Docker方式安装和通过pip方 式安装,用户可自行选择任意一种方式进行安装。这里以pip方式为例,在"PC Ubuntu20.04(x64)"安装。因为系统中可能同时有多个版本的 Python 环境,建 议使用 miniforge3 管理 Python 环境。 # 检查是否安装 miniforge3 和 conda 版本信息,若已安装则可省略此小节步骤。 conda -V # 下载 miniforge3 安装包 wget -c https://mirrors.bfsu.edu.cn/github-release/conda-forge/miniforge/LatestRelease/Miniforge3-Linux-x86_64.sh # 安装 miniforge3 chmod 777 Miniforge3-Linux-x86_64.sh bash Miniforge3-Linux-x86_64.sh # 进入Conda base 环境,miniforge3 为安装目录 source ~/miniforge3/bin/activate # 创建一个 Python3.8 版本(建议版本)名为RKNN-Toolkit2 的 Conda 环境 conda create -n RKNN-Toolkit2 python=3.8 # 进入 RKNN-Toolkit2 Conda 环境 conda activate RKNN-Toolkit2 # 安装依赖库 pip3 install -r rknn-toolkit2/packages/requirements_cp38-2.0.0b0.txt # 安装 RKNN-Toolkit2,如 pip3 install rknn-toolkit2/packages/rknn_toolkit2-2.0.0b0+9bab5682-cp38-cp38-linux_x86_64.whl 若执行以下命令没有报错,则安装成功。 python from rknn.api import RKNN 若安装失败或需要其他安装方式请查阅 RKNN SDK文档 。 1.2.2 模型转换Demo 在rknn-toolkit2/examples下有各种功能的 Demo ,这里我们运行一个模型转换 Demo 为例子,这个 Demo 展示了在 PC 上将 yolov5 onnx 模型转换成 RKNN 模 型,然后导出、在仿真器上推理的过程。模型转换的具体实现请参考 Demo 内源 代码以及RKNN SDK文档。 root@9893c1c48f42:/rknn-toolkit2/examples/onnx/yolov5# python3 test.py I rknn-toolkit2 version: 2.0.0b0+9bab5682 --> Config model done --> Loading model I It is recommended onnx opset 19, but your onnx model opset is 12! I Model converted from pytorch, 'opset_version' should be set 19 in torch.onnx.export for successful convert! I Loading : 100%|██████████████████████████████████████████████| 125/125 [00:00<00:00, 22152.70it/s] done --> Building model I GraphPreparing : 100%|███████████████████████████████████████| 149/149 [00:00<00:00, 10094.68it/s] I Quantizating : 100%|███████████████████████████████████████████| 149/149 [00:00<00:00, 428.06it/s] W build: The default input dtype of 'images' is changed from 'float32' to 'int8' in rknn model for performance! Please take care of this change when deploy rknn model with Runtime API! W build: The default output dtype of 'output' is changed from 'float32' to 'int8' in rknn model for performance! Please take care of this change when deploy rknn model with Runtime API! W build: The default output dtype of '283' is changed from 'float32' to 'int8' in rknn model for performance! Please take care of this change when deploy rknn model with Runtime API! W build: The default output dtype of '285' is changed from 'float32' to 'int8' in rknn model for performance! Please take care of this change when deploy rknn model with Runtime API! I rknn building ... I rknn buiding done. done --> Export rknn model done --> Init runtime environment I Target is None, use simulator! done --> Running model I GraphPreparing : 100%|███████████████████████████████████████| 153/153 [00:00<00:00, 10289.55it/s] I SessionPreparing : 100%|██████████████████████████████████████| 153/153 [00:00<00:00, 1926.55it/s] done class score xmin, ymin, xmax, ymax -------------------------------------------------- person 0.884 [ 208, 244, 286, 506] person 0.868 [ 478, 236, 559, 528] person 0.825 [ 110, 238, 230, 533] person 0.334 [ 79, 353, 122, 517] bus 0.705 [ 92, 128, 554, 467] Save results to result.jpg! 如果 rknn-toolkit2 缺少您需要的模型Demo,可以参考 rknn_model_zoo 仓库的python例程。 1.3 RKNPU2使用 RKNPU2 提供在"板端Rockchip NPU 平台"上进行模型推理的C/C++编程接口。 1.3.1 环境安装 RKNPU2 Runtime 库文件"librknnrt.so",若板端缺少该文件或需要更新,对于 Linux系统可以将"rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so" 通过"scp"推送至"/usr/lib"目录。 1.3.2 板端推理 在RKNN SDK 目录"rknpu2/examples"提供了许多模型推理Demo,用户可以参考例 程开发部署自己的AI应用。 rknn_model_zoo 仓库同样提供了C/C++的例程 1.4 RKNN-Toolkit Lite2介绍 RKNN-Toolkit Lite2 为用户提供"板端模型推理"的 "Python" 接口,方便用户 使用 Python 语言进行 AI 应用开发。 注意 :RKNN-Toolkit Lite2安装运行在"板端",且仅作推理使用,无法转换模型。 1.4.1 RKNN-Toolkit Lite2安装 # 安装python3/pip3 sudo apt-get update sudo apt-get install -y python3 python3-dev python3-pip gcc python3-opencv python3-numpy # RKNN-Toolkit Lite2安装,在rknn-toolkit-lite2/packages找到安装包,根据系统python版本安装对应版本 pip3 install rknn_toolkit_lite2-2.0.0b0-cp310-cp310-linux_aarch64.whl 1.4.2 RKNN-Toolkit Lite2使用 在 RKNN SDK/rknn-toolkit-lite2/examples 目录,有基于RKNN-Toolkit Lite2 开发的应用,虽然提供的例程数量有限,但是实际上"RKNN-Toolkit Lite2" 和 "RKNN-Toolkit2"的接口使用是十分类似的,用户完全可以参考RKNN-Toolkit2例 程移植到RKNN-Toolkit Lite2。 1.5 详细开发文档 NPU 及 Toolkit 详细使用方法请参考RKNN SDK下"doc"文档。 1.6 FAQs Q1:rknn模型推理精度对比原模型精度下降? A1:请参考《Rockchip_RKNPU_User_Guide_RKNN_SDK*》文档的精度排查章节逐 步查找原因。 Q2:转换时提示 Expand 算子不支持? A2:尝试更新 RKNN-Toolkit2 / RKNPU2 至最新版本或者采用 repeat 算子来替 代 expand 算子。 更多转换问题或者报错原因可以参考《Rockchip_RKNPU_User_Guide_RKNN_SDK* 》文档常见问题章节 。