交叉编译
在完成模型的量化构建后,就能够在目标硬件平台OK3576上实现模型的推理功能了。
板端推理的示例代码位于kllm-runtime/examples/rkllm_api_demo
目录中,该目录提供了针对Android和Linux平台的编译示例。由于我们的开发环境是基于Linux的,因此我们将使用该目录下的build-linux.sh
脚本来完成程序的编译构建。
首先,需要修改kllm-runtime/examples/rkllm_api_demo
目录下的build-linux.sh
脚本中的GCC_COMPILER_PATH
变量,将其设置为我们上一节应用编译中所配置的交叉编译器路径。
GCC_COMPILER_PATH=${CROSS_COMPILE}
C_COMPILER=${GCC_COMPILER_PATH}gcc
CXX_COMPILER=${GCC_COMPILER_PATH}g++
STRIP_COMPILER=${GCC_COMPILER_PATH}strip
在完成GCC_COMPILER_PATH
的修改后,接下来执行编译脚本。这将生成一个名为llm_demo
的可执行文件。
bash build-linux.sh
文件拷贝
随后,将runtime/Linux/librkllm_api/aarch64
目录下的librkllmrt.so
库文件、rkllm
模型文件以及之前编译得到的llm_demo
可执行文件一起复制到llm_qwen2_base
文件夹中。并使用scp命令,将整个llm_qwen2_base
文件夹传输到开发板的userdata
目录中。
scp -r ./llm_qwen2_base/ root@192.168.31.75:/userdata
构建完成后,llm_qwen2_base
目录的结构应如下所示:
确认文件传输无误后,就可以在开发板上执行推理过程了。
执行推理
首先,确保将存放librkllmrt.so
库文件的路径添加到LD_LIBRARY_PATH
环境变量中,以便程序能够正确加载该库。这可以通过在终端中执行以下命令来完成:
export LD_LIBRARY_PATH=/path/to/your/library:$LD_LIBRARY_PATH
接下来,由于系统对可打开文件的最大数量有限制,直接运行llm_demo
可能会导致“Too many open files”错误。为了避免这个问题,需要使用ulimit -HSn
命令来临时增加最大可打开文件的数量限制。例如,可以将限制设置为较高的数值,如10240:
ulimit -HSn 10240
最后,执行llm_demo
可执行文件,并指定rkllm
模型文件的路径。这样即可开始推理过程:
./llm_demo --model_path /path/to/rkllm_model
通过以上步骤,即可在开发板上正常启动推理任务。执行结果如下:
可以看到模型能够正常进行推理,但是0.5B参数量的模型推理结果还差强人意。