Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何序列化Tensorflow服务请求以减少推断/预测延迟?_Python_Tensorflow_Tensorflow Serving - Fatal编程技术网

Python 如何序列化Tensorflow服务请求以减少推断/预测延迟?

Python 如何序列化Tensorflow服务请求以减少推断/预测延迟?,python,tensorflow,tensorflow-serving,Python,Tensorflow,Tensorflow Serving,我使用TensorService InputReceiver从估计器导出了TF SavedModel,如下所示: def serving_input_fn(): input_ph = tf.placeholder(tf.float32, shape=[None, 3, 224, 224], name = 'image_batches') input_tensors = input_ph return tf.estimator.export.TensorServingInp

我使用TensorService InputReceiver从估计器导出了TF SavedModel,如下所示:

def serving_input_fn():
    input_ph = tf.placeholder(tf.float32, shape=[None, 3, 224, 224], name = 'image_batches')
    input_tensors = input_ph
    return tf.estimator.export.TensorServingInputReceiver(input_tensors, input_ph)
warm_start = tf.estimator.WarmStartSettings(CKPT_DIR)
    classifier = tf.estimator.Estimator(model_fn = model_fn, warm_start_from = warm_start)
    classifier.export_savedmodel(export_dir_base = SAVED_MODEL_DIR, serving_input_receiver_fn = serving_input_fn)
并按如下方式导出保存的模型:

def serving_input_fn():
    input_ph = tf.placeholder(tf.float32, shape=[None, 3, 224, 224], name = 'image_batches')
    input_tensors = input_ph
    return tf.estimator.export.TensorServingInputReceiver(input_tensors, input_ph)
warm_start = tf.estimator.WarmStartSettings(CKPT_DIR)
    classifier = tf.estimator.Estimator(model_fn = model_fn, warm_start_from = warm_start)
    classifier.export_savedmodel(export_dir_base = SAVED_MODEL_DIR, serving_input_receiver_fn = serving_input_fn)
但是,当我使用此SavedModel在Tensorflow服务中执行预测时:

json_dict = {'signature_name': 'serving_default', 'instances': data}
当数据是一个numpy数组时,我使用SavedModel获得的速度仅为本地直接推断的1/5到1/6


目前我认为问题可能是JSON中请求的序列化部分。那么,是否有人知道如何在发送请求之前执行请求序列化,或者对为什么使用TF服务的推理速度比直接推理慢得多有什么建议?

我也遇到过同样的情况,jason.dumps会导致90%的延迟,如果图像大小减小到(1100100,3)推理速度提高了3倍,因此基本上json.dumps文件太大,因此从内存中写入和读取会花费更多的时间。我尝试了ultrajson,即ujson,但没有任何明显的改进

trs = img1.tolist()
data = json.dumps({"signature_name": "serving_default", "instances": trs})
trs = img1.tolist()
data = json.dumps({"signature_name": "serving_default", "instances": trs})
由于我的模型架构需要INT,所以我看不到任何其他序列化数据的选项


有什么建议吗???

我一直面临着同样的情况,jason.dumps会导致90%的延迟,如果图像大小减小到(1100100,3),推理速度会增加3倍,因此基本上json.dumps文件太大,因此从内存中写入和读取会花费更多的时间。我尝试了ultrajson,即ujson,但没有任何明显的改进

trs = img1.tolist()
data = json.dumps({"signature_name": "serving_default", "instances": trs})
trs = img1.tolist()
data = json.dumps({"signature_name": "serving_default", "instances": trs})
由于我的模型架构需要INT,所以我看不到任何其他序列化数据的选项

修改输入架构可以将UINT的输入需求转换为字符串,这可以通过

dl_request = requests.get(IMAGE, stream=True)
jpeg_bytes = base64.b64encode(dl_request.content).decode('utf-8')
predict_request = '{"instances" : [{"b64": "%s"}]}' % jpeg_bytes
response = requests.post(SERVER_URL, data=predict_request)
这会得到很好的结果,但是如何将模型输入类型从INT转换为STRING呢


有什么建议吗???

我还观察到一些使用字符串的加速;然而,在我的例子中,由[batch_size,224,224,3]图像文件的json.dumps引起的延迟仍然很大。关于将模型输入类型从Int转换为String,也许您可以设计输入函数来接受String输入,并使用类似估计器输入函数的东西将String转换为Int?