基于onnxruntime的C++版本CPU/GPU源码编译

基于onnxruntime的C++版本CPU/GPU源码编译

提示:基于onnxruntime的CPU/GPU源码编译,C++版本


文章目录

  • 基于onnxruntime的C++版本CPU/GPU源码编译
  • 前言
  • 一、源码地址
  • 二、步骤
    • 1.基础环境搭建
    • 2.源码编译
    • 3.测试
    • 4.注意事项
  • 总结


前言

一、ONNX Runtime是什么?

ONNX Runtime是适用于Linux,Windows和Mac上ONNX格式的机器学习模型的高性能推理引擎.

二、为什么要用ONNX Runtime?

微软在开源中提供了大量框架和引擎。第一个是开放式神经网络交换(ONNX)运行时 https://github.com/microsoft/onnxruntime,这是一种用于ONNX格式的机器学习模型的高性能推理引擎。它从今天开始在GitHub上提供,可以自定义并直接集成到现有代码库中,或者从源代码编译,在Windows 10,Linux和各种其他操作系统上运行。

对于不熟悉的人来说,ONNX是一种与平台无关的深度学习模型,可以实现开源AI框架之间的互操作性,例如Google的TensorFlow,Microsoft的Cognitive Toolkit,Facebook的Caffe2和Apache的MXNet。微软,AWS和Facebook在大约于2017年9月联合宣布,它正在由亚马逊,Nvidia,英特尔和AMD等公司进行积极的开发。

也许更重要的是,它得到了更广泛的ONNX社区的支持。英特尔和微软正在合作将nGraph编译器集成为ONNX Runtime的执行提供程序。Nvidia正在帮助整合TensorRT; 高通公司表示支持。它可以在嵌入式设备,Windows和Linux上运行…它极大地简化了开发人员的生活。随着微软开发Azure机器学习服务 - 一个允许开发人员构建,培训和部署AI模型的云平台 - 一般可用并发布Azure认知服务语言理解API的容器化支持,ONNX的推出也随之而来。


一、源码地址

源码github地址.
https://github.com/microsoft/onnxruntime

本人github地址.
https://github.com/wyt95

二、步骤

1.基础环境搭建

  • 基础编译环境:
    • Ubuntu18.04

    • cmake version 3.20.3

    • Python3.9.5.

      • python版本 > 3.5 ,建议直接最新源码下载编译
      • 源码编译步骤:./configure;sudo make ; make install
      • 编译完成后记得执行python3 -V看下版本信息对不对
      • PS:如果要使用tesonrRT,建议下载python3.8,因为onnxruntime的tensorRt的编译需要下载tensorRt7.2.2.3,支持的python版本:2.7,3.4-3.8,目前暂不支持3.9以上
    • python3 numpy

      pip3 install numpy即可

    • nvidia驱动
      下载cuda11.0的版本时使用默认的cuda自带的驱动进行安装,见第二张图基于onnxruntime的C++版本CPU/GPU源码编译_第1张图片
      基于onnxruntime的C++版本CPU/GPU源码编译_第2张图片

    • CUDA以及cudnn版本

      • CUDA版本11.0update.
      • cudnn版本8.05forCUDA11.0.
        基于onnxruntime的C++版本CPU/GPU源码编译_第3张图片
        在这里插入图片描述

以上就是基础环境配置

2.源码编译

进入onnxruntime的代码目录
编译GPU,命令如下:

./build.sh --skip_tests --use_cuda --config Release --build_shared_lib --parallel --cuda_home /usr/local/cuda-11.0 --cudnn_home /usr/local/cuda-11.0

编译CPU,命令如下:

./build.sh --skip_tests --config Release --build_shared_lib

编译tensorrt,命令如下:

./build.sh --build_shared_lib --skip_tests --config Release --use_cuda --cudnn_home /usr/local/cuda/ --cuda_home /usr/local/cuda  --use_tensorrt --tensorrt_home /home/TensorRT-7.2.2.3/

以下就是GPU版本编译完成后产生的libonnxruntime.so.1.8.0以及libonnxruntime.so
libonnxruntime.so是软连接到libonnxruntime.so.1.8.0上去的
基于onnxruntime的C++版本CPU/GPU源码编译_第4张图片基于onnxruntime的C++版本CPU/GPU源码编译_第5张图片

  • GPU版本的onnxruntime的库包含cuda的函数信息,CPU版本的库就不会存在cuda的函数信息
    在这里插入图片描述
    1.7.0版本是本人四月份编译的cpu的版本,大家可以自己编译之后比对下两者的函数包含信息
    在这里插入图片描述

3.测试

  • 需要这几个库放一起编译使用
    在这里插入图片描述

4.注意事项

onnxruntime的GPU的版本经过本人一周反复测试,cuda、cudnn以及nvdia驱动的版本是强配套的
ps:期间因为版本没有完全配套导致环境乱了,重装环境了QAQ


总结

我也是第一次尝试,源码编译还是慢慢来吧,有什么问题可以直接私信讨论,或者下方评论留言

你可能感兴趣的:(onnxruntime源码编译,c++,深度学习)