提交 e832b55d 编写于 作者: W wangjiawei04

rpc local unifed

...@@ -58,6 +58,8 @@ message ResourceConf { ...@@ -58,6 +58,8 @@ message ResourceConf {
optional string cube_config_path = 5; optional string cube_config_path = 5;
optional string cube_config_file = 6; optional string cube_config_file = 6;
optional int32 cube_quant_bits = 7; // set 0 if no quant. optional int32 cube_quant_bits = 7; // set 0 if no quant.
optional string auth_product_name = 8;
optional string auth_container_id = 9;
}; };
// DAG node depency info // DAG node depency info
......
...@@ -22,7 +22,8 @@ ...@@ -22,7 +22,8 @@
#ifdef BCLOUD #ifdef BCLOUD
#include "baidu/rpc/channel.h" #include "baidu/rpc/channel.h"
#include "baidu/rpc/parallel_channel.h" #include "baidu/rpc/parallel_channel.h"
#include "rapidjson/document.h" #include "rapidjson_1.0/document.h"
#include "rapidjson_1.0/rapidjson.h"
#else #else
#include "brpc/channel.h" #include "brpc/channel.h"
#include "brpc/parallel_channel.h" #include "brpc/parallel_channel.h"
......
...@@ -217,7 +217,7 @@ class PredictorClient { ...@@ -217,7 +217,7 @@ class PredictorClient {
int create_predictor(); int create_predictor();
int destroy_predictor(); int destroy_predictor();
int numpy_predict( int numpy_predict(
const std::vector<std::vector<py::array_t<float>>>& float_feed_batch, const std::vector<std::vector<py::array_t<float>>>& float_feed_batch,
const std::vector<std::string>& float_feed_name, const std::vector<std::string>& float_feed_name,
......
...@@ -39,7 +39,9 @@ using configure::GeneralModelConfig; ...@@ -39,7 +39,9 @@ using configure::GeneralModelConfig;
void PredictorClient::init_gflags(std::vector<std::string> argv) { void PredictorClient::init_gflags(std::vector<std::string> argv) {
std::call_once(gflags_init_flag, [&]() { std::call_once(gflags_init_flag, [&]() {
#ifndef BCLOUD
FLAGS_logtostderr = true; FLAGS_logtostderr = true;
#endif
argv.insert(argv.begin(), "dummy"); argv.insert(argv.begin(), "dummy");
int argc = argv.size(); int argc = argv.size();
char **arr = new char *[argv.size()]; char **arr = new char *[argv.size()];
...@@ -135,7 +137,6 @@ int PredictorClient::create_predictor() { ...@@ -135,7 +137,6 @@ int PredictorClient::create_predictor() {
return 0; return 0;
} }
int PredictorClient::numpy_predict( int PredictorClient::numpy_predict(
const std::vector<std::vector<py::array_t<float>>> &float_feed_batch, const std::vector<std::vector<py::array_t<float>>> &float_feed_batch,
const std::vector<std::string> &float_feed_name, const std::vector<std::string> &float_feed_name,
...@@ -143,7 +144,7 @@ int PredictorClient::numpy_predict( ...@@ -143,7 +144,7 @@ int PredictorClient::numpy_predict(
const std::vector<std::vector<py::array_t<int64_t>>> &int_feed_batch, const std::vector<std::vector<py::array_t<int64_t>>> &int_feed_batch,
const std::vector<std::string> &int_feed_name, const std::vector<std::string> &int_feed_name,
const std::vector<std::vector<int>> &int_shape, const std::vector<std::vector<int>> &int_shape,
const std::vector<std::vector<int>>& lod_slot_batch, const std::vector<std::vector<int>> &lod_slot_batch,
const std::vector<std::string> &fetch_name, const std::vector<std::string> &fetch_name,
PredictorRes &predict_res_batch, PredictorRes &predict_res_batch,
const int &pid, const int &pid,
...@@ -197,7 +198,8 @@ int PredictorClient::numpy_predict( ...@@ -197,7 +198,8 @@ int PredictorClient::numpy_predict(
<< float_shape[vec_idx].size(); << float_shape[vec_idx].size();
for (uint32_t j = 0; j < float_shape[vec_idx].size(); ++j) { for (uint32_t j = 0; j < float_shape[vec_idx].size(); ++j) {
tensor->add_shape(float_shape[vec_idx][j]); tensor->add_shape(float_shape[vec_idx][j]);
std::cout << "shape " << j << " : " << float_shape[vec_idx][j] << std::endl; std::cout << "shape " << j << " : " << float_shape[vec_idx][j]
<< std::endl;
} }
for (uint32_t j = 0; j < lod_slot_batch[vec_idx].size(); ++j) { for (uint32_t j = 0; j < lod_slot_batch[vec_idx].size(); ++j) {
tensor->add_lod(lod_slot_batch[vec_idx][j]); tensor->add_lod(lod_slot_batch[vec_idx][j]);
......
...@@ -105,7 +105,7 @@ PYBIND11_MODULE(serving_client, m) { ...@@ -105,7 +105,7 @@ PYBIND11_MODULE(serving_client, m) {
&int_feed_batch, &int_feed_batch,
const std::vector<std::string> &int_feed_name, const std::vector<std::string> &int_feed_name,
const std::vector<std::vector<int>> &int_shape, const std::vector<std::vector<int>> &int_shape,
const std::vector<std::vector<int>>& lod_slot_batch, const std::vector<std::vector<int>> &lod_slot_batch,
const std::vector<std::string> &fetch_name, const std::vector<std::string> &fetch_name,
PredictorRes &predict_res_batch, PredictorRes &predict_res_batch,
const int &pid, const int &pid,
......
...@@ -13,20 +13,12 @@ ...@@ -13,20 +13,12 @@
// limitations under the License. // limitations under the License.
#pragma once #pragma once
#include <vector>
#ifdef BCLOUD
#ifdef WITH_GPU
#include "paddle/paddle_inference_api.h"
#else
#include "paddle/fluid/inference/api/paddle_inference_api.h"
#endif
#else
#include "paddle_inference_api.h" // NOLINT
#endif
#include <string> #include <string>
#include <vector>
#include "core/general-server/general_model_service.pb.h" #include "core/general-server/general_model_service.pb.h"
#include "core/general-server/op/general_infer_helper.h" #include "core/general-server/op/general_infer_helper.h"
#include "core/predictor/framework/resource.h" #include "core/predictor/framework/resource.h"
#include "paddle_inference_api.h" // NOLINT
namespace baidu { namespace baidu {
namespace paddle_serving { namespace paddle_serving {
......
...@@ -15,17 +15,9 @@ ...@@ -15,17 +15,9 @@
#pragma once #pragma once
#include <string> #include <string>
#include <vector> #include <vector>
#ifdef BCLOUD
#ifdef WITH_GPU
#include "paddle/paddle_inference_api.h"
#else
#include "paddle/fluid/inference/api/paddle_inference_api.h"
#endif
#else
#include "paddle_inference_api.h" // NOLINT
#endif
#include "core/general-server/general_model_service.pb.h" #include "core/general-server/general_model_service.pb.h"
#include "core/general-server/op/general_infer_helper.h" #include "core/general-server/op/general_infer_helper.h"
#include "paddle_inference_api.h" // NOLINT
namespace baidu { namespace baidu {
namespace paddle_serving { namespace paddle_serving {
......
...@@ -15,17 +15,9 @@ ...@@ -15,17 +15,9 @@
#pragma once #pragma once
#include <string> #include <string>
#include <vector> #include <vector>
#ifdef BCLOUD
#ifdef WITH_GPU
#include "paddle/paddle_inference_api.h"
#else
#include "paddle/fluid/inference/api/paddle_inference_api.h"
#endif
#else
#include "paddle_inference_api.h" // NOLINT
#endif
#include "core/general-server/general_model_service.pb.h" #include "core/general-server/general_model_service.pb.h"
#include "core/general-server/op/general_infer_helper.h" #include "core/general-server/op/general_infer_helper.h"
#include "paddle_inference_api.h" // NOLINT
namespace baidu { namespace baidu {
namespace paddle_serving { namespace paddle_serving {
......
...@@ -15,17 +15,9 @@ ...@@ -15,17 +15,9 @@
#pragma once #pragma once
#include <string.h> #include <string.h>
#include <string>
#include <vector> #include <vector>
#ifdef BCLOUD
#ifdef WITH_GPU
#include "paddle/paddle_inference_api.h"
#else
#include "paddle/fluid/inference/api/paddle_inference_api.h"
#endif
#else
#include "paddle_inference_api.h" // NOLINT #include "paddle_inference_api.h" // NOLINT
#endif
#include <string>
namespace baidu { namespace baidu {
namespace paddle_serving { namespace paddle_serving {
......
...@@ -60,10 +60,11 @@ int GeneralInferOp::inference() { ...@@ -60,10 +60,11 @@ int GeneralInferOp::inference() {
const TensorVector *in = &input_blob->tensor_vector; const TensorVector *in = &input_blob->tensor_vector;
TensorVector *out = &output_blob->tensor_vector; TensorVector *out = &output_blob->tensor_vector;
int batch_size = input_blob->GetBatchSize();
int batch_size = input_blob->_batch_size;
VLOG(2) << "(logid=" << log_id << ") input batch size: " << batch_size; VLOG(2) << "(logid=" << log_id << ") input batch size: " << batch_size;
output_blob->SetBatchSize(batch_size); output_blob->_batch_size = batch_size;
VLOG(2) << "(logid=" << log_id << ") infer batch size: " << batch_size; VLOG(2) << "(logid=" << log_id << ") infer batch size: " << batch_size;
......
...@@ -15,17 +15,9 @@ ...@@ -15,17 +15,9 @@
#pragma once #pragma once
#include <string> #include <string>
#include <vector> #include <vector>
#ifdef BCLOUD
#ifdef WITH_GPU
#include "paddle/paddle_inference_api.h"
#else
#include "paddle/fluid/inference/api/paddle_inference_api.h"
#endif
#else
#include "paddle_inference_api.h" // NOLINT
#endif
#include "core/general-server/general_model_service.pb.h" #include "core/general-server/general_model_service.pb.h"
#include "core/general-server/op/general_infer_helper.h" #include "core/general-server/op/general_infer_helper.h"
#include "paddle_inference_api.h" // NOLINT
namespace baidu { namespace baidu {
namespace paddle_serving { namespace paddle_serving {
......
...@@ -37,9 +37,9 @@ int conf_check(const Request *req, ...@@ -37,9 +37,9 @@ int conf_check(const Request *req,
const std::shared_ptr<PaddleGeneralModelConfig> &model_config) { const std::shared_ptr<PaddleGeneralModelConfig> &model_config) {
int var_num = req->insts(0).tensor_array_size(); int var_num = req->insts(0).tensor_array_size();
if (var_num != model_config->_feed_type.size()) { if (var_num != model_config->_feed_type.size()) {
VLOG(2) << "var num: " << var_num; LOG(ERROR) << "feed var number not match: model config["
VLOG(2) << "model config var num: " << model_config->_feed_type.size(); << model_config->_feed_type.size() << "] vs. actual[" << var_num
LOG(ERROR) << "feed var number not match."; << "]";
return -1; return -1;
} }
...@@ -73,7 +73,6 @@ int GeneralReaderOp::inference() { ...@@ -73,7 +73,6 @@ int GeneralReaderOp::inference() {
// reade request from client // reade request from client
const Request *req = dynamic_cast<const Request *>(get_request_message()); const Request *req = dynamic_cast<const Request *>(get_request_message());
int batch_size = req->insts_size();
int input_var_num = 0; int input_var_num = 0;
std::vector<int64_t> elem_type; std::vector<int64_t> elem_type;
std::vector<int64_t> elem_size; std::vector<int64_t> elem_size;
...@@ -82,26 +81,29 @@ int GeneralReaderOp::inference() { ...@@ -82,26 +81,29 @@ int GeneralReaderOp::inference() {
GeneralBlob *res = mutable_data<GeneralBlob>(); GeneralBlob *res = mutable_data<GeneralBlob>();
TensorVector *out = &res->tensor_vector; TensorVector *out = &res->tensor_vector;
res->SetBatchSize(batch_size); res->SetLogId(log_id);
if (!res) { if (!res) {
LOG(ERROR) << "Failed get op tls reader object output"; LOG(ERROR) << "(logid=" << log_id
<< ") Failed get op tls reader object output";
} }
Timer timeline; Timer timeline;
int64_t start = timeline.TimeStampUS(); int64_t start = timeline.TimeStampUS();
int var_num = req->insts(0).tensor_array_size(); int var_num = req->insts(0).tensor_array_size();
VLOG(2) << "var num: " << var_num; VLOG(2) << "(logid=" << log_id << ") var num: " << var_num;
VLOG(2) << "(logid=" << log_id
<< ") start to call load general model_conf op";
VLOG(2) << "start to call load general model_conf op";
baidu::paddle_serving::predictor::Resource &resource = baidu::paddle_serving::predictor::Resource &resource =
baidu::paddle_serving::predictor::Resource::instance(); baidu::paddle_serving::predictor::Resource::instance();
VLOG(2) << "get resource pointer done."; VLOG(2) << "(logid=" << log_id << ") get resource pointer done.";
std::shared_ptr<PaddleGeneralModelConfig> model_config = std::shared_ptr<PaddleGeneralModelConfig> model_config =
resource.get_general_model_config(); resource.get_general_model_config();
VLOG(2) << "print general model config done."; VLOG(2) << "(logid=" << log_id << ") print general model config done.";
// TODO(guru4elephant): how to do conditional check? // TODO(guru4elephant): how to do conditional check?
/* /*
...@@ -117,17 +119,6 @@ int GeneralReaderOp::inference() { ...@@ -117,17 +119,6 @@ int GeneralReaderOp::inference() {
elem_type.resize(var_num); elem_type.resize(var_num);
elem_size.resize(var_num); elem_size.resize(var_num);
capacity.resize(var_num); capacity.resize(var_num);
/*
message Tensor {
repeated bytes data = 1;
repeated int32 int_data = 2;
repeated int64 int64_data = 3;
repeated float float_data = 4;
optional int32 elem_type = 5;
repeated int32 shape = 6;
repeated int32 lod = 7; // only for fetch tensor currently
};
*/
// prepare basic information for input // prepare basic information for input
for (int i = 0; i < var_num; ++i) { for (int i = 0; i < var_num; ++i) {
paddle::PaddleTensor lod_tensor; paddle::PaddleTensor lod_tensor;
...@@ -143,8 +134,9 @@ message Tensor { ...@@ -143,8 +134,9 @@ message Tensor {
elem_size[i] = sizeof(int32_t); elem_size[i] = sizeof(int32_t);
lod_tensor.dtype = paddle::PaddleDType::INT32; lod_tensor.dtype = paddle::PaddleDType::INT32;
} }
//implement lod tensor here // implement lod tensor here
if (req->insts(0).tensor_array(i).lod_size() > 0) { if (req->insts(0).tensor_array(i).lod_size() > 0) {
VLOG(2) << "(logid=" << log_id << ") var[" << i << "] is lod_tensor";
lod_tensor.lod.resize(1); lod_tensor.lod.resize(1);
for (int k = 0; k < req->insts(0).tensor_array(i).lod_size(); ++k) { for (int k = 0; k < req->insts(0).tensor_array(i).lod_size(); ++k) {
lod_tensor.lod[0].push_back(req->insts(0).tensor_array(i).lod(k)); lod_tensor.lod[0].push_back(req->insts(0).tensor_array(i).lod(k));
...@@ -152,21 +144,24 @@ message Tensor { ...@@ -152,21 +144,24 @@ message Tensor {
capacity[i] = 1; capacity[i] = 1;
for (int k = 0; k < req->insts(0).tensor_array(i).shape_size(); ++k) { for (int k = 0; k < req->insts(0).tensor_array(i).shape_size(); ++k) {
int dim = req->insts(0).tensor_array(i).shape(k); int dim = req->insts(0).tensor_array(i).shape(k);
VLOG(2) << "shape for var[" << i << "]: " << dim; VLOG(2) << "(logid=" << log_id << ") shape for var[" << i
<< "]: " << dim;
capacity[i] *= dim; capacity[i] *= dim;
lod_tensor.shape.push_back(dim); lod_tensor.shape.push_back(dim);
} }
VLOG(2) << "var[" << i << "] is tensor, capacity: " << capacity[i]; VLOG(2) << "(logid=" << log_id << ") var[" << i
} << "] is tensor, capacity: " << capacity[i];
else { } else {
capacity[i] = 1; capacity[i] = 1;
for (int k = 0; k < req->insts(0).tensor_array(i).shape_size(); ++k) { for (int k = 0; k < req->insts(0).tensor_array(i).shape_size(); ++k) {
int dim = req->insts(0).tensor_array(i).shape(k); int dim = req->insts(0).tensor_array(i).shape(k);
VLOG(2) << "shape for var[" << i << "]: " << dim; VLOG(2) << "(logid=" << log_id << ") shape for var[" << i
<< "]: " << dim;
capacity[i] *= dim; capacity[i] *= dim;
lod_tensor.shape.push_back(dim); lod_tensor.shape.push_back(dim);
} }
VLOG(2) << "var[" << i << "] is tensor, capacity: " << capacity[i]; VLOG(2) << "(logid=" << log_id << ") var[" << i
<< "] is tensor, capacity: " << capacity[i];
} }
lod_tensor.name = model_config->_feed_name[i]; lod_tensor.name = model_config->_feed_name[i];
out->push_back(lod_tensor); out->push_back(lod_tensor);
...@@ -186,11 +181,12 @@ message Tensor { ...@@ -186,11 +181,12 @@ message Tensor {
} else if (tensor.int_data_size() > 0) { } else if (tensor.int_data_size() > 0) {
data_len = tensor.int_data_size(); data_len = tensor.int_data_size();
} }
VLOG(2) << "tensor size for var[" << i << "]: " << data_len; VLOG(2) << "(logid=" << log_id << ") tensor size for var[" << i
<< "]: " << data_len;
tensor_size += data_len; tensor_size += data_len;
int cur_len = out->at(i).lod[0].back(); int cur_len = out->at(i).lod[0].back();
VLOG(2) << "current len: " << cur_len; VLOG(2) << "(logid=" << log_id << ") current len: " << cur_len;
int sample_len = 0; int sample_len = 0;
if (tensor.shape_size() == 1) { if (tensor.shape_size() == 1) {
...@@ -199,21 +195,21 @@ message Tensor { ...@@ -199,21 +195,21 @@ message Tensor {
sample_len = tensor.shape(0); sample_len = tensor.shape(0);
} }
out->at(i).lod[0].push_back(cur_len + sample_len); out->at(i).lod[0].push_back(cur_len + sample_len);
VLOG(2) << "new len: " << cur_len + sample_len; VLOG(2) << "(logid=" << log_id << ") new len: " << cur_len + sample_len;
} }
out->at(i).data.Resize(tensor_size * elem_size[i]); out->at(i).data.Resize(tensor_size * elem_size[i]);
out->at(i).shape = {}; out->at(i).shape = {};
for (int j = 1; j < req->insts(0).tensor_array(i).shape_size(); ++j) { for (int j = 1; j < req->insts(0).tensor_array(i).shape_size(); ++j) {
out->at(i).shape.push_back(req->insts(0).tensor_array(i).shape(j)); out->at(i).shape.push_back(req->insts(0).tensor_array(i).shape(j));
} }
//if (out->at(i).shape.size() == 1) { // if (out->at(i).shape.size() == 1) {
// out->at(i).shape.push_back(1); // out->at(i).shape.push_back(1);
//} //}
VLOG(2) << "var[" << i VLOG(2) << "(logid=" << log_id << ") var[" << i
<< "] is lod_tensor and len=" << out->at(i).lod[0].back(); << "] is lod_tensor and len=" << out->at(i).lod[0].back();
} else { } else {
out->at(i).data.Resize(batch_size * capacity[i] * elem_size[i]); out->at(i).data.Resize(batch_size * capacity[i] * elem_size[i]);
VLOG(2) << "var[" << i VLOG(2) << "(logid=" << log_id << ") var[" << i
<< "] is tensor and capacity=" << batch_size * capacity[i]; << "] is tensor and capacity=" << batch_size * capacity[i];
} }
} }
...@@ -222,8 +218,8 @@ message Tensor { ...@@ -222,8 +218,8 @@ message Tensor {
for (int i = 0; i < var_num; ++i) { for (int i = 0; i < var_num; ++i) {
if (elem_type[i] == 0) { if (elem_type[i] == 0) {
int64_t *dst_ptr = static_cast<int64_t *>(out->at(i).data.data()); int64_t *dst_ptr = static_cast<int64_t *>(out->at(i).data.data());
VLOG(2) << "first element data in var[" << i << "] is " VLOG(2) << "(logid=" << log_id << ") first element data in var[" << i
<< req->insts(0).tensor_array(i).int64_data(0); << "] is " << req->insts(0).tensor_array(i).int64_data(0);
int offset = 0; int offset = 0;
for (int j = 0; j < batch_size; ++j) { for (int j = 0; j < batch_size; ++j) {
int elem_num = req->insts(j).tensor_array(i).int64_data_size(); int elem_num = req->insts(j).tensor_array(i).int64_data_size();
...@@ -233,8 +229,8 @@ message Tensor { ...@@ -233,8 +229,8 @@ message Tensor {
} }
} else if (elem_type[i] == 1) { } else if (elem_type[i] == 1) {
float *dst_ptr = static_cast<float *>(out->at(i).data.data()); float *dst_ptr = static_cast<float *>(out->at(i).data.data());
VLOG(2) << "first element data in var[" << i << "] is " VLOG(2) << "(logid=" << log_id << ") first element data in var[" << i
<< req->insts(0).tensor_array(i).float_data(0); << "] is " << req->insts(0).tensor_array(i).float_data(0);
int offset = 0; int offset = 0;
for (int j = 0; j < batch_size; ++j) { for (int j = 0; j < batch_size; ++j) {
int elem_num = req->insts(j).tensor_array(i).float_data_size(); int elem_num = req->insts(j).tensor_array(i).float_data_size();
...@@ -244,8 +240,8 @@ message Tensor { ...@@ -244,8 +240,8 @@ message Tensor {
} }
} else if (elem_type[i] == 2) { } else if (elem_type[i] == 2) {
int32_t *dst_ptr = static_cast<int32_t *>(out->at(i).data.data()); int32_t *dst_ptr = static_cast<int32_t *>(out->at(i).data.data());
VLOG(2) << "first element data in var[" << i << "] is " VLOG(2) << "(logid=" << log_id << ") first element data in var[" << i
<< req->insts(0).tensor_array(i).int_data(0); << "] is " << req->insts(0).tensor_array(i).int_data(0);
int offset = 0; int offset = 0;
for (int j = 0; j < batch_size; ++j) { for (int j = 0; j < batch_size; ++j) {
int elem_num = req->insts(j).tensor_array(i).int_data_size(); int elem_num = req->insts(j).tensor_array(i).int_data_size();
...@@ -256,15 +252,15 @@ message Tensor { ...@@ -256,15 +252,15 @@ message Tensor {
} }
} }
VLOG(2) << "output size: " << out->size(); VLOG(2) << "(logid=" << log_id << ") output size: " << out->size();
timeline.Pause(); timeline.Pause();
int64_t end = timeline.TimeStampUS(); int64_t end = timeline.TimeStampUS();
res->p_size = 0; res->p_size = 0;
res->_batch_size = batch_size;
AddBlobInfo(res, start); AddBlobInfo(res, start);
AddBlobInfo(res, end); AddBlobInfo(res, end);
VLOG(2) << "read data from client success"; VLOG(2) << "(logid=" << log_id << ") read data from client success";
return 0; return 0;
} }
DEFINE_OP(GeneralReaderOp); DEFINE_OP(GeneralReaderOp);
......
...@@ -13,21 +13,13 @@ ...@@ -13,21 +13,13 @@
// limitations under the License. // limitations under the License.
#pragma once #pragma once
#include <vector>
#ifdef BCLOUD
#ifdef WITH_GPU
#include "paddle/paddle_inference_api.h"
#else
#include "paddle/fluid/inference/api/paddle_inference_api.h"
#endif
#else
#include "paddle_inference_api.h" // NOLINT
#endif
#include <string> #include <string>
#include <vector>
#include "core/general-server/general_model_service.pb.h" #include "core/general-server/general_model_service.pb.h"
#include "core/general-server/load_general_model_service.pb.h" #include "core/general-server/load_general_model_service.pb.h"
#include "core/general-server/op/general_infer_helper.h" #include "core/general-server/op/general_infer_helper.h"
#include "core/predictor/framework/resource.h" #include "core/predictor/framework/resource.h"
#include "paddle_inference_api.h" // NOLINT
namespace baidu { namespace baidu {
namespace paddle_serving { namespace paddle_serving {
......
...@@ -15,16 +15,8 @@ ...@@ -15,16 +15,8 @@
#pragma once #pragma once
#include <string> #include <string>
#include <vector> #include <vector>
#ifdef BCLOUD
#ifdef WITH_GPU
#include "paddle/paddle_inference_api.h"
#else
#include "paddle/fluid/inference/api/paddle_inference_api.h"
#endif
#else
#include "paddle_inference_api.h" // NOLINT
#endif
#include "core/general-server/general_model_service.pb.h" #include "core/general-server/general_model_service.pb.h"
#include "paddle_inference_api.h" // NOLINT
namespace baidu { namespace baidu {
namespace paddle_serving { namespace paddle_serving {
......
...@@ -13,21 +13,13 @@ ...@@ -13,21 +13,13 @@
// limitations under the License. // limitations under the License.
#pragma once #pragma once
#include <vector>
#ifdef BCLOUD
#ifdef WITH_GPU
#include "paddle/paddle_inference_api.h"
#else
#include "paddle/fluid/inference/api/paddle_inference_api.h"
#endif
#else
#include "paddle_inference_api.h" // NOLINT
#endif
#include <string> #include <string>
#include <vector>
#include "core/general-server/general_model_service.pb.h" #include "core/general-server/general_model_service.pb.h"
#include "core/general-server/load_general_model_service.pb.h" #include "core/general-server/load_general_model_service.pb.h"
#include "core/general-server/op/general_infer_helper.h" #include "core/general-server/op/general_infer_helper.h"
#include "core/predictor/framework/resource.h" #include "core/predictor/framework/resource.h"
#include "paddle_inference_api.h" // NOLINT
namespace baidu { namespace baidu {
namespace paddle_serving { namespace paddle_serving {
......
...@@ -15,17 +15,9 @@ ...@@ -15,17 +15,9 @@
#pragma once #pragma once
#include <string> #include <string>
#include <vector> #include <vector>
#ifdef BCLOUD
#ifdef WITH_GPU
#include "paddle/paddle_inference_api.h"
#else
#include "paddle/fluid/inference/api/paddle_inference_api.h"
#endif
#else
#include "paddle_inference_api.h" // NOLINT
#endif
#include "core/general-server/general_model_service.pb.h" #include "core/general-server/general_model_service.pb.h"
#include "core/general-server/op/general_infer_helper.h" #include "core/general-server/op/general_infer_helper.h"
#include "paddle_inference_api.h" // NOLINT
namespace baidu { namespace baidu {
namespace paddle_serving { namespace paddle_serving {
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
#include "butil/time.h" #include "butil/time.h"
#endif #endif
#include "glog/raw_logging.h" #define ERROR_STRING_LEN 10240
#include "core/configure/general_model_config.pb.h" #include "core/configure/general_model_config.pb.h"
#include "core/configure/include/configure_parser.h" #include "core/configure/include/configure_parser.h"
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include <string> #include <string>
#include <utility> #include <utility>
#include "core/predictor/common/inner_common.h" #include "core/predictor/common/inner_common.h"
#include "glog/raw_logging.h"
namespace baidu { namespace baidu {
namespace paddle_serving { namespace paddle_serving {
namespace predictor { namespace predictor {
...@@ -28,7 +28,12 @@ namespace predictor { ...@@ -28,7 +28,12 @@ namespace predictor {
FactoryDerive<D, B>* factory = new (std::nothrow) FactoryDerive<D, B>(); \ FactoryDerive<D, B>* factory = new (std::nothrow) FactoryDerive<D, B>(); \
if (factory == NULL || \ if (factory == NULL || \
FactoryPool<B>::instance().register_factory(tag, factory) != 0) { \ FactoryPool<B>::instance().register_factory(tag, factory) != 0) { \
RAW_LOG_FATAL("Failed regist factory: %s in macro!", #D); \ char err_str[ERROR_STRING_LEN]; \
snprintf(err_str, \
ERROR_STRING_LEN - 1, \
"Failed regist factory: %s in macro!", \
#D); \
RAW_LOG(FATAL, err_str); \
return -1; \ return -1; \
} \ } \
return 0; \ return 0; \
...@@ -54,7 +59,13 @@ namespace predictor { ...@@ -54,7 +59,13 @@ namespace predictor {
if (factory == NULL || \ if (factory == NULL || \
::baidu::paddle_serving::predictor::FactoryPool<B>::instance() \ ::baidu::paddle_serving::predictor::FactoryPool<B>::instance() \
.register_factory(#D, factory) != 0) { \ .register_factory(#D, factory) != 0) { \
RAW_LOG_FATAL("Failed regist factory: %s->%s in macro!", #D, #B); \ char err_str[ERROR_STRING_LEN]; \
snprintf(err_str, \
ERROR_STRING_LEN - 1, \
"Failed regist factory: %s->%s in macro!", \
#D, \
#B); \
RAW_LOG(FATAL, err_str); \
return; \ return; \
} \ } \
return; \ return; \
...@@ -66,15 +77,26 @@ namespace predictor { ...@@ -66,15 +77,26 @@ namespace predictor {
::baidu::paddle_serving::predictor::FactoryDerive<D, B>* factory = new ( \ ::baidu::paddle_serving::predictor::FactoryDerive<D, B>* factory = new ( \
::std::nothrow)::baidu::paddle_serving::predictor::FactoryDerive<D, \ ::std::nothrow)::baidu::paddle_serving::predictor::FactoryDerive<D, \
B>(); \ B>(); \
char err_str[ERROR_STRING_LEN]; \
if (factory == NULL || \ if (factory == NULL || \
::baidu::paddle_serving::predictor::FactoryPool<B>::instance() \ ::baidu::paddle_serving::predictor::FactoryPool<B>::instance() \
.register_factory(N, factory) != 0) { \ .register_factory(N, factory) != 0) { \
RAW_LOG_FATAL( \ snprintf(err_str, \
"Failed regist factory: %s->%s, tag: %s in macro!", #D, #B, N); \ ERROR_STRING_LEN - 1, \
"Failed regist factory: %s->%s, tag: %s in macro!", \
#D, \
#B, \
N); \
RAW_LOG(FATAL, err_str); \
return; \ return; \
} \ } \
RAW_LOG_WARNING( \ snprintf(err_str, \
"Succ regist factory: %s->%s, tag: %s in macro!", #D, #B, N); \ ERROR_STRING_LEN - 1, \
"Succ regist factory: %s->%s, tag: %s in macro!", \
#D, \
#B, \
N); \
RAW_LOG(WARNING, err_str); \
return; \ return; \
} }
...@@ -102,24 +124,35 @@ class FactoryPool { ...@@ -102,24 +124,35 @@ class FactoryPool {
} }
int register_factory(const std::string& tag, FactoryBase<B>* factory) { int register_factory(const std::string& tag, FactoryBase<B>* factory) {
char err_str[ERROR_STRING_LEN];
typename std::map<std::string, FactoryBase<B>*>::iterator it = typename std::map<std::string, FactoryBase<B>*>::iterator it =
_pool.find(tag); _pool.find(tag);
if (it != _pool.end()) { if (it != _pool.end()) {
RAW_LOG_FATAL("Insert duplicate with tag: %s", tag.c_str()); snprintf(err_str,
ERROR_STRING_LEN - 1,
"Insert duplicate with tag: %s",
tag.c_str());
RAW_LOG(FATAL, err_str);
return -1; return -1;
} }
std::pair<typename std::map<std::string, FactoryBase<B>*>::iterator, bool> std::pair<typename std::map<std::string, FactoryBase<B>*>::iterator, bool>
r = _pool.insert(std::make_pair(tag, factory)); r = _pool.insert(std::make_pair(tag, factory));
if (!r.second) { if (!r.second) {
RAW_LOG_FATAL("Failed insert new factory with: %s", tag.c_str()); snprintf(err_str,
ERROR_STRING_LEN - 1,
"Failed insert new factory with: %s",
tag.c_str());
RAW_LOG(FATAL, err_str);
return -1; return -1;
} }
RAW_LOG_INFO("Succ insert one factory, tag: %s, base type %s", snprintf(err_str,
tag.c_str(), ERROR_STRING_LEN - 1,
typeid(B).name()); "Succ insert one factory, tag: %s, base type %s",
tag.c_str(),
typeid(B).name());
RAW_LOG(INFO, err_str);
return 0; return 0;
} }
...@@ -127,9 +160,13 @@ class FactoryPool { ...@@ -127,9 +160,13 @@ class FactoryPool {
typename std::map<std::string, FactoryBase<B>*>::iterator it = typename std::map<std::string, FactoryBase<B>*>::iterator it =
_pool.find(tag); _pool.find(tag);
if (it == _pool.end() || it->second == NULL) { if (it == _pool.end() || it->second == NULL) {
RAW_LOG_FATAL("Not found factory pool, tag: %s, pool size %u", char err_str[ERROR_STRING_LEN];
tag.c_str(), snprintf(err_str,
_pool.size()); ERROR_STRING_LEN - 1,
"Not found factory pool, tag: %s, pool size %u",
tag.c_str(),
_pool.size());
RAW_LOG(FATAL, err_str);
return NULL; return NULL;
} }
......
...@@ -603,6 +603,7 @@ class VersionedInferEngine : public InferEngine { ...@@ -603,6 +603,7 @@ class VersionedInferEngine : public InferEngine {
LOG(ERROR) << "Failed generate engine with type:" << engine_type; LOG(ERROR) << "Failed generate engine with type:" << engine_type;
return -1; return -1;
} }
#ifndef BCLOUD
VLOG(2) << "FLAGS_logtostderr " << FLAGS_logtostderr; VLOG(2) << "FLAGS_logtostderr " << FLAGS_logtostderr;
int tmp = FLAGS_logtostderr; int tmp = FLAGS_logtostderr;
if (engine->proc_initialize(conf, version) != 0) { if (engine->proc_initialize(conf, version) != 0) {
...@@ -611,6 +612,12 @@ class VersionedInferEngine : public InferEngine { ...@@ -611,6 +612,12 @@ class VersionedInferEngine : public InferEngine {
} }
VLOG(2) << "FLAGS_logtostderr " << FLAGS_logtostderr; VLOG(2) << "FLAGS_logtostderr " << FLAGS_logtostderr;
FLAGS_logtostderr = tmp; FLAGS_logtostderr = tmp;
#else
if (engine->proc_initialize(conf, version) != 0) {
LOG(ERROR) << "Failed initialize engine, type:" << engine_type;
return -1;
}
#endif
auto r = _versions.insert(std::make_pair(engine->version(), engine)); auto r = _versions.insert(std::make_pair(engine->version(), engine));
if (!r.second) { if (!r.second) {
LOG(ERROR) << "Failed insert item: " << engine->version() LOG(ERROR) << "Failed insert item: " << engine->version()
......
...@@ -62,7 +62,10 @@ class OpRepository { ...@@ -62,7 +62,10 @@ class OpRepository {
template <typename OP_TYPE> template <typename OP_TYPE>
void regist_op(std::string op_type) { void regist_op(std::string op_type) {
_repository[op_type] = &OpFactory<OP_TYPE>::instance(); _repository[op_type] = &OpFactory<OP_TYPE>::instance();
RAW_LOG_INFO("Succ regist op: %s", op_type.c_str()); char err_str[ERROR_STRING_LEN];
snprintf(
err_str, ERROR_STRING_LEN - 1, "Succ regist op: %s", op_type.c_str());
RAW_LOG(INFO, err_str);
} }
Op* get_op(std::string op_type); Op* get_op(std::string op_type);
......
...@@ -17,6 +17,9 @@ ...@@ -17,6 +17,9 @@
#include <string> #include <string>
#include "core/predictor/common/inner_common.h" #include "core/predictor/common/inner_common.h"
#include "core/predictor/framework/kv_manager.h" #include "core/predictor/framework/kv_manager.h"
#ifdef BCLOUD
#include "aipe_sec_client.h" // NOLINT
#endif
namespace baidu { namespace baidu {
namespace paddle_serving { namespace paddle_serving {
namespace predictor { namespace predictor {
...@@ -109,6 +112,42 @@ int Resource::initialize(const std::string& path, const std::string& file) { ...@@ -109,6 +112,42 @@ int Resource::initialize(const std::string& path, const std::string& file) {
} }
LOG(WARNING) << "Successfully proc initialized mempool wrapper"; LOG(WARNING) << "Successfully proc initialized mempool wrapper";
#ifdef WITH_AUTH
std::string product_name_str = resource_conf.auth_product_name();
std::string container_id_str = resource_conf.auth_container_id();
char* product_name = new char[product_name_str.size() + 1];
snprintf(product_name,
product_name_str.size() + 1,
"%s",
product_name_str.c_str());
char* container_id = new char[container_id_str.size() + 1];
snprintf(container_id,
container_id_str.size() + 1,
"%s",
container_id_str.c_str());
aipe_auth_request request;
request.product_name = product_name;
request.container_id = container_id;
request.request_ts = (int64_t)time(NULL);
LOG(INFO) << "\nEasypack info"
<< "\nproduct name: " << request.product_name
<< "\ncontainer_id: " << request.container_id
<< "\nrequest time stamp: " << request.request_ts;
aipe_auth_response response;
response = check_auth(request);
if (response.result == 0) {
LOG(INFO) << "Authentication succeed.";
} else {
LOG(ERROR) << "Authentication failed. Error code: " << response.result;
return -1;
}
#endif
if (FLAGS_enable_model_toolkit) { if (FLAGS_enable_model_toolkit) {
int err = 0; int err = 0;
std::string model_toolkit_path = resource_conf.model_toolkit_path(); std::string model_toolkit_path = resource_conf.model_toolkit_path();
......
...@@ -23,17 +23,24 @@ namespace predictor { ...@@ -23,17 +23,24 @@ namespace predictor {
#define REGIST_FORMAT_SERVICE(svr_name, svr) \ #define REGIST_FORMAT_SERVICE(svr_name, svr) \
do { \ do { \
char err_str[ERROR_STRING_LEN]; \
int ret = \ int ret = \
::baidu::paddle_serving::predictor::FormatServiceManager::instance() \ ::baidu::paddle_serving::predictor::FormatServiceManager::instance() \
.regist_service(svr_name, svr); \ .regist_service(svr_name, svr); \
if (ret != 0) { \ if (ret != 0) { \
RAW_LOG_ERROR("Failed regist service[%s][%s]", \ snprintf(err_str, \
svr_name.c_str(), \ ERROR_STRING_LEN - 1, \
typeid(svr).name()); \ "Failed regist service[%s][%s]", \
svr_name.c_str(), \
typeid(svr).name()); \
RAW_LOG(ERROR, err_str); \
} else { \ } else { \
RAW_LOG_INFO("Success regist service[%s][%s]", \ snprintf(err_str, \
svr_name.c_str(), \ ERROR_STRING_LEN - 1, \
typeid(svr).name()); \ "Success regist service[%s][%s]", \
svr_name.c_str(), \
typeid(svr).name()); \
RAW_LOG(INFO, err_str); \
} \ } \
} while (0) } while (0)
...@@ -42,31 +49,46 @@ class FormatServiceManager { ...@@ -42,31 +49,46 @@ class FormatServiceManager {
typedef google::protobuf::Service Service; typedef google::protobuf::Service Service;
int regist_service(const std::string& svr_name, Service* svr) { int regist_service(const std::string& svr_name, Service* svr) {
char err_str[ERROR_STRING_LEN];
if (_service_map.find(svr_name) != _service_map.end()) { if (_service_map.find(svr_name) != _service_map.end()) {
RAW_LOG_ERROR("Service[%s][%s] already exist!", snprintf(err_str,
svr_name.c_str(), ERROR_STRING_LEN - 1,
typeid(svr).name()); "Service[%s][%s] already exist!",
svr_name.c_str(),
typeid(svr).name());
RAW_LOG(ERROR, err_str);
return -1; return -1;
} }
std::pair<boost::unordered_map<std::string, Service*>::iterator, bool> ret; std::pair<boost::unordered_map<std::string, Service*>::iterator, bool> ret;
ret = _service_map.insert(std::make_pair(svr_name, svr)); ret = _service_map.insert(std::make_pair(svr_name, svr));
if (ret.second == false) { if (ret.second == false) {
RAW_LOG_ERROR("Service[%s][%s] insert failed!", snprintf(err_str,
svr_name.c_str(), ERROR_STRING_LEN - 1,
typeid(svr).name()); "Service[%s][%s] insert failed!",
svr_name.c_str(),
typeid(svr).name());
RAW_LOG(ERROR, err_str);
return -1; return -1;
} }
RAW_LOG_INFO("Service[%s] insert successfully!", svr_name.c_str()); snprintf(err_str,
ERROR_STRING_LEN - 1,
"Service[%s] insert successfully!",
svr_name.c_str());
RAW_LOG(INFO, err_str);
return 0; return 0;
} }
Service* get_service(const std::string& svr_name) { Service* get_service(const std::string& svr_name) {
char err_str[ERROR_STRING_LEN];
boost::unordered_map<std::string, Service*>::iterator res; boost::unordered_map<std::string, Service*>::iterator res;
if ((res = _service_map.find(svr_name)) == _service_map.end()) { if ((res = _service_map.find(svr_name)) == _service_map.end()) {
RAW_LOG_WARNING("Service[%s] not found in service manager!", snprintf(err_str,
svr_name.c_str()); ERROR_STRING_LEN - 1,
"Service[%s] not found in service manager!",
svr_name.c_str());
RAW_LOG(WARNING, err_str);
return NULL; return NULL;
} }
return (*res).second; return (*res).second;
......
...@@ -202,8 +202,6 @@ int main(int argc, char** argv) { ...@@ -202,8 +202,6 @@ int main(int argc, char** argv) {
} }
VLOG(2) << "Succ call pthread worker start function"; VLOG(2) << "Succ call pthread worker start function";
#ifndef BCLOUD
if (Resource::instance().general_model_initialize(FLAGS_resource_path, if (Resource::instance().general_model_initialize(FLAGS_resource_path,
FLAGS_resource_file) != 0) { FLAGS_resource_file) != 0) {
LOG(ERROR) << "Failed to initialize general model conf: " LOG(ERROR) << "Failed to initialize general model conf: "
...@@ -213,6 +211,7 @@ int main(int argc, char** argv) { ...@@ -213,6 +211,7 @@ int main(int argc, char** argv) {
VLOG(2) << "Succ initialize general model"; VLOG(2) << "Succ initialize general model";
#ifndef BCLOUD
// FATAL messages are output to stderr // FATAL messages are output to stderr
FLAGS_stderrthreshold = 3; FLAGS_stderrthreshold = 3;
#endif #endif
......
...@@ -50,9 +50,9 @@ class WeightedRandomRender : public EndpointRouterBase { ...@@ -50,9 +50,9 @@ class WeightedRandomRender : public EndpointRouterBase {
Factory<WeightedRandomRender, EndpointRouterBase>* factory = Factory<WeightedRandomRender, EndpointRouterBase>* factory =
new (std::nothrow) Factory<WeightedRandomRender, EndpointRouterBase>(); new (std::nothrow) Factory<WeightedRandomRender, EndpointRouterBase>();
if (factory == NULL) { if (factory == NULL) {
RAW_LOG_ERROR( RAW_LOG(ERROR,
"Failed regist factory: WeightedRandomRender->EndpointRouterBase in " "Failed regist factory: WeightedRandomRender->EndpointRouterBase \
"macro!"); in macro!");
return -1; return -1;
} }
...@@ -62,9 +62,9 @@ class WeightedRandomRender : public EndpointRouterBase { ...@@ -62,9 +62,9 @@ class WeightedRandomRender : public EndpointRouterBase {
// together. // together.
if (FactoryPool<EndpointRouterBase>::instance().register_factory( if (FactoryPool<EndpointRouterBase>::instance().register_factory(
"WeightedRandomRender", factory) != 0) { "WeightedRandomRender", factory) != 0) {
RAW_LOG_INFO( RAW_LOG(INFO,
"Factory has been registed: " "Factory has been registed: \
"WeightedRandomRender->EndpointRouterBase."); WeightedRandomRender->EndpointRouterBase.");
} }
return 0; return 0;
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include <utility> #include <utility>
#include "core/sdk-cpp/include/common.h" #include "core/sdk-cpp/include/common.h"
#include "core/sdk-cpp/include/stub_impl.h" #include "core/sdk-cpp/include/stub_impl.h"
#include "glog/raw_logging.h"
namespace baidu { namespace baidu {
namespace paddle_serving { namespace paddle_serving {
...@@ -28,12 +27,20 @@ namespace sdk_cpp { ...@@ -28,12 +27,20 @@ namespace sdk_cpp {
namespace brpc = baidu::rpc; namespace brpc = baidu::rpc;
#endif #endif
#define ERROR_STRING_LEN 10240
#define INLINE_REGIST_OBJECT(D, B, E) \ #define INLINE_REGIST_OBJECT(D, B, E) \
do { \ do { \
Factory<D, B>* factory = new (std::nothrow) Factory<D, B>(); \ Factory<D, B>* factory = new (std::nothrow) Factory<D, B>(); \
if (factory == NULL || \ if (factory == NULL || \
FactoryPool<B>::instance().register_factory(#D, factory) != 0) { \ FactoryPool<B>::instance().register_factory(#D, factory) != 0) { \
RAW_LOG_ERROR("Failed regist factory: %s->%s in macro!", #D, #B); \ char err_str[ERROR_STRING_LEN]; \
snprintf(err_str, \
ERROR_STRING_LEN - 1, \
"Failed regist factory: %s->%s in macro!", \
#D, \
#B); \
RAW_LOG(ERROR, err_str); \
return E; \ return E; \
} \ } \
} while (0) } while (0)
...@@ -43,7 +50,12 @@ namespace brpc = baidu::rpc; ...@@ -43,7 +50,12 @@ namespace brpc = baidu::rpc;
Factory<D, B>* factory = new (std::nothrow) Factory<D, B>(); \ Factory<D, B>* factory = new (std::nothrow) Factory<D, B>(); \
if (factory == NULL || \ if (factory == NULL || \
FactoryPool<B>::instance().register_factory(tag, factory) != 0) { \ FactoryPool<B>::instance().register_factory(tag, factory) != 0) { \
RAW_LOG_ERROR("Failed regist factory: %s in macro!", #D); \ char err_str[ERROR_STRING_LEN]; \
snprintf(err_str, \
ERROR_STRING_LEN - 1, \
"Failed regist factory: %s in macro!", \
#D); \
RAW_LOG(ERROR, err_str); \
return -1; \ return -1; \
} \ } \
return 0; \ return 0; \
...@@ -66,7 +78,13 @@ namespace brpc = baidu::rpc; ...@@ -66,7 +78,13 @@ namespace brpc = baidu::rpc;
if (factory == NULL || \ if (factory == NULL || \
::baidu::paddle_serving::sdk_cpp::FactoryPool<B>::instance() \ ::baidu::paddle_serving::sdk_cpp::FactoryPool<B>::instance() \
.register_factory(#D, factory) != 0) { \ .register_factory(#D, factory) != 0) { \
RAW_LOG_ERROR("Failed regist factory: %s->%s in macro!", #D, #B); \ char err_str[ERROR_STRING_LEN]; \
snprintf(err_str, \
ERROR_STRING_LEN - 1, \
"Failed regist factory: %s->%s in macro!", \
#D, \
#B); \
RAW_LOG(ERROR, err_str); \
return; \ return; \
} \ } \
return; \ return; \
...@@ -80,8 +98,14 @@ namespace brpc = baidu::rpc; ...@@ -80,8 +98,14 @@ namespace brpc = baidu::rpc;
if (factory == NULL || \ if (factory == NULL || \
::baidu::paddle_serving::sdk_cpp::FactoryPool<B>::instance() \ ::baidu::paddle_serving::sdk_cpp::FactoryPool<B>::instance() \
.register_factory(T, factory) != 0) { \ .register_factory(T, factory) != 0) { \
RAW_LOG_ERROR( \ char err_str[ERROR_STRING_LEN]; \
"Failed regist factory: %s->%s, tag %s in macro!", #D, #B, T); \ snprintf(err_str, \
ERROR_STRING_LEN - 1, \
"Failed regist factory: %s->%s, tag %s in macro!", \
#D, \
#B, \
T); \
RAW_LOG(ERROR, err_str); \
return; \ return; \
} \ } \
return; \ return; \
...@@ -108,8 +132,13 @@ namespace brpc = baidu::rpc; ...@@ -108,8 +132,13 @@ namespace brpc = baidu::rpc;
::baidu::paddle_serving::sdk_cpp::FactoryPool< \ ::baidu::paddle_serving::sdk_cpp::FactoryPool< \
::baidu::paddle_serving::sdk_cpp::Stub>::instance() \ ::baidu::paddle_serving::sdk_cpp::Stub>::instance() \
.register_factory(T, factory) != 0) { \ .register_factory(T, factory) != 0) { \
RAW_LOG_ERROR( \ char err_str[ERROR_STRING_LEN]; \
"Failed regist factory: %s->Stub, tag: %s in macro!", #D, T); \ snprintf(err_str, \
ERROR_STRING_LEN - 1, \
"Failed regist factory: %s->Stub, tag: %s in macro!", \
#D, \
T); \
RAW_LOG(ERROR, err_str); \
return; \ return; \
} \ } \
return; \ return; \
...@@ -146,14 +175,24 @@ class FactoryPool { ...@@ -146,14 +175,24 @@ class FactoryPool {
typename std::map<std::string, FactoryBase<B>*>::iterator it = typename std::map<std::string, FactoryBase<B>*>::iterator it =
_pool.find(tag); _pool.find(tag);
if (it != _pool.end()) { if (it != _pool.end()) {
RAW_LOG_ERROR("Insert duplicate with tag: %s", tag.c_str()); char err_str[ERROR_STRING_LEN];
snprintf(err_str,
ERROR_STRING_LEN - 1,
"Insert duplicate with tag: %s",
tag.c_str());
RAW_LOG(ERROR, err_str);
return -1; return -1;
} }
std::pair<typename std::map<std::string, FactoryBase<B>*>::iterator, bool> std::pair<typename std::map<std::string, FactoryBase<B>*>::iterator, bool>
r = _pool.insert(std::make_pair(tag, factory)); r = _pool.insert(std::make_pair(tag, factory));
if (!r.second) { if (!r.second) {
RAW_LOG_ERROR("Failed insert new factory with: %s", tag.c_str()); char err_str[ERROR_STRING_LEN];
snprintf(err_str,
ERROR_STRING_LEN - 1,
"Failed insert new factory with: %s",
tag.c_str());
RAW_LOG(ERROR, err_str);
return -1; return -1;
} }
...@@ -164,9 +203,13 @@ class FactoryPool { ...@@ -164,9 +203,13 @@ class FactoryPool {
typename std::map<std::string, FactoryBase<B>*>::iterator it = typename std::map<std::string, FactoryBase<B>*>::iterator it =
_pool.find(tag); _pool.find(tag);
if (it == _pool.end() || it->second == NULL) { if (it == _pool.end() || it->second == NULL) {
RAW_LOG_ERROR("Not found factory pool, tag: %s, pool size: %u", char err_str[ERROR_STRING_LEN];
tag.c_str(), snprintf(err_str,
_pool.size()); ERROR_STRING_LEN - 1,
"Not found factory pool, tag: %s, pool size: %u",
tag.c_str(),
_pool.size());
RAW_LOG(ERROR, err_str);
return NULL; return NULL;
} }
......
...@@ -90,5 +90,3 @@ rec_op = RecOp( ...@@ -90,5 +90,3 @@ rec_op = RecOp(
| client_config | 客户端配置文件 | Op接收请求作为客户端访问rpc服务,因此需要客户端的配置文件 | | client_config | 客户端配置文件 | Op接收请求作为客户端访问rpc服务,因此需要客户端的配置文件 |
| local predictor限定 | | | | local predictor限定 | | |
| model_config | 模型配置文件 | 由于local predictor和Op运行在一台机器上,因此需要模型配置来启动local predictor | | model_config | 模型配置文件 | 由于local predictor和Op运行在一台机器上,因此需要模型配置来启动local predictor |
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "core/configure/inferencer_configure.pb.h" #include "core/configure/inferencer_configure.pb.h"
#include "core/predictor/framework/infer.h" #include "core/predictor/framework/infer.h"
#include "paddle_inference_api.h" // NOLINT #include "paddle_inference_api.h" // NOLINT
//#include "predictor/framework/infer.h"
namespace baidu { namespace baidu {
namespace paddle_serving { namespace paddle_serving {
......
...@@ -121,7 +121,7 @@ class Debugger(object): ...@@ -121,7 +121,7 @@ class Debugger(object):
name]) name])
if self.feed_types_[name] == 0: if self.feed_types_[name] == 0:
feed[name] = feed[name].astype("int64") feed[name] = feed[name].astype("int64")
elif self.feed_types_[name] == 1: elif self.feed_types_[name] == 1:
feed[name] = feed[name].astype("float32") feed[name] = feed[name].astype("float32")
elif self.feed_types_[name] == 2: elif self.feed_types_[name] == 2:
feed[name] = feed[name].astype("int32") feed[name] = feed[name].astype("int32")
...@@ -131,7 +131,7 @@ class Debugger(object): ...@@ -131,7 +131,7 @@ class Debugger(object):
if "{}.lod".format(name) in feed: if "{}.lod".format(name) in feed:
input_tensor.set_lod([feed["{}.lod".format(name)]]) input_tensor.set_lod([feed["{}.lod".format(name)]])
if batch == False: if batch == False:
input_tensor.copy_from_cpu(feed[name][np.newaxis,:]) input_tensor.copy_from_cpu(feed[name][np.newaxis, :])
else: else:
input_tensor.copy_from_cpu(feed[name]) input_tensor.copy_from_cpu(feed[name])
output_tensors = [] output_tensors = []
......
...@@ -233,7 +233,12 @@ class Client(object): ...@@ -233,7 +233,12 @@ class Client(object):
# key)) # key))
pass pass
def predict(self, feed=None, fetch=None, batch=False, need_variant_tag=False, log_id=0): def predict(self,
feed=None,
fetch=None,
batch=False,
need_variant_tag=False,
log_id=0):
self.profile_.record('py_prepro_0') self.profile_.record('py_prepro_0')
if feed is None or fetch is None: if feed is None or fetch is None:
...@@ -262,7 +267,7 @@ class Client(object): ...@@ -262,7 +267,7 @@ class Client(object):
int_shape = [] int_shape = []
lod_slot_batch = [] lod_slot_batch = []
float_shape = [] float_shape = []
fetch_names = [] fetch_names = []
counter = 0 counter = 0
batch_size = len(feed_batch) batch_size = len(feed_batch)
...@@ -292,7 +297,7 @@ class Client(object): ...@@ -292,7 +297,7 @@ class Client(object):
int_feed_names.append(key) int_feed_names.append(key)
shape_lst = [] shape_lst = []
if batch == False: if batch == False:
feed_i[key] = feed_i[key][np.newaxis,:] feed_i[key] = feed_i[key][np.newaxis, :]
shape_lst.append(1) shape_lst.append(1)
if isinstance(feed_i[key], np.ndarray): if isinstance(feed_i[key], np.ndarray):
print("feed_i_key shape", feed_i[key].shape) print("feed_i_key shape", feed_i[key].shape)
...@@ -318,7 +323,7 @@ class Client(object): ...@@ -318,7 +323,7 @@ class Client(object):
float_feed_names.append(key) float_feed_names.append(key)
shape_lst = [] shape_lst = []
if batch == False: if batch == False:
feed_i[key] = feed_i[key][np.newaxis,:] feed_i[key] = feed_i[key][np.newaxis, :]
shape_lst.append(1) shape_lst.append(1)
if isinstance(feed_i[key], np.ndarray): if isinstance(feed_i[key], np.ndarray):
print("feed_i_key shape", feed_i[key].shape) print("feed_i_key shape", feed_i[key].shape)
...@@ -349,10 +354,11 @@ class Client(object): ...@@ -349,10 +354,11 @@ class Client(object):
if self.all_numpy_input: if self.all_numpy_input:
res = self.client_handle_.numpy_predict( res = self.client_handle_.numpy_predict(
float_slot_batch, float_feed_names, float_shape, int_slot_batch, float_slot_batch, float_feed_names, float_shape, int_slot_batch,
int_feed_names, int_shape, lod_slot_batch, fetch_names, result_batch_handle, int_feed_names, int_shape, lod_slot_batch, fetch_names,
self.pid, log_id) result_batch_handle, self.pid, log_id)
elif self.has_numpy_input == False: elif self.has_numpy_input == False:
raise ValueError("Please make sure all of your inputs are numpy array") raise ValueError(
"Please make sure all of your inputs are numpy array")
else: else:
raise ValueError( raise ValueError(
"Please make sure the inputs are all in list type or all in numpy.array type" "Please make sure the inputs are all in list type or all in numpy.array type"
......
...@@ -103,8 +103,8 @@ class OpSeqMaker(object): ...@@ -103,8 +103,8 @@ class OpSeqMaker(object):
elif len(node.dependencies) == 1: elif len(node.dependencies) == 1:
if node.dependencies[0].name != self.workflow.nodes[-1].name: if node.dependencies[0].name != self.workflow.nodes[-1].name:
raise Exception( raise Exception(
'You must add op in order in OpSeqMaker. The previous op is {}, but the current op is followed by {}.'. 'You must add op in order in OpSeqMaker. The previous op is {}, but the current op is followed by {}.'
format(node.dependencies[0].name, self.workflow.nodes[ .format(node.dependencies[0].name, self.workflow.nodes[
-1].name)) -1].name))
self.workflow.nodes.extend([node]) self.workflow.nodes.extend([node])
...@@ -157,6 +157,8 @@ class Server(object): ...@@ -157,6 +157,8 @@ class Server(object):
self.cur_path = os.getcwd() self.cur_path = os.getcwd()
self.use_local_bin = False self.use_local_bin = False
self.mkl_flag = False self.mkl_flag = False
self.product_name = None
self.container_id = None
self.model_config_paths = None # for multi-model in a workflow self.model_config_paths = None # for multi-model in a workflow
def set_max_concurrency(self, concurrency): def set_max_concurrency(self, concurrency):
...@@ -191,6 +193,16 @@ class Server(object): ...@@ -191,6 +193,16 @@ class Server(object):
def set_ir_optimize(self, flag=False): def set_ir_optimize(self, flag=False):
self.ir_optimization = flag self.ir_optimization = flag
def set_product_name(self, product_name=None):
if product_name == None:
raise ValueError("product_name can't be None.")
self.product_name = product_name
def set_container_id(self, container_id):
if container_id == None:
raise ValueError("container_id can't be None.")
self.container_id = container_id
def check_local_bin(self): def check_local_bin(self):
if "SERVING_BIN" in os.environ: if "SERVING_BIN" in os.environ:
self.use_local_bin = True self.use_local_bin = True
...@@ -254,6 +266,10 @@ class Server(object): ...@@ -254,6 +266,10 @@ class Server(object):
self.resource_conf.model_toolkit_file = self.model_toolkit_fn self.resource_conf.model_toolkit_file = self.model_toolkit_fn
self.resource_conf.general_model_path = workdir self.resource_conf.general_model_path = workdir
self.resource_conf.general_model_file = self.general_model_config_fn self.resource_conf.general_model_file = self.general_model_config_fn
if self.product_name != None:
self.resource_conf.auth_product_name = self.product_name
if self.container_id != None:
self.resource_conf.auth_container_id = self.container_id
def _write_pb_str(self, filepath, pb_obj): def _write_pb_str(self, filepath, pb_obj):
with open(filepath, "w") as fout: with open(filepath, "w") as fout:
...@@ -351,8 +367,8 @@ class Server(object): ...@@ -351,8 +367,8 @@ class Server(object):
if os.path.exists(tar_name): if os.path.exists(tar_name):
os.remove(tar_name) os.remove(tar_name)
raise SystemExit( raise SystemExit(
'Download failed, please check your network or permission of {}.'. 'Download failed, please check your network or permission of {}.'
format(self.module_path)) .format(self.module_path))
else: else:
try: try:
print('Decompressing files ..') print('Decompressing files ..')
...@@ -363,8 +379,8 @@ class Server(object): ...@@ -363,8 +379,8 @@ class Server(object):
if os.path.exists(exe_path): if os.path.exists(exe_path):
os.remove(exe_path) os.remove(exe_path)
raise SystemExit( raise SystemExit(
'Decompressing failed, please check your permission of {} or disk space left.'. 'Decompressing failed, please check your permission of {} or disk space left.'
format(self.module_path)) .format(self.module_path))
finally: finally:
os.remove(tar_name) os.remove(tar_name)
#release lock #release lock
...@@ -541,7 +557,6 @@ class MultiLangServerServiceServicer(multi_lang_general_model_service_pb2_grpc. ...@@ -541,7 +557,6 @@ class MultiLangServerServiceServicer(multi_lang_general_model_service_pb2_grpc.
results, tag = ret results, tag = ret
resp.tag = tag resp.tag = tag
resp.err_code = 0 resp.err_code = 0
if not self.is_multi_model_: if not self.is_multi_model_:
results = {'general_infer_0': results} results = {'general_infer_0': results}
for model_name, model_result in results.items(): for model_name, model_result in results.items():
......
...@@ -58,6 +58,16 @@ def parse_args(): # pylint: disable=doc-string-missing ...@@ -58,6 +58,16 @@ def parse_args(): # pylint: disable=doc-string-missing
default=False, default=False,
action="store_true", action="store_true",
help="Use Multi-language-service") help="Use Multi-language-service")
parser.add_argument(
"--product_name",
type=str,
default=None,
help="product_name for authentication")
parser.add_argument(
"--container_id",
type=str,
default=None,
help="container_id for authentication")
return parser.parse_args() return parser.parse_args()
...@@ -101,6 +111,10 @@ def start_standard_model(): # pylint: disable=doc-string-missing ...@@ -101,6 +111,10 @@ def start_standard_model(): # pylint: disable=doc-string-missing
server.use_mkl(use_mkl) server.use_mkl(use_mkl)
server.set_max_body_size(max_body_size) server.set_max_body_size(max_body_size)
server.set_port(port) server.set_port(port)
if args.product_name != None:
server.set_product_name(args.product_name)
if args.container_id != None:
server.set_container_id(args.container_id)
server.load_model_config(model) server.load_model_config(model)
server.prepare_server(workdir=workdir, port=port, device=device) server.prepare_server(workdir=workdir, port=port, device=device)
......
...@@ -73,6 +73,16 @@ def serve_args(): ...@@ -73,6 +73,16 @@ def serve_args():
default=False, default=False,
action="store_true", action="store_true",
help="Use Multi-language-service") help="Use Multi-language-service")
parser.add_argument(
"--product_name",
type=str,
default=None,
help="product_name for authentication")
parser.add_argument(
"--container_id",
type=str,
default=None,
help="container_id for authentication")
return parser.parse_args() return parser.parse_args()
...@@ -141,8 +151,8 @@ class OpSeqMaker(object): ...@@ -141,8 +151,8 @@ class OpSeqMaker(object):
elif len(node.dependencies) == 1: elif len(node.dependencies) == 1:
if node.dependencies[0].name != self.workflow.nodes[-1].name: if node.dependencies[0].name != self.workflow.nodes[-1].name:
raise Exception( raise Exception(
'You must add op in order in OpSeqMaker. The previous op is {}, but the current op is followed by {}.'. 'You must add op in order in OpSeqMaker. The previous op is {}, but the current op is followed by {}.'
format(node.dependencies[0].name, self.workflow.nodes[ .format(node.dependencies[0].name, self.workflow.nodes[
-1].name)) -1].name))
self.workflow.nodes.extend([node]) self.workflow.nodes.extend([node])
...@@ -196,6 +206,8 @@ class Server(object): ...@@ -196,6 +206,8 @@ class Server(object):
self.use_local_bin = False self.use_local_bin = False
self.gpuid = 0 self.gpuid = 0
self.model_config_paths = None # for multi-model in a workflow self.model_config_paths = None # for multi-model in a workflow
self.product_name = None
self.container_id = None
def set_max_concurrency(self, concurrency): def set_max_concurrency(self, concurrency):
self.max_concurrency = concurrency self.max_concurrency = concurrency
...@@ -229,6 +241,16 @@ class Server(object): ...@@ -229,6 +241,16 @@ class Server(object):
def set_ir_optimize(self, flag=False): def set_ir_optimize(self, flag=False):
self.ir_optimization = flag self.ir_optimization = flag
def set_product_name(self, product_name=None):
if product_name == None:
raise ValueError("product_name can't be None.")
self.product_name = product_name
def set_container_id(self, container_id):
if container_id == None:
raise ValueError("container_id can't be None.")
self.container_id = container_id
def check_local_bin(self): def check_local_bin(self):
if "SERVING_BIN" in os.environ: if "SERVING_BIN" in os.environ:
self.use_local_bin = True self.use_local_bin = True
...@@ -302,6 +324,10 @@ class Server(object): ...@@ -302,6 +324,10 @@ class Server(object):
self.resource_conf.model_toolkit_file = self.model_toolkit_fn self.resource_conf.model_toolkit_file = self.model_toolkit_fn
self.resource_conf.general_model_path = workdir self.resource_conf.general_model_path = workdir
self.resource_conf.general_model_file = self.general_model_config_fn self.resource_conf.general_model_file = self.general_model_config_fn
if self.product_name != None:
self.resource_conf.auth_product_name = self.product_name
if self.container_id != None:
self.resource_conf.auth_container_id = self.container_id
def _write_pb_str(self, filepath, pb_obj): def _write_pb_str(self, filepath, pb_obj):
with open(filepath, "w") as fout: with open(filepath, "w") as fout:
...@@ -393,8 +419,8 @@ class Server(object): ...@@ -393,8 +419,8 @@ class Server(object):
if os.path.exists(tar_name): if os.path.exists(tar_name):
os.remove(tar_name) os.remove(tar_name)
raise SystemExit( raise SystemExit(
'Download failed, please check your network or permission of {}.'. 'Download failed, please check your network or permission of {}.'
format(self.module_path)) .format(self.module_path))
else: else:
try: try:
print('Decompressing files ..') print('Decompressing files ..')
...@@ -405,8 +431,8 @@ class Server(object): ...@@ -405,8 +431,8 @@ class Server(object):
if os.path.exists(exe_path): if os.path.exists(exe_path):
os.remove(exe_path) os.remove(exe_path)
raise SystemExit( raise SystemExit(
'Decompressing failed, please check your permission of {} or disk space left.'. 'Decompressing failed, please check your permission of {} or disk space left.'
format(self.module_path)) .format(self.module_path))
finally: finally:
os.remove(tar_name) os.remove(tar_name)
#release lock #release lock
......
...@@ -65,6 +65,11 @@ def start_gpu_card_model(index, gpuid, args): # pylint: disable=doc-string-miss ...@@ -65,6 +65,11 @@ def start_gpu_card_model(index, gpuid, args): # pylint: disable=doc-string-miss
server.set_ir_optimize(ir_optim) server.set_ir_optimize(ir_optim)
server.set_max_body_size(max_body_size) server.set_max_body_size(max_body_size)
if args.product_name != None:
server.set_product_name(args.product_name)
if args.container_id != None:
server.set_container_id(args.container_id)
server.load_model_config(model) server.load_model_config(model)
server.prepare_server(workdir=workdir, port=port, device=device) server.prepare_server(workdir=workdir, port=port, device=device)
if gpuid >= 0: if gpuid >= 0:
...@@ -83,8 +88,8 @@ def start_multi_card(args): # pylint: disable=doc-string-missing ...@@ -83,8 +88,8 @@ def start_multi_card(args): # pylint: disable=doc-string-missing
for ids in gpus: for ids in gpus:
if int(ids) >= len(env_gpus): if int(ids) >= len(env_gpus):
print( print(
" Max index of gpu_ids out of range, the number of CUDA_VISIBLE_DEVICES is {}.". " Max index of gpu_ids out of range, the number of CUDA_VISIBLE_DEVICES is {}."
format(len(env_gpus))) .format(len(env_gpus)))
exit(-1) exit(-1)
else: else:
env_gpus = [] env_gpus = []
......
...@@ -43,7 +43,7 @@ if '${PACK}' == 'ON': ...@@ -43,7 +43,7 @@ if '${PACK}' == 'ON':
REQUIRED_PACKAGES = [ REQUIRED_PACKAGES = [
'six >= 1.10.0', 'sentencepiece', 'opencv-python<=4.2.0.32', 'pillow', 'six >= 1.10.0', 'sentencepiece', 'opencv-python<=4.2.0.32', 'pillow',
'shapely', 'pyclipper' 'shapely<=1.6.1', 'pyclipper'
] ]
packages=['paddle_serving_app', packages=['paddle_serving_app',
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册