github.com/alwaysproblem/mlserving-tutorial@v0.0.0-20221124033215-121cfddbfbf4/TFserving/ClientAPI/cpp/make/README.md (about) 1 # GO API 2 3 ## Start Server docker 4 5 - [start tfserver](../README.md) 6 - netowork setting 7 - this we need to docker image as develop image, so plase find the server ip with `docker network inspect bridge` 8 9 ```bash 10 $ docker ps # using this to find the server name under NAMES feild. 11 $ docker network inspect bridge 12 [ 13 { 14 ... 15 "82811806166f9250d0b1734479db6c368a8b90193811231e5125fdab1dfee6a0": { 16 "Name": "focused_borg", # this is the name of server (need to check) 17 "EndpointID": "1af2f89e7617a837f28fe573aeaf5b57d650216167180b00c70a4be11cfb1510", 18 "MacAddress": "02:42:ac:11:00:03", 19 "IPv4Address": "172.17.0.3/16", # if name is right then this is your server IP 20 "IPv6Address": "" 21 ... 22 } 23 ] 24 ``` 25 26 - enter cpp directory 27 28 ```bash 29 $ cd cpp/ 30 ``` 31 32 ## Build your own C++ TFclient (optional) 33 34 - environment preparation (detail on the [doeckerfile](./grpc-cpp.dockerfile)) 35 36 - [grpc](https://github.com/grpc/grpc/tree/master/src/cpp) 37 - [protobuf](https://github.com/protocolbuffers/protobuf/tree/master/src) 38 39 - build docker 40 41 ```bash 42 $ docker build -t grpc-cpp -f grpc-cpp.dockerfile . 43 ``` 44 45 - start and enter `grpc-cpp` shell 46 47 ```bash 48 $ docker run --rm -ti -v `pwd`:/cpp grpc-cpp 49 root@5b9f27acaefe:/# git clone https://github.com/tensorflow/tensorflow 50 root@5b9f27acaefe:/# git clone https://github.com/tensorflow/serving 51 root@5b9f27acaefe:/# cd /cpp 52 root@5b9f27acaefe:/cpp# mkdir gen 53 root@5b9f27acaefe:/cpp# bash build-cpp-api.sh 54 root@5b9f27acaefe:/cpp# mv gen ./src 55 root@5b9f27acaefe:/cpp# cd /cpp/src/predict-service 56 root@5b9f27acaefe:/cpp# cd /cpp/src/predict-service 57 root@5b9f27acaefe:/cpp/src/predict-service# make 58 root@5b9f27acaefe:/cpp/src/predict-service# ./bin/main 59 # calling prediction service on 172.17.0.3:8500 60 # call predict ok 61 # outputs size is 1 62 # 63 # output_1: 64 # 0.999035 65 # 0.999735 66 # 0.999927 67 ``` 68 69 ## Run client examples 70 71 - run go client for a simple example 72 - enter the docker terminal 73 74 ```bash 75 $ docker run --rm -ti -v `pwd`:/cpp grpc-cpp # or you can docker exec -ti <docker name> /bin/bash 76 root@5b9f27acaefe:/# cp -R /cpps/make /cpp && cd /cpp/src 77 root@5b9f27acaefe:/cpp/src# 78 ``` 79 80 **assume you are in the src directory** 81 - request data from server 82 83 ```bash 84 # run under predict-service directory 85 $ make 86 $ ./bin/main 87 # calling prediction service on 172.17.0.3:8500 88 # call predict ok 89 # outputs size is 1 90 # 91 # output_1: 92 # 0.999035 93 # 0.999735 94 # 0.999927 95 # Done. 96 ``` 97 98 - request different model name 99 100 ```bash 101 # run under predict-service directory 102 $ make 103 $ ./bin/main --model_name Toy 104 # calling prediction service on 172.17.0.3:8500 105 # call predict ok 106 # outputs size is 1 107 # 108 # output_1: 109 # 0.999035 110 # 0.999735 111 # 0.999927 112 # Done. 113 $ ./bin/main --model_name Toy_double 114 # calling prediction service on 172.17.0.3:8500 115 # call predict ok 116 # outputs size is 1 117 118 # output_1: 119 # 6.80302 120 # 8.26209 121 # 9.72117 122 # Done. 123 ``` 124 125 - request different version through the version number 126 127 ```bash 128 # run under predict-service directory 129 $ make 130 $ ./bin/main --model_name Toy --model_version 1 131 # calling prediction service on 172.17.0.3:8500 132 # call predict ok 133 # outputs size is 1 134 135 # output_1: 136 # 10.8054 137 # 14.0101 138 # 17.2148 139 # Done. 140 $ ./bin/main --model_name Toy --model_version 2 141 # calling prediction service on 172.17.0.3:8500 142 # call predict ok 143 # outputs size is 1 144 145 # output_1: 146 # 0.999035 147 # 0.999735 148 # 0.999927 149 # Done. 150 ``` 151 152 - request different version through the version annotation 153 154 ```bash 155 # run under predict-service directory 156 $ make 157 $ ./bin/main --model_name Toy --model_version_label stable 158 # calling prediction service on 172.17.0.3:8500 159 # call predict ok 160 # outputs size is 1 161 162 # output_1: 163 # 10.8054 164 # 14.0101 165 # 17.2148 166 # Done. 167 $ ./bin/main --model_name Toy --model_version_label canary 168 # calling prediction service on 172.17.0.3:8500 169 # call predict ok 170 # outputs size is 1 171 172 # output_1: 173 # 0.999035 174 # 0.999735 175 # 0.999927 176 # Done. 177 ``` 178 179 - request multiple task model <!-- TODO: --> 180 181 ```bash 182 $ cd ... 183 $ make 184 $ ./bin/main 185 ``` 186 187 - request model status 188 189 ```bash 190 # run under model-status directory 191 $ make 192 $ ./bin/main --model_name Toy 193 # calling model service on 172.17.0.3:8500 194 # model_spec { 195 # name: "Toy" 196 # signature_name: "serving_default" 197 # } 198 # 199 # call predict ok 200 # metadata size is 0 201 # metadata DebugString is 202 # model_version_status { 203 # version: 3 204 # state: END 205 # status { 206 # } 207 # } 208 # model_version_status { 209 # version: 2 210 # state: AVAILABLE 211 # status { 212 # } 213 # } 214 # model_version_status { 215 # version: 1 216 # state: AVAILABLE 217 # status { 218 # } 219 # } 220 ``` 221 222 - request model metadata 223 224 ```bash 225 # run under model-metadata directory 226 $ make 227 $ ./bin/main --model_name Toy 228 # calling prediction service on 172.17.0.3:8500 229 # call predict ok 230 # metadata size is 1 231 # metadata DebugString is 232 # model_spec { 233 # name: "Toy" 234 # version { 235 # value: 2 236 # } 237 # } 238 # metadata { 239 # key: "signature_def" 240 # value { 241 # [type.googleapis.com/tensorflow.serving.SignatureDefMap] { 242 # signature_def { 243 # key: "__saved_model_init_op" 244 # value { 245 # outputs { 246 # key: "__saved_model_init_op" 247 # value { 248 # name: "NoOp" 249 # tensor_shape { 250 # unknown_rank: true 251 # } 252 # } 253 # } 254 # } 255 # } 256 # signature_def { 257 # key: "serving_default" 258 # value { 259 # inputs { 260 # key: "input_1" 261 # value { 262 # name: "serving_default_input_1:0" 263 # dtype: DT_FLOAT 264 # tensor_shape { 265 # dim { 266 # size: -1 267 # } 268 # dim { 269 # size: 2 270 # } 271 # } 272 # } 273 # } 274 # outputs { 275 # key: "output_1" 276 # value { 277 # name: "StatefulPartitionedCall:0" 278 # dtype: DT_FLOAT 279 # tensor_shape { 280 # dim { 281 # size: -1 282 # } 283 # dim { 284 # size: 1 285 # } 286 # } 287 # } 288 # } 289 # method_name: "tensorflow/serving/predict" 290 # } 291 # } 292 # } 293 # } 294 # } 295 # 296 ``` 297 298 - reload model through gRPC API 299 300 ```bash 301 # run under model-reload directory 302 $ make 303 $ ./bin/main --model_name Toy 304 # calling model service on 172.17.0.3:8500 305 # call model service ok 306 # model Toy reloaded successfully. 307 ``` 308 309 - request model log 310 311 ```bash 312 # run under predict-log directory 313 $ make 314 $ ./bin/main --model_name Toy # --model_version 1 --model_version_label stable 315 # calling prediction service on 172.17.0.3:8500 316 # call predict ok 317 # outputs size is 1 318 319 # output_1: 320 # 0.999035 321 # 0.999735 322 # 0.999927 323 # ********************Predict Log********************* 324 # request { 325 # model_spec { 326 # name: "Toy" 327 # signature_name: "serving_default" 328 # } 329 # inputs { 330 # key: "input_1" 331 # value { 332 # dtype: DT_FLOAT 333 # tensor_shape { 334 # dim { 335 # size: 3 336 # } 337 # dim { 338 # size: 2 339 # } 340 # } 341 # float_val: 1 342 # float_val: 2 343 # float_val: 1 344 # float_val: 3 345 # float_val: 1 346 # float_val: 4 347 # } 348 # } 349 # } 350 # response { 351 # outputs { 352 # key: "output_1" 353 # value { 354 # dtype: DT_FLOAT 355 # tensor_shape { 356 # dim { 357 # size: 3 358 # } 359 # dim { 360 # size: 1 361 # } 362 # } 363 # float_val: 0.999035 364 # float_val: 0.999734938 365 # float_val: 0.999927282 366 # } 367 # } 368 # model_spec { 369 # name: "Toy" 370 # version { 371 # value: 2 372 # } 373 # signature_name: "serving_default" 374 # } 375 # } 376 # **************************************************** 377 # Done. 378 ```