B&A
Normal Computing Corporation
Compiler Backend Engineer
Über die Stelle
Normal Computing | Bauen Sie mit uns
Die Rolle
Normal ist ein Unternehmen für angewandte KI, das die schwierigsten Probleme in den Bereichen KI und Halbleiter löst. Wir entwickeln grundlegende Hardware und Software für die Halbleiterindustrie, kritische KI-Infrastruktur und die umfassenderen Systeme, die unsere Welt antreiben – in Partnerschaft mit den weltweit fortschrittlichsten Institutionen. Wir arbeiten als ein Team über New York City, Silicon Valley (Mountain View), London, Kopenhagen und Seoul hinweg.
Die Hardware von Normal führt die speicherintensivsten Teile der Inferenz großer Modelle direkt im Speicher aus, anstatt Gewichte an einen Prozessor zu übertragen. Die Software, die dies programmierbar macht, existiert bisher in keiner Standardform. Ein Modell auf dieser Hardware korrekt zum Laufen zu bringen, ist die Aufgabe des frontend-Teams; es schnell zu machen, ist Ihre Aufgabe. Unsere Hardware ähnelt weder einer CPU noch einer GPU, daher kann ihr Compiler-backend nicht einfach von dort übernommen werden. Als Compiler Engineer mit Fokus auf das backend helfen Sie beim Entwurf und Aufbau der benutzerdefinierten Kompilierung, die die LLM-Inferenz darauf abbildet – von der Zeitplanung und Speicherplanung bis hin zum Code, den unsere Hardware tatsächlich ausführt.
Sie arbeiten an der Schnittstelle zwischen Compiler und Hardware, nah genug, um zu erkennen, wann eine Optimierung auf einer anderen Ebene besser aufgehoben ist oder wann die richtige Antwort eine neue Abstraktion erfordert. Unser Chip befindet sich noch im Pre-Silicon-Stadium, daher messen Sie Ihre Arbeit zunächst an unseren Simulatoren und FPGA-Prototypen und später, sobald verfügbar, an der tatsächlichen Hardware.
Ihre Aufgaben
- Code-Generierung: Erstellen Sie die Passes, die heruntergestufte Programme in den Code umwandeln, den unsere Hardware ausführt, und entwerfen Sie neue Kompilierungsansätze, wo herkömmliche Methoden nicht passen. Erfolg bedeutet korrekten, effizienten Code für jeden Vorgang, den unsere Modelle benötigen.
- Zeitplanung und Speicherplanung: Verantworten Sie, wie Arbeit und Daten über die Ressourcen unserer Hardware geplant und platziert werden, gemessen an der Auslastung und der End-to-End-Latenz bei der LLM-Inferenz.
- Fusion und Dispatch: Verantworten Sie Fusion- und Dispatch-Entscheidungen für die LLM-Inferenz, damit die Hardware ihre Zeit mit Berechnungen verbringt, anstatt Daten zu verschieben.
- Hardware-Co-Design: Arbeiten Sie an der Abstraktionsschicht zwischen Compiler und Hardware und geben Sie Compiler-Beschränkungen an unsere Hardware-Architekten zurück, solange das Design noch angepasst werden kann.
- Profiling und Validierung: Validieren Sie jede Optimierung mit gemessenen Ergebnissen aus Simulatoren, FPGA-Prototypen und schließlich der Hardware und pflegen Sie eine Performance-Regressions-Suite, auf die sich das Team verlassen kann.
- Teamübergreifende Übergaben: Übernehmen Sie heruntergestufte Programme von unseren frontend-Compiler-Ingenieuren und entscheiden Sie gemeinsam mit dem Team, welche Operationen der Compiler generiert und welche handoptimierte Kernel verwenden.
Was Sie mitbringen
- Fundierte Erfahrung mit Compiler-Optimierung oder Code-Generierung für Beschleuniger oder andere Nicht-CPU-Ziele: Scheduling, Tiling, Fusion oder Ressourcenallokation
- Vertrautheit mit hardwarenaher Arbeit: Sie denken in Begriffen wie Speicherbandbreite und Auslastung sowie asymptotischer Komplexität
- Bereitschaft, Kompilierungsansätze von Grund auf neu zu entwerfen, wenn bestehende Ansätze nicht zur Hardware passen
- Nachweisbare Erfolge bei der Implementierung von Optimierungen, die messbare Leistungssteigerungen bewirkt haben
- Sicherheit bei der Softwareentwicklung für Hardware, die sich noch in der Entwicklung befindet, von der Simulation bis zum Bring-up
- Fließende Kenntnisse in Python sowie Vertrautheit mit C, C++ oder Rust
Wünschenswerte Qualifikationen
- Erfahrung mit dem Kompilierungs-Stack von PyTorch (TorchDynamo, FX, Inductor, torch.export) oder anderen ML-Compilern wie IREE, TVM oder XLA
- Erfahrung mit der Kompilierung für In-Memory-, räumliche oder andere Nicht-von-Neumann-Rechenziele
- Hintergrund in Hardware-Design-Tools wie Logiksynthese oder Place-and-Route
- Erfahrung im Erstellen oder Verwenden von zyklusgenauen oder Performance-Simulatoren zur Steuerung von Optimierungsentscheidungen
- Beiträge zu Open-Source-Compiler- oder Kernel-Infrastrukturen (z. B. PyTorch, Triton, TVM, MLIR, LLVM)
- Veröffentlichung oder Präsentation von Compiler- oder Performance-Arbeiten auf Konferenzen wie MLSys, ASPLOS oder CGO
Hinweis zur Chancengleichheit
Normal Computing ist ein Arbeitgeber, der Chancengleichheit fördert. Wir feiern Vielfalt und setzen uns für ein integratives Umfeld für alle Mitarbeiter ein. Alle qualifizierten Bewerber werden unabhängig von Rasse, Hautfarbe, Religion, Geschlecht, sexueller Orientierung, Geschlechtsidentität, nationaler Herkunft, Behinderung, Veteranenstatus oder einem anderen gesetzlich geschützten Status für eine Anstellung in Betracht gezogen.
Barrierefreiheit und Anpassungen
Normal Computing verpflichtet sich, angemessene Vorkehrungen für Menschen mit Behinderungen zu treffen. Wenn Sie aufgrund einer Behinderung Unterstützung oder Anpassungen benötigen, lassen Sie es uns bitte unter accommodations@normalcomputing.com wissen.
Datenschutzhinweis
Mit dem Einreichen Ihrer Bewerbung erklären Sie sich damit einverstanden, dass Normal Computing Ihre persönlichen Daten für beschäftigungsbezogene Zwecke gemäß unserem Datenschutzhinweis für Bewerber sammeln, verwenden und speichern darf.
