Preguntas frecuentes

¿Qué modelos son compatibles con Cloud TPU? Puedes encontrar una lista de modelos compatibles aquí: Modelos oficiales compatibles.

¿Puedo usar Compute Engine para la inferencia? Puedes realizar inferencias en un modelo entrenado en Compute Engine a través del modo Predict en TPUEstimator. Consulta el Método de predicción de TPUEstimator.

¿Existen operaciones de TensorFlow integradas que no estén disponibles en Compute Engine?

Hay algunas operaciones de TensorFlow integradas que en este momento no están disponibles en Compute Engine. Consulta la página sobre operaciones de TensorFlow disponibles, en la que se detallan las soluciones alternativas actuales.

¿Se pueden usar marcadores de posición y diccionarios de entrada con Compute Engine?

Si bien técnicamente este patrón de uso está disponible en Compute Engine, recomendamos no usarlo. El uso de marcadores de posición y directorios de entrada te limita a un único núcleo de Compute Engine, lo que genera una sobrecarga excesiva.

En cambio, para crear una canalización de entrenamiento, usa la API TPUEstimator y la API Dataset. En el instructivo de ResNet, se proporciona un ejemplo de cómo crear un ciclo de entrenamiento simple con TPUEstimator y Dataset.

¿Se puede entrenar un modelo de aprendizaje por refuerzo (RL) con Compute Engine?

El aprendizaje por refuerzo cubre un amplio arreglo de técnicas, algunas de las cuales no son compatibles actualmente con las abstracciones de software para las TPU. Algunas configuraciones de aprendizaje por refuerzo requieren que se ejecute un "entorno de simulación" de caja negra mediante una CPU como parte del ciclo de entrenamiento. Descubrimos que estos no son compatibles con Compute Engine y, en consecuencia, generan ineficiencias considerables.

¿Se pueden usar las incorporaciones de palabras con Compute Engine?

Sí, Compute Engine admite tf.nn.embedding_lookup(), ya que es solo un wrapper de tf.gather(), que tiene una implementación en Compute Engine. Sin embargo, Compute Engine no es compatible con tf.nn.embedding_lookup_sparse(). Ten en cuenta que el tensor de ID de entrada para tf.embedding_lookup() debe tener una forma estática durante el entrenamiento (es decir, el tamaño del lote y la longitud de la secuencia deben ser iguales para cada lote). Esta es una restricción más general para todos los tensores cuando se usa Compute Engine.

¿Se pueden usar secuencias de longitud variable con Compute Engine?

Existen varios métodos para representar secuencias de longitud variable en TensorFlow, incluido el relleno, tf.while_loop(), las dimensiones de tensor inferidas y el agrupamiento. Por desgracia, el motor de ejecución de Compute Engine actual solo admite un subconjunto de estos. Las secuencias de longitud variable deben implementarse mediante tf.while_loop(), tf.dynamic_rnn(), la agrupación, el relleno o la concatenación de secuencias.

¿Se puede entrenar una red neuronal recurrente (RNN) en Compute Engine?

En ciertas configuraciones, tf.static_rnn() y tf.dynamic_rnn() son compatibles con el motor de ejecución de TPU actual. En términos más generales, la TPU es compatible con tf.while_loop() y con TensorArray, que se usan para implementar tf.dynamic_rnn(). Los kits de herramientas especializados, como CuDNN, no son compatibles con la TPU, ya que contienen un código específico de GPU. El uso de tf.while_loop() en la TPU requiere que se especifique un límite superior en la cantidad de iteraciones del ciclo para que el motor de ejecución de la TPU pueda determinar de forma estática el uso de la memoria.

¿Se puede entrenar una red generativa adversaria (GAN) con Compute Engine?

Por lo general, el entrenamiento de las GAN requiere alternar frecuentemente entre el entrenamiento del generador y el discriminador. El motor de ejecución actual de la TPU solo es compatible con un grafo único de ejecución. A fin de alternar entre grafos, se requiere una recopilación completa, que puede tardar 30 segundos o más.

Una posible solución alternativa es calcular siempre la suma de las pérdidas tanto para el generador como para el discriminante, pero multiplicar estas pérdidas por dos tensores de entrada: g_w y d_w. En lotes en los que se debería entrenar al generador, puedes pasar g_w=1.0 y d_w=0.0, y viceversa para lotes en los que se debería entrenar al discriminante.

¿Puedo entrenar un modelo de aprendizaje de tareas múltiples con Compute Engine?

Si estas tareas se pueden representar como un gran grafo único con una función de pérdida agregada, no se necesita asistencia especial para el aprendizaje de tareas múltiples. Sin embargo, actualmente, el motor de ejecución de la TPU solo es compatible con un solo grafo de ejecución. Por lo tanto, no es posible alternar rápidamente entre grafos de ejecución múltiples que compartan variables, pero que tengan estructuras diferentes. Para cambiar los grafos de ejecución, se debe volver a ejecutar el paso de compilación del grafo, lo cual puede tardar 30 segundos o más.

¿Compute Engine es compatible con el modo inmediato?

No, el modo inmediato usa un nuevo motor de ejecución dinámico, mientras que Compute Engine usa XLA, que realiza la compilación estática del grafo de ejecución.

¿Compute Engine es compatible con el paralelismo de modelos?

El paralelismo de modelos (o la ejecución de programas no idénticos en los múltiples núcleos dentro de un mismo dispositivo Compute Engine) no es compatible en este momento.

¿Cómo puedo inspeccionar el valor real de los tensores intermedios en Compute Engine, como con tf.Print o tfdbg?

En este momento, Compute Engine no admite esta función. El procedimiento sugerido para desarrollar en Compute Engine es implementar el modelo con el marco de trabajo TPUEstimator, que permite una transición sin esfuerzo entre TPU y CPU/GPU (marca use_tpu). Te recomendamos depurar tus modelos en la CPU/GPU con las herramientas estándar de TensorFlow, y luego cambiar a Compute Engine cuando tu modelo esté listo para un entrenamiento a gran escala.

Mi esquema de entrenamiento es demasiado complejo o especializado para la API TPUEstimator, ¿existe alguna API de nivel inferior que pueda usar?

TPUEstimator es el marco de trabajo principal para el entrenamiento de Cloud TPU. Sin embargo, TPUEstimator une a la API tpu, que es parte de TensorFlow de código abierto, por lo que es técnicamente posible (pero no compatible) usar la API tpude bajo nivel de forma directa. Si tu canalización de entrenamiento requiere comunicación frecuente entre Compute Engine y la CPU, o requiere cambiar con frecuencia el grafo de ejecución, tu cálculo no se ejecutará de forma eficiente en Compute Engine.