Pregunta de entrevista para Ingeniero de machine learning

Tu entrenamiento se cae con un error de memoria agotada en CUDA. Cuéntame qué compruebas.

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

Recorre los consumidores de memoria en orden: tamaño de batch y longitud de secuencia, activaciones retenidas para el pase hacia atrás, estado del optimizador, y fragmentación por formas variables. Los arreglos rápidos son un batch más pequeño con acumulación de gradiente para conservar el batch efectivo, checkpointing de gradientes, bf16 y un optimizador eficiente en memoria. Comprueba también que no estés acumulando tensores que todavía arrastran un grafo de cómputo.

Por qué lo preguntan los entrevistadores

Esto es la realidad diaria de cualquiera que entrene modelos, así que el entrevistador busca un método sistemático y no un cambio aleatorio de flags. El detalle que identifica experiencia es saber que las activaciones suelen dominar más que los pesos, más el bug clásico de añadir un tensor de pérdida a una lista en cada paso, que retiene el grafo entero y fuga memoria entre iteraciones.

Cómo estructurar tu respuesta

  • Enumera los consumidores de memoria en orden aproximado de tamaño.
  • Distingue un problema de capacidad de una fuga que crece con los pasos.
  • Da los arreglos baratos: acumulación, checkpointing, bf16.
  • Nombra el bug del grafo retenido y cómo lo detectas.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

Lo primero que compruebo es si muere de inmediato o tras unos cientos de pasos, porque son bugs distintos. Inmediato es un problema de capacidad, creciente es una fuga. Para la capacidad desgloso qué hay realmente residente: pesos, gradientes, estado del optimizador (con Adam eso son dos copias extra) y activaciones guardadas para el pase hacia atrás. En un transformer las activaciones suelen dominar, y escalan con el tamaño de batch por la longitud de secuencia, así que esos son los primeros mandos. Bajo el batch y uso acumulación de gradiente para mantener idéntico el batch efectivo, lo que cuesta tiempo de reloj pero nada más. Luego checkpointing de gradientes, que recalcula las activaciones durante el pase hacia atrás y cambia alrededor de un treinta por ciento de cómputo extra por un ahorro grande de memoria. bf16 reduce a la mitad el tamaño de las activaciones encima de eso. Si crece con los pasos, algo está reteniendo un grafo. El clásico es añadir el tensor de pérdida en crudo a una lista para loguear, lo que mantiene vivo el grafo de cómputo de cada paso, y el arreglo es llamar a item sobre él. Lo confirmo imprimiendo la memoria asignada y la reservada cada cien pasos, porque una escalera limpia hacia arriba es la pista.

¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.

Mira cómo funciona

Preguntas de seguimiento que puedes esperar

  • ¿Cuál es la diferencia entre memoria asignada y reservada en el asignador?
  • ¿Cómo ocurre la fragmentación de memoria con entradas de longitud variable?
  • ¿Cuándo usarías descarga a CPU en vez de reducir el batch?

Más preguntas para Ingeniero de machine learning

Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.

Predecir mis preguntas

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot