端侧芯片K230上利用llama.cpp部署大模型(简易教程)
目前大模型研究非常广泛,但是对于个人用户如何部署一个大模型通常是比较麻烦的,而llama.cpp项目作为一个使用cpp来完成大模型推理的开源工具,对于没有丰富硬件资源的用户来说是一个很好用的工具,可以将中意的大模型十分简单的部署在自己的设备上。以下内容为使用llama.cpp将大模型部署在端侧设备K230上。
1. llama.cpp
- 下载源码
1
| git clone https://github.com/ggerganov/llama.cpp.git
|
- 准备K230编译工具链
首先说明一点,llama.cpp是一个纯c/c++的项目,虽然有相应的python文件作为模型转换工作,但是对于直接部署模型来说并不是很重要(毕竟个人用户也没有什么机会自己训练一个大模型,而预训练好的大模型在huggingface是很多的,同时llama.cpp需要的gguf格式的模型也可以在fuggingface上找到)。既然是c项目,那么很容易就可以通过交叉编译来生成K230上可运行的程序。
也可以使用带有rvv intrinsic的工具链进行编译,例如gcc14,这个自行尝试即可
K230的编译工具链很容易获取,编译过K230_sdk镜像的话,是可以在其toolchain目录下找到对应的工具链,拿来直接用就好。(现在我假设你已经有了噢)
1
| drwxr-xr-x 10 curio curio 4.0K 11月 20 12:24 Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1
|
现在还缺少K230相关的编译选项,可以通过K230的编译器nncase repo来获取,保留以下内容即可:
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
| set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR riscv64)
if(DEFINED ENV{RISCV_ROOT_PATH}) file(TO_CMAKE_PATH $ENV{RISCV_ROOT_PATH} RISCV_ROOT_PATH) endif()
if(NOT RISCV_ROOT_PATH) message(FATAL_ERROR "RISCV_ROOT_PATH env must be defined") endif()
set(RISCV_ROOT_PATH ${RISCV_ROOT_PATH} CACHE STRING "root path to riscv toolchain") set(CMAKE_C_COMPILER "${RISCV_ROOT_PATH}/bin/riscv64-unknown-linux-gnu-gcc") set(CMAKE_CXX_COMPILER "${RISCV_ROOT_PATH}/bin/riscv64-unknown-linux-gnu-g++") set(CMAKE_FIND_ROOT_PATH "${RISCV_ROOT_PATH}/riscv64-unknown-linux-gnu")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(ENABLE_VULKAN_RUNTIME OFF)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=rv64imafdcv -mabi=lp64d -mcmodel=medany -fstack-protector-strong -fPIE -pie -Wl,-z,now -Wl,-z,relro") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=rv64imafdcv -mabi=lp64d -mcmodel=medany -fstack-protector-strong -fPIE -pie -Wl,-z,now -Wl,-z,relro")
// 开启rvv, K230的工具链没有添加这个宏定义,如果使用gcc14的话不需要定义。 // add_definitions(-D__riscv_v_intrinsic) // 当前不推荐开启,llama.cpp 的rvv实现有问题
|
将以上内容写入到.cmake 文件中,在后面编译中会用到
- 编译
1 2 3 4
| export RISCV_ROOT_PATH=/PATH/TO/YOUR/TOOLCHAIN/Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1/ cd llama.cpp cmake . -B build -DCMAKE_TOOLCHAIN_FILE=/PATH/TO/YOUR/TOOLCHAIN/k230.cmake -DCMAKE_BUILD_TYPE=Release cmake --build build --config Release -j
|
成功编译后可以在build/bin目录下找到llama-cli
下载模型
直接在huggingface上下载

准备上板执行
将llama.cpp 和 qwen2.5-0.5b-instruct-q2_k.gguf拷贝到K230上
执行命令
1
| ./llama-cli -m qwen2.5-0.5b-instruct-q2_k.gguf -p "system name whatever" -cnv
|
这里的-cnv是用于开启对话模式,稍等几分钟就可以进行对话(虽然现在推理还很慢,如果开启rvv优化,这个2bit 量化的模型在K230上性能可以达到0.8t/s)