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      ```