Я получаю странные ошибки при вызове моей модели через Tensorflow Serve.
Я создал tf.saved_model
с SavedModelBuilder
из другой модели тензорного потока.
Я просто изменил несколько вещей, чтобы учесть входные данные переменного размера (его сборка из ONNX на первом месте, поэтому мне нужно изменить несколько вещей на графике), и добавил в полеpretion_signature входные и выходные данные.
Когда я вызываю конечную точку:
test_input1 = np.random.rand(1, 5, 300)
test_input2 = np.arange(13)
data = json.dumps({'signature_name': 'out',
'instances': [{'x:0': test_input1.tolist(),
'1:0': test_input2.tolist()}]})
headers = {"content-type": "application/json"}
r = requests.post(endpoint_url, data=data, headers=headers)
Я получаю странные ошибки, которые даже непоследовательны, ошибки в операции заполнения и операции транспонирования, такие как:
"error": "transpose ожидает вектор размера 5. Но input (1) - это вектор размера 4 \ n \ t [[{{node transpose_1}}]]"
Я могу получать разные ошибки, вызывая один и тот же API с одним и тем же файлом модели и одним и тем же вводом несколько раз.
В качестве простого инструмента отладки я пытался использовать Netron для визуализации экспортированной сети, а не узлов, которые выдают ошибкииметь спецификации, упомянутые в сообщении об ошибке (например, операция транспонирования, ожидающая вектор размером 5).
Также, если я печатаю модель с:
with tf.Session(graph=tf.Graph()) as sess:
graph = tf.saved_model.loader.load(sess, [tag_constants.SERVE], export_dir)
print(graph.graph_def)
Ничто не указывает на то, что с моделью что-то не так.
Затем я попробовал инструмент saved_model_cli
, используяточно такой же ввод, который я предоставил конечной точке
saved_model_cli run --dir /export_dir --tag_set serve --signature_def out --inputs 'x:0=test_in1.npy;1:0=test_in2.npy' --tf_debug
При работе модели через cli я отлично работаю.
Так что я немного растерялся относительно причины этой ошибки, так как модель, которую я использую, должна быть точно такой же.
Надеюсь, кто-нибудь может помочь:)