Керас ТПУ. Ошибка компиляции: обнаружены неподдерживаемые операции

Я пытаюсь запустить свою модель keras UNet с помощью Google Colab TPU, и я столкнулся с этой проблемой с UpSampling2D. Какие-нибудь решения или обходной путь?

Код для запуска:

import os
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import UpSampling2D

model = Sequential()
model.add(UpSampling2D((2, 2), input_shape=(16, 16, 1)))
model.compile(optimizer=tf.train.RMSPropOptimizer(learning_rate=0.01), 
              loss='binary_crossentropy', metrics=['acc'])

TPU_WORKER = 'grpc://' + os.environ['COLAB_TPU_ADDR']
tf.logging.set_verbosity(tf.logging.INFO)


model = tf.contrib.tpu.keras_to_tpu_model(
    model,strategy=tf.contrib.tpu.TPUDistributionStrategy(
        tf.contrib.cluster_resolver.TPUClusterResolver(TPU_WORKER)))

X = np.zeros((1024, 16, 16, 1))
Y = np.zeros((1024, 32, 32, 1))

model.fit(X, Y, batch_size=1024)

Ошибка:

RuntimeError: Ошибка компиляции: Ошибка компиляции: обнаружены неподдерживаемые операции при попытке скомпилировать граф cluster_3_5095732716396540171 [] на XLA_TPU_JIT: ResizeNearestNeighbor (нет зарегистрированного узла 'ResizeNearestNeighbor' OpKernel для узлов 'ResizeNearestNeighbor' OpKernel для устройств XLA_TPU_NeighborNeighborNeighborNeighborNeighborNeighbor_Next_0740_0740_04_TpU_JIT, совместимых с { = DT_FLOAT, align_corners = false, _device = "/ device: TPU_REPLICATED_CORE"] (подача-train_1: 1, tpu_140211339657168 / up_sampling2d_1 / mul). Зарегистрировано: device = 'CPU'; T in [DT_DOUBLE '; T in [DT_DOUBLE] device =' CPU '; T in [DT_DOUBLE] device =' CPU '; T in [DT_DOUBLE] device =' в [DT_FLOAT] device = 'CPU'; T in [DT_BFLOAT16] device = 'CPU'; T in [DT_HALF] device = 'CPU'; T in [DT_INT8] device = 'CPU'; T in [DT_UINT8] device = 'CPU'; T in [DT_INT16] device = 'CPU'; T in [DT_UINT16] device = 'CPU'; T in [DT_INT32] device = 'CPU'; T in [DT_INT64]) {{node tpu_140211339657168 / up_sampling2d_1 / ResizeNearestNeighbor}}


person Victor Papenko    schedule 20.10.2018    source источник


Ответы (1)


Из-за ошибки похоже, что одна из операций в вашем графике бэкэнда Tensorflow (ResizeNearestNeighbor) для Keras в настоящее время несовместима с TPU. Есть небольшое количество операций Tensorflow, которые в настоящее время недоступны для TPU (Часто задаваемые вопросы по Cloud TPU).

Вы можете проверить текущий список TPU-совместимых операций Tensorflow здесь. Вы также можете использовать Tensorboard, чтобы просмотреть графики совместимости TPU.

В качестве обходного пути вы можете попробовать объединить операции Tensorflow, совместимые с TPU, чтобы воспроизвести поведение ResizeNearestNeighbor. В частности, вас может заинтересовать ResizeBilinear Op, совместимый с TPU.

person jysohn    schedule 25.10.2018