之前都是在Windows系统上使用Onnxruntime部署模型,用的Visual Studio配置开发Onnxruntime非常简单,具体的教程可以看我之前发的这篇文章:OnnxRuntime – 模型部署笔记2,在Visual Studio中配置Onnx Rumtime C++开发环境。最近有将部署代码迁移到Linux上的需求,所以这篇文章就详细记录下如何在Linux上配置OnnxRuntime开发环境。

1 下载OnnxRuntime Linux预编译包

在OnnxRuntime的Github下载页选择我们需要的OnnxRuntime版本的预编译包,这里以写本文时OnnxRuntime的最新版本1.15.1为例。

OnnxRuntime针对Linux不同cpu平台提供了两种类型的包:

  • arm:onnxruntime-linux-aarch64-1.15.1.tgz
  • x64:onnxruntime-linux-x64-1.15.1.tgz和onnxruntime-linux-x64-gpu-1.15.1.tgz,其中onnxruntime-linux-x64-1.15.1.tgz为cpu版本,onnxruntime-linux-x64-gpu-1.15.1.tgz为gpu版本。

由于我部署的平台为x64,所以这里选择的包为onnxruntime-linux-x64-1.15.1.tgz。

使用

wget https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-linux-x64-1.15.1.tgz

下载,然后使用

tar -xvf onnxruntime-linux-x64-1.15.1.tgz

解压,解压完成之后可以在解压文件夹看到include文件夹和lib文件夹,其中include文件夹为头文件文件夹,lib为动态库文件夹。

2 配置OnnxRuntime开发环境

假设/usr/local目录为我们防止C++第三方库的文件目录,我们首先需要使用以下命令,将第1节中的include和lib文件夹拷贝到/usr/local/onnxruntime下,使用以下命令进行拷贝

cp -r ./onnxruntime-linux-x64-1.15.1/include/ /usr/local/onnxruntime/include/
cp -r ./onnxruntime-linux-x64-1.15.1/lib/ /usr/local/onnxruntime/lib/

拷贝完成之后我们就需要配置OnnxRuntime动态库环境,让之后使用CMake编译项目可以连接到OnnxRuntime的动态库,使用以下命令

nano /etc/ld.so.conf.d/onnxruntime.conf
# 在onnxruntime.conf加入上述onnxruntime的库目录,添加一行/usr/local/onnxruntime/lib/

# 生效
ldconfig

通过这样就可以完成OnnxRuntime开发环境配置,我们也可以使用

ldconfig -v

看是否链接成功,如输出中包含以下信息就说明动态库配置成功了

/usr/local/onnxruntime/lib:
        libonnxruntime.so.1.15.1 -> libonnxruntime.so.1.15.1

3 如何编写使用OnnxRuntime项目的CMakeLists.txt

在第2节中完成OnnxRuntime的开发环境配置之后,我们就需要在使用OnnxRuntime的项目的CMakeLists.txt中增加关于OnnxRuntime信息,

包含头文件

# 添加Onnxruntime头文件目录
set(ONNXRUNTIME_INCLUDE_DIR /usr/local/onnxruntime/include/)
set(ONNXRUNTIME_LIBRARY_DIR ${PROJECT_SOURCE_DIR}/third/Onnxruntime/1.15.1/cpu/linux-x64/lib)

# 包含头文件目录
include_directories(
    ${ONNXRUNTIME_INCLUDE_DIR}
    ...
)

# 设置链接库目录
link_directories (
    ${ONNXRUNTIME_LIBRARY_DIR}
    ...
)

链接动态库

target_link_libraries(onnxruntime_test stdc++ onnxruntime dl rt)

写到这里就基本上完成了如何在Linux中配置OnnxRuntime开发环境,然后使用CMake进行编译时需要添加的一些语句。本文是直接使用OnnxRuntime在Linux x64上的编译包,没有从头开始使用源码编译,不过从源码编译应该也不难。