El CUDA CAMA depuración de hardware

hace Hutchison

Como todos sabemos, es un pequeño Yao Xi PNL hacen poco lindo.

Aunque la capa de DL marco entender el punto de conocimiento, entender el punto de CUDA y abajo, pero lo hago algoritmos bueno, por lo general depurar rara vez encuentro profundidad de errores de aprendizaje capa de marco (la última vez fue hace tres años a cielo pytorch), pero nunca encontrado con una capa de hardware CUDA de insectos y capa uniforme. Hasta que un día ....

 

v2-bb5d59066d3e1dd5e0a35b2ab55ee4ab_b.jpg

Este error revolucionó mi pensamiento de depuración, a partir de este error, ya no pienso en hacer algoritmos aritméticos hacen un buen trabajo muy bien.

Escena de la reducción de accidentes

En ese momento el fondo está presente, por lo general depurar en un código de servidor GPU 8 tarjeta, este servidor rara vez se utilizará la tarjeta de 8 completa está llena, después de todo, esta máquina sólo se utiliza para depurar el código que tendrá que ejecutar el tipo de bien 8 tarjeta de unos pocos días de entrenamiento misión, entonces, ciertamente, que se presenta a la agrupación, de lo contrario si cuenta para todos los ocho cartas, y que ninguna ley de depuración sí mismos ya otros en adelante.

 

v2-e0c4d0041981113c74f5cf381ed6672f_b.jpg

En ese momento coincidió con la fecha límite para reunirse, 0-5 tarjetas han tenido en cuenta otras máquinas frotan un socio pequeño, la tarjeta puede ser utilizada solamente 6,7. Por lo que utiliza dos tarjetas para depurar el código, la formación y la previsión son multi-tarjeta paralelo, de modo de depuración cuando estos dos se utilizan simultáneamente.

Los resultados obtenidos después de la nueva idea, corrió un poco y encontraron un paso no terminó colgó, y toda la información que el error es de dos palabras:

        $ bash run.sh
segmentation fault
      

? ? ? Escribo todo el código Python Sí, no estoy haciendo lo que la PNL, cómo salir de error de segmentos de segmentación de? ? Como todos sabemos, los errores son muy irritante error al escribir código C ++

Una búsqueda muy útil

 

v2-78f4ae7734481cd84676f378b1d41624_b.jpg

Efectivamente, sus propios puestos de gran problema ╮ (╯ ▽ ╰) ╭

Aunque, incluso la posición de los códigos de error no cuelgue de impresión; si bien, desde la alquimia encontró por primera vez este error. Pero! Es! Aún así superar las tormentas visto este bebé!

 

 

v2-d979300e0d3e56b491f49b6ed8294089_b.jpg

las palabras clave más restricciones adicionales para obligar a Google un poco y encontraron una posible causa del error es todavía demasiado muchos tipos de código es probable que encuentre. Olvídalo, esta depuración no está orientada a Google, es el momento de mostrar la tecnología de verdad!

En primer lugar, ver la figura cálculo se compila antes o durante o tiempo de ejecución vinculado.

[omitidas decenas descanso para comer de operación de inserción enojado]

Así que encontrar la manera de diagrama de depuración de computación se puede establecer sin problemas, pero para completar la tabla de cálculo compilado en el marco del aprendizaje profundo, a partir de cálculos de tiempo de ejecución cuando se colgó. emmmm, lo que explica. . .

Realmente es el peor de los casos wow! !

Basado en el mapa estático del DL miedo a problemas de tiempo de ejecución, muchos socios pequeños pueden no estar claro cómo el tiempo de ejecución de depuración, por lo que han sentido pytorch muy fragante. De hecho, para la inmensa mayoría de los errores, la imagen estática de depuración es muy bien, y el secreto es muy simple, que se inserta en la depuración op Ituri.

Al igual que tensorflow, marco de aprendizaje profundidad paddlepaddle que los apoyos mapa estático, son un gran número de OP de depuración, el más utilizado es el OP de impresión (tensorflow en tf.Print / tf.print, paleta en layers.Print), lo que puede impresión figura en cualquier posición cálculo de un valor Tensor arbitraria variable / tiempo de ejecución cuando se ejecuta esta posición, por supuesto, también ser utilizado con op forma (TF en tf.shape, paddle layers.shape en) imprime Tensor como tiempo de ejecución de forma información. Además de imprimir op, así como la aserción OP , ES OP , etc., para garantizar un funcionamiento correcto, depurar asistida de OP, es decir, pitón en algunas palabras clave y las llamadas de función a común de depuración, de hecho, una visión estática de madurar lata marco básico encontrar el correspondiente op. Después de la asignación familiar entre un mapa de depuración estática ellos no serán demasiado exigentes.

 

v2-3c760bd8a1f91dd9aaeb06aa3d270e56_b.jpg

Pero! Es! Hay dos casos están siendo problemático, uno es el cálculo del mapa se ha establecido plenamente, pero la primera op aún cuando fue a colgar (esta vez no está completamente insertada op depuración se ejecuta a); hay una reenviar finalizar la jugada, pero colgó cuando se calcula el gradiente (esta vez los errores pueden ocurrir en cualquier lugar en todo el mapa, ni siquiera en Ituri). Cuando se superponen a continuación en un problema de la tarjeta multi-máquina, que es la situación más miserable.

Por desgracia, me encontré con (. ︿).

En primer lugar, como se ha descrito anteriormente, la presente calma bebé se inserta una pila en el cálculo de la figura de impresión nodos, y luego el anterior se encontró que era resultado del cálculo aparentemente muy correcto, un error de posicionamiento se produce fácilmente en tiempo de ejecución gradiente inverso calculado del tiempo, es

        
          optimizer
          .
          optimize
          ()
        
      

Olvídalo, no es la primera vez que cuelgue aquí, el mensaje de error parece que no puede ofrecer mucha orientación (dada la información, hay alguna información de clase caminos, sensible no publicado fuera). Varios más de depuración op antes de la inserción para verificar la corrección de la trayectoria

[Benton omite aquí aún más el funcionamiento de interpolación de la OP]

Como resultado, nunca pensó que, después de insertar el op de depuración, y así el primer paso final, esta vez colgando en un segundo paso!

???

depuración eficacia op también fuerza de la vida continua? ? ?

Me! no! Carta! Por lo que la depuración se op tanto comentada, vuelva a ejecutar!

Como resultado,

Y colgado en el primer paso! ! !

 

v2-19921318900985cc2963c451d85a7aed_b.jpg

Estaba duro que pellizcarme, esto debe ser en especial maullido usted un sueño tan absurda!

Así que no pensaba que la realidad es más absurdo que un sueño en realidad. Repito la carrera una gran cantidad de buenos momentos y no encontró tiempo para op inserción de depuración realmente es siempre el primer paso se colgará. Así que puse este fenómeno chocante para decir a todos, a continuación, por supuesto, todo el mundo pensó que estaba loco.

Pequeño tarde: "Ha venido a mí personalmente demostrar otra vez !!"

Pequeño tarde: "No mirando inserción op depuración cuando el primer paso en el segmento reportado falla par de errores de ~!"

Usted: "Oh."

Pequeño tarde: "Entonces optimista Oh, me puso aquí op depuración se enchufado, y, corre!"

Eh eh eh? ? ? ¿Cómo fue el primer paso colgó, su cara estaba loco ( 'Д`)

Todo el mundo: pequeña noche si cansado para dormir un rato, no demasiado cansado, y todo el mundo Clear ╮ (╯ ▽ ╰) ╭

Entrenado, capacitado, entrenado, ¿cómo será (. ︿).

Olvídalo, esto no se enreda. Volver a depurar en sí, emmm, antes de decir que el acabado normal, siempre colgando en fase inversa, a continuación, explicar dónde enterrar ya sea antes de un hoyo se vio obligado temporalmente a calcular, pero el gradiente de este nodo en realidad no se puede calcular de; o puede ser optimizador sí mismo insecto.

 

v2-f1f3c3767b06f362c0be7f570e0afafc_b.jpg

Así que primero barrer de nuevo el código, no utilice ni será echado muy extraño tipo de datos y no utilizar algunos muy extraño op, el primer caso se puede descartar. Debe ser la última para arriba! El optimizador utiliza el hecho de que Adam, nada cambia, entonces el problema es sin duda una ventaja en su nueva combinación de gradiente multi-tarjeta con esto!

Así carrera decisiva en un código de 6 bits para una sola tarjeta de la tarjeta, es realmente la formación normal! Sí, me noche muy Formoe, pronto se descubrió un error asesino tan excitado.

Continúe! Volver atrás y comprobar la tarjeta un poco más de la lógica, la quema de ganso parece. . Sin pato problema? Gee, no ir a este marco de tiempo de inserción puntos de interrupción en el código fuente?

Parece que sólo puedo servir hacia fuera mi carta de triunfo, es decir

Roll! Go! Comentario! Demo!

 

v2-990555818e1709a747d0cf4f0a74c14f_b.jpg

Desde la lógica del código un poco más complicado, y se llevará a cabo cuando el gradiente multi-tarjeta fusionó algún procesamiento adicional, se sintió aún debe escribir el código donde hay problemas, entonces decidió escribir ipython abierta más de una pequeña cálculos de tarjetas de demostración.

[Omitida] una demo

Ah, el cálculo pase hacia adelante, en línea con las expectativas. Bueno, lo hacen más difícil la introducción de fusión del gradiente.

Como resultado,

Y otro un fallo de segmentación! ! ! No he introducido mi idea de que, directa colgó.

No es wow! ! ¿No es el nivel de formación de multi-tarjeta que juega, no tiene la última versión del insecto marco? ? ? Gee He encontrado un fallo tanto! Así, una muy estable alivia la recarga de un paquete legado, vuelva a ejecutar el código de demostración

Como resultado de ello, y que a su vez tiene un fallo de segmentación! ! !

 

v2-e0518154dd174382f183fdf2cdb45141_b.jpg

Oh, no. . . Y el medio ambiente de bits de comprobación para asegurarse de que la CPU, memoria, disco, GPU y la memoria son suficientes, CUDA, CUDNN, NCCL ningún problema (viene con la herramienta puede comprobar también). Lo que implica una olla pitón? Seguramente no, yo siendo paranoico. . .

Entonces hice una idea audaz.

Implicando tanto en la tarjeta Zhang Xian, hay un mal? ?

Cuando la prueba anterior ejecutar CUDA sólo un puñado en el GPU6, que se encuentra bien. Bueno. . . GPU7! Hombre lobo es definitivamente para ti! !

GPU7 continuación, pasó corriendo, lleno ala espera de él, el resultado. .

La formación como de costumbre

 

v2-e1638424af593f557a441d5f31a43071_b.jpg

Se obligó a calmarse un poco. No estaba demasiado duda, e incluso a sospechar de él de hardware. Sin embargo, el entorno operativo básico cheque después de un pato, si no de hardware, no es un problema de pitón y los marcos que hacen los autores. . . glibc problema es la media? ? ? Piense en este mensaje de error de segmento, más confianza! glibc es un hombre lobo, esto se escape!

Sin embargo todos sabemos, las bibliotecas glibc este nivel es de muy bajo nivel, una vez roto cambiado, llevará ls, cd este nivel comandos cuelgan. He leído tarea de otra persona un buen funcionamiento en la tarjeta GPU0-5, una vez más atrapado en la confusión. . .

[Se omite aquí por hasta decenas de minutos Caton]

Ah, la primera de bajo perfil, primer demo en un nuevo entorno, deteriorada! Así que la demo en otra máquina para correr un poco, y por supuesto, Doka está funcionando normalmente. Podría realmente glibc? Pero ¿por qué es de otra persona tarea no es ningún problema. Parece que todos los fenómenos de la última posibilidad guía

GPU6 subyacente enlace de comunicación con el fracaso de la GPU7!

Así que esperé pacientemente mientras que otros socios pequeños para terminar la tarea de repetición de la prueba!

GPU5 + GPU6: la formación normal de

GPU5 + GPU7: formación fracaso

GPU0 + + GPU1 GPU2 + + GPU3 GPU4 + + GPU5 GPU6: la formación normal de

GPU0 + + GPU1 GPU2 + + GPU3 GPU4 + + GPU5 GPU6 + GPU7: formación fracaso

martillo de verdad! ! ! Excitado tubo de la máquina corrió para conseguir un hermano pequeño, incoherente para explicar la mayor parte del día. Por último, el hermano pequeño escépticos arreglos para que alguien más para probarlo

Ansiosamente esperado por varios días. . .

Hermano pequeño: "Sí, GPU7 roto, incapaz de comunicarse con otras tarjetas, reemplace las pruebas GPU7 son normales."

Tras conocer la noticia, la noche pequeña muy emocionados de nuevo repetición de la prueba con diversas permutaciones y combinaciones GPU7 éxito! !

posdata

Esta vez el maldito tapón de depuración op dará lugar a un fenómeno de múltiples pasos de ejecución antes de que de repente pensar en ello, pero sólo apareció una vez, a continuación, ejecute a invitar al pequeño hermano, hermano pequeño dijo tranquilamente

"Eso es probablemente que se llama sobrenatural, GPU7 intentó."

 

¿Quieres ver más texto (segmento) Sección (sub), dio la bienvenida a la concentración en número público de micro-canales "pequeña Yao Xi Meng vender la casa." Oh ~

Publicado 33 artículos originales · ganado elogios 0 · Vistas 3281

Supongo que te gusta

Origin blog.csdn.net/xixiaoyaoww/article/details/104553459
Recomendado
Clasificación