图像分类服务器端SDK集成文档-EdgeKitProxy
更新时间:2023-05-16
简介
本文档介绍EdgeKitProxy的使用方法。
Release Notes
时间 | 版本 | 说明 |
---|---|---|
2023-05-17 | 1.0.0 | 第一版! |
快速开始
二进制位置
位于SDK内bin目录中,文件名为edgekit_serving,配套edgekit_serving.yml为默认配置文件
注意事项
请参考各SDK文档中的注意事项
使用说明
服务启动
usage: edgekit_serving [<flags>]
Flags:
--help 显示帮助
-c, --cfg=./edgekit_serving.yml
配置文件
-m, --model_dir=./RES 模型目录
-s, --serial_num=ABCD-EFGH-IJKL-MNOP
序列号
--pool_min_size=1 预测池最小预测器个数
--pool_max_size=1 预测池最大预测器个数
--pool_full_interval_seconds=-1
预测池满载多少秒进行扩容
--pool_idle_interval_seconds=-1
预测池未满载多少秒进行缩容
--pool_available_device=-1 ...
预测池可用设备列表
-d, --debug 开启debug模式
--log_to_std 日志输出至终端
--log_to_file 日志输出至文件
--log_file=easyedge.log 日志文件名
--log_max_size=10 日志最大大小(MB)
--log_max_age=10 日志旧文件保留天数
--log_max_backups=100 日志旧文件保留个数
-h, --host=127.0.0.1 服务监听地址
-p, --port=24401 服务监听端口
--ws_max_handle_num=1 websocket接口最大处理请求个数
--ws_max_handle_timeout=30
websocket接口超时时间
配置文件说明
controller:
serialNum: AAAA-AAAA-AAAA-AAAA # 序列号
modelDir: ../../../RES # 模型目录
predictorPool:
minSize: 1 # 预测池最小预测器个数
maxSize: 3 # 预测池最大预测器个数
fullIntervalSeconds: 1 # 预测池满载多少秒进行扩容
idleIntervalSeconds: 1 # 预测池未满载多少秒进行缩容
availableDevice: [ -1 ] # 预测池可用设备列表
serving:
host: 0.0.0.0 # 服务监听地址
port: 24401 # 服务监听端口
enableHTTP: true # 对外开启HTTP服务
enableWS: false # 对外开启websocket服务
ws:
maxHandleNum: 1 # websocket接口最大处理请求个数
maxHandleTimeout: 30 # websocket接口超时时间
logging:
debug: true # 开启debug模式
logToStd: true # 日志输出至终端
logToFile: false # 日志输出至文件
logFile: easyedge.log # 日志文件名
maxSize: 10 # 日志最大大小(MB)
maxAge: 10 # 日志旧文件保留天数
maxBackups: 100 # 日志旧文件保留个数
命令行参数会覆盖配置文件中同义配置
服务调用
HTTP服务接口url: ${监听地址}/ HTTP服务接口url: ${监听地址}/ws
请求参数
syntax = "proto3";
package easyedge.kit.proxy;
enum ImageType {
Bin = 0; // 图片原始二进制内容,json格式下为base64编码后结果
Mat = 1; // 图片Mat格式内容,json格式下为base64编码后结果
}
message HTTPRequest {
bytes image = 1;
ImageType image_type = 2;
int32 height = 3;
int32 width = 4;
int32 channel = 5;
float threshold = 6;
int32 top_num = 7;
}
enum CommandType {
GetInfo = 0;
InferImage = 1;
}
enum InfoType {
Hardware = 0;
}
message WebSocketRequest {
string request_id = 1;
CommandType command_type = 2;
InfoType info_type = 3;
bytes image = 4;
ImageType image_type = 5;
int32 height = 6;
int32 width = 7;
int32 channel = 8;
int64 frame_id = 9;
float threshold = 10;
int32 top_num = 11;
}
返回参数
syntax = "proto3";
package easyedge.kit.proxy;
message BasicGPUInfo {
string productName = 1;
string memUsed = 2;
string memTotal = 3;
string gpuUtil = 4;
string powerLimit = 5;
string powerDraw = 6;
string temperature = 7;
}
message DevStat {
string name = 1;
uint64 rx = 2;
uint64 tx = 3;
}
message Chip {
string name = 1;
double powerUsed = 2;
double powerLimit = 3;
double temperature = 4;
double chipUtil = 5;
int64 memoryUsed = 6;
int64 memoryTotal = 7;
}
message SMI {
string name = 1;
string sdkVersion = 2;
string driverVersion = 3;
repeated Chip chips = 4;
}
message HInfo {
string osName = 1;
string hostname = 2;
repeated string ipAddr = 3;
repeated string macAddr = 4;
uint64 bootTime = 5;
int32 cpuCores = 6;
double cpuMhz = 7;
string cpuModelName = 8;
double cpuUsage = 9;
map<string, double> cpuUsageDetail = 10;
uint64 memTotal = 11;
uint64 memTotalUsed = 12;
double memUsage = 13;
map<string, double> memUsageDetail = 14;
uint64 diskTotal = 15;
uint64 diskTotalUsed = 16;
double diskUsage = 17;
map<string, double> diskUsageDetail = 18;
string userName = 19;
bool isInternetConnected = 20;
string deviceId = 21;
int64 deviceTimestamp = 22;
map<string, DevStat> netUsageDetails = 23;
repeated BasicGPUInfo gpuInfo = 24;
double gpuUtil = 25;
uint64 gpuMemTotal = 26;
uint64 gpuMemTotalUsed = 27;
double gpuMemUsage = 28;
map<string, SMI> aiChipInfo = 29;
}
message LocationPoint {
optional int32 x = 1;
optional int32 y = 2;
}
message Location {
optional int32 left = 1;
optional int32 top = 2;
optional int32 width = 3;
optional int32 height = 4;
repeated LocationPoint points = 5;
}
message Point {
optional double x = 1;
optional double y = 2;
}
message InferResultItem {
optional int64 index = 1;
optional double confidence = 2;
optional double score = 3;
optional string label = 4;
optional string name = 5;
optional int32 modelKind = 6;
// 矩形检测
optional double x1 = 7;
optional double x2 = 8;
optional double y1 = 9;
optional double y2 = 10;
optional Location location = 11;
// 四边形检测
repeated Point points = 12;
// 追踪
optional int64 trackId = 13;
optional int64 frame = 14;
optional double fps = 15;
optional string mask = 16;
}
message HTTPResponse {
int64 cost_ms = 1;
int32 error_code = 2;
int64 frame_id = 3;
repeated InferResultItem results = 4;
}
message WebSocketInferResponse {
string request_id = 1;
int64 cost_ms = 2;
int32 error_code = 3;
int64 frame_id = 4;
repeated InferResultItem results = 5;
bytes annotated = 6; // 渲染后的图片原始二进制内容,json格式下为base64编码后结果,目前语义分割返回这个类型
}
message WebSocketHInfoResponse {
string request_id = 1;
int32 status = 2;
string msg = 3;
HInfo data = 4;
}
其他说明
单机负载均衡
通过配置文件或命令行参数配置了预测池相关配置后,若预测池最小与最大预测器个数不同,且扩缩容配置不为-1则开启单机负载均衡,服务启动时会创建最小数量的预测器,后续根据实际请求情况,若所有预测器均有负载的持续时间大于配置中的满载扩容时间,且预测器数量未到达最大个数时,会自动扩容,后续若请求并发数下降,预测器池中预测器不能跑满负载时,则会自动缩容,尽可能最大化利用单机资源