serving: handle exception
This commit is contained in:
parent
0d7bca087b
commit
28746d6e57
|
@ -21,9 +21,11 @@
|
|||
#include "utils/load_onnx/anf_converter.h"
|
||||
#include "backend/session/session_basic.h"
|
||||
#include "backend/session/session_factory.h"
|
||||
#include "backend/session/executor_manager.h"
|
||||
#include "base/base_ref_utils.h"
|
||||
#include "backend/kernel_compiler/oplib/oplib.h"
|
||||
#include "utils/context/context_extends.h"
|
||||
#include "runtime/device/kernel_runtime_manager.h"
|
||||
|
||||
#ifdef ENABLE_D
|
||||
#include "utils/ms_context.h"
|
||||
|
@ -236,6 +238,8 @@ Status MSInferSession::ExecuteModel(uint32_t model_id, const RequestBase &reques
|
|||
}
|
||||
|
||||
Status MSInferSession::FinalizeEnv() {
|
||||
session::ExecutorManager::Instance().Clear();
|
||||
device::KernelRuntimeManager::Instance().ClearRuntimeResource();
|
||||
auto ms_context = MsContext::GetInstance();
|
||||
if (ms_context == nullptr) {
|
||||
MS_LOG(ERROR) << "Get Context failed!";
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
#include <map>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <functional>
|
||||
#include <utility>
|
||||
#include <nlohmann/json.hpp>
|
||||
#include "serving/ms_service.pb.h"
|
||||
#include "util/status.h"
|
||||
|
@ -51,7 +53,7 @@ Status GetPostMessage(struct evhttp_request *req, std::string *buf) {
|
|||
return status;
|
||||
} else {
|
||||
buf->resize(post_size);
|
||||
memcpy(buf->data(), evbuffer_pullup(req->input_buffer, -1), post_size);
|
||||
memcpy_s(buf->data(), post_size, evbuffer_pullup(req->input_buffer, -1), post_size);
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -138,14 +138,9 @@ static std::pair<struct evhttp *, struct event_base *> NewHttpServer() {
|
|||
return std::make_pair(http_server, eb);
|
||||
}
|
||||
|
||||
Status Server::BuildAndStart() {
|
||||
// handle exit signal
|
||||
signal(SIGINT, HandleSignal);
|
||||
signal(SIGTERM, HandleSignal);
|
||||
Status BuildAndStartModelInner() {
|
||||
Status res;
|
||||
|
||||
auto option_args = Options::Instance().GetArgs();
|
||||
std::string server_address = "0.0.0.0:" + std::to_string(option_args->grpc_port);
|
||||
std::string model_path = option_args->model_path;
|
||||
std::string model_name = option_args->model_name;
|
||||
std::string device_type = option_args->device_type;
|
||||
|
@ -156,7 +151,6 @@ Status Server::BuildAndStart() {
|
|||
<< device_id;
|
||||
std::cout << "Serving Error: create inference session failed, device type " << device_type << " device id "
|
||||
<< device_id << std::endl;
|
||||
ClearEnv();
|
||||
return res;
|
||||
}
|
||||
VersionController version_controller(option_args->poll_model_wait_seconds, model_path, model_name);
|
||||
|
@ -166,9 +160,43 @@ Status Server::BuildAndStart() {
|
|||
<< option_args->model_name;
|
||||
std::cout << "Serving Error: load model failed, model directory " << option_args->model_path << " model name "
|
||||
<< option_args->model_name << std::endl;
|
||||
return res;
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
Status BuildAndStartModel() {
|
||||
try {
|
||||
auto status = BuildAndStartModelInner();
|
||||
return status;
|
||||
} catch (const std::bad_alloc &ex) {
|
||||
MSI_LOG(ERROR) << "Serving Error: malloc memory failed";
|
||||
std::cout << "Serving Error: malloc memory failed" << std::endl;
|
||||
} catch (const std::runtime_error &ex) {
|
||||
MSI_LOG(ERROR) << "Serving Error: runtime error occurred: " << ex.what();
|
||||
std::cout << "Serving Error: runtime error occurred: " << ex.what() << std::endl;
|
||||
} catch (const std::exception &ex) {
|
||||
MSI_LOG(ERROR) << "Serving Error: exception occurred: " << ex.what();
|
||||
std::cout << "Serving Error: exception occurred: " << ex.what() << std::endl;
|
||||
} catch (...) {
|
||||
MSI_LOG(ERROR) << "Serving Error: exception occurred";
|
||||
std::cout << "Serving Error: exception occurred";
|
||||
}
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
Status Server::BuildAndStart() {
|
||||
// handle exit signal
|
||||
signal(SIGINT, HandleSignal);
|
||||
signal(SIGTERM, HandleSignal);
|
||||
Status res = BuildAndStartModel();
|
||||
if (res != SUCCESS) {
|
||||
ClearEnv();
|
||||
return res;
|
||||
}
|
||||
auto option_args = Options::Instance().GetArgs();
|
||||
std::string server_address = "0.0.0.0:" + std::to_string(option_args->grpc_port);
|
||||
|
||||
auto http_server_new_ret = NewHttpServer();
|
||||
struct evhttp *http_server = http_server_new_ret.first;
|
||||
struct event_base *eb = http_server_new_ret.second;
|
||||
|
|
|
@ -52,6 +52,26 @@ Session &Session::Instance() {
|
|||
}
|
||||
|
||||
Status Session::Predict(const PredictRequest &request, PredictReply &reply) {
|
||||
try {
|
||||
auto status = PredictInner(request, reply);
|
||||
return status;
|
||||
} catch (const std::bad_alloc &ex) {
|
||||
MSI_LOG(ERROR) << "Serving Error: malloc memory failed";
|
||||
std::cout << "Serving Error: malloc memory failed" << std::endl;
|
||||
} catch (const std::runtime_error &ex) {
|
||||
MSI_LOG(ERROR) << "Serving Error: runtime error occurred: " << ex.what();
|
||||
std::cout << "Serving Error: runtime error occurred: " << ex.what() << std::endl;
|
||||
} catch (const std::exception &ex) {
|
||||
MSI_LOG(ERROR) << "Serving Error: exception occurred: " << ex.what();
|
||||
std::cout << "Serving Error: exception occurred: " << ex.what() << std::endl;
|
||||
} catch (...) {
|
||||
MSI_LOG(ERROR) << "Serving Error: exception occurred";
|
||||
std::cout << "Serving Error: exception occurred";
|
||||
}
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
Status Session::PredictInner(const PredictRequest &request, PredictReply &reply) {
|
||||
if (!model_loaded_) {
|
||||
MSI_LOG(ERROR) << "the model has not loaded";
|
||||
return FAILED;
|
||||
|
|
|
@ -40,7 +40,6 @@ class Session {
|
|||
public:
|
||||
static Session &Instance();
|
||||
Status CreatDeviceSession(const std::string &device, uint32_t device_id);
|
||||
// Status Predict(const inference::MultiTensor &inputs, inference::MultiTensor &output);
|
||||
Status Predict(const PredictRequest &request, PredictReply &reply);
|
||||
Status Warmup(const MindSporeModelPtr model);
|
||||
Status Clear();
|
||||
|
@ -55,6 +54,8 @@ class Session {
|
|||
uint32_t graph_id_{0};
|
||||
std::mutex mutex_;
|
||||
std::string device_type_;
|
||||
|
||||
Status PredictInner(const PredictRequest &request, PredictReply &reply);
|
||||
};
|
||||
|
||||
} // namespace serving
|
||||
|
|
|
@ -19,10 +19,10 @@
|
|||
|
||||
namespace mindspore {
|
||||
namespace serving {
|
||||
using inference::Status;
|
||||
using inference::SUCCESS;
|
||||
using inference::FAILED;
|
||||
using inference::INVALID_INPUTS;
|
||||
using inference::Status;
|
||||
using inference::SUCCESS;
|
||||
} // namespace serving
|
||||
} // namespace mindspore
|
||||
|
||||
|
|
|
@ -30,8 +30,8 @@ volatile bool stop_poll = false;
|
|||
|
||||
std::string GetVersionFromPath(const std::string &path) {
|
||||
std::string new_path = path;
|
||||
if (path.back() == '/') {
|
||||
new_path = path.substr(0, path.size() - 1);
|
||||
while (!new_path.empty() && new_path.back() == '/') {
|
||||
new_path = new_path.substr(0, new_path.size() - 1);
|
||||
}
|
||||
|
||||
std::string::size_type index = new_path.find_last_of("/");
|
||||
|
@ -90,8 +90,6 @@ Status VersionController::Run() {
|
|||
if (ret != SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
// disable periodic check
|
||||
// StartPollModelPeriodic();
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
|
||||
import random
|
||||
import json
|
||||
import requests
|
||||
import grpc
|
||||
import numpy as np
|
||||
import requests
|
||||
import ms_service_pb2
|
||||
import ms_service_pb2_grpc
|
||||
import mindspore.dataset as de
|
||||
|
|
Loading…
Reference in New Issue