Η μηχανή μας GB10 έκλεινε μόνη της. Το αρχείο καταγραφής κατηγορούσε τη μνήμη· το πρόβλημα ήταν η θερμοκρασία
Λειτουργίες
Μία από τις τρεις μηχανές NVIDIA GB10 μας έσβησε τρεις φορές μέσα σε τέσσερις ημέρες τον Σεπτέμβριο: στις 10 Σεπτεμβρίου, στις 12 Σεπτεμβρίου (έμεινε σβηστή για 17 ώρες) και στις 13 Σεπτεμβρίου, δώδεκα λεπτά μετά την επανεκκίνησή της. Κάθε φορά χρειαζόταν κάποιος να πατήσει το κουμπί λειτουργίας.
Πώς μοιάζει ένα κλείσιμο λόγω υπερθέρμανσης
Το αρχείο καταγραφής του συστήματος σταμάτησε απότομα, στη μέση μιας εργασίας, χωρίς εγγραφή τερματισμού: ένα απότομο κλείσιμο ρεύματος δεν αφήνει χρόνο στο journald να γράψει την προσωρινή μνήμη του. Τον Ιούλιο, μετά από ένα παρόμοιο κλείσιμο, το ρολόι επέστρεψε μάλιστα με παλαιότερη ημερομηνία. Και ο μηχανισμός φύλακας υλικού, που επανεκκινεί μια μηχανή που έχει κολλήσει, δεν έκανε τίποτα, επειδή η μηχανή δεν είχε κολλήσει: είχε χαθεί το ρεύμα.
Η λανθασμένη ένδειξη
Οι τελευταίες γραμμές του πυρήνα πριν από κάθε διακοπή ήταν σφάλματα έλλειψης μνήμης GPU (NV_ERR_NO_MEMORY), οπότε η μνήμη φάνταζε ένοχη. Δεν ήταν. Αυτές οι γραμμές ήταν απλώς το πιο συνηθισμένο πράγμα που έγραφε ο πυρήνας: 440.580 από αυτές σε μία μόνο εκκίνηση που είχε τρέξει για 19 ημέρες πριν τερματιστεί. Όταν μια γραμμή εμφανίζεται τόσο συχνά, θα είναι η τελευταία γραμμή πριν από οποιοδήποτε γεγονός. Πριν κατηγορήσετε μια γραμμή αρχείου καταγραφής, μετρήστε πόσο συχνά εμφανίζεται όταν όλα πάνε καλά.
Η σωστή ένδειξη
Επειδή το αρχείο καταγραφής χάνει τα τελευταία λεπτά σε ένα κλείσιμο ρεύματος, είχαμε προσθέσει έναν μικρό δειγματολήπτη που γράφει θερμοκρασίες, φορτίο και μνήμη σε ένα αρχείο κάθε λεπτό και το αποθηκεύει στον δίσκο. Εντόπισε και τις πέντε διακοπές από τον Ιούλιο. Κάθε μία συνέβη με πλήρες φορτίο GPU (96%), με τον CPU στους 85 έως 97 °C.
Ο χρονισμός εξήγησε τα υπόλοιπα. Γύρω στις αρχές του Σεπτεμβρίου είχαμε μεταφέρει την απόδοση βίντεο σε αυτή τη μηχανή. Η ισχύς του GPU της υπό πλήρες φορτίο ανέβηκε από περίπου 24 W σε 46 W, η διάμεση θερμοκρασία του GPU από 68 σε 86 °C, και τα λεπτά ανά εβδομάδα με τον CPU στους 95 °C ή περισσότερο από μηδέν σε 4.283. Οι δύο άλλες μηχανές GB10 μας, που τρέχουν το γλωσσικό μοντέλο στο ίδιο φορτίο 96%, παρέμειναν στους 65 έως 81 °C. Αυτή απλώς ψυχόταν χειρότερα.
Η πρώτη διόρθωση: ένα όριο συχνοτήτας GPU
Στο GB10, το nvidia-smi δεν μπορεί να ορίσει όριο ισχύος, αλλά μπορεί να θέσει όριο στην συχνότητα του GPU: nvidia-smi -lgc 0,2000. Τον Ιούλιο αυτό μείωσε τη θερμότερη ζώνη από 91 °C σε 77 έως 83 °C μέσα σε δευτερόλεπτα. Δύο λεπτομέρειες έχουν σημασία:
- Εφαρμόστε το πριν ξεκινήσουν οι βαριές υπηρεσίες. Η υπηρεσία ορίου μας εκτελούνταν αρχικά περίπου 15 δευτερόλεπτα μετά την εκκίνηση, όταν ο διακομιστής μοντέλου είχε ήδη αρχίσει να φορτώνει με πλήρη ισχύ, που είναι η στιγμή που είχε προκαλέσει την κατάρρευση της μηχανής. Τώρα εκτελείται πριν ξεκινήσει το Docker.
- Ελέγξτε το υπό φορτίο. Με το όριο ενεργό, η αναφερόμενη συχνότητα GPU εξακολουθεί να δείχνει περίπου 2.400 MHz όταν το GPU είναι σε αδράνεια. Υπό φορτίο σταθεροποιείται στα 1.976 MHz.
Η δεύτερη διόρθωση: ένας μηχανισμός ασφαλείας θερμότητας σε στάδια
Το όριο δεν ήταν αρκετό μόλις ενσωματώθηκε η απόδοση, οπότε τώρα ένας μηχανισμός ασφαλείας διαβάζει κάθε αισθητήρα μία φορά το δευτερόλεπτο και ενεργεί σε στάδια: χαμηλότερη συχνότητα GPU από τους 89 °C και ξανά χαμηλότερη από τους 92 °C· από τους 94 °C ο αποδοτικός σταματά (SIGSTOP) και ο CPU επιβραδύνεται· από τους 96 °C κάθε εργασία GPU τίθεται σε παύση για τα δευτερόλεπτα που χρειάζονται για την ψύξη. Επανέρχεται μόνο αφού το μηχάνημα έχει παραμείνει πιο δροσερό για κάποιο διάστημα. Στους 97 °C για 20 δευτερόλεπτα, ένα φρένο τελευταίας ελπίδας σταματά εντελώς την υπηρεσία βίντεο.
Τα πρώτα εννέα λεπτά υπό απόδοση, η θερμότερη ζώνη κορυφώθηκε στους 94 °C με διάμεση τιμή 89 °C, έναντι πλατώ των 97 °C πριν. Έχει ένα τίμημα: μία ημέρα στα μέσα Σεπτεμβρίου ο αποδοτικός τέθηκε σε παύση για το 17% του χρόνου και το GPU λειτούργησε στα 900 MHz ή λιγότερο για το μεγαλύτερο μέρος της ημέρας. Και δεν είναι θεραπεία: το μηχάνημα έκλεισε μόνο του μία ακόμη φορά, στις 11 Οκτωβρίου, στους 97 έως 98 °C. Έχει λειτουργήσει χωρίς διακοπή έκτοτε, 20 ημέρες καθώς γράφουμε αυτό το κείμενο.
Τέσσερα λάθη που κάναμε στην πορεία
- Η παύση μιας εργασίας δεν ψύχθηκε το μηχάνημα. Το φρένο ενεργοποιήθηκε με τον αποδοτικό ήδη σε παύση, επειδή ένα μοντέλο εικόνας εξακολουθούσε να σχεδιάζει και μια δωδεκάδα χρονοδιακοπτών ξεκίνησαν στο ίδιο λεπτό. Το ανώτατο στάδιο τώρα θέτει σε παύση κάθε βαριά εργασία GPU, όχι μόνο τον αποδοτικό.
- Ο μηχανισμός ασφαλείας θέτει σε παύση εργασίες με το όνομά τους, και τα ονόματα άλλαξαν. Δύο φορές ένας νέος κινητήρας θα είχε ξεφύγει από την παύση: ένα μοντέλο εικόνας με νέο όνομα διαδικασίας τον Σεπτέμβριο και τον Οκτώβριο ένας αποδοτικός που τρέχει σε container αντί ως θυγατρική της υπηρεσίας απόδοσης. Κάθε αλλαγή κινητήρα περιλαμβάνει πλέον έναν έλεγχο της λίστας του μηχανισμού ασφαλείας.
- Η κράτηση του φρένου δεν αίρθηκε ποτέ. Σταμάτησε την υπηρεσία βίντεο και άφησε ένα αρχείο κράτησης ώστε τίποτα να μην το επανεκκινήσει. Τίποτα δεν ειδοποίησε κανέναν επίσης και η παραγωγή σταμάτησε για τρεις ημέρες πριν το παρατηρήσουμε. Η κράτηση τώρα αίρεται μόνη της: πέντε λεπτά μετά το τελευταίο φρένο, χωρίς νέο φρένο, τουλάχιστον 30 GB ελεύθερης μνήμης και μέσος όρος 10 λεπτών 93 °C ή λιγότερο. Η αναμονή για να κρυώσει το μηχάνημα δεν θα δούλευε ποτέ: είχε μέσο όρο 88 °C με και χωρίς απόδοση.
- Ο συναγερμός χτύπησε στη φυσιολογική θερμοκρασία της μηχανής. Το όριο ειδοποίησης ήταν 88 °C, που ήταν ο μέσος όρος για αυτή τη μηχανή. Σε μία ημέρα, βρισκόταν στο 32% του χρόνου στους 90 °C ή περισσότερο, στο 8% στους 93 °C ή περισσότερο και στο 3% στους 95 °C ή περισσότερο, χωρίς να φτάσει ποτέ τους 97 °C. Μετακινήσαμε τον συναγερμό στους 97 °C, το επίπεδο όπου πράγματι έσβησε, και τα email συναγερμού σταμάτησαν.
Το συμπέρασμα
Το λογισμικό κρατούσε αυτή τη μηχανή σε λειτουργία, αλλά η αιτία ήταν φυσική: η ψύξη της ήταν δύο έως τρεις φορές χειρότερη από τις αντίστοιχες μηχανές. Αν μια μηχανή GB10 σβήσει μόνη της υπό φορτίο, ελέγξτε πρώτα τη ροή αέρα. Στη συνέχεια, περιορίστε το ρολόι της GPU πριν ξεκινήσουν οι υπηρεσίες σας, διακόψτε τις απαιτητικές εργασίες πριν η μηχανή φτάσει το όριό της και ορίστε συναγερμούς με βάση τις θερμοκρασίες στις οποίες λειτουργεί πραγματικά.
Η Factory Floor περιλαμβάνει έναν μηχανισμό ασφαλείας θερμότητας αυτού του είδους: διαβάζει την υψηλότερη τιμή από τους αισθητήρες της GPU και των θερμικών ζωνών, διακόπτει τις απαιτητικές εργασίες που ορίζετε σε μια καθορισμένη θερμοκρασία (92 °C από προεπιλογή) και τις επαναλαμβάνει μόνο κάτω από μια χαμηλότερη (84 °C), με μηχανισμούς ασφαλείας μνήμης και δίσκου παράλληλα.