使用 NPU 跑推理大模型可以更有效地规划资源分配,实现更高效的应用。
1 部署前准备
在 RK3588 上使用 NPU 部署大语言模型需要提前准备文件如下,分别是瑞芯微 NPU 对应的文件以及 DeepSeek 推理模型的文件。
1 2 3 4 https://github.com/airockchip/rknn-llm/tree/main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B/tree/main
目前,在部署大模型前,首先检查 NPU 驱动是否为 0.9.8 版本,这里推荐将驱动更新为最新版本。
1 2 sudo cat /sys/kernel/debug/rknpu/version RKNPU driver: v0.9.8
2 驱动更新注意事项
根据官网手册重新编译内核实现 NPU 驱动的更新,需要注意两点。
编译错误一:因为 RK3588 和 RK3576 NPU 是一致的,所以采用同一个驱动文件,但是 RK3588 驱动没有定义这个结构体,只需要到对应位置,将该行代码注释即可。
1 2 3 237 | .set_soc_info = rockchip_opp_set_low_length, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ | rockchip_pvtpll_add_length
编译错误二:内核版本 5.10 时未定义该函数,按照官方手册定义下即可。
1 2 3 4 5 6 998 | vm_flags_set(vma, VM_MIXEDMAP); | ^~~~~~~~~~~~ make[3]: *** [scripts/Makefile.build:273: drivers/rknpu/rknpu_devfreq.o] Error 1 make[3]: *** Waiting for unfinished jobs .... 1148 | vm_flags_clear(vma, VM_PFNMAP); | ^~~~~~~~~~~~~~
如果是 RK3588 也可以直接找已经修改好的驱动文件复制进内核驱动文件夹中,进行编译即可。
3 编译 Kernel && 部署
3.1 编译内核
将上述驱动文件覆盖至驱动文件夹,按照手册编译内核,将生成的 boot.img 烧录至板卡。
更新内核后,再次查看 npu 驱动版本,如果驱动版本已经升级即可进行下一步。
1 2 sudo cat /sys/kernel/debug/rknpu/version RKNPU driver: v0.9.8
3.2 部署之虚拟机操作
将官方仓库文件拉取到本地,进行 rkllm-toolkit 安装,建议使用 conda 新建一个 python3.8 或者 3.10 的环境。
rkllm-toolkit.whl 文件在拉取仓库的 rknn-llm-main/rkllm-toolkit 的文件夹下,目前支持 python3.8 或者 pyython3.10。
1 2 3 4 5 6 git clone https://github.com/airockchip/rknn-llm.git conda create -n rkllm python=3.10 conda activate rkllm pip3 install rkllm_toolkit-1.1.4-cp310-cp310-linux_x86_64.whl
安装好之后可以在 python 环境下测试是否安装成功。
1 from rkllm.api import RKLLM
拉取模型仓库数据,也可以直接下载下来。
1 2 3 4 5 6 7 8 9 10 11 12 13 sudo apt-get install git-lfsgit lfs install git clone https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B git clone https://hf-mirror.com/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B git clone https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B git clone https://hf-mirror.com/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
然后创建 data_quant.json 用于量化的 rkllm 模型。
1 python generate_data_quant.py -m ../deepseek-aiDeepSeek-R1-Distill-Qwen-1.5B/
导出 rkllm 模型,需要在脚本里修改硬件平台,模型数据的位置等信息。
1 2 3 4 5 6 7 8 modelpath = './deepseek-aiDeepSeek-R1-Distill-Qwen-1.5B' dataset = "./data_quant.json" qparams = None target_platform = "RK3588" optimization_level = 1 quantized_dtype = "W8A8" quantized_algorithm = "normal" num_npu_core = 3
将生成的 rkllm 文件传输到板卡上,虚拟机端操作即可完成。其中导出 rkllm 模型这一过程需要消耗大量的内存资源,需要开发者合理选择操作的机器。
3.2 部署之板卡操作
首先,安装一些编译需要用到的工具。
1 2 sudo apt updatesudo apt install gcc g++ cmake
板卡上同样需要拉取官方仓库文件,也可以将虚拟机上 clone 的文件传输至板卡上。
1 git clone https://github.com/airockchip/rknn-llm.git
进入对用案例的 deploy 文件夹,修改编译器,执行编译即可。
1 2 3 4 5 cd rknn-llm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy./build-linux.sh
执行后,会在 build 文件夹下生成 llm_demo 文件,需要给该文件加上执行权限。
将需要用到的库文件拷贝到 /usr/lib 文件下。
1 cp rknn-llm-main/rkllm-runtime/Linux/librkllm_api/aarch64/librkllmrt.so /usr/lib
最后执行以下指令即可运行 deepseek。
1 2 3 ulimt -Sn 50000 export LD_LIBRARY_PATH../ llm_demo deepseek_r1_rk3588.rkllm 10000 1000
4 运行体验
1 2 3 4 ./llm_demo RK3588.rkllm 10000 1000 rkllm init start I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3588 rkllm init success
问问他会不会汉语,
1 2 3 4 5 6 user: 你会汉语吗 robot: <think> </think> 是的,我懂汉语。有什么问题可以问我吗?
再考考他专业知识,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 user: 你知道 Xilinx FPGA 吗 robot: <think> </think> 是的,Xilinx FPGA(Field-Programmed Readable Array)是一种用于实现可编程逻辑器件的芯片,主要用于在数字电路设计和系统开发中提供快速、灵活的解决方案。Xilinx以其在该领域的创新和成熟产品而闻名。 1. **可编程逻辑器件**:支持多种逻辑功能,如加法器、乘法器、存储器等。 2. **嵌入式解决方案**:适用于嵌入式系统设计,提供高可用性和低功耗。 3. **时序设计工具**:支持VHDL、Verilog等语言,用于描述和验证设计。 4. **快速开发和调试**:通过Xilinx的开发 boards(如XLP10等)简化了开发流程。 - **XLP10**:嵌入式开发板,支持多种逻辑功能和时序工具。 - **XLP700系列**:高带宽、低延迟的高速开发设备。 - **XLP200系列**:适合小型系统设计的低功耗设备。 - **嵌入式系统**:如Android、iOS系统,用于实现复杂的逻辑和时序功能。 - **物联网(IoT)**:用于数据处理和控制模块的设计。 - **自动驾驶**:用于传感器数据处理和决策算法的开发。 Xilinx通过其产品和技术,帮助开发者快速实现复杂数字系统设计,并在各种应用中发挥重要作用。
上面的问题直接通过知识库就可以查询,再问下需要一定思考的更深层次的问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 user: 如何使用 RK3588 部署大模型 robot: <think> </think> 我无法直接访问或部署特定的模型,如RK3588。不过,如果你想了解如何使用大型语言模型(如GPT-4等),可以参考以下步骤: 1. **选择合适的模型**:如GPT-4、Claude等。 2. **安装必要的工具和库**: - `llama-cpp` 或 `llama-python` 用于编译模型。 - `sentence-transformers` 和 `transformers` 库用于处理上下文和预训练数据。 3. **配置模型参数**:根据你的需求调整模型的大小、隐藏层等参数。 4. **训练或推理**: - 使用训练集进行学习,或者使用测试集进行推理。 - 调整超参数以优化模型性能。 5. **部署和使用**:将模型部署到服务器上,并通过API或本地环境进行推理或生成文本。 如果你有具体问题或需要进一步帮助,请提供更多细节。
没有深度思考过程,回答很一般,再来个简单的数学问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 user: Please tell me what is 7 add 9? robot: <think> I need to calculate the sum of 7 and 9. First, I'll identify the numbers involved: 7 and 9. Next, I' ll perform the addition by combining these two quantities.Finally, I'll determine that the result of adding 7 and 9 is 16. </think> **Solution:** To find the sum of 7 and 9, follow these simple steps: 1. **Identify the numbers to add:** \[ 7 + 9 \] 2. **Perform the addition:** \[ 7 + 9 = 16 \] **Final Answer:** \[ \boxed{16} \]
不得不说,比起 CPU 部署运行速度提高不少,不过 NPU 部署过程还是会存在一些困难。