GPT-OSS την Day 0

Υποστήριξη Day‑0 για GPT‑OSS σε H200 μέσω προσαρμογής του ROSE με FP8, sink attention και βελτιστοποιήσεις MoE

ΣυγγραφείςPerplexity Engineering

Το Perplexity δεσμεύεται να διαθέσει τα καλύτερα μοντέλα Τεχνητής Νοημοσύνης σε περίεργους χρήστες που απαιτούν ακριβείς και αξιόπιστες απαντήσεις και ενέργειες πράκτορα. Η OpenAI ανακοίνωσε πρόσφατα τα μοντέλα ανοιχτού βάρους της (gpt-oss-20b και gpt-oss-120b). Όπως συμβαίνει με πολλά κορυφαία μοντέλα, το Perplexity συγκαταλέγεται μεταξύ των πρώτων οργανισμών που αξιολογούν τα gpt-oss-20b και gpt-oss-120b.

Σε αυτήν την ανάρτηση, μοιραζόμαστε τις αποφάσεις υποδομής του εσωτερικού μας στοίβα εξαγωγής συμπερασμάτων που κατέστησαν δυνατή την υποστήριξη Day-0. Εστιάζουμε στην εξυπηρέτηση αυτών των μοντέλων σε GPU NVIDIA H200, λεπτομερώς τις αλλαγές πυρήνα, τις επιλογές ανάπτυξης και τις ανταλλαγές ταχύτητας-κόστους.

GPT-OSS σε Hopper

Τα μοντέλα ανοιχτού βάρους αποστέλλονται χρησιμοποιώντας κβάντωση MXFP4, η οποία τα βοηθά να χωρέσουν στη μνήμη υλικού καταναλωτικού επιπέδου ή να επιτύχουν μέγιστη απόδοση στο NVIDIA Blackwell. Ωστόσο, για την αρχική αξιολόγηση, θέλαμε να τα εκτελέσουμε σε υπάρχοντα συστάματα H200 Hopper με ελάχιστες αλλαγές στη μηχανή εξαγωγής συμπερασμάτων. Το Hopper δεν διαθέτει αποκλειστικούς πυρήνες τανυστή FP4, οι οποίοι εισήχθησαν από το Blackwell. Κατά συνέπεια, αποφασίσαμε να εξυπηρετήσουμε τα μοντέλα με ακρίβεια FP8 αντί αυτού, για να ελαχιστοποιήσουμε την ανάγκη για προσαρμοσμένους πυρήνες και να αξιοποιήσουμε στο μέγιστο το διαθέσιμο υλικό.

Σε υψηλό επίπεδο, τα μοντέλα LLM μετασχηματιστή είναι δομικά απλά:

Ενσωμάτωση εισόδου

Μια ακολουθία επιπέδων μετασχηματιστή. Κάθε ένα περιέχει ένα μπλοκ προσοχής και ένα πυκνό MLP ή αραιό μπλοκ MoE.

Προβολή logit εξόδου

Κατά την εισαγωγή ενός νέου μοντέλου μετασχηματιστή, μας ενδιαφέρει κυρίως να μάθουμε σε ποιο βαθμό ταιριάζουν με τα υπάρχοντα μοντέλα για να εντοπίσουμε τις απαιτούμενες αλλαγές. Η OpenAI μοιράστηκε ευγενικά μια επισκόπηση των μοντέλων της εκ των προτέρων, επιτρέποντάς μας να προσαρμόσουμε ανάλογα τη ρύθμιση εξαγωγής συμπερασμάτων μας. Διαπιστώσαμε ότι το μοντέλο απαιτούσε πράγματι αρκετές μικρές αλλαγές.

Προσοχή: GQA με Attention Sinks

Κάθε κεφαλή προσοχής διαθέτει μια προεκπαιδευμένη παράμετρο καταβύθισης (sink parameter) η οποία λαμβάνεται υπόψη στο Softmax

Θεσική κωδικοποίηση YaRN, παρόμοια με το DeepSeek-V3

Οι προβολές QKV διαθέτουν μεροληψίες (biases), παρόμοια με το Qwen 2

Η προβολή εξόδου διαθέτει μεροληψία (bias)

MLP: Αραιό μείγμα ειδικών (Sparse Mixture-of-Expert - MoE)

Συνάρτηση ενεργοποίησης SwiGLU, διαφορετική από τα περισσότερα μοντέλα ανοιχτού βάρους

Softmax μετά το Top-K για τα βάρη ειδικών

Οι ειδικοί διαθέτουν μεροληψίες (biases)

Αναμένοντας ο αριθμός των παραμέτρων να είναι περίπου 100B-200B, αποφασίσαμε να:

Επεκτείνουμε το FlashInfer για υποστήριξη sink attention

Επαναχρησιμοποιήσουμε την υλοποίηση MoE που είχε ήδη κατασκευαστεί για την οικογένεια μοντέλων DeepSeek-V3

Επιλέξουμε την κλιμάκωση μπλοκ FP8 128x128 ως σχήμα κβάντωσης, επεκτείνοντας τους πυρήνες DeepGEMM για την υποστήριξη όρου μεροληψίας (bias term).

Εσωτερική μηχανή εξαγωγής συμπερασμάτων

Οι προσπάθειές μας για εξαγωγή συμπερασμάτων υποστηρίζονται από την εσωτερική μας μηχανή εξαγωγής συμπερασμάτων, ROSE. Δημιουργούμε το ROSE ώστε να αποτελεί ένα ευέλικτο πλαίσιο που επιτρέπει τη γρήγορη εισαγωγή νέων μοντέλων. Επιπλέον, μόλις δεσμευτούμε για την εξυπηρέτηση ενός μοντέλου σε κλίμακα, παρέχει μια πλατφόρμα για τη βελτιστοποίηση και την αύξηση της απόδοσης ώστε να φτάσει στην αιχμή της τεχνολογίας.

Το ROSE εκθέτει μια μηχανή LLM, η οποία μπορεί να φορτώσει ένα μοντέλο και να δημιουργήσει αποκωδικοποιημένα tokens για αυτό μέσω πολλαπλών αποκωδικοποιητών, συμπεριλαμβανομένων των κερδοσκοπικών και MTP αποκωδικοποιητών. Τα ίδια τα μοντέλα αποτελούνται από ένα προσαρμοσμένο σύνολο επιπέδων, τα οποία υποστηρίζουν διάφορες γνώσεις διαμόρφωσης για κβάντωση και παραλληλισμό. Κάτω από τα επίπεδα, συνδυάζει πυρήνες Triton και CUDA που υλοποιούν αποτελεσματικά και συγχωνεύουν τους υπολογισμούς που εκτελούνται από μεμονωμένα επίπεδα.

Το ROSE είναι κατασκευασμένο κυρίως σε Python και βασίζεται στο PyTorch για τους ορισμούς των μοντέλων. Ενώ η Python μας επιτρέπει να είμαστε ευέλικτοι και να προσαρμόζόμαστε σε νέα μοντέλα, μεταφέρουμε τα περισσότερα στοιχεία που είναι ευαίσθητα στην απόδοση, όπως η εξυπηρέτηση και ο προγραμματισμός παρτίδων, σε Rust.

Για να φέρουμε ένα νέο μοντέλο, ορίζουμε πρώτα την ιεραρχία του μοντέλου και χτίζουμε έναν μετατροπέα βάρους για αυτό. Αφού ληφθούν υπόψη όλα τα βάρη, ορίζουμε μια διαδρομή προς τα εμπρός (forward pass) για την απλούστερη περίπτωση χρήσης TP=1 και διασφαλίζουμε ότι λειτουργεί end-to-end. Τέλος, υλοποιούμε και δοκιμάζουμε την υποστήριξη για διάφορες μορφές παραλληλισμού πριν κυκλοφορήσουμε ένα νέο κοντέινερ και αναπτύξουμε το μοντέλο σε ένα σύμπλεγμα για αξιολόγηση. Στη συνέχεια επαναλαμβάνουμε την απόδοση, βασιζόμενοι στα σχόλια τόσο από τα ταμπλό όσο και από πιο λεπτομερείς μετρήσεις απόδοσης.

Το ROSE λειτουργεί σε αριθμητικά tokens, με ελάχιστη γνώση των μορφών συνομιλίας εκτός από τις δοκιμές ενσωμάτωσης. Παράλληλα, έπρεπε να εξετάσουμε την προσαρμογή της γύρω υποδομής για την υποστήριξη του tokenizer Harmony και τη σωστή αντιστοίχιση των αιτημάτων σε ακολουθίες token εισόδου.

Με το μοντέλο GPT OSS, διαπιστώσαμε ότι δεν απαιτούνταν αλλαγές στους αποκωδικοποιητές μας, στα εργαλεία γραφημάτων CUDA ή στην περιβάλλουσα υποδομή, επιτρέποντάς μας να εστιαστούμε στην προσπάθειά μας στη ρύθμιση των πυρήνων που υποστηρίζουν το μοντέλο.

Πυρήνες για το GPT-OSS

Προσοχή καταβύθισης (Sink Attention)

Η προσοχή καταβύθισης εισάγει έναν επιπλέον παράγοντα μεροληψίας πριν από το softmax, ο οποίος συσσωρεύεται με το γινόμενο των Q και K:

plaintext
attn = softmax(q @ k^T * sm_scale + sink) * V

Ενώ μια απλοϊκή υλοποίηση είναι αρκετά ασήμαντη, οι αποτελεσματικές υλοποιήσεις προσοχής, όπως το FlashInfer, παραλληλοποιούν τον υπολογισμό της προσοχής τόσο σε ανεξάρτητες κεφαλές όσο και στο μήκος της ακολουθίας KV. Επιπλέον, για αριθμητική σταθερότητα, το Softmax υπολογίζεται online, αφαιρώντας παράλληλα το μέγιστο στοιχείο για αριθμητική σταθερότητα:

plaintext
softmax(x) = e^x / sum(e^x) = e ^ (x - max(x)) / sum(e ^ (x - max(x))

Η online υλοποίηση παρακολουθούσε ένα τρέχον μέγιστο m αρχικοποιημένο σε -inf και μια κλίμακα d σε 1. Αρχικοποιώντας το μέγιστο στην τιμή καταβύθισης της τρέχουσας κεφαλής, θα διασφαλίζαμε ότι θα συσσωρευόταν σωστά στο Softmax. Έπρεπε να φροντίσουμε ώστε αυτό το μέγιστο να συμπεριληφθεί μόνο στο πρώτο κομμάτι, εάν η προσοχή είχε χωριστεί σε πολλαπλά μπλοκ κατά μήκος του μήκους της ακολουθίας.

Έχουμε προσαρμόσει το πρότυπο πυρήνα FlashInfer FA2, που χρησιμοποιείται τόσο για prefill όσο και για decode, ώστε να περιλαμβάνει τις παραμέτρους καταβύθισης (sink parameters).

MoE

Η κύρια διαφορά μεταξύ του επιπέδου MoE των διαφόρων μοντέλων είναι συνήθως το σχήμα δρομολόγησης. Αναμένοντας σημαντική μεταβλητότητα, το ROSE υλοποιεί αυτόν τον πυρήνα σε Triton, επιτρέποντάς μας να τον προσαρμόσουμε εύκολα σε νέα μοντέλα. Στην περίπτωση του GPT-OSS, έπρεπε να προσαρμόσουμε τη βαθμολογία βάρους για να εκτελέσουμε softmax μόνο στους επιλεγμένους ειδικούς Top-K, σε αντίθεση με ορισμένα μοντέλα τύπου DeepSeek που υπολογίζουν το softmax σε όλους τους ειδικούς. Διαπιστώσαμε ότι είναι κρίσιμο για την ακρίβεια ο υπολογισμός των βαρών των ειδικών να γίνεται σε ακρίβεια bfloat16.

Η πρόκληση με το επίπεδο MoE οφειλόταν στην απόφασή μας να επαναχρησιμοποιήσουμε τα υπάρχοντα kernels του DeepGEMM, τα οποία δεν υποστήριζαν όρους bias. Ευτυχώς, με τον χρόνο ενσωματωθήκαμε βαθιά με αυτά, κάνοντας αλλαγές ώστε να τα συνδέσουμε καλύτερα με τα προσαρμοσμένα kernels dispatch all-to-all που διαθέταμε. Προσθέσαμε υποστήριξη bias στο DeepGEMM αρχικοποιώντας τους καταχωρητές συσσωρευτή WGMMA με τις τιμές bias που φορτώθηκαν από τη μνήμη. Αυτό συμβαίνει μία μόνο φορά κατά την επεξεργασία ενός MN block, επομένως το κόστος είναι πιθανότατα αμελητέο και η cache L2 διασφαλίζει αποτελεσματική πρόσβαση σε αυτές τις τιμές.

Δεδομένου ότι αυτά τα μοντέλα δεν επωφελούνται άμεσα από τον Παραλληλισμό Δεδομένων (Data Parallelism), επαναχρησιμοποιήσαμε πυρήνες αποστολής και συνδυασμού αποκλειστικά για TP (TP-only dispatch and combine kernels). Οι είσοδοι προς αποστολή αναπαράγονται σε όλες τις τάξεις, επομένως η αποστολή επιλέγει τα tokens για τους τοπικά διαθέσιμους ειδικούς. Το Combine εκτελεί τη σταθμισμένη συσσώρευση μέσω του NVLink.

Βελτιστοποιήσεις απόδοσης

Παρόλο που στόχος μας ήταν να θέσουμε γρήγορα τα μοντέλα σε λειτουργία, θέλαμε επίσης να διασφαλίσουμε ότι η απόδοση παρέμενε εύλογη. Αφού επιβεβαιώσαμε την ορθότητα έναντι μιας υλοποίησης αναφοράς που παρείχε η OpenAI, προφιλάραμε την υλοποίησή μας χρησιμοποιώντας το προεπιλεγμένο PyTorch profiler, παρακολουθώντας προσεκτικά τις εκχωρήσεις block και νήματος σε όλα τα kernels. Η λειτουργικότητα που επαναχρησιμοποιήσαμε είχε αναπτυχθεί για μοντέλα με πολύ μεγαλύτερη κρυφή διάσταση 7168, σημαντικά μεγαλύτερη από το 2880 των μοντέλων GPT-OSS. Εξειδικεύσαμε τους kernel launchers ώστε να επιλέγουν καλύτερες διαστάσεις πλέγματος, αυξάνοντας σημαντικά τη διαμεταγωγή.

Tokenization και κανάλια

Η μορφή συνομιλίας του Harmony διαθέτει αρκετές σημαντικές έννοιες για τη δομή των διαλόγων, το περιεχόμενο συλλογιστικής και τις κλήσεις συναρτήσεων. Σε αυτή τη μορφή, κάθε μήνυμα αποτελείται από μια κεφαλίδα και περιεχόμενο:

plaintext
<|start|>{header}<|message|>{content}<|end|>

Η κεφαλίδα μεταφέρει μεταδεδομένα — κυρίως τον ρόλο (σύστημα, προγραμματιστής, χρήστης, βοηθός, εργαλείο), το κανάλι και έναν αποδέκτη όπως to=functions.<function-name> κατά την επίκληση μιας κλήσης εργαλείου.

Τα κανάλια (όπως ανάλυση, σχολιασμός και τελική απάντηση) καθιστούν τις εξόδους του μοντέλου πιο διαφανείς και τμηματοποιημένες. Επειδή η μορφή επιβάλλει αυτόν τον διαχωρισμό, το μοντέλο μπορεί να συλλογίζεται διαφανώς (και να επιθεωρείται για αποσφαλμάτωση) χωρίς να διαρρέει αλυσίδα σκέψης (chain-of-thought) στην παραγωγή. Οι ετικέτες αποδεκτών (κεφαλίδες to=) λένε στο runtime ακριβώς ποιος παράγοντας πρέπει να λάβει το επόμενο payload — είτε πρόκειται για μια συνάρτηση, το ίδιο το μοντέλο ή τον τελικό χρήστη.

Η μηχανή εξαγωγής συμπερασμάτων ROSE είναι ανεξάρτητη από τη μορφή. Λαμβάνει μια παρτίδα token εισόδου και μεταδίδει (streams) πίσω token εξόδου. Στη στοίβα εξαγωγής συμπερασμάτων μας, το έργο της μορφοποίησης των εισόδων σε ένα κωδικοποιημένο prompt και της ανάλυσης των αποτελεσμάτων LLM πίσω σε δομημένα μηνύματα χειρίζεται η αποκλειστική υπηρεσία frontend του API JSON. Ενσωματώσαμε το Harmony προσθέτοντας έναν νέο συνδέσιμο μορφοποιητή/αναλυτή σε αυτό το frontend, επιτρέποντας στο backend να παραμείνει αμετάβλητο ενώ το frontend διαχειρίζεται καθαρά τους κανόνες μορφής συνομιλίας (chat-format rules), τις κλήσεις εργαλείων και το streaming. Αυτός ο διαχωρισμός των ανησυχιών διατηρεί την αρχιτεκτονική αρθρωτή, επιτρέποντας τη γρήγορη υιοθέτηση νέων μορφών, χαρακτηριστικών απόκρισης με ελάχιστες αλλαγές στο backend.

Κόστος και Απόδοση

Δεδομένου του σχετικά μικρού μεγέθους των μοντέλων GPT-OSS, περιορίζουμε την ανάπτυξη ενός αντιγράφου σε έναν μόνο κόμβο για να αποφύγουμε τα γενικά έξοδα επικοινωνίας μεταξύ των κόμβων. Η υλοποίησή μας υποστηρίζει ευέλικτους συνδυασμούς παραλληλισμού ειδικών (EP), παραλληλισμού δεδομένων (DP) και παραλληλισμού τανυστή (TP). Για να προσδιορίσουμε τη βέλτιστη ρύθμιση ανάπτυξης, κάναμε benchmark όλους τους συνδυασμούς στρατηγικών κατακερματισμού (sharding) σε μεγέθη παρτίδων από 1 έως 128. Χάρη στον Αποσυνδυασμό Prefill-Decode (Prefill-Decode Disaggregation), είμαστε σε θέση να συζητήσουμε την ανταλλαγή απόδοσης-κόστους ξεχωριστά για το prefill και το decode.

Για τις εκτιμήσεις κόστους, υποθέτουμε μια ονομαστική τιμή αγοράς H200 3,00 $/ώρα (σημείωση: αυτή δεν είναι η πραγματική μας τιμή GPU).

Ανακαλύψαμε ότι η ρύθμιση batch_size=1 και DP=1 αποδίδει την καλύτερη απόδοση prefill. Διαφορετικές διαμορφώσεις TP παρέχουν στη συνέχεια διαφορετικές ανταλλαγές μεταξύ λανθάνουσας κατάστασης πρώτου token (first-token latency) και κόστους. Οι παρακάτω πίνακες παρουσιάζουν τη λανθάνουσα κατάσταση prefill και το κόστος ανά εκατομμύριο token εισόδου για διάφορες διαμορφώσεις και μήκη εισόδου.

GPT-OSS 120B:

Μήκος εισόδου

8192

32768

65536

128000

EP1 DP1 TP1

0,364s, 0,037 $

2,421s, 0,062 $

7,375s, 0,094 $

23,902s, 0,156 $

EP2 DP1 TP2

0,190s, 0,039 $

1,245s, 0,063 $

3,786s, 0,096 $

12,116s, 0,158 $

EP4 DP1 TP4

0,165s, 0,067 $

0,900s, 0,092 $

2,449s, 0,125 $

7,165s, 0,187 $

EP8 DP1 TP8

0,179s, 0,145 $

0,839s, 0,171 $

2,003s, 0,204 $

5,119s, 0,267 $

Καθυστέρηση prefill του GPT-OSS 120B και κόστος ανά εκατομμύριο tokens εισόδου ανά διαμόρφωση παραλληλισμού και μήκος εισόδου.

GPT-OSS 20B:

Μήκος εισόδου

8192

32768

65536

128000

EP1 DP1 TP1

0,239s, 0,024 $

1,610s, 0,041 $

4,895s, 0,062 $

16,037s, 0,104 $

EP2 DP1 TP2

0,127s, 0,026 $

0,833s, 0,042 $

2,522s, 0,064 $

8,143s, 0,106 $

EP4 DP1 TP4

0,108s, 0,044 $

0,593s, 0,060 $

1,616s, 0,082 $

4,766s, 0,124 $

EP8 DP1 TP8

0,116s, 0,094 $

0,547s, 0,111 $

1,310s, 0,133 $

3,365s, 0,175 $

Καθυστέρηση prefill του GPT-OSS 20B και κόστος ανά εκατομμύριο tokens εισόδου ανά διαμόρφωση παραλληλισμού και μήκος εισόδου.

Για το decode, ανακαλύψαμε ότι το EP4 DP1 TP4 είναι η καλύτερη διαμόρφωση για τις περισσότερες περιπτώσεις. Τα τέσσερα διαγράμματα παρακάτω απεικονίζουν την ανταλλαγή μεταξύ ταχύτητας decode και κόστους ανά εκατομμύριο token εξόδου τόσο για τα μοντέλα 120B όσο και 20B σε μήκη ακολουθίας 8192 και 32768.

Κόστος μόνο αποκωδικοποίησης ανά εκατομμύριο tokens εξόδου σε σχέση με την ταχύτητα αποκωδικοποίησης για το GPT-OSS 120B σε μήκος ακολουθίας 8.192, με σύγκριση των διαμορφώσεων EP1, EP2, EP4 και EP8.
Κόστος μόνο αποκωδικοποίησης ανά εκατομμύριο tokens εξόδου σε σχέση με την ταχύτητα αποκωδικοποίησης για το GPT-OSS 120B σε μήκος ακολουθίας 32.768, με σύγκριση των διαμορφώσεων EP1, EP2, EP4 και EP8.
Κόστος μόνο αποκωδικοποίησης ανά εκατομμύριο tokens εξόδου σε σχέση με την ταχύτητα αποκωδικοποίησης για το GPT-OSS 20B σε μήκος ακολουθίας 8.192, με σύγκριση των διαμορφώσεων EP1, EP2, EP4 και EP8.
Κόστος μόνο αποκωδικοποίησης ανά εκατομμύριο tokens εξόδου σε σχέση με την ταχύτητα αποκωδικοποίησης για το GPT-OSS 20B σε μήκος ακολουθίας 32.768, με σύγκριση των διαμορφώσεων EP1, EP2, EP4 και EP8.

Έχουμε επίσης εξετάσει το ενδεχόμενο χρήσης του μικρότερου μοντέλου 20B ως μοντέλου πρότασης κερδοσκοπικής αποκωδικοποίησης (speculative decoding) για το μεγαλύτερο μοντέλο 120B. Ωστόσο, επειδή ο αριθμός των ενεργοποιημένων παραμέτρων είναι παρόμοιος (3B έναντι 5B), οι προκύπτουσες αυξήσεις ταχύτητας ήταν οριακές.

Βιβλιογραφικές αναφορές

Αποσυνδεδεμένα Prefill και Decode

Επιτάχυνση του Sonar μέσω Κερδοσκοπίας​

Χαμηλότερη λανθάνουσα κατάσταση και υψηλότερη απόδοση με ανάπτυξη DeepSeek πολλαπλών κόμβων

​Αποτελεσματική και φορητή επικοινωνία Mixture-of-Experts

​pplx-kernels

DeepGEMM

FlashInfer: Αποτελεσματική και προσαρμόσιμη μηχανή προσοχής για την εξυπηρέτηση εξαγωγής συμπερασμάτων LLM

Αποτελεσματικά μοντέλα γλώσσας ροής με Attention Sinks

Τεχνική αναφορά DeepSeek-V3​

​Μορφή απόκρισης OpenAI Harmony | OpenAI Cookbook​

Παραπομπή

BibTeX
@online{perplexity2025GptOssOnDay0,
  author = {{Perplexity} and Nandor Licker and Lequn Chen and Vladimir Zaytsev and Kevin Hu and Lauren Kolm and Jesse Dwyer},
  title = {{GPT-OSS on day 0}},
  date = {2025-08-08},
  url = {https://www.perplexity.ai/hub/blog/gpt-oss-on-day-0}
}