Perfila tu modelo en VMs de Cloud TPU
La creación de perfiles te permite optimizar el rendimiento del entrenamiento de tu modelo en Cloud TPU. Debes usar TensorBoard y la Complemento de Cloud TPU TensorBoard para generar perfiles de tu modelo.
Para obtener más información sobre cómo usar TensorBoard con uno de los frameworks compatibles, consulta los siguientes documentos:
Requisitos previos para generar perfiles de una secuencia de comandos de entrenamiento
Antes de usar las herramientas de perfilado de TPU, debes hacer lo siguiente:
Inicia una sesión de entrenamiento de modelos
- Configura una TPU v4-8 para entrenar un modelo. El procedimiento de generación de perfiles que se describe en este documento usa un modelo ResNet, pero puedes usar otro modelo, siempre y cuando se entrene en una TPU v4.
En la VM de TPU, agrega una línea para iniciar el servidor del generador de perfiles a la secuencia de comandos de entrenamiento.
Para el entrenamiento de ResNET, la secuencia de comandos de entrenamiento se encuentra en la siguiente ubicación:
/usr/share/tpu/tensorflow/resnet50_keras/resnet50.py
.Inserta las líneas resaltadas en resnet50.py. En la parte superior del archivo, agrega la siguiente importación:
import tensorflow.compat.v2 as tf2
Justo antes de que las secuencias de comandos inicien el bucle de entrenamiento, agrega el línea destacada:
if name == 'main': tf.logging.set_verbosity(tf.logging.INFO) tf2.profiler.experimental.server.start(6000) app.run(main)
El servidor del generador de perfiles de TensorFlow se inicia en la VM de TPU cuando ejecutar la secuencia de comandos.
Comienza el entrenamiento de modelos.
Ejecuta la secuencia de comandos de entrenamiento y espera hasta que veas un resultado que indique que tu modelo se está entrenando de forma activa. El resultado depende en tu código y modelo. Busca un resultado como
Epoch 1/100
. Como alternativa, puedes navegar a la página de Cloud TPU en la consola de Google Cloud, seleccionar tu TPU y ver el gráfico de utilización de la CPU. Si bien el gráfico de uso de la CPU no muestra el uso de la TPU, es una buena indicación de que la TPU está entrenando tu modelo.
Comienza a generar perfiles del entrenamiento de modelos
Cuando se esté entrenando el modelo, abre otra ventana de la terminal o Cloud Shell. Sigue estos pasos para comenzar a generar perfiles del entrenamiento de modelos.
En la ventana o shell nueva, conéctate a la VM de TPU con redirección de puertos.
gcloud compute tpus tpu-vm ssh your-vm --zone=us-central2-b --ssh-flag="-4 -L 9001:localhost:9001"
La redirección de puertos permite que el navegador local se comunique con TensorBoard que se ejecuta en la VM de TPU.
Instala los requisitos de TensorFlow.
Tu VM de TPU tiene TensorBoard instalado de forma predeterminada. Tú también puedes instalar TensorFlow de forma manual. De cualquier manera, es posible que se requieran algunas dependencias adicionales. Ejecuta el siguiente comando para instalar estas dependencias en tu VM de TPU:
pip3 install -r /usr/share/tpu/models/official/requirements.txt
Instala el complemento de Cloud TPU TensorBoard.
Desde la VM de TPU, ejecuta los siguientes comandos:
pip3 install --upgrade "cloud-tpu-profiler>=2.3.0" pip3 install tensorflow pip3 install tensorboard_plugin_profile
Inicia el servidor de TensorBoard
Ejecuta TensorBoard y crea un directorio de registros (
logdir
) en la VM de TPU, en la que TensorBoard puede escribir datos de creación de perfiles. Especifica el directorio de registro con la marca--logdir
. Por ejemplo:mkdir log-directory TPU_LOAD_LIBRARY=0 tensorboard --logdir log-directory --port 9001
TensorBoard inicia un servidor web y muestra su URL:
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all TensorBoard 2.3.0 at http://localhost:9001 (Press CTRL+C to quit)
Abre un navegador web y ve a la URL que se muestra en el resultado de TensorBoard. Selecciona Perfil en el menú desplegable de la parte superior derecha de la página de TensorBoard. La lista de herramientas de generación de perfiles disponibles se muestra en el menú desplegable tools de la barra lateral izquierda.
Captura un perfil en VMs de TPU
- Selecciona el botón CAPTURE PROFILE.
- Selecciona el botón de selección Dirección IP.
- Escribe HOSTNAME:6000 en el campo
Profile Service URL
. - Selecciona el botón CAPTURAR.
Ver datos de perfil con TensorBoard
Después de capturar un perfil, TensorBoard muestra la página overview_page. En el panel izquierdo, se muestra la lista de herramientas de generación de perfiles que puedes usar.
Perfil
La pestaña Perfil se muestra después de que hayas capturado algunos datos del modelo. Es posible que debas hacer clic en el botón de actualización en la página de TensorBoard. Una vez que los datos están disponibles, si haces clic en la pestaña Perfil, se mostrará una selección de herramientas que te ayudarán a analizar el rendimiento. Puedes usa cualquiera de las siguientes herramientas para generar perfiles de tu modelo.
- Página de descripción general
- Analizador de canalización de entrada
- Perfil de operaciones de XLA
- Lector de seguimiento (solo en el navegador Chrome)
- Visualizador de memoria
Página de descripción general del perfil
La página de resumen (overview_page), disponible en la página Perfil, proporciona la siguiente información: vista de nivel superior del rendimiento de tu modelo durante una ejecución de captura. La página te muestra una descripción general agregada de todas tus TPU y un el análisis de canalización de entrada. Hay una opción para seleccionar TPU individuales en el menú desplegable Host.
En la página, se muestran los datos en los siguientes paneles:
Resumen de rendimiento (Performance summary)
- Uso de FLOPS: el porcentaje de uso de las unidades de la matriz de TPU
Las diez operaciones principales de TensorFlow en TPU Muestra las operaciones de TensorFlow que consumieron más tiempo:
Cada fila muestra el tiempo propio de una operación (el porcentaje de tiempo que se tardó en completar todas las operaciones), el tiempo acumulativo, la categoría, el nombre y la frecuencia de FLOPS que se alcanzó.
Entorno de ejecución (Run environment)
- La cantidad de hosts usados
- El tipo de TPU utilizado
- La cantidad de núcleos de TPU
Analizador de canalización de entrada
El analizador de la canalización de entrada proporciona información detallada acerca de tus resultados de rendimiento. La herramienta indica inmediatamente si tu programa está vinculado a la entrada y puede a través del análisis del dispositivo y del host para depurar cualquier etapa del y tu canalización crea cuellos de botella.
Consulta la guía sobre el rendimiento de la canalización de entrada para obtener más información acerca de la optimización del rendimiento de la canalización.
Canalización de entrada
Cuando un programa de TensorFlow lee datos de un archivo, el proceso de lectura se divide en y varias etapas de procesamiento de datos conectadas en serie. El resultado de uno es la entrada a la siguiente. Este sistema de lectura se denomina canalización de entrada.
Una canalización típica para leer registros de archivos tiene las siguientes etapas:
- Lectura de archivos
- Procesamiento previo de archivos (opcional)
- Transferencia de archivos desde la máquina host hasta el dispositivo
Una canalización de entrada ineficiente puede ralentizar tu aplicación considerablemente. Una aplicación se considera vinculada a la entrada cuando ocupa una parte significativa del tiempo en la canalización de entrada. Usa el Analizador de canalización de entrada para comprender en qué puntos esta es ineficiente.
Panel de canalización de entrada
Para abrir el analizador de la canalización de entrada, selecciona Perfil y, luego, input_pipeline_analyzer del menú desplegable Herramientas.
El panel muestra los detalles del análisis del lado del dispositivo y del host.
Análisis del lado del dispositivo: Muestra detalles sobre los tiempos de paso del dispositivo.
- Estadísticas de tiempo de paso del dispositivo
- % del tiempo de paso del dispositivo que espera datos de entrada
Análisis del lado del host
En esta sección, se muestran los detalles del análisis del lado del host divididos en varias categorías:
- Ubicación de datos en cola para transferirlos al dispositivo (Enqueuing data to be transferred to device). El tiempo dedicado a ubicar datos en una cola de entrada antes de transferirlos al dispositivo.
- Procesamiento previo de datos: El tiempo dedicado a las operaciones de procesamiento previo, como las imágenes descompresión.
- Reading data from files in advance (Lectura de datos a partir de archivos con anticipación): Es el tiempo dedicado a leer archivos, incluidos el almacenamiento en caché, la recuperación previa y la intercalación.
- Reading data from files on demand (Lectura de datos a partir de archivos según demanda): Es el tiempo dedicado a leer datos de archivos sin contar el almacenamiento en caché, la recuperación previa ni la intercalación.
- Otras operaciones de lectura o procesamiento de datos El tiempo dedicado a otras operaciones relacionadas con entradas
no están usando
tf.data
.
Para ver las estadísticas de las operaciones de entrada individuales y sus categorías desglosadas por tiempo de ejecución, expande la sección Show Input Op statistics
.
Aparecerá una tabla de datos de origen como la que se muestra a continuación:
Cada entrada de la tabla contiene la siguiente información:
- Input Op (Operación de entrada): Muestra el nombre de la operación de entrada en TensorFlow.
- Recuento Muestra la cantidad total de instancias de la operación ejecutada durante el período de generación de perfiles.
- Tiempo total (en ms): Muestra la suma acumulativa de tiempo dedicado a cada uno de las instancias de la operación.
- Porcentaje de tiempo total Muestra el tiempo total dedicado a una operación como una fracción de el tiempo total dedicado al procesamiento de entrada.
- Tiempo propio total (en ms): Muestra el tiempo acumulado
sobre todas las instancias de la función. El tiempo propio mide el tiempo empleado dentro del cuerpo de la función, sin contar el tiempo dedicado a las funciones a las que llama.
Por ejemplo,
Iterator::PaddedBatch::Filter
llama aIterator::PaddedBatch::Filter::ForeverRepeat::Map
, por lo que su tiempo propio total se excluye del tiempo propio total de este último. - Porcentaje de tiempo propio total Muestra el tiempo propio total como una fracción del total. de tiempo dedicado al procesamiento de entrada.
- Categoría: Muestra la categoría de procesamiento de la operación de entrada.
Perfil de operaciones
El perfil de operaciones es una herramienta de Cloud TPU que muestra las estadísticas de rendimiento de las operaciones de XLA que se ejecutaron durante un período de perfilado. El perfil de la operación muestra lo siguiente:
- Qué tan bien tu aplicación usa Cloud TPU, lo que se expresa como el porcentaje de tiempo empleado en las operaciones por categoría y la utilización de los FLOPS de TPU.
- Las operaciones que más tiempo consumieron. Estas operaciones son objetivos de optimización potenciales.
- Detalles de las operaciones individuales, incluidas la forma, el relleno y las expresiones que usan la operación.
Puedes usar el perfil de operaciones para encontrar objetivos de optimización. Por ejemplo, puedes usar el perfil de operaciones para identificar las operaciones de XLA que tardan más tiempo en ejecutarse y cuántos FLOPS de TPU consumen.
Usa el perfil de operaciones
La herramienta Op Profile contiene estadísticas de rendimiento de las operaciones de XLA. Para ver los datos del perfil de operaciones en TensorBoard, haz clic en la pestaña Profile en la parte superior de la pantalla y, luego, selecciona op_profile en el menú desplegable Tools. Verás una pantalla como la que se muestra a continuación:
- Sección Descripción general: Muestra la utilización de Cloud TPU y proporciona sugerencias para la optimización.
- Panel de control: Contiene controles que te permiten establecer la cantidad de operaciones que se muestran en la tabla, qué operaciones se muestran y cómo se ordenan.
- Tabla de operaciones: Muestra una lista de las operaciones principales de TensorFlow categorías asociadas con las operaciones de XLA. Estas operaciones se ordenan por el porcentaje de uso de Cloud TPU.
- Tarjetas de detalles de la operación Muestran detalles sobre las operaciones que aparecen cuando señalas una operación en la tabla. Estos detalles incluyen la utilización de FLOPS, la expresión en la que se usa la operación y el diseño (ajuste) de la operación.
Tabla de operaciones de XLA
La tabla de operaciones muestra las categorías de operaciones de XLA ordenadas de mayor a menor el porcentaje de uso de Cloud TPU. La tabla muestra el porcentaje de tiempo empleado, el nombre de la categoría de la operación, el nombre de la operación de TensorFlow asociada y el porcentaje de uso de FLOPS de la categoría. Para mostrar (o para ocultar) las diez operaciones de XLA que más tiempo consumen en una categoría, haz clic en el junto al nombre de la categoría en la tabla.
- Tiempo: Muestra el porcentaje total de tiempo empleado por todas las operaciones de la categoría. Puedes hacer clic para expandir la entrada y ver un desglose del tiempo empleado por cada operación individual.
- Top ten Ops: Es el botón de activación junto al nombre de una categoría que muestra o oculta las diez operaciones que más tiempo consumieron en la categoría. Si una operación de fusión se muestra una entrada de la lista de operaciones, puedes expandirla para ver operaciones inteligentes de no fusión que contiene.
- Operación de TensorFlow (TensorFlow Op). Muestra el nombre de la operación de TensorFlow asociada a la operación de XLA.
- FLOPS Muestra el uso de FLOPS, es decir, la cantidad de FLOPS medida expresada como un porcentaje de los FLOPS máximos de Cloud TPU. Cuanto más alto sea el porcentaje de uso de FLOPS, más rápido se ejecutarán las operaciones. La celda de la tabla responde a un código de colores: el verde significa uso alto de FLOPS (deseado) y el rojo significa uso bajo de FLOPS (no deseado).
Tarjetas de detalles de la operación
Cuando seleccionas una entrada de la tabla, aparece una tarjeta que muestra detalles sobre la operación de XLA o la categoría de operación. Una tarjeta típica luce como se muestra a continuación:
- Nombre y Categoría: Muestra el nombre y la categoría de la operación de XLA destacada.
- Uso de FLOPS: Muestra el uso de FLOPS como un porcentaje del total de FLOPS posible.
- Expresión: Muestra la expresión de XLA que contiene la operación.
- Uso de memoria: Muestra el porcentaje de uso máximo de memoria de tu programa.
- Layout (Solo para operaciones convolucionales) Muestra la forma y el diseño de un tensor, incluidas las siguientes opciones: una descripción de cualquier relleno realizado por el compilador de XLA.
Interpreta los resultados
En el caso de las operaciones convolucionales, la baja utilización de FLOPS de TPU puede deberse a uno de los siguientes motivos, o ambos:
- relleno (uso parcial de las unidades de la matriz)
- la operación de convolución depende de la memoria
En esta sección, se interpretan algunas métricas de rendimiento de un modelo con baja utilización de FLOP. En este ejemplo, fusión de salida y convolución. predominó en el tiempo de ejecución. Hubo muchas operaciones vectoriales o escalares que tenían un bajo uso de FLOP.
Una estrategia de optimización para este tipo de perfil podría ser transformar las operaciones de vector o escalares en operaciones convolucionales.
En el siguiente ejemplo, %convolution.399 muestra menos FLOPS y uso de memoria que %convolution.340 en el ejemplo anterior.
En este ejemplo, el tamaño del lote se rellena a 128 y el tamaño del atributo se rellenará a 8. En este caso, solo se usa de manera efectiva el 5% de las unidades de la matriz. El uso se calcula de la siguiente manera: (((batch_time * num_of_features) / padding_size ) / num_of_cores). Compara los FLOPS de este ejemplo con %convolution.340 del ejemplo anterior, que no usa padding.
Lector de seguimiento
El lector de seguimiento es una herramienta de análisis del rendimiento de Cloud TPU disponible en la página Perfil. La herramienta usa el visualizador de perfilado de eventos de seguimiento de Chrome, por lo que solo funciona en el navegador Chrome.
El lector de seguimiento muestra un cronograma que presenta la siguiente información:
- Duración de las operaciones que ejecutó tu modelo de TensorFlow.
- La parte del sistema (máquina host o TPU) que ejecutó una operación. Por lo general, la máquina host ejecuta operaciones de entrada, mientras realiza el procesamiento previo de los datos de entrenamiento y los transfiere a la TPU, a la vez que la TPU ejecuta el entrenamiento del modelo real.
El lector de seguimiento te permite identificar problemas de rendimiento en tu modelo. tomar medidas para resolverlos. Por ejemplo, en un nivel alto, puedes identificar si es la entrada o el entrenamiento del modelo lo que ocupa la mayor parte del tiempo. Extracción puedes identificar qué operaciones de TensorFlow están quitando de mayor duración.
El lector de seguimiento tiene un límite de 1 millón de eventos por cada Cloud TPU. Si necesitas evaluar más eventos, usa el lector de seguimiento de transmisión en su lugar.
Interfaz del lector de seguimiento
Para abrir el lector de seguimiento, ve a TensorBoard, haz clic en la pestaña Profile en la parte superior de la pantalla y elige trace_viewer en el menú desplegable Tools. Aparece el lector y muestra tu ejecución más reciente:
Esta pantalla contiene los siguientes elementos principales (marcados con números en el captura de pantalla anterior):
- Menú desplegable Runs: Contiene todas las ejecuciones para las que capturaste información de seguimiento. La vista predeterminada es tu carrera más reciente, pero puedes abrir el menú desplegable para seleccionar otra carrera.
- Menú desplegable Tools: Selecciona diferentes herramientas de perfilado.
- Menú desplegable de host: Selecciona un host que contenga un conjunto de Cloud TPU.
- Panel de cronograma: Muestra las operaciones que Cloud TPU y ejecutada con el tiempo.
- Panel de detalles: Muestra información adicional sobre las operaciones seleccionadas en el panel de cronograma.
Aquí puedes ver el panel de cronograma con más detalle:
El panel de cronograma contiene los siguientes elementos:
- Barra superior: Contiene varios controles auxiliares.
- Eje de tiempo: Muestra el tiempo en relación con el comienzo del seguimiento.
- Etiquetas de secciones y segmentos Cada sección contiene varias pistas y tiene un triángulo a la izquierda en el que puedes hacer clic para expandir y contraer la sección. Hay una sección para cada elemento de procesamiento del sistema.
- Selector de herramientas: Contiene varias herramientas para interactuar con el lector de seguimiento.
- Eventos Muestra la hora en la que se ejecutó una operación o la duración de los metaeventos, como los pasos de entrenamiento.
- Barra de pestaña vertical: Esta barra no es útil en Cloud TPU. La barra forma parte de la herramienta de visualización de seguimiento de uso general que proporciona Chrome que se usa para diversas tareas de análisis de rendimiento.
Secciones y pistas
El lector de seguimiento contiene las siguientes secciones:
- Una sección para cada nodo TPU, etiquetada con el número del chip TPU
y el núcleo de TPU dentro del chip (por ejemplo, "Chip 2: TPU Core 1"). Cada sección de nodo TPU contiene los siguientes puntos:
- Paso: Muestra la duración de los pasos de entrenamiento que se completaron que se ejecuta en la TPU.
- TensorFlow Ops Muestra las operaciones de TensorFlow ejecutadas en la TPU.
- XLA Ops muestra XLA las operaciones que se ejecutan en la TPU. (Cada operación se traduce en una o varias operaciones de XLA. El compilador de XLA traduce las operaciones de XLA en un código que se ejecuta en la TPU).
- Una sección para los subprocesos que se ejecutan en la CPU del host con la etiqueta “Subprocesos del host”. La sección contiene una pista por cada subproceso de CPU. Nota: Puedes ignorar la información que se muestra junto con las etiquetas de las secciones.
Selector de herramientas de cronograma
Puedes interactuar con la vista de cronograma mediante el selector de herramientas de cronograma en TensorBoard. Haz clic en una herramienta de cronograma para activarla y destacarla. A fin de mover el selector de herramientas de cronograma, haz clic en el área con puntos ubicada en la parte superior y, luego, arrastra el selector hacia donde quieras ubicarlo.
Usa las herramientas de cronograma como se indica a continuación:
Herramienta de selección Haz clic en un evento para seleccionarlo o arrástralo para seleccionar varios eventos. Se mostrará información adicional acerca de los eventos seleccionados (nombre, hora de inicio y duración) en el panel de detalles. |
|
Herramienta de desplazamiento lateral Arrastra para desplazar la vista del cronograma de forma horizontal y vertical. |
|
Herramienta de zoom Arrastra hacia arriba para acercar o arrastra hacia abajo si quieres alejar a lo largo del eje horizontal (tiempo). La posición horizontal del cursor del mouse determina el centro alrededor del cual se aplica el zoom. Nota: Si la herramienta de zoom permanece activa después de que sueltas el botón del mouse, haz clic en la vista de cronograma para desactivar la herramienta de zoom. |
|
Herramienta de sincronización Arrastra de forma horizontal para marcar un intervalo de tiempo. La duración del intervalo aparece en el eje de tiempo. Para ajustar el intervalo, arrastra sus extremos. A fin de borrar el intervalo, haz clic en cualquier punto dentro de la vista de cronograma. Si seleccionas otra herramienta, el intervalo permanecerá marcado. |
Lector de memoria
El visor de memoria te permite visualizar el pico de uso de memoria y las tendencias de uso de memoria de tu programa.
La interfaz de usuario del lector de memoria se ve de la siguiente manera:
- Menú desplegable de Host Selecciona un host de TPU y el Optimizador de alto nivel de XLA (HLO) de Kubernetes para visualizar.
- Descripción general de la memoria: Muestra la asignación de memoria máxima y el tamaño sin rellenar.
- Gráfico de espacio de trabajo: Muestra el pico de uso de memoria y el trazado de las tendencias de uso de memoria de tu programa. Coloca el cursor sobre un búfer en uno de los gráficos de búferes para mostrar información adicional en la tarjeta de asignación de búfer.
- Gráficos de búferes: Son dos gráficos que muestran la asignación de búferes en el momento de uso de memoria máximo. Apunta a un búfer en uno de los gráficos de búferes para mostrar datos adicionales información en la tarjeta de detalles del búfer.
- Tarjeta de detalles de asignación de búfer Muestra los detalles de asignación de un búfer.
Panel de descripción general del uso de la memoria
El panel de descripción del uso de la memoria (panel superior) muestra el nombre del módulo y la asignación de memoria máxima establecida cuando el tamaño total de la asignación de búfer alcanza el máximo. También se muestra el tamaño de la asignación máxima sin rellenar a los efectos de la comparación.
Gráfico del espacio de trabajo
Este gráfico muestra el pico de uso de memoria y el trazado de las tendencias de uso de memoria de tu programa. La línea vertical indica el uso máximo de memoria para el programa. Esta muestra si tu programa puede caber en el espacio de memoria global disponible.
Cada punto del gráfico representa un "punto del programa" en el programa de HLO de XLA. La línea muestra cómo cambia el uso de memoria de tu programa con el tiempo.
Interacción con los elementos del gráfico de búferes
Cuando apuntas a un búfer en un gráfico de búferes, línea que muestra la vida útil del búfer en el gráfico del espacio de trabajo.
El grosor de la línea horizontal indica el tamaño del búfer en relación con el pico de asignación de memoria. La longitud de la línea indica la vida útil del búfer.
Gráficos de búferes
Existen dos gráficos que muestran el desglose del uso de memoria en el punto de uso máximo.
Por orden del programa: Muestra los búferes de izquierda a derecha en el orden en que estuvieron activos durante la ejecución del programa.
By Size Muestra los búferes que estaban activos durante la ejecución del programa. en orden de tamaño decreciente.
Tarjeta de detalles de asignación de búfer
Cuando señalas un búfer que se muestra en uno de los gráficos de búferes, aparece una tarjeta de detalles de asignación de búfer. Una tarjeta de detalles típica luce como se muestra a continuación:
- Nombre: Es el nombre de la operación de XLA.
- Categoría: Es la categoría de la operación.
- Tamaño: Es el tamaño de la asignación del búfer (incluido el relleno).
- Unpadding size (tamaño sin padding): El tamaño de la asignación del búfer sin relleno.
- Expansión: Es la magnitud relativa del tamaño del búfer relleno en comparación con el tamaño sin rellenar.
- Memoria adicional: Indica cuánta memoria adicional se usa para rellenar.
- Forma: Describe la clasificación, el tamaño y el tipo de datos de la dimensión n. .
- Nombre de la operación de TensorFlow: Muestra el nombre de la operación de TensorFlow asociada con la asignación del búfer.
- Allocation type: Indica la categoría de asignación de búfer: Parámetro, Salida, Local del subproceso y Temporal (por ejemplo, búfer asignación en una fusión).
Errores por falta de memoria
Si ejecutas un modelo y obtienes un “falta de memoria” usa los lineamientos de esta documento para capturar un perfil. Espera a que la secuencia de comandos entrene el modelo antes de iniciar el generador de perfiles. El resultado de la generación de perfiles puede ayudarte a comprender causó el error.