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