Επικοινωνία σημείου-προς-σημείο RDMA για συστήματα LLM
Κομψό εργαλείο για την αντιμετώπιση αναδυόμενων μοτίβων επικοινωνίας LLM
Τα συστήματα LLM βασίζονταν παραδοσιακά σε συλλογικές επικοινωνίες για δομημένα παράλληλα μοτίβα στην εκπαίδευση και την εξαγωγή συμπερασμάτων. Ωστόσο, τα αναδυόμενα φόρτα εργασίας, όπως η αποεξουσιοδοτημένη εξαγωγή συμπερασμάτων, η δρομολόγηση Mixture-of-Experts (MoE) και η ασύγχρονη βελτιστοποίηση ενίσχυσης μάθησης (RL fine-tuning), απαιτούν την ευελιξία της επικοινωνίας σημείου-προς-σημείο.
Η τελευταία μας ερευνητική εργασία παρουσιάζει το TransferEngine, μια φορητή βιβλιοθήκη επικοινωνίας βασισμένη σε RDMA που λειτουργεί σε διαφορετικά Network Interface Controllers (NICs), συμπεριλαμβανομένων των NVIDIA ConnectX-7 και AWS Elastic Fabric Adapter (EFA). Αποδεικνύουμε την αποτελεσματικότητά του σε τρία συστήματα παραγωγής στο Perplexity AI:
Αποεξουσιοδοτημένο Prefill και Decode: Μεταφορά KvCache στρώση προς στρώση με χρήση εγγραφών paged και watchers UVM, επιτρέποντας στα στιγμιότυπα prefill και decode να κλιμακώνονται ανεξάρτητα.
Μεταφορά βαρών για μετα-εκπαίδευση RL σε λιγότερο από 2 δευτερόλεπτα: Εξαιρετικά γρήγορος συγχρονισμός βαρών μεταξύ κόμβων εκπαίδευσης και εξαγωγής συμπερασμάτων.
Ενεργοποίηση μοντέλων τρισεκατομμυρίων παραμέτρων στο AWS EFA: Λειτουργίες αποστολής και συνδυασμού MoE χαμηλής καθυστέρησης με χρήση πρωτογόνων scatter και barrier, επιτυγχάνοντας καθυστέρηση αιχμής στο ConnectX-7 και την πρώτη βιώσιμη υλοποίηση συμβατή με το AWS EFA.
Αυτό το άρθρο επικεντρώνεται στο ίδιο το TransferEngine, τη βιβλιοθήκη επικοινωνίας που τροφοδοτεί αυτά τα συστήματα. Διαβάστε την πλήρη ερευνητική εργασία στο arXiv και εξερευνήστε τον κώδικα στο GitHub.
Κίνητρο
Οι συλλογικές επικοινωνίες υπερέχουν σε δομημένα παράλληλα μοτίβα, όπως ο Παραλληλισμός Τανυστών και ο Παραλληλισμός Δεδομένων, αλλά επιβάλλουν περιορισμούς που περιορίζουν την εφαρμογή τους σε αναδυόμενα φόρτα εργασίας:
Σταθερή συμμετοχή: Οι συλλογικές επικοινωνίες απαιτούν τη δημιουργία ενός παγκόσμιου κόσμου επικοινωνίας κατά την προετοιμασία, με συγχρονισμένη ρύθμιση σε όλους τους συμμετέχοντες. Για την αποεξουσιοδοτημένη εξαγωγή συμπερασμάτων, αυτό είναι προβληματικό καθώς ο αριθμός των στιγμιότυπων prefill και decode πρέπει να κλιμακώνεται δυναμικά σε απόκριση στα μοτίβα κίνησης.
Ομοιόμορφα σχήματα τανυστών: Οι συλλογικές επικοινωνίες υποθέτουν ότι όλοι οι συμμετέχοντες ανταλλάσσουν τανυστές με πανομοιότυπα σχήματα και τύπους δεδομένων. Στη δρομολόγηση MoE, ο αριθμός των tokens που αποστέλλονται σε κάθε ειδικό εξαρτάται από τα δεδομένα και ανακαλύπτεται κατά την εκτέλεση, αναγκάζοντας τις πυκνές συλλογικές επικοινωνίες all-to-all να συμπληρώνουν τα μεγέθη buffer χειρότερης περίπτωσης.
Σειρά λειτουργιών: Τα API συλλογικής επικοινωνίας επιβάλλουν συγχρονισμένη σημασιολογία, ακόμη και όταν οι εφαρμογές χρειάζεται απλώς να γνωρίζουν ότι ένα σύνολο λειτουργιών έχει ολοκληρωθεί. Για παράδειγμα, στη μεταφορά KvCache, όλες οι σελίδες από το στιγμιότυπο prefill προς το στιγμιότυπο decode μπορούν να φτάσουν με οποιαδήποτε σειρά. Ομοίως, στις ενημερώσεις βαρών RL, όλοι οι τανυστές βαρών μπορούν να μεταφερθούν ανεξάρτητα χωρίς περιορισμούς σειράς.
Η επικοινωνία σημείου-προς-σημείο βασισμένη σε RDMA αντιμετωπίζει φυσικά αυτούς τους περιορισμούς, αλλά τρία εμπόδια έχουν αποτρέψει την υιοθέτησή της:
Περιορισμοί βιβλιοθήκης: Παρόλο που τα torch.distributed και NCCL παρέχουν API σημείου-προς-σημείο όπως Send/Recv, αυτές οι λειτουργίες εξακολουθούν να κληρονομούν συλλογική σημασιολογία και περιορισμούς.
Πολυμορφία υλικού: Τα NIC NVIDIA ConnectX με μεταφορά Reliable Connection (RC) είναι η πιο κοινή ρύθμιση RDMA, εγγυώμενη την παράδοση με τη σειρά. Οι πάροχοι cloud όπως το AWS χρησιμοποιούν διαφορετικό υλικό, το Elastic Fabric Adapter (EFA) με μεταφορά Scalable Reliable Datagram (SRD) παραδίδει μηνύματα εκτός σειράς. Το EFA απαιτεί επίσης τη συγκέντρωση τεσσάρων NIC 100 Gbps (ή δύο NIC 200 Gbps) για την επίτευξη εύρους ζώνης 400 Gbps.
Φορητότητα λογισμικού: Οι υπάρχουσες βιβλιοθήκες RDMA υποφέρουν από δέσμευση προμηθευτή (vendor lock-in). Το DeepEP απαιτεί RDMA που ξεκινά από GPU (IBGDA) διαθέσιμο μόνο στο ConnectX. Το NVSHMEM παρουσιάζει σοβαρή υποβάθμιση απόδοσης στο EFA. Βιβλιοθήκες όπως το Mooncake και το NIXL στερούνται υποστήριξης EFA ή παραμένουν σε πρώιμη ανάπτυξη. Ως αποτέλεσμα, δεν υπάρχει βιώσιμη λύση πολλαπλών παρόχων για την εξαγωγή συμπερασμάτων LLM.
TransferEngine
Το TransferEngine αντιμετωπίζει αυτά τα εμπόδια μέσω τεσσάρων βασικών δυνατοτήτων:
Κοινές υποθέσεις μεταφοράς: Αντί να στοχεύει σε ένα συγκεκριμένο NIC, το TransferEngine υποθέτει μόνο ότι η υποκείμενη μεταφορά είναι αξιόπιστη αλλά μη διατεταγμένη, δηλαδή την τομή των εγγυήσεων που παρέχονται από τις μεταφορές RC και SRD.
Συγχρονισμός ImmCounter: Ένα νέο πρωτόγονο για ειδοποίηση ολοκλήρωσης που λειτουργεί χωρίς να βασίζεται στη σειρά μηνυμάτων, επιτρέποντας στον ίδιο κώδικα να εκτελείται τόσο σε διατεταγμένες (RC) όσο και σε μη διατεταγμένες (SRD) μεταφορές.
Υποστήριξη πολλαπλών NIC: Διαφανής διαχείριση πολλαπλών NIC ανά GPU, αυτόματος καταμερισμός μεταφορών για τη μεγιστοποίηση του εύρους ζώνης.
Ελάχιστη επιφάνεια API: Ένα μικρό σύνολο λειτουργιών επαρκές για τη δόμηση σύνθετων μοτίβων επικοινωνίας.
Το TransferEngine δημιουργεί ένα νήμα εργασίας ανά GPU. Κάθε εργάτης διαχειρίζεται μια DomainGroup που συντονίζει 1 έως 4 NIC RDMA, ανάλογα με την πλατφόρμα υλικού (ένα ενιαίο ConnectX-7 παρέχει 400 Gbps, ενώ το EFA απαιτεί τέσσερις προσαρμογείς 100 Gbps ή δύο προσαρμογείς 200 Gbps). Εντός μιας DomainGroup, κάθε Domain είναι ειδική για το υλικό και διαχειρίζεται ένα ενιαίο NIC, χειριζόμενο τη διαχείριση ζευγαριών ουρών, την υποβολή εργασιών και την ανίχνευση ολοκλήρωσης.
Κάθε στιγμιότυπο TransferEngine εκθέτει μια ενιαία κύρια διεύθυνση για την αναγνώριση και την ανακάλυψη ομοτίμων. Οι απομακρυσμένοι ομότιμοι ανταλλάσσουν δομές NetAddr που κωδικοποιούν διευθύνσεις δικτύου και μπορούν να σειριοποιηθούν για επικοινωνία εκτός ζώνης. Όλοι οι ομότιμοι σε ένα σύστημα πρέπει να χρησιμοποιούν τον ίδιο αριθμό NIC ανά GPU. Αυτή η ομοιόμορφη διαμόρφωση επιτρέπει στο TransferEngine να καταμερίζει τις μεταφορές έξυπνα: κατά την έναρξη μιας μεταφοράς, τόσο η πηγή όσο και ο προορισμός γνωρίζουν ακριβώς ποια NIC είναι διαθέσιμα, επιτρέποντας την αυτόματη εξισορρόπηση φορτίου σε όλους τους προσαρμογείς.
Σχεδίαση API
Το TransferEngine εκθέτει ένα ελάχιστο API που αφαιρεί την πολυπλοκότητα των υποκείμενων διεπαφών RDMA.
#[serde] struct NetAddr(Bytes);
#[serde] struct MrDesc{ ptr: u64, rkeys: Vec<(NetAddr, u64)> }
struct MrHandle(NonNull<c_void>); type Offset = u64;
struct Pages{ indices: Vec<u32>, stride: u64, offset: Offset }
struct PeerGroupHandle(u64);
struct ScatterDst{ len: u64, src: Offset, dst: (MrDesc,Offset)}
enum OnDone { Callback(fn () -> ()), Flag(Atomic<bool>) }
trait TransferEngine {
fn main_address() -> NetAddr;
// Memory Region Management
fn reg_mr(ptr, len, device) -> (MrHandle, MrDesc);
// Two-sided Send/Recv
fn submit_send(addr: NetAddr, msg: &[u8], cb: fn () -> ());
fn submit_recvs(len: u64, cnt: u64, cb: fn (&[u8]) -> ());
// One-sided Write
fn expect_imm_count(imm: u32, count: u32, cb: fn () -> ());
fn submit_single_write(len: u64, imm: Option<u32>
src: (MrHandle, Offset), dst: (MrDesc, Offset), OnDone);
fn submit_paged_writes(page_len: u64, imm: Option<u32>,
src: (MrHandle, Pages), dst: (MrDesc, Pages), OnDone);
// One-sided Write to a group of peers
fn add_peer_group(addrs: Vec<NetAddr>) -> PeerGroupHandle;
fn submit_scatter(h: Option<PeerGroupHandle>, OnDone,
imm: Option<u32>, src: MrHandle, dst: Vec<ScatterDst>);
fn submit_barrier(h: Option<PeerGroupHandle>, OnDone,
imm: u32, dst: Vec<MrDesc>);
// Watcher for CPU-GPU synchronization
fn alloc_uvm_watcher(cb: fn(u64,u64) -> ()) -> NonNull<u64>;
}Το API αποτελείται από πολλά βασικά στοιχεία:
Καταχώρηση Μνήμης
Οι λειτουργίες RDMA απαιτούν την καταχώρηση περιοχών μνήμης με το NIC πριν από τη μεταφορά δεδομένων. Η συνάρτηση reg_mr λαμβάνει έναν δείκτη, μήκος και συσκευή, επιστρέφοντας δύο λαβές:
MrHandle: Μια τοπική λαβή που χρησιμοποιείται ως πηγή για μεταφορές
MrDesc: Ένας σειριοποιήσιμος περιγραφέας που μπορεί να ανταλλαχθεί με απομακρυσμένους ομότιμους για να τους επιτρέψει να γράψουν στην καταχωρημένη μνήμη
Η δομή MrDesc περιέχει μια λίστα απομακρυσμένων διευθύνσεων δικτύου και απομακρυσμένου κλειδιού (ένα ανά NIC) που χορηγούν απομακρυσμένη πρόσβαση στην περιοχή μνήμης. Αυτός ο σχεδιασμός χειρίζεται φυσικά ρυθμίσεις πολλαπλών NIC.
Αποστολή/Λήψη Δύο Κατευθύνσεων
Για μικρά μηνύματα και μηνύματα επιπέδου ελέγχου τύπου RPC, το TransferEngine παρέχει τα submit_send και submit_recvs:
submit_send: Στέλνει το μήνυμα σε έναν απομακρυσμένο ομότιμο που προσδιορίζεται από το NetAddr. Το μήνυμα αντιγράφεται εσωτερικά, οπότε ο καλών μπορεί να επαναχρησιμοποιήσει ή να απελευθερώσει αμέσως το buffer.
submit_recvs: Δημοσιεύει μια ομάδα buffer λήψης. Όταν φτάνει ένα μήνυμα, καλείται μια συνάρτηση επαφής (callback) με τα ληφθέντα δεδομένα. Το buffer επιστρέφεται αυτόματα στην ομάδα αφού ολοκληρωθεί η συνάρτηση επαφής.
Μονόπλευρη Εγγραφή
Για μαζικές μεταφορές δεδομένων, το TransferEngine παρέχει μονόπλευρες λειτουργίες εγγραφής μηδενικής αντιγραφής (zero-copy):
submit_single_write: Μεταφέρει μια συνεχή περιοχή από την πηγή στον προορισμό
submit_paged_writes: Μεταφέρει μη συνεχείς σελίδες που καθορίζονται από δείκτες, βήματα και μετατοπίσεις
Και οι δύο λειτουργίες αποδέχονται μια προαιρετική τιμή 32-bit άμεσης παράδοσης που παραδίδεται στον δέκτη ατομικά κατά την ολοκλήρωση.
Ο μηχανισμός καταμερίζει αυτόματα μεγάλες μεταφορές σε πολλαπλά NIC για τη μεγιστοποίηση του εύρους ζώνης.
Ομάδες Ομοτίμων και Μαζικές Λειτουργίες
Για λειτουργίες που στοχεύουν πολλαπλούς ομότιμους (συνηθισμένες στη δρομολόγηση MoE), το TransferEngine παρέχει βελτιστοποιημένα πρωτόγονα:
add_peer_group: Προ-καταχωρεί ένα σύνολο διευθύνσεων ομοτίμων για γρήγορη αναζήτηση
submit_scatter: Στέλνει διαφορετικά τμήματα δεδομένων σε κάθε ομότιμο της ομάδας
submit_barrier: Στέλνει μια ειδοποίηση μόνο άμεσης τιμής σε όλους τους ομότιμους (μεταφορά μηδενικών byte)
Αυτές οι λειτουργίες είναι βελτιστοποιημένες για χαμηλή καθυστέρηση μέσω της αποθήκευσης εσωτερικών δομών δεδομένων στη μνήμη cache και της δημιουργίας προτύπων αιτημάτων εργασίας RDMA, αποφεύγοντας επαναλαμβανόμενο κόστος ρύθμισης.
UVM Watcher: Σηματοδότηση GPU-σε-CPU
Μια βασική πρόκληση στα συστήματα LLM είναι ο συντονισμός των μεταφορών RDMA με την πρόοδο της GPU. Ιανικά, η μεταφορά δεδομένων θα πρέπει να ξεκινήσει μόλις η GPU παράγει έξοδο, αλλά ο έλεγχος (polling) της GPU από την CPU είναι αναποτελεσματικός.
Το TransferEngine το αντιμετωπίζει αυτό με UVM Watchers: τοποθεσίες ενοποιημένης εικονικής μνήμης που μπορούν να ενημερωθούν από πυρήνες GPU (ακόμη και εντός γραφημάτων CUDA) και να ελεγχθούν αποτελεσματικά από την CPU χρησιμοποιώντας το GDRCopy. Όταν εκχωρείται ένας watcher UVM, καταχωρείται μια συνάρτηση επαφής που καλείται όποτε η GPU ενημερώνει την τιμή.
Αυτό επιτρέπει μοτίβα όπως η μεταφορά KvCache στρώση προς στρώση: αφού ολοκληρωθεί κάθε στρώση μετασχηματιστή (transformer layer), η GPU αυξάνει τον watcher, ενεργοποιώντας μια μεταφορά RDMA του KvCache αυτού του στρώματος ενώ τα επόμενα στρώματα συνεχίζουν τον υπολογισμό.
Ειδοποίηση Ολοκλήρωσης
Το TransferEngine παρέχει μηχανισμούς ειδοποίησης ολοκλήρωσης τόσο για την πλευρά του εκκινητή (τον καλούντα του submit_write) όσο και για την πλευρά του δέκτη (τον στόχο των λειτουργιών Write).
Ειδοποίηση πλευράς εκκινητή: Όταν υποβάλλεται μια λειτουργία εγγραφής, ο καλών μπορεί να επιλέξει να ειδοποιηθεί κατά την ολοκλήρωση είτε μέσω μιας συνάρτησης επαφής είτε μέσω μιας ατομικής σημαίας. Αυτή η ειδοποίηση επιβεβαιώνει ότι τα δεδομένα έχουν μεταφερθεί επιτυχώς από το buffer πηγής.
Ειδοποίηση πλευράς δέκτη: Η βασική καινοτομία είναι το ImmCounter, ένα στοιχείο που παρακολουθεί μετρητές σε ευρετήριο με άμεσους αριθμούς 32-bit. Όταν μια λειτουργία εγγραφής φέρει μια άμεση τιμή, το ImmCounter του δέκτη αυξάνεται ατομικά κατά την παράδοση δεδομένων. Η συνάρτηση expect_imm_count επιτρέπει στον δέκτη να καταχωρήσει μια συνάρτηση επαφής που πυροδοτείται όταν μια συγκεκριμένη άμεση τιμή φτάσει σε έναν αριθμό στόχο. Οι μετρητές μπορούν να συγχρονιστούν διαφανώς με την GPU μέσω GDRCopy, να ελεγχθούν απευθείας ή να παρακολουθηθούν μέσω συναρτήσεων επαφής.
Αυτός ο μηχανισμός πλευράς δέκτη παρέχει αξιόπιστο συγχρονισμό χωρίς να απαιτείται σειρά μηνυμάτων. Λειτουργεί εξίσου καλά σε NIC ConnectX (που εγγυώνται παράδοση με τη σειρά μέσω μεταφοράς RC) και NIC EFA (που παραδίδουν μηνύματα εκτός σειράς μέσω μεταφοράς SRD).
Υλοποίηση
Το TransferEngine είναι υλοποιημένο στη Rust, βελτιστοποιώντας προσεκτικά τις εκχωρήσεις, τα νήματα και τον συγχρονισμό για την ελαχιστοποίηση της καθυστέρησης και την επίτευξη υψηλής απόδοσης. Η μηχανή δημιουργεί ένα νήμα εργασίας ανά DomainGroup, το καθένα καρφιτσωμένο σε έναν πυρήνα CPU στον κόμβο NUMA στον οποίο είναι συνδεδεμένες οι συσκευές, ελαχιστοποιώντας τόσο τον προγραμματισμό όσο και την καθυστέρηση πρόσβασης στη μνήμη. Οι δομές δεδομένων που αφορούν συγκεκριμένα ένα domain εκχωρούνται μετά το καρφίτσωμα για να διασφαλιστεί ότι η μνήμη δεσμεύεται στον σωστό κόμβο NUMA. Ένα νήμα εργασίας χειρίζεται έως και 4 Domains (το καθένα διαχειρίζεται ένα ενιαίο NIC), ενώ ένα άλλο αποκλειστικό νήμα ελέγχει τη GPU για την ενημέρωση των watchsers UVM. Η επικοινωνία μεταξύ νημάτων γίνεται μέσω ουρών χωρίς κλείδωμα (lock-free).
Το API προωθεί αιτήματα στο DomainGroup που εξυπηρετεί την κατάλληλη συσκευή, με το πρώτο να εξυπηρετεί επίσης τον κεντρικό υπολογιστή. Σε έναν στενό βρόχο (tight loop), ο εργάτης του domain ελέγχει για νέα εργασία, δίνοντας προτεραιότητα στην υποβολή νέων αιτημάτων. Ανάλογα με το υλικό και τη διαμόρφωση, τα αιτήματα καταμερίζονται και εξισορροπούνται ως προς το φορτίο στα διαθέσιμα Domains. Η πρώτη εγγραφή ενός σύνθετου αιτήματος δημοσιεύεται αμέσως στην ουρά αποστολής του NIC. Μόλις εξαντληθούν τα νέα αιτήματα, ο εργάτης προχωρά στην πρόοδο των εκκρεμών λειτουργιών, δημοσιεύοντας εγγραφές για να γεμίσει το pipeline του υλικού. Στη συνέχεια, οι ουρές ολοκλήρωσης ελέγχονται για να ερωτηθούν οι ολοκληρωμένες μεταφορές και οι αυξήσεις άμεσων μετρητών. Τα γεγονότα συγκεντρώνονται για την παράδοση ειδοποιήσεων ανά μεταφορά, παραδίδοντας τη μεταφορά σε ένα αποκλειστικό νήμα συνάρτησης επαφής που μοιράζονται όλες οι ομάδες.
Ο καταμερισμός εντός ενός DomainGroup είναι ευέλικτος. Οι μεταφορές μπορούν να στοχεύσουν συγκεκριμένα NIC ανά δείκτη. Μια μεμονωμένη εγγραφή μπορεί να διασπαστεί. Οι μεταφορές σε σελίδες, το scatter και οι λειτουργίες φραγμού (barrier), οι οποίες μεταφράζονται όλες σε πολλαπλές εγγραφές, μπορούν να καταμεριστούν σε όλα τα NIC.
Βελτιστοποιήσεις Ειδικές για το Υλικό
Τα Domains εντός του TransferEngine είναι εξειδικευμένα και βελτιστοποιημένα για το υλικό υπό τον έλεγχό τους:
AWS EFA: Η υλοποίηση του EFA χρησιμοποιεί το libfabric, διαχειριζόμενη έναν fabric domain ανά NIC μέσα στο DomainGroup. Οι βασικές αποφάσεις υλοποίησης και οι βελτιστοποιήσεις περιλαμβάνουν:
Εγγραφές μηδενικού μεγέθους: Το EFA αποκλίνει από την προδιαγραφή RDMA απαιτώντας έγκυρους περιγραφείς στόχου ακόμη και για εγγραφές μηδενικού μεγέθους. Ως εκ τούτου, το TransferEngine επιβάλλει έγκυρους περιγραφείς για όλες τις μεταφορές.
Δημιουργία προτύπων αιτημάτων εργασίας: Προ-συμπληρώνει και διατηρεί τα κοινά πεδία των δομών libfabric πριν από τη δημοσίευση, μειώνοντας το κόστος ανά λειτουργία για μαζικές μεταφορές και λειτουργίες ομάδας ομοτίμων.
NVIDIA ConnectX-7: Η υλοποίηση ConnectX-7 χρησιμοποιεί libibverbs με μεταφορά RC. Οι βασικές αποφάσεις υλοποίησης και οι βελτιστοποιήσεις περιλαμβάνουν:
Ζεύγη ουρών UD για χειραψίες: Κάθε Domain χρησιμοποιεί ένα ζεύγος ουρών Unreliable Datagram (UD) για την ανταλλαγή χειραψιών σύνδεσης RC.
Ξεχωριστά ζεύγη ουρών RC: Δημιουργεί 2 ζεύγη ουρών RC ανά ομότιμο, ένα για λειτουργίες Send/Recv δύο κατευθύνσεων και ένα άλλο για μονόπλευρες λειτουργίες Write και WriteImm. Αυτός ο διαχωρισμός είναι απαραίτητος επειδή οι ολοκληρώσεις Recv και WriteImm καταναλώνουν αιτήματα εργασίας με τη σειρά δημοσίευσης, επιτρέποντας σημασιολογία Recv υψηλού επιπέδου ενώ υποστηρίζουν το WriteImm χωρίς παρεμβολές.
Δημιουργία προτύπων αιτημάτων εργασίας: Προ-συμπληρώνει κοινά πεδία δομών αιτημάτων εργασίας για μαζικές μεταφορές και ομάδες ομοτίμων.
Αλύσωση αιτημάτων εργασίας: Συνδέει έως και 4 αιτήματα εργασίας μέσω του δείκτη next του ibv_send_wr, μειώνοντας τον αριθμό των χτυπημάτων κουδουνιού (doorbell rings) στο NIC.
Χαλαρή σειρά: Επιτρέπει το IBV_ACCESS_RELAXED_ORDERING για να επιτρέπονται συναλλαγές PCIe εκτός σειράς μεταξύ του NIC και της μνήμης της GPU.
Συμπέρασμα
Στοχεύοντας την τομή των εγγυήσεων σε διαφορετικές μεταφορές RDMA και εισάγοντας συγχρονισμό ανεξάρτητο από τη σειρά μέσω του ImmCounter, το TransferEngine παρέχει μια φορητή βάση για επικοινωνία σημείου-προς-σημείο σε συστήματα LLM. Η βιβλιοθήκη είναι ανοιχτού κώδικα και διαθέσιμη στο GitHub, και ενθαρρύνουμε την κοινότητα να την εξερευνήσει και να βασιστεί σε αυτήν για αναδυόμενα μοτίβα επικοινωνίας σε συστήματα μηχανικής μάθησης κλίμακας.
Παραπομπή
@online{perplexity2025RdmaPointToPointCommunicationForLlmSystems,
author = {{Perplexity} and Nandor Licker and Kevin Hu and Vladimir Zaytsev and Lequn Chen},
title = {{RDMA point-to-point communication for LLM systems}},
date = {2025-11-05},
url = {https://www.perplexity.ai/hub/blog/rdma-point-to-point-communication-for-llm-systems}
}