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)
### 部署 RKLLM 模型到 RK3588 平台 #### 所需配置与依赖项 为了在 RK3588 平台上部署 RKLLM 模型,需要准备如下组件: - **RKLLM Runtime 库**: `lib/librkllmrt.so` 是用于 RK3576/RK3588 板端调用进行 RKLLM 模型部署推理的核心库[^1]。 - **头文件**: `include/rkllm_api.h` 提供了与上述动态链接库相匹配的接口定义以及数据结构描述,确保应用程序能够正确调用该库中的功能函数。 这些资源应当被放置于目标设备上的适当位置,并且在编译期间指定其路径以便顺利引入必要的外部符号表。此外,在程序启动前还需调整操作系统的共享对象查找目录来包含自定义添加的内容。 #### 实际部署过程 针对 RK3588 设备的具体部署流程涉及以下几个方面的工作: - 将预处理过的模型文件传输至上位机; - 编写并编译适合硬件特性的执行脚本或二进制可执行文件; - 设置合适的环境参数以支持后续动作正常开展。 具体来说,可以按照下面的方式来进行初始化工作: ```bash ulimit -Sn 50000 export LD_LIBRARY_PATH=/path/to/your/library:$LD_LIBRARY_PATH ./your_application your_model_file ``` 这里 `/path/to/your/library` 表示存放有之前提到的那个 `.so` 文件及其关联静态资料的位置;而 `your_application` 则是指向最终打包出来的应用入口点;最后面的部分则是传入给它的命令行参数列表之一——即待解析使用的 AI 模型实例化所需的数据集地址。 对于模型本身而言,则可以通过 Python 接口简化这一系列复杂度较高的底层交互逻辑: ```python import rkllm # 加载来自 Hugging Face 的预训练模型 model = rkllm.load_huggingface() # 构建优化后的版本,开启量化选项提升效率 result = model.build( do_quantization=True, optimization_level=1, quantized_dtype='w8a8', target_platform='rk3588' ) if result != 0: raise Exception('Failed to build the optimized model.') ``` 这段代码片段展示了怎样利用高级别的 API 完成从网络获取权重直至本地转换为适配特定架构格式之间的整个链条的操作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxfeng~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值