Le débogage matériel BED CUDA

Il y a Hutchison

Comme nous le savons tous, est un petit Yao Xi PNL font peu mignon.

Bien que la couche cadre DL comprendre le point de savoir, de comprendre le point de CUDA et en bas, mais je algorithmes hey, déboguer généralement rarement rencontre couche cadre d'apprentissage profondeur de bug (la dernière fois il y a trois ans fosse pytorch), mais jamais rencontré un bug couche matérielle CUDA et même couche. Jusqu'à ce qu'un jour ....

 

v2-bb5d59066d3e1dd5e0a35b2ab55ee4ab_b.jpg

Ce bug a révolutionné mon débogage de la pensée, à partir de ce bug, je ne pense plus de faire des algorithmes arithmétiques font un bon travail très bien.

Scène de la réduction des accidents

A cette époque, l'arrière-plan est, je habituellement débogage sur un code de serveur GPU de la carte 8, ce serveur utilisera rarement la carte 8 complète est pleine, après tout, cette machine est uniquement utilisé pour le débogage du code qu'il devra exécuter le genre de bon 8 carte quelques jours la mission de formation, alors certainement il est soumis au cluster, sinon si vous compte pour les huit cartes, et qu'aucune mise au point de la loi eux-mêmes et d'autres vers le haut.

 

v2-e0c4d0041981113c74f5cf381ed6672f_b.jpg

A cette époque, a coïncidé avec la date limite pour se réunir, 0-5 cartes ont été pris en compte d'autres machines frottent un petit partenaire, la carte peut être utilisée que 6,7. Donc, j'ai utilisé deux cartes pour déboguer le code, la formation et la prévision sont parallèles multi-cartes, de sorte debug ces deux modes sont utilisés simultanément.

Les résultats obtenus après la nouvelle idée, a couru un peu et trouvé une étape n'a pas fini accroché, et toutes les informations d'erreur est deux mots:

        $ bash run.sh
segmentation fault
      

? ? ? Je vous écris tout le python de code Ouais, je ne fais pas ce que la PNL, comment sortir erreur de segmentation fault segments de? ? Comme nous le savons tous, des erreurs sont très contrariants erreur lors de l' écriture de code C

Une recherche à portée de main

 

v2-78f4ae7734481cd84676f378b1d41624_b.jpg

Effectivement, leurs propres stands de gros problèmes ╮ (╯ ▽ ╰) ╭

Bien que, même la position des codes d'erreur ne se bloquer l'impression, bien que, depuis l'alchimie première rencontre cette erreur. Mais! Il est! battre encore les tempêtes vu ce bébé!

 

 

v2-d979300e0d3e56b491f49b6ed8294089_b.jpg

Mots clés ainsi que d'autres restrictions pour forcer Google un peu et trouvé une cause possible de l'erreur est encore trop nombreux types de code sont susceptibles de rencontrer. Oubliez ça, ce n'est pas Google orienté débogage, il est temps de montrer la véritable technologie!

D' abord, regardez le calcul figure est compilé avant ou pendant ou exécution lié.

[pause repas Omission des dizaines d'opération d'insertion en colère]

Donc, trouver le chemin de schéma de calcul de débogage peut être mis en place en douceur, mais pour compléter le tableau de calcul compilé dans le cadre de l'apprentissage en profondeur, à partir des calculs d'exécution lorsque raccroché. emmmm, ce qui explique. . .

Il est vraiment le pire des cas wow! !

Basé sur la carte statique cadre DL peur aux problèmes d'exécution, de nombreux petits partenaires peuvent ne pas être clair comment le débogage d'exécution, donc senti pytorch vraiment parfumé. En fait, la grande majorité des erreurs, image débogage statique est très bien, et le secret est très simple, qui est inséré dans l'op de débogage Ituri.

Comme tensorflow, cadre d'apprentissage en profondeur paddlepaddle que le soutien carte statique, sont un grand nombre d'op de débogage, le plus couramment utilisé est le OP Imprimer (tensorflow dans tf.Print / tf.print, pagaie dans layers.Print), il peut impression figure à tout calcul de position d'une variable / exécution arbitraire valeur Tensor lors de l' exécution de cette position, bien sûr, être utilisé aussi avec op forme (TF dans tf.shape, paddle layers.shape in) imprime Tensor comme l' exécution de forme informations. En plus d'imprimer op, ainsi que l'Assertion OP , IS OP , etc. pour assurer un fonctionnement correct, debug assistée op, c'est - à - dire, python dans certains mots - clés et les appels de fonction de débogage commune, en fait, une vue statique mature peut-cadre de base trouver l'op correspondant. Après la mise en correspondance familière entre un débogage de carte statique les ne seront pas trop exigeants.

 

v2-3c760bd8a1f91dd9aaeb06aa3d270e56_b.jpg

Mais! Il est! Il y a deux cas sont toujours gênants, on est la carte de calcul a été entièrement mis en place, mais le premier op mais quand il est allé à raccrocher (cette fois-ci non op de débogage complètement inséré est exécuté pour), il y a un transmettre finition droite, mais raccroché lorsque le gradient est calculé (cette erreur de temps peuvent se produire partout dans la carte entière, même pas en Ituri). Quand ils sont ensuite superposées sur un problème de carte multi-machine, il est la situation la plus misérable.

Malheureusement, j'ai rencontré (. ︿.)

Tout d'abord, comme décrit ci-dessus, le bébé présente calme est inséré une pile dans le calcul de la figure noeuds d'impression, puis l'ancien a été trouvé au premier résultat de calcul semble très correct, une erreur de positionnement se produit facilement dans un gradient calculé d'exécution inverse du temps, il est

        
          optimizer
          .
          optimize
          ()
        
      

Oubliez ça, pas la première fois ici pendre, le message d'erreur ne peut pas sembler beaucoup d'indications (compte tenu des informations, il y a quelques chemins informations de classe, sensible non affiché sur). Plusieurs autres op de débogage avant l'insertion pour vérifier l'exactitude du chemin

[Benton omis ici encore opération d'interpolation d'op]

Par conséquent, jamais pensé, après avoir inséré l'op de débogage, même la première finition étape, cette fois accroché dans une deuxième étape!

???

debug efficacité op forcer aussi la vie continue? ? ?

Je! Ne pas! Lettre! Ainsi, l'op de débogage sont tous deux commenté, Réexécutez!

Par conséquent,

Et accroché dans la première étape! ! !

 

v2-19921318900985cc2963c451d85a7aed_b.jpg

J'étais difficile de me pincer, ce doit être en particulier Meow faire un tel rêve absurde!

Donc, je ne pensais pas que la réalité est plus absurde qu'un rêve vraiment. Je le répète, la course a beaucoup de bons moments et trouvé pas de temps à insérer debug op est vraiment toujours la première étape se bloque. Donc, je mets ce phénomène choquant de dire tout le monde, alors bien sûr, tout le monde pensait que j'étais fou.

Petite soirée: « Vous êtes venu me montrer personnellement à nouveau !! »

Petit soir: « Regardez pas insérer debug op lorsque la première étape sur la paire d'erreur de défaut de segment affiche de ~! »

Vous: "Oh."

Petit soir: « Alors optimiste Oh, je mets ici op de débogage sont branchés, puis exécutez! »

Eh eh eh? ? ? Comment a été la première étape a raccroché, son visage était fou ( 'Д`)

Tout le monde: petite soirée si vous fatigué de dormir un peu, pas trop fatigué, et tout le monde éparpillé ╮ dispersés (╯ ▽ ╰) ╭

Formé, formés, entraînés, comment (. ︿.)

Oubliez ça, ce n'est pas empêtré. Retour à se déboguer, Emmm, avant de dire à la finition normale, toujours suspendu en phase inverse, puis expliquer où enterrer soit avant une fosse a été temporairement forcé de calculer, mais le gradient de ce nœud en fait ne peut pas être calculé de, ou peut-être lui-même optimiseur bug.

 

v2-f1f3c3767b06f362c0be7f570e0afafc_b.jpg

Alors d' abord balayer à nouveau le code, ne pas utiliser ni jeté un type étrange de données et ne pas utiliser une op très étrange, le premier cas peut être exclue. Il devrait être la dernière place! L'optimiseur utilise le fait qu'Adam, rien ne change, le problème est certainement un plus dans sa nouvelle fusion de gradient multi-cartes cette place!

run si décisive sur un code à 6 bits pour une seule carte de carte, il vraiment une formation normale! Oui , je soirée vraiment Formoe, bientôt découvert un assassin bug tellement excité.

Continuez! Retour et vérifiez la carte un peu plus que la logique, l'oie semble brûler. . Pas de canard problème? Gee, ne vont ce laps de temps insérer dans le code des points d'arrêt source?

Il semble que je ne peux concoctera ma carte d'atout, c'est

Roll! Go! Ecrire! démo!

 

v2-990555818e1709a747d0cf4f0a74c14f_b.jpg

Puisque la logique de code un peu plus compliqué, et sera réalisée lorsque le gradient multi-carte a fusionné un certain traitement supplémentaire, feutre doit encore écrire le code où il y a des problèmes, puis a décidé d'ouvrir ipython écrire plus d'un petit calcul de la carte de démonstration.

[Omis] une démo

Ah, le calcul de la passe en avant, conformément aux attentes. Eh bien, il est plus difficile d'introduire la fusion gradient.

Par conséquent,

Et encore un autre défaut de segmentation! ! ! Je n'ai pas présenté mon idée, accroché directement vers le haut.

Pas wow! ! Est-ce pas que le niveau de formation des multi-cartes jouer, ne pas la dernière version du bug-cadre? ? ? Gee, j'ai trouvé tellement un bug! Ainsi, un très stable soulagé rechargeant un paquet existant, Réexécutez le code de démonstration

En conséquence, et à son tour, a une erreur de segmentation! ! !

 

v2-e0518154dd174382f183fdf2cdb45141_b.jpg

Oh, non. . . Et l' environnement de bit de contrôle pour veiller à ce que CPU, mémoire, disque, GPU et de la mémoire sont assez, CUDA, CUDNN, NCCL aucun problème (livré avec l'outil peut vérifier aussi). Ce qui implique un pot de python? Certainement pas, je parano. . .

Je fis alors une idée audacieuse.

Impliquant les deux cartes Zhang Xian, il y a une mauvaise? ?

Lorsque le test précédent exécuté CUDA juste une poignée dans le GPU6, a trouvé bon. Eh bien. . . GPU7! Loup-garou est pour vous! !

GPU7 ensuite en cours d'exécution, coup complet attendant, le résultat. .

La formation comme d'habitude

 

v2-e1638424af593f557a441d5f31a43071_b.jpg

Il se força à calmer un peu. Je n'étais pas trop de doute, et même de le soupçonner de matériel. Cependant, l'environnement d'exploitation de base après un canard vérifier, sinon le matériel, est pas un python problème et les cadres qui font les auteurs. . . problème glibc est au milieu? ? ? Pensez à ce défaut segment de message d'erreur, plus confiant! glibc est un loup-garou, ce échapper!

Cependant, nous savons tous, les bibliothèques glibc ce niveau est très bas niveau, changé une fois brisée, conduira ls, cd cette commande de niveau pendent. J'ai lu quelqu'un d'autre tâche bien en cours d'exécution sur la carte GPU0-5, encore une fois pris dans la confusion. . .

[Ici jusqu'à Omis dizaines de minutes Caton]

Ah, la première discrète, première démo dans un nouvel environnement, délabrée! Ainsi, la démo sur une autre machine à courir un peu, et bien sûr, Doka fonctionne normalement. Se pourrait-il vraiment glibc? Mais pourquoi est la tâche de ce que quelqu'un d'autre a pas de problème. Il semble que tous les phénomènes dans le guide dernière possibilité

lien de communication GPU6 sous-jacente à l'échec de la GPU7!

J'ai donc attendu patiemment que d'autres petits partenaires pour terminer la tâche de re-tester!

GPU5 + GPU6: formation normale

GPU5 + GPU7: formation échec

GPU0 + GPU1 + GPU2 + GPU3 + GPU4 + GPU5 + GPU6: formation normale

GPU0 + GPU1 + GPU2 + GPU3 + GPU4 + GPU5 + GPU6 + GPU7: formation échec

marteau réel! ! ! Excité la machine à tube partit en courant pour obtenir un petit frère, incohérent d'expliquer la plupart de la journée. Enfin, petit frère sceptique demander à quelqu'un de le tester plus

Anxieusement attendu pendant plusieurs jours. . .

Petit frère: « Oui, GPU7 brisé, incapable de communiquer avec d' autres cartes, remplacer les tests GPU7 sont normaux. »

Après avoir entendu les nouvelles, petite soirée très heureux de re-tester à nouveau avec diverses permutations et combinaisons GPU7 succès! !

post-scriptum

Cette fois, l'op de débogage plug damn conduira à un phénomène d'exécution à plusieurs étapes avant que je pense tout à coup, mais seulement apparu une fois, puis exécutez demander petit frère, petit frère dit tranquillement

«C'est probablement il est appelé surnaturel, GPU7 essayé. »

 

Vous voulez voir plus de texte (segment) section (sous), a salué l'accent mis sur micro-canal numéro public « petit Yao Xi Meng vendre la maison. » Oh ~

Publié 33 articles originaux · louanges gagnées 0 · Vues 3281

Je suppose que tu aimes

Origine blog.csdn.net/xixiaoyaoww/article/details/104553459
conseillé
Classement