Модель TensorFlow Lite на Coral Dev Board не работает на ТПУ - PullRequest
1 голос
/ 20 марта 2020

У меня есть модель 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()

1 Ответ

1 голос
/ 21 марта 2020

похоже, что вы уже задавали этот вопрос на нашей странице github и получили ответ здесь . Просто хотел поделиться для других ссылками

...