rk3588本地部署大模型记录
参考:https://docs.radxa.com/rock5/rock5itx/app-development/rkllm_install
一、linux-PC端操作
1.下载代码
cd RKSDK git clone-b release-v1.2.3https://github.com/airockchip/rknn-llm.git2.创建虚拟环境
这里不要按照参考里面的安装python3.12,要不然后续很多包无法匹配。
conda create-n rkllm python=3.103.激活环境
conda activate rkllm4.安装依赖包
cd rknn-llm/rkllm-toolkit/packages pip install rkllm_toolkit-1.2.3-cp310-cp310-linux_x86_64.whl5.下载交叉编译工具
下载链接:https://developer.arm.com/-/media/files/downloads/gnu/11.2-2022.02/binrel/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz?rev=33c6e30e5ac64e6dba8f0431f2c35f1b&revision=33c6e30e-5ac6-4e6d-ba8f-0431f2c35f1b&hash=632C6C0BD43C3E4B59CA8A09A7055D30
解压
tar-xJf gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz6.下载大模型
自行下载
7.转换为RKNN
我这下载的是Qwen3-1.7B,算单模态大模型,因此选择转换代码路径应该为:
RKSDK/rknn-llm/examples/rkllm_api_demo/export修改export_rkllm.py中的模型路径
modelpath='/home/chenjun0310/RKLLM/model/Qwen/Qwen3-1.7B'更改模型上下文最大值 max_context,默认4096.
找到max_context参数修改
遇到问题:
ModuleNotFoundError:No module named'pkg_resources'降级即可
pip install"setuptools<82"运行脚本
python3 export_rkllm.py8.交叉编译
在PC端操作,修改/rknn-llm/examples/rkllm_api_demo/deploy/build-linux.sh
GCC_COMPILER_PATH=/home/chenjun0310/RKLLM/tools/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu运行rkllm_api_demo/deploy/build-linux.sh
bash build-linux.sh会生成/rknn-llm/examples/rkllm_api_demo/deploy/install文件
二、开发板部署大模型
1.下载厂库代码
git clone-b release-v1.2.3https://github.com/airockchip/rknn-llm.git2.拷贝文件运行模型
主要将上面生成的install文件夹和转换的rkllm文件至开发板
我是将模型和demo存放在同一个文件夹下,运行
cd/rknn-llm/examples/rkllm_api_demo/deploy/install/demo_Linux_aarch64 chmod+x llm_demo export LD_LIBRARY_PATH=$(pwd)/lib:$LD_LIBRARY_PATH./llm_demo Qwen3-1.7B_W8A8_RK3588.rkllm20484096其中两个参数解释:
max_new_tokens:2048#每轮最大生成 token 数max_context_len:4096#模型最大上下文范围,尽量与上面PC端模型转换时参数一致接下来会输出
rkllm initstartW rkllm: Warning: Your rknpu driver version is too low,please upgrade to 0.9.7 I rkllm: rkllm-runtime version: 1.2.3,rknpu driver version: 0.9.6,platform: RK3588 I rkllm: loading rkllm modelfromQwen3-1.7B_W8A8_RK3588.rkllm I rkllm: rkllm-toolkit version: 1.2.3,max_context_limit: 4096,npu_core_num: 3,target_platform: RK3588,model_dtype: W8A8 I rkllm: Enabled cpus:[4,5,6,7]I rkllm: Enabled cpus num: 4 rkllm init success**********************可输入以下问题对应序号获取回答/或自定义输入********************[0]现有一笼子,里面有鸡和兔子若干只,数一数,共有头14个,腿38条,求鸡和兔子各有多少只?[1]有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?*************************************************************************user: 现有一笼子,里面有鸡和兔子若干只,数一数,共有头14个,腿38条,求鸡和兔子各有多少只? robot: 这是一个典型的**鸡兔同笼问题**,我们可以用代数的方法来解决。---### **已知条件:**退出对话输入
exit若需要查看 RKLLM 在板端推理时的性能或者日志,可使用如下指令:
export RKLLM_LOG_LEVEL=1//仅查看 TTFT、TPS 和内存数据 export RKLLM_LOG_LEVEL=2//除了性能数据,还会打印 cache 长度等更多信息3.模型运行环境
rk3588上既有cpu也有npu。
NPU (主要算力):负责大模型最繁重的矩阵乘法运算(Tensor 计算)。这是 NPU 的强项,速度比CPU 快得多且功耗更低。
CPU (辅助与控制):负责数据预处理、算子调度、内存管理以及 NPU 不支持的某些特殊算子。RKLLM 会利用大核的高性能来处理这些任务,以减少 NPU 的等待时间。
运行环境结论:NPU+CPU协同运行
NPU运行结论:在使用NPU,但是版本比较低(0.9.6)可能无法释放全部算力。对应输出日志如下:
I rkllm:rkllm-toolkit version:1.2.3,max_context_limit:4096,npu_core_num:3,W rkllm:Warning:Your rknpu driver versionistoo low,please upgrade to0.9.7三、交互处理-构建AI服务
目前,可以在开发板终端进行对话,但这种方法不够智能。需要进一步搭建交互工具等。
前面1.2.3.4步都在开发板上操作。
1.代码路径
相关demo在:
/rknn-llm/examples/rkllm_server_demo一键部署脚本 build_rkllm_server_flask.sh 脚本可以使用usb线直连传送文件到开发板,但是我是通过网线路由远程。且我的开发板可以上网,于是我自行搭建了环境。
2.安装miniconda
输入:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh-O miniconda.sh bash miniconda.sh-b-p $HOME/miniconda source $HOME/miniconda/etc/profile.d/conda.sh conda create-n LLM_env python=3.11-y echo"source ~/miniconda/etc/profile.d/conda.sh">>~/.bashrc source~/.bashrc conda activate LLM_env pip install flask3.拷贝文件
新建flask工作目录,我是在/rknn-llm目录下新建
mkdir rkllm_flask_server cd rkllm_flask_server进入rkllm_flask_server文件夹下,拷贝模型文件至当前文件夹,路径自行替换,注意后面有个“点”
cp/rknn-llm/examples/rkllm_api_demo/deploy/install/demo_Linux_aarch64/Qwen3-1.7B_W8A8_RK3588.rkllm.继续搞依赖相关
mkdir lib cp/rknn-llm/examples/rkllm_api_demo/deploy/install/demo_Linux_aarch64/lib/*.so./lib/cp/rknn-llm/examples/rkllm_server_demo/rkllm_server/flask_server.py.cp/rknn-llm/examples/rkllm_server_demo/rkllm_server/lib./-r设置依赖路径
export LD_LIBRARY_PATH=$(pwd)/lib:$LD_LIBRARY_PATH4.代码运行
运行指令
python3 flask_server.py--rkllm_model_path/rknn-llm/rkllm_flask_server/Qwen3-1.7B_W8A8_RK3588.rkllm--target_platform rk3588路径自行替换。
这里默认端口是http://0.0.0.0:8080,如果与其他程序冲突的话,可以自行设置。例如修改指令
直接修改flask_server.py代码
app.run(host='0.0.0.0',port=8080,threaded=True,debug=False)我是修改为8081,终端输出如下:
(LLM_env)root@OpenSDT:/rknn-llm/rkllm_flask_server# python3 flask_server.py --rkllm_model_path /rknn-llm/rkllm_flask_server/Qwen3-1.7B_W8A8_RK3588.rkllm --target_platform rk3588/bin/sh:1:sudo:notfound=========init....===========W rkllm:Warning:Your rknpu driver versionistoo low,please upgrade to0.9.7I rkllm:rkllm-runtime version:1.2.3,rknpu driver version:0.9.6,platform:RK3588 I rkllm:loading rkllm modelfrom/rknn-llm/rkllm_flask_server/Qwen3-1.7B_W8A8_RK3588.rkllm I rkllm:rkllm-toolkit version:1.2.3,max_context_limit:4096,npu_core_num:3,target_platform:RK3588,model_dtype:W8A8 I rkllm:Enabled cpus:[4,5,6,7]I rkllm:Enabled cpus num:4rkllm init success!==============================*Serving Flask app'flask_server'*Debug mode:off WARNING:Thisisa development server.Donotuse itina production deployment.Use a production WSGI server instead.*Running onalladdresses(0.0.0.0)*Running on http://127.0.0.1:8081*Running on http://172.16.6.217:8081Press CTRL+C to quit5.PC端访问
开发板上以及利用flask开启服务,现在需要在PC端访问该服务。主要使用代码
/rknn-llm/examples/rkllm_server_demo/chat_api_flask.py记得修改访问地址。
PC端的输入与回复如下:
(LLM)PS E:\work\Rk3588\LLM>python.\chat_api_flask.py============================Input your questioninthe terminal to start a conversationwiththe RKLLM model...============================*Please enter your question:你好 Q:你好 A:你好!我是你的AI助手,很高兴为你服务。有什么我可以帮助你的吗?😊*Please enter your question:开发板的响应如下:
(LLM_env)root@OpenSDT:/rknn-llm/rkllm_flask_server# python3 flask_server.py --rkllm_model_path /rknn-llm/rkllm_flask_server/Qwen3-1.7B_W8A8_RK3588.rkllm --target_platform rk3588/bin/sh:1:sudo:notfound=========init....===========W rkllm:Warning:Your rknpu driver versionistoo low,please upgrade to0.9.7I rkllm:rkllm-runtime version:1.2.3,rknpu driver version:0.9.6,platform:RK3588 I rkllm:loading rkllm modelfrom/rknn-llm/rkllm_flask_server/Qwen3-1.7B_W8A8_RK3588.rkllm I rkllm:rkllm-toolkit version:1.2.3,max_context_limit:4096,npu_core_num:3,target_platform:RK3588,model_dtype:W8A8 I rkllm:Enabled cpus:[4,5,6,7]I rkllm:Enabled cpus num:4rkllm init success!==============================*Serving Flask app'flask_server'*Debug mode:off WARNING:Thisisa development server.Donotuse itina production deployment.Use a production WSGI server instead.*Running onalladdresses(0.0.0.0)*Running on http://127.0.0.1:8081*Running on http://172.16.6.217:8081Press CTRL+C to quit172.16.6.92--[27/Mar/202616:43:48]"GET / HTTP/1.1"404-172.16.6.92--[27/Mar/202616:43:48]"GET /favicon.ico HTTP/1.1"404-172.16.6.92--[27/Mar/202616:44:12]"GET / HTTP/1.1"404-172.16.6.92--[27/Mar/202616:46:43]"POST /chat HTTP/1.1"404-Received messages:[{'role':'user','content':'你好'}]172.16.6.92--[27/Mar/202616:59:57]"POST /rkllm_chat HTTP/1.1"200-至此搭建完毕!