FLAGS = parser.parse_args() # We use a simple model that takes 2 input tensors of 16 integers # each and returns 2 output tensors of 16 integers each. One # output tensor is the element-wise sum of the inputs and one # output is the element-wise difference. model_name = "simple_int8" model_version = "" batch_size = 1 # Create gRPC stub for communicating with the server channel = grpc.insecure_channel(FLAGS.url) grpc_stub = service_pb2_grpc.GRPCInferenceServiceStub(channel) # Generate the request request = service_pb2.ModelInferRequest() request.model_name = model_name request.model_version = model_version # Input data input0_data = [i for i in range(16)] input1_data = [1 for i in range(16)] # Populate the inputs in inference request input0 = service_pb2.ModelInferRequest().InferInputTensor() input0.name = "INPUT0" input0.datatype = "INT8" input0.shape.extend([1, 16]) input0.contents.int_contents[:] = input0_data input1 = service_pb2.ModelInferRequest().InferInputTensor()
def requestGenerator(input_name, output_name, c, h, w, format, dtype, FLAGS, result_filenames, supports_batching): request = service_pb2.ModelInferRequest() request.model_name = FLAGS.model_name request.model_version = FLAGS.model_version filenames = [] if os.path.isdir(FLAGS.image_filename): filenames = [ os.path.join(FLAGS.image_filename, f) for f in os.listdir(FLAGS.image_filename) if os.path.isfile(os.path.join(FLAGS.image_filename, f)) ] else: filenames = [ FLAGS.image_filename, ] filenames.sort() output = service_pb2.ModelInferRequest().InferRequestedOutputTensor() output.name = output_name output.parameters['classification'].int64_param = FLAGS.classes request.outputs.extend([output]) input = service_pb2.ModelInferRequest().InferInputTensor() input.name = input_name input.datatype = dtype if format == mc.ModelInput.FORMAT_NHWC: input.shape.extend( [FLAGS.batch_size, h, w, c] if supports_batching else [h, w, c]) else: input.shape.extend( [FLAGS.batch_size, c, h, w] if supports_batching else [c, h, w]) # Preprocess image into input data according to model requirements # Preprocess the images into input data according to model # requirements image_data = [] for filename in filenames: img = Image.open(filename) image_data.append(preprocess(img, format, dtype, c, h, w, FLAGS.scaling)) # Send requests of FLAGS.batch_size images. If the number of # images isn't an exact multiple of FLAGS.batch_size then just # start over with the first images until the batch is filled. image_idx = 0 last_request = False while not last_request: input_bytes = None input_filenames = [] request.ClearField("inputs") request.ClearField("raw_input_contents") for idx in range(FLAGS.batch_size): input_filenames.append(filenames[image_idx]) if input_bytes is None: input_bytes = image_data[image_idx].tobytes() else: input_bytes += image_data[image_idx].tobytes() image_idx = (image_idx + 1) % len(image_data) if image_idx == 0: last_request = True request.inputs.extend([input]) result_filenames.append(input_filenames) request.raw_input_contents.extend([input_bytes]) yield request