此项目为为实验室项目开发深度学习模型部署的demo
使用gRPC、LibTorch开发和C++11开发(LibTorch的编译需要C++14,但项目整体依据C++11的特性)
- 下载源码包(这里使用的LibTorch2.0 CPU版本)
- 解压到安装目录
- 参见官方
cd ${PROJECT_DIR} #进入项目根目录
mkdir build
pushd build
cmake -DCMAKE_PREFIX_PATH=${GPRC_INSTALL_DIR} ../
make -j 4
./Final_AIServer ../model/model.pt # 参数说明,启动模型并指定模型参数位置
C++程序的运行需要几个部分,可执行源文件、第三库的依赖和操作系统的依赖。将执行文件与第三方库的依赖复制到容器中并指定动态库的路径同时拉取和编译时版本一致的操作系统镜像。具体见bin文件夹下得Dockerfile。
这个demo作为后端的算法服务,根据业务后台提供的特征返回深度学习模型计算出的结果,服务的通信采用了gRPC。这里采用了gRPC官方提供的异步服务器的demo代码。由于是异步服务器模式需要主动去拉取任务并指定执行逻辑。经过一些调研,发现NVIDIA GPU任务的并行计算并不会像多核CPU那样,并行的执行在多核上,考虑到深度学习模型的一次推理需要占用大量的显存以及记录参数信息,这里的策略是让模型的推理在主线程中执行,也就是推理是串行的,数据的写回提交给线程池(如果是并行的,那么就任务的推理而言,可能会增加吞吐量,但会降低响应时间)。这里线程池其实只起到了执行任务的部分,但是出于学习的目的,仍然保留了一个提供异步结果返回的接口。