IBM 스파이어, 인덕터 기반 백엔드로 전환
최근 30일 조회수 — 좋아요 —핵심 요약
IBM은 스파이어의 하드웨어 특성에 맞춰 파이토치 인덕터를 확장하고 컴파일러 코드를 7분의 1로 줄였다.

파이토치 기반 IBM 스파이어(Spyre) 소프트웨어 스택이 torch.compile 백엔드를 독자 개발한 센디엔엔(sendnn)에서 파이토치 인덕터(Inductor)를 확장한 오픈소스 백엔드로 교체했다. 새 백엔드는 backend=inductor로 동작하며, 기존 컴파일러보다 코드 규모가 약 7분의 1로 줄었다. 다만 인덕터를 그대로 이식한 것은 아니다. 스파이어의 데이터 이동 방식과 온칩 메모리 관리, 코어별 작업 배분을 처리하려면 저수준 확장과 별도 코드 생성 작업이 필요했다.1
스파이어는 IBM이 기업용 AI 추론과 전력 효율을 염두에 두고 처음부터 설계한 75W PCIe 가속기다. 맞춤형 전력 공급이나 냉각이 필요하지 않는다. 하드웨어는 링 구조로 연결된 소형 코어 32개로 구성되며, 공유 캐시 대신 코어마다 2MB 스크래치패드를 둔다. 데이터는 ‘스틱(stick)’이라는 128바이트 고정 단위로 이동한다. 이는 FP16 값 64개에 해당한다. GPU를 중심으로 발전한 인덕터의 기본 가정과 어긋나는 지점이 바로 이 구조다.
스파이어용 파이토치 통합 계층인 토치-스파이어(torch-spyre)의 컴파일 과정은 두 단계로 나뉜다. 먼저 토치-스파이어 저장소에 있는 인덕터 확장이 torch.compile 그래프를 중간 표현인 슈퍼DSC(SuperDSC)로 낮춘다. 이어 IBM의 독점 컴파일러 딥툴스(DeepTools)가 슈퍼DSC를 스파이어 명령어로 변환한다. 따라서 이번에 공개된 설명과 오픈소스 확장의 범위는 첫 번째 단계에 집중된다.
앞단의 흐름은 표준 torch.compile 파이프라인을 유지한다. 다이나모(Dynamo)가 모델을 추적하고 AOT오토그래드(AOTAutograd)가 그래프를 나눈 뒤, 인덕터가 FX 그래프를 루프레벨IR(LoopLevelIR)로 변환한다. 토치-스파이어는 여기에 스파이어 전용 연산 분해와 로어링을 등록한다. 예컨대 레이어 정규화(layer normalization)를 스파이어에 최적화된 기본 연산 조합으로 바꾸고, 인덕터가 이 연산들을 처리하도록 규칙을 추가한다.
핵심적인 하드웨어 대응은 CustomPreSchedulingPasses에 모였다. 이 단계에서 데이터 배치, 타일링, 코어별 작업 분할, 스크래치패드 할당을 결정한다. 인덕터 대부분을 손대지 않고 재사용하면서도 컴파일러 규모를 크게 줄일 수 있었던 이유다. 반면 이 지점은 아직 정식 확장 인터페이스가 아니라 인덕터의 GraphLowering.codegen()을 몽키 패치해 연결한다. 토치-스파이어 측은 특히 많이 활용한 확장 지점을 정식화하기 위해 파이토치 프로젝트와 협력하고 있다. 성과는 분명하지만, 현재 구현은 완전한 플러그인 방식의 백엔드라기보다 인덕터 내부 접점에 의존하는 외부 확장에 가깝다.1
Footnotes
읽기 목록은 이 브라우저에 저장됩니다.
출처
- Extending Inductor for the IBM Spyre Accelerator - PyTorch — PyTorch Blog
이 글은 위 출처를 근거로 자동 생성된 뒤 발행됐습니다. 원문을 함께 확인해 주세요. 교차 보도 없이 단독 출처로 작성됐습니다.