飞凌嵌入式
直播中

aquamanfeng

5年用户 84经验值
擅长:嵌入式技术
私信 关注
[技术]

【飞凌嵌入式OK3576-C开发板体验】rkllm模型量化构建

在发布的 RKLLM 工具链压缩文件中,包含了 RKLLM-Toolkit 的 whl 安装包、RKLLM Runtime 库的相关文件以及参考示例代码,github链接如下:https://github.com/airockchip/rknn-llm

环境准备

RKLLM-Toolkit

由于提供的rkllm_toolkit包为python3.8版本的,因此需要确保本地的python环境为3.8,否则需要新建python3.8的虚拟环境。

首先进入到rkllm-toolkit``/packages目录下,使用 pip 工具直接安装所提供的工具链 whl 包

pip install rkllm_toolkit-1.0.1-cp38-cp38-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后,我们可以使用如下命令测试是否安装成功

python
from rkllm.api import RKLLM

RKLLM Runtime

在rkllm-runtime的rumtime目录下,分别包含Linux和Android下RKLLM Runtime 的全部文件:

  1. lib/librkllmrt.so: 适用于 RK3576/RK3588 板端进行模型推理的 RKLLM Runtime 库;
  2. include/rkllm_api.h: 与 librkllmrt.so 相对应的头文件,包含相关结构体及函数定义的说明;

在通过 RKLLM 工具链构建OK3576板端的部署推理代码时,为保证编译的正确性,需要包含对以上头文件及函数库的链接。当代码在开发板上运行的过程中,同样需要确保库文件也成功推送至板端,并正确设置环境变量

export LD_LIBRARY_PATH=/path/to/your/lib

RKNPU driver

在板端使用 RKLLM Runtime 进行模型推理前,首先需要确认板端的 NPU 内核是否为 v0.9.6 版本,具体的查询命令如下:

板端执行以下命令,查询 NPU 内核版本
cat /sys/kernel/debug/rknpu/version
确认命令输出是否为:
RKNPU driver: v0.9.6

若所查询的 NPU 内核版本低于 v0.9.6,则需要更新npu驱动并且重新编译进内核。

模型转换

rkllm-toolkit``/``examples``/huggingface目录下提供了huggingface模型转换的示例。整体流程如下图:

导入库

首先导入rkllm库

from rkllm.api import RKLLM

读取模型

读取我们的huggingface格式的模型,需要把其中的modelpath修改为自己的模型文件夹

modelpath = '/tmp/code/models/qwen2_0_5B'
llm = RKLLM()

# Load model
ret = llm.load_huggingface(model = modelpath)
if ret != 0:
    print('Load model failed!')
    exit(ret)

模型量化构建

# Build model
ret = llm.build(do_quantization=True, optimization_level=1, quantized_dtype='w8a8', target_platform='rk3576')
if ret != 0:
    print('Build model failed!')
    exit(ret)

各参数说明如下:

  • do_quantization: 该参数控制是否对模型进行量化操作,建议设置为 True;
  • optimization_level: 该参数用于设置是否进行量化精度优化,0 表示不做任何优化,1 表示进行精度优化;
  • quantized_dtype: 该参数用于设置量化的具体类 型, 目前支持的量化类型包括“w4a16”和“w8a8”,“w4a16”表示对权重进行 4bit 量化而对激活值不进行量化;“w8a8”表示对权重和激活值均进行 8bit 量化;目前 rk3576 平台支持“w4a16”和“w8a8”两种量化类型,rk3588 仅支持“w8a8”量化类型;
  • target_platform: 模型运行的硬件平台, 可选择的设置包括“rk3576”或“rk3588”;

导出模型

在通过 rkllm.build()函数构建了 RKLLM 模型后,可以通过rkllm.export_rkllm()函数将RKNN 模型保存为一个.rkllm 文件,以便后续模型的部署。

# Export rknn model
ret = llm.export_rkllm("/tmp/code/models/qwen.rkllm")
if ret != 0:
    print('Export model failed!')
    exit(ret)

更多回帖

发帖
×
20
完善资料,
赚取积分