Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.4K
Vistas
lstm no usará núcleos cuDNN ya que no cumple con los criterios. Utilizará un kernel de GPU genérico como respaldo cuando se ejecute en GPU

Estoy ejecutando el siguiente código para LSTM en Databricks con GPU

 model = Sequential() model.add(LSTM(64, activation=LeakyReLU(alpha=0.05), batch_input_shape=(1, timesteps, n_features), stateful=False, return_sequences = True)) model.add(Dropout(0.2)) model.add(LSTM(32)) model.add(Dropout(0.2)) model.add(Dense(n_features)) model.compile(loss='mean_squared_error', optimizer=Adam(learning_rate = 0.001), metrics='acc') model.fit(generator, epochs=epochs, verbose=0, shuffle=False)

pero sigue apareciendo la siguiente advertencia

 WARNING:tensorflow:Layer lstm will not use cuDNN kernels since it doesn't meet the criteria. It will use a generic GPU kernel as fallback when running on GPU.

Entrena mucho más lento que sin una GPU. Estoy usando DBR 9.0 ML (incluye Apache Spark 3.1.2, GPU, Scala 2.12) ¿Necesito bibliotecas adicionales para esto?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

CUDNN tiene funcionalidad para acelerar específicamente las capas LSTM y GRU. Estas capas GRU/LSTM solo se pueden acelerar si cumplen ciertos criterios. En tu caso el problema es que estás usando la activación de LeakyReLU. La aceleración CUDNN LSTM solo funciona si la activación es tanh.

Citando de la documentación ( https://www.tensorflow.org/api_docs/python/tf/keras/layers/LSTM )

 The requirements to use the cuDNN implementation are: activation == tanh recurrent_activation == sigmoid recurrent_dropout == 0 unroll is False use_bias is True Inputs, if use masking, are strictly right-padded. Eager execution is enabled in the outermost context.

Su LSTM aún debería ejecutarse en la gpu, pero se construirá utilizando operaciones de escaneo y matmul y, por lo tanto, será mucho más lento. Desde mi experiencia, la aceleración CUDNN LSTM/GRU funciona tan bien que ambas capas se ejecutan más rápido que la capa SimpleRNN (que no es acelerada por CUDNN) a pesar de que esta capa es mucho más simple.

over 4 years ago · Santiago Trujillo Denunciar

0

Esto es lo que Francois Chollet, creador de la biblioteca keras, principal contribuyente del marco tensorflow, dijo sobre el rendimiento del tiempo de ejecución de RNN en su libro Deep Learning with Python 2nd edition

Los modelos recurrentes con muy pocos parámetros, como los de este capítulo, tienden a ser significativamente más rápidos en una CPU multinúcleo que en una GPU, porque solo involucran pequeñas multiplicaciones de matriz, y la cadena de multiplicaciones no es bien paralelizable debido a la presencia de un en bucle. Pero los RNN más grandes pueden beneficiarse enormemente de un tiempo de ejecución de GPU.

Al usar una capa Keras LSTM o GRU en GPU con argumentos de palabras clave predeterminados, su capa aprovechará un kernel cuDNN, una implementación del algoritmo subyacente altamente optimizada y de bajo nivel proporcionada por NVIDIA. Como de costumbre, los núcleos cuDNN son una bendición a medias: son rápidos, pero inflexibles; si intenta hacer algo que no es compatible con el núcleo predeterminado, sufrirá una desaceleración dramática, lo que más o menos lo obligará a apegarse a lo que hace. NVIDIA pasa a proporcionar. Por ejemplo, los kernels LSTM y GRU cuDNN no admiten el abandono recurrente, por lo que agregarlo a sus capas obliga al tiempo de ejecución a recurrir a la implementación normal de TensorFlow, que generalmente es de dos a cinco veces más lenta en GPU (aunque su procesamiento el costo es el mismo).

Como una forma de acelerar su capa RNN cuando no puede usar cuDNN, puede intentar desenrollarlo. Desenrollar un bucle for consiste en eliminar el bucle y simplemente insertar su contenido N veces. En el caso del bucle for de un RNN, el desenrollado puede ayudar a TensorFlow a optimizar el gráfico de cálculo subyacente. Sin embargo, también aumentará considerablemente el consumo de memoria de su RNN; como tal, solo es viable para secuencias relativamente pequeñas (alrededor de 100 pasos o menos). Además, tenga en cuenta que solo puede hacer esto si el modelo conoce de antemano la cantidad de pasos de tiempo en los datos (es decir, si pasa una forma sin ninguna entrada de Ninguno a su Entrada() inicial). Funciona así:

 inputs = keras.Input(shape=(sequence_length, num_features)) x = layers.LSTM(32, recurrent_dropout=0.2, unroll=True)(inputs)
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda