RK3588 上的 LLM(一):使用rknn-llm转换huggingface模型为rkllm格式的教程(基于rknn-llm-1.2.2)

本教程记录了在 PC上使用rknn-llm-1.2.2Qwen/Qwen3-4B-Instruct-2507模型转换为 rkllm 格式的流程,并成功在基于 rk3588 的 Orangepi5Plus 开发板上部署了转换后的模型。

注:本教程使用的 PC 运行的系统为 Ubuntu22.04,python 版本为 3.9,开发板端的系统是基于 ubuntu-rockchip 项目构建的 Ubuntu 24.04,python 版本为 3.12。
注:由于部分软件包的更新,高于 python3.8 的 python 环境在运行转换脚本时会出现错误,需要手动降级软件包或修改函数,这部分我会放在文章最后讲。
注:按照官方文档,转换 Qwen3 模型需要 python 3.9 及以上版本(所以如果不转换这么新的模型可以直接使用 python 3.8 环境,可以不用手动降级软件包或修改函数)
注:转换需要至少 16G 的内存,请使用 32G 或以上内存的 PC 或虚拟机(以 4B 模型为例,或许更大的模型转换时的占用更高?)

先使用 conda 按照提示构建一个用于转换模型的 python 3.9 环境并激活,我这里将其命名为rkllm-39(conda 的安装可以直接参考相关教程,这里不赘述了):

conda create -n rkllm-39 python=3.9 && conda activate rkllm-39

随后拉取 rknn-llm 源码:

git clone https://github.com/airockchip/rknn-llm && cd rknn-llm

安装 rkllm-toolkit:

pip install rkllm-toolkit/packages/rkllm_toolkit-1.2.2-cp39-cp39-linux_x86_64.whl

进入examples/rkllm_api_demo/export目录,下载模型并执行量化脚本,这里使用 modelscope 进行模型的下载(也可以使用如 Huggingface、git 工具进行下载):

cd examples/rkllm_api_demo/export
modelscope download Qwen/Qwen3-4B-Instruct-2507 --local_dir Qwen3-4B-Instruct-2507
python generate_data_quant.py -m Qwen3-4B-Instruct-2507

此时开始模型的量化,这个过程可能需要一段时间,期间会在终端输出一些对话内容
量化完成后,修改export.py,找到第十一行:

11  modelpath = '/path/to/DeepSeek-R1-Distill-Qwen-1.5B'

将路径修改为实际下载路径,这里为modelscope下载参数中的--local_dir参数,即./Qwen3-4B-Instruct-2507

11  modelpath = './Qwen3-4B-Instruct-2507'

运行转换脚本:

python export.py

此时,若你的 python 版本大于等于 3.9,则可能出现如下错误:

Traceback (most recent call last):
  File "/home/sivon/rkllm/rknn-llm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export/export_rkllm.py", line 1, in <module>
    from rkllm.api import RKLLM
  File "/home/sivon/rkllm/venv/lib/python3.10/site-packages/rkllm/__init__.py", line 1, in <module>
    from rkllm import api
  File "/home/sivon/rkllm/venv/lib/python3.10/site-packages/rkllm/api/__init__.py", line 1, in <module>
    from rkllm.api.rkllm import RKLLM
  File "/home/sivon/rkllm/venv/lib/python3.10/site-packages/rkllm/api/rkllm.py", line 1, in <module>
    from rkllm.api.rkllm_base import RKLLMBase
  File "rkllm/api/rkllm_base.py", line 1, in init rkllm.api.rkllm_base
  File "rkllm/base/quantizer.py", line 12, in init rkllm.base.quantizer
  File "rkllm/base/loader.py", line 4, in init rkllm.base.loader
  File "/home/sivon/rkllm/venv/lib/python3.10/site-packages/datasets/__init__.py", line 22, in <module>
    from .arrow_dataset import Dataset
  File "/home/sivon/rkllm/venv/lib/python3.10/site-packages/datasets/arrow_dataset.py", line 67, in <module>
    from .arrow_writer import ArrowWriter, OptimizedTypedSequence
  File "/home/sivon/rkllm/venv/lib/python3.10/site-packages/datasets/arrow_writer.py", line 27, in <module>
    from .features import Features, Image, Value
  File "/home/sivon/rkllm/venv/lib/python3.10/site-packages/datasets/features/__init__.py", line 18, in <module>
    from .features import Array2D, Array3D, Array4D, Array5D, ClassLabel, Features, Sequence, Value
  File "/home/sivon/rkllm/venv/lib/python3.10/site-packages/datasets/features/features.py", line 634, in <module>
    class _ArrayXDExtensionType(pa.PyExtensionType):
AttributeError: module 'pyarrow' has no attribute 'PyExtensionType'. Did you mean: 'ExtensionType'?

这是由于新版的 pyarrow 取消了PyExtensionType这个类,可以尝试降级为20.0.0

pip install -U pyarrow==20.0.0

等待转换完成后,可以在当前目录下找到rkllm扩展名的模型文件,可将其发送至开发版进行推理,发送方式自选。

posted @ 2025-11-07 09:49  Sivon  阅读(9)  评论(0)    收藏  举报