Η αρχιτεκτονική του σφάλματος

Το περιστατικό αφορούσε την υπηρεσία Workers AI της Cloudflare, η οποία χρησιμοποιεί τον inference engine SGLang σε διαχωρισμένη (disaggregated) διάταξη. Σε αυτή την αρχιτεκτονική, οι prefill GPUs επεξεργάζονται το prompt και μεταφέρουν το KV cache μέσω RDMA στους decode GPUs. Το πρόβλημα εντοπίστηκε όταν το μέγεθος του KV cache pool (681.280 tokens) αποδείχθηκε μικρότερο από το υποστηριζόμενο context window του μοντέλου (1.048.576 tokens).

Το κενό στον μηχανισμό απόρριψης (rejection path)

Το κρίσιμο σφάλμα στον SGLang ήταν ότι, κατά την απόρριψη ενός αιτήματος λόγω έλλειψης μνήμης, ο scheduler αντικαθιστούσε το prompt με ένα placeholder ενός token, αλλά δεν διέκοπτε τη διαδικασία. Ο decode node, λαμβάνοντας το σήμα «μεταφορά ολοκληρώθηκε», θεωρούσε λανθασμένα ότι το KV cache είχε ανανεωθεί πλήρως. Κατά συνέπεια, η παραγωγή κειμένου βασιζόταν σε παλαιότερα δεδομένα (stale cache pages) που ανήκαν σε άλλους χρήστες, παραβιάζοντας την απομόνωση των tenants.

Μέτρα θωράκισης και βέλτιστες πρακτικές

Μετά την αποκάλυψη, η Cloudflare προχώρησε σε:

  • Αυστηρό validation: Πλέον, το μέγεθος του KV pool συγκρίνεται άμεσα με το context length πριν από κάθε deployment.
  • Engine hardening: Ενσωμάτωση patches στον SGLang που απορρίπτουν αιτήματα στο στάδιο του admission, πριν από οποιαδήποτε δέσμευση πόρων.
  • Integrity checks: Ενεργοποίηση checksums για το KV cache κατά τη μεταφορά μεταξύ prefill και decode nodes, διασφαλίζοντας ότι τα δεδομένα που διαβάζονται ανήκουν όντως στο τρέχον αίτημα.

Η Cloudflare τονίζει ότι η διασφάλιση της ακεραιότητας σε κατανεμημένα συστήματα απαιτεί «integrity by construction», όπου ο engine ελέγχει την ιδιοκτησία των σελίδων μνήμης σε κάθε βήμα ανάγνωσης.