Der Wechsel betrifft das Backend, das `torch.compile` für IBMs Spyre-Beschleuniger nutzt. Zuvor kam dafür sendnn zum Einsatz, ein separat entwickelter Compiler-Stack. Nun erweitert torch-spyre den quelloffenen Inductor, der zu PyTorch gehört. Der größte Teil von Inductor konnte laut den Entwicklern unverändert übernommen werden; nötig waren Ergänzungen für die Eigenheiten der Spyre-Hardware.
Spyre ist ein PCIe-Beschleuniger mit einer Leistungsaufnahme von 75 Watt, ausgelegt auf Inferenz mit reduzierter Genauigkeit. Die Architektur umfasst 32 kleine Kerne, die über einen Ring verbunden sind. Jeder Kern besitzt einen lokalen Scratchpad-Speicher von 2 MB statt eines gemeinsam genutzten Caches. Daten werden in festen Einheiten, sogenannten Sticks, mit jeweils 128 Byte bewegt; bei fp16 entspricht das 64 Werten.
torch-spyre übersetzt ein mit `torch.compile` verarbeitetes Modell zunächst mithilfe von Inductor-Erweiterungen in eine Zwischenrepräsentation namens SuperDSC. Anschließend wandelt der proprietäre Compiler DeepTools diese in Anweisungen für Spyre um. Der beschriebene Umbau betrifft die erste Stufe. Zu den Aufgaben der Erweiterungen zählen die Zuordnung von Datenlayouts, das Aufteilen von Berechnungen, die Verteilung der Arbeit auf Kerne und die Verwaltung des lokalen Speichers. Auch PyTorch-Operationen wie Layer Normalization werden in für Spyre geeignete Abläufe zerlegt.
Die Entwickler betonen, dass der Wechsel keine unveränderte Plug-and-play-Umstellung war: Für die Anpassungen mussten sie Inductors untere Ebenen und die Codegenerierung erweitern. Einen zentralen Eingriffspunkt binden sie derzeit über einen Monkey-Patch ein, weil Inductor dort noch keinen passenden offiziellen Erweiterungshaken bietet. IBM arbeitet nach eigenen Angaben mit dem PyTorch-Projekt daran, solche Erweiterungspunkte zu formalisieren, damit externe Hardware-Backends sie nutzen können.
