У меня есть модель TensorFlow Lite и Coral Dev Board, и я хочу выполнить вывод на TPU Dev Board.
При инициализации интерпретатора TensorFlow Lite в моем Python сценарии вывода я добавляю " libedgetpu.so.1 "в качестве экспериментального делегата, следуя примеру в примере Google Coral TFLite Python (ссылка на который приведена в руководстве по началу работы с для Coral Dev Board ), однако логический вывод точно такой же, как и в случае, когда я не указываю экспериментальный делегат TPU, поэтому я предполагаю, что логический вывод все еще выполняется на ЦП Dev Board. Время вывода на Dev Board (с и без экспериментального делегата) составляет 32 с; на моем настольном компьютере P C время вывода для того же набора тестов составляет 10 с, если я запускаю модель TFLite на ЦП, и 1,3 с, если я запускаю ту же модель в Keras до преобразования в TFLite (я предполагаю, что это быстрее, чем TFLite потому что он использует несколько ядер).
Мой вопрос: как я могу сделать вывод на TPU Dev Board вместо CPU?
Интересно, это нужно указать при сборке? модель Keras на моем P C до преобразования в формат TFLite (например, с помощью диспетчера контекста with tf.device
или чего-то, что заставляет полученную модель TFLite использовать TPU), но я ничего не вижу в этом в TensorFlow Lite Converter Python Документация API .
Dev Board работает под управлением Mendel версии 2.0, Python версии 3.5.3, tflite-runtime версии 2.1.0.post1 (я знаю, что должен обновить версия Mendel, однако в настоящее время я использую Windows P C, и будет затруднительно получить доступ к Linux машине или попытаться обновить Dev Board с Windows us. замазка, VirtualBox или WSL. Если только Coral поддерживает Windows, как это делает Raspberry Pi ...).
Ниже приведен мой сценарий вывода (я также могу при необходимости загрузить сценарий и модель обучения; набор данных - MNIST, преобразованный в NumPy float данные, как описано в этой Гисте ):
import numpy as np
from time import perf_counter
try:
# Try importing the small tflite_runtime module (this runs on the Dev Board)
print("Trying to import tensorflow lite runtime...")
from tflite_runtime.interpreter import Interpreter, load_delegate
experimental_delegates=[load_delegate('libedgetpu.so.1.0')]
except ModuleNotFoundError:
# Try importing the full tensorflow module (this runs on PC)
try:
print("TFLite runtime not found; trying to import full tensorflow...")
import tensorflow as tf
Interpreter = tf.lite.Interpreter
experimental_delegates = None
except ModuleNotFoundError:
# Couldn't import either module
raise RuntimeError("Could not import Tensorflow or Tensorflow Lite")
# Load data
mnist_file = np.load("data/mnist.npz")
x_test = mnist_file["x_test"]
y_test = mnist_file["y_test"]
x_test = x_test.astype(np.float32)
# Initialise the interpreter
tfl_filename = "lstm_mnist_model_b10000.tflite"
interpreter = Interpreter(model_path=tfl_filename,
experimental_delegates=experimental_delegates)
interpreter.allocate_tensors()
print("Starting evaluation...")
for _ in range(3):
input_index = (interpreter.get_input_details()[0]['index'])
output_index = (interpreter.get_output_details()[0]['index'])
# Perform inference
t0 = perf_counter()
interpreter.set_tensor(input_index, x_test)
interpreter.invoke()
result = interpreter.get_tensor(output_index)
t1 = perf_counter()
# Print accuracy and speed
num_correct = (result.argmax(axis=1) == y_test).sum()
print("Time taken (TFLite) = {:.4f} s".format(t1 - t0))
print('TensorFlow Lite Evaluation accuracy = {} %'.format(
100 * num_correct / len(x_test)))
# Reset interpreter state (I don't know why this should be necessary, but
# accuracy suffers without it)
interpreter.reset_all_variables()