0%

C++调用带CUDA的pyV1

自动摘要: |版本号|作者|发布日期|修订| ||||| |V1.0.0|[@SindreYang(sindre)] ……..

版本号 作者 发布日期 修订
V1.0.0 @Sindre Yang(sindre) 初始版
V1.1.0 @Sindre Yang(sindre) 2023年3月17日 整理并修正

背景

  • 通过pybind11,使c++可以调用python,python环境由conda pack打包分发。
  • 主要目的:
    • conda提供cudatoolkit安装,可以让用户无需下载cuda依赖,即可使用cuda;
    • cuda安装numpy时支持intel/amd 相关加速;
    • 去除conda封装后的依赖,只保留相关运行库,第三方包,pip工具;
    • 默认添加pytorch-gpu,用于直接加载pt文件,减少转换模型的精度损失及其相关算子的开发;
    • 集成AMD,intel的矩阵优化mkl库;
    • 无缝在C++执行python代码;

依赖

  • CMake 3.12+
  • C++17
  • Python 3.8+
  • Eigen
  • fmt
  • pybind11

Windows上进行安装

1. 安装依赖 (Windows 8/10/11)

  1. 安装conda (Miniconda 安装包可以到 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 下载)
1
2
3
4
git clone https://192.168.1.55/SindreYang/Deploy.git
git submodule update --init --recursive
cd Deploy/third/envs
conda env create -f gpu38.yaml

或者在conda自定义安装numpy,pytorch_gpu,以让cmake检测到相关依赖。

建议python版本为3.8

2. 编译

1
2
3
4
mkdir build
cd build
cmake ..
cmake --build . --parallel 8

3. 安装

  1. 需导入相关运行库,以及python依赖第三方包放置在window系统库内,或exe运行目录下。
  • 提供一键环境安装 python_gpu_env_install.exe,放置在生成的exe下运行即可部署相关依赖
  • 双击python_test.exe检测相关库运行情况
  1. 目录如图:

+—DLLs    —>pyd存放目录+—Lib     —>第三方包|   api-ms-win-core-console-l1-1-0.dll|   省略n个*.dll|   vcruntime140.dll|   vcruntime140_1.dll|   zlib.dll|   zstd.dll|   python_test.exe

  1. 结果如图:

开发指导:

  • python初始化,析构定义在libs/CallPy/python.h
  • python相关特定类型(numpy)转C++定义在libs/CallPy/tool.h
  • C++自动转python对应表如下:
    C++ python
    原始类型如(const char */int64) string/int
    stl如(std::vector/std::map) list/dict
    Eigen如(Eigen::Matrix等,,tensor除外) numpy

一键部署(开发中)

需安装WiX 3.11工具

1
2
cmake .. ^[other cmake variables here] ^  -DWiX="C:/Program Files (x86)/WiX Toolset v3.11"
cmake --build . --target deploy

欢迎关注我的其它发布渠道