- 版本、环境信息:
1)PaddlePaddle版本:1.3
2)CPU:预测若用CPU,请提供CPU型号,MKL/OpenBlas/MKLDNN/等数学库使用情况
3)GPU:V100
4)系统环境:Ubuntu 5.4.0-6ubuntu1~16.04.5, Python 3.7.1
-预测信息
1)C++预测:预测库安装包的version.txt文件
GIT COMMIT ID: 4b3f9e5c61d687ea90e6599bf9494df92ed088fb
WITH_MKL: ON
WITH_MKLDNN: ON
WITH_GPU: ON
CUDA version: 9.0
CUDNN version: v7
2)CMakeLists.txt
MAKE_MINIMUM_REQUIRED(VERSION 3.2)
PROJECT(inference_demo)
add_subdirectory(pybind11)
pybind11_add_module(example example.cpp)
SET(CMAKE_C_COMPILER gcc)
SET(CMAKE_CXX_COMPILER g++)
ADD_COMPILE_OPTIONS(-std=c++11 -D_GLIBCXX_USE_CXX11_ABI=0)
SET(FLUID_INFER_LIB ${CMAKE_SOURCE_DIR}/fluid_inference)
SET(FLUID_INC_PATH ${FLUID_INFER_LIB}/paddle/include)
SET(FLUID_LIB_PATH ${FLUID_INFER_LIB}/paddle/lib)
INCLUDE_DIRECTORIES(${FLUID_INC_PATH})
LINK_DIRECTORIES(${FLUID_LIB_PATH})
TARGET_LINK_LIBRARIES(example PRIVATE absolute/path/to/libpaddle_fluid.so)
3)API信息 CreatePaddlePredictor
4)预测库来源:官网下载
5) 代码
# include <paddle_inference_api.h>
# include <unistd.h>
# include <iostream>
# include <string>
# include <vector>
# include <pybind11/pybind11.h>
namespace py = pybind11;
void CreateErnieInstance() {
std::string model_dir = "/path/to/model/dir";
bool use_gpu = true;
const char *file_path = model_dir.c_str();
if (access(file_path, F_OK) == 0){
std::cout << "model dir exists!" << std::endl;
}
paddle::NativeConfig config;
config.model_dir = model_dir;
if (use_gpu) {
config.use_gpu = true;
config.fraction_of_gpu_memory = 0.15;
config.device = 0;
}
std::cout << "before creating predictor" << std::endl;
auto predictor = CreatePaddlePredictor(config);
std::cout << "after creating predictor" << std::endl;
}
PYBIND11_MODULE(example, m) {
m.doc() = "ernie inference core";
m.def("create_ernie_instance", &CreateErnieInstance, "A function which creates ernie inference instance");
}
- 报错信息:
执行到"auto predictor = CreatePaddlePredictor(config);"时候会报错: Segmentation fault (core dumped)
报错复现步骤
下载fluid_inference库到example.cpp与CMakeLists.txt的路径
git clone pybind11到example.cpp的路径
修改CMakeLists.txt最后一行的最后一个参数为libpaddle_fluid.so的绝对路径
编译完成后执行python -c "import example; example.create_ernie_instance()"
问题描述:
项目背景是部署ERNIE的inference model在服务器,之前用python的load_inference_model api发现显存占用和training差不多, 都是十几个G,而用C++基于CreatePaddlePredictor API做inference的时候显存只占用3个G。所以尝试用pybind11封装CreatePaddlePredictor函数,以便在python中调用,然后就出现了以上报错信息。请问这个问题是什么原因造成的?另外如果已经有python的api是基于CreatePaddlePredictor实现的也烦请告知。谢谢!
2条答案
按热度按时间vyswwuz21#
建议裸用 c++ SDK,pybind封装的问题人力有限没法支持。
Predictor 的 python 接口会在1.5版本发布,目前没有文档,也无法支持相关使用问题。
目前正在开发的相关封装 https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/pybind/inference_api.cc
可以参考,但中间问题人力有限只能等接口发布后再做支持
gpnt7bae2#
十分感谢,请问你们大概打算是什么时间发布1.5?