본문으로 건너뛰기

AI 에이전트로 Spyre의 새 모델 지원 가속

AI coding agent가 HuggingFace 모델과 Spyre stack 사이의 adapter를 작성해 새 accelerator의 모델 지원을 빠르게 넓혔습니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

새로운 model family와 accelerator가 계속 등장하면서 HuggingFace Transformers의 모델 코드와 각 hardware의 compiler·runtime stack 사이에 지원 공백이 반복해서 생깁니다. 글은 runtime adapter를 사용해 unsupported operator를 동등한 연산으로 치환하거나 tensor padding을 조정하고, AI coding agent가 두 codebase를 함께 읽어 adapter 초안을 만들도록 하는 접근을 제시합니다. IBM Spyre 사례에서는 13개 distinct adapter로 10,000개 HF embedding model 중 7,960개를 연결했고 6,804개가 Spyre end-to-end test를 통과했지만, fusion과 device-only numerical drift를 구분하는 진단에는 사람의 판단이 남았습니다. adapter는 모델 실행을 가능하게 하는 임시 연결 계층인 동시에 실제 weight와 activation으로 compiler stack의 다음 오류를 드러내는 validation 도구로 기능합니다.

섹션별 상세

01
새로운 model family와 checkpoint가 계속 추가되면서 모델의 연산 구성, shape, 수치 범위가 backend가 지원하는 범위보다 앞서 나가는 문제가 생깁니다. 모델을 device에서 실행하려면 compiler, operator lowering, runtime이 PyTorch 연산을 hardware core와 memory 구조에 맞춰야 하지만, 새 module이나 fused attention variant가 기존 경로를 벗어나면 실행이 중단되거나 성능이 떨어집니다. 특히 새 accelerator는 hardware와 함께 성장 중인 software stack이 제공되므로 전체 모델 ecosystem과 미성숙한 stack 사이의 공백을 동시에 좁혀야 합니다.
2019년부터 2027년까지 HuggingFace Transformers에 추가된 주요 LLM family를 시간순으로 표시한 계단형 timeline입니다.
Chart초기 GPT 계열에서 시작해 2024년 이후 Qwen, Llama, Gemma, DeepSeek, Kimi K2 등 새로운 family가 빠르게 늘어나는 흐름을 보여줍니다. 본문의 핵심인 model landscape와 compiler stack 사이의 지원 공백이 지속적으로 발생하는 배경을 시각화하며, 각 family가 서로 다른 module과 shape 조합을 가져 backend enablement 부담을 키운다는 설명과 연결됩니다.
Nvidia, Intel, AMD와 hyperscaler·startup의 accelerator 및 custom silicon 발표 시점을 2017년부터 2026년까지 표시한 timeline입니다.
ChartDatacenter GPU와 merchant silicon뿐 아니라 Google, Amazon, Tesla, IBM, Meta, Microsoft, OpenAI/Broadcom 등의 custom silicon 발표가 이어지는 모습을 보여줍니다. 새로운 hardware가 새로운 compiler와 runtime stack을 요구해 model landscape와 함께 software enablement가 계속 따라가야 한다는 본문의 맥락을 뒷받침합니다.
주요 LLM family가 2019년부터 2027년까지 누적 추가되는 흐름을 세로형으로 확대한 timeline입니다.
Chart이미지 1과 같은 model landscape timeline을 더 세로로 확대한 버전으로, GPT-2·OPT·BLOOM에서 최신 Kimi K2까지 family가 누적되는 순서를 보여줍니다. 새 architecture가 지속적으로 등장해 mature compiler도 지원 공백을 반복해서 마주한다는 글의 문제의식을 시각적으로 강조합니다.
02
기존 방식은 새 model family마다 hardware별 전문 인력이 코드를 추적하고 지원 경로를 추가해야 해 수주에서 수개월이 걸렸습니다. 글의 접근법은 runtime에서 unsupported operation을 동등한 연산으로 바꾸거나 tensor shape와 padding을 조정하는 얇은 adapter를 모델과 compiler 사이에 삽입하는 것입니다. adapter는 계산 결과를 바꾸지 않고 compiler가 lowering할 수 있는 표현만 제공하므로 stack이 완성될 때 제거할 수 있는 임시 scaffolding이 되며, hardware의 고유한 차이를 수용하는 경우에는 장기적으로 남을 수도 있습니다.
03
사례의 대상인 IBM Spyre는 AIU 기반 accelerator로, high-bandwidth ring으로 연결된 소형 core와 local scratchpad memory를 사용하고 dataflow 방식으로 계산을 실행합니다. Spyre는 128바이트 또는 fp16 값 64개 단위인 stick을 기준으로 tensor 차원을 배치해야 하지만 HuggingFace Transformers 모델은 통계적·모델링 목적에 따라 임의의 head dimension, sequence length, vocabulary size를 선택합니다. torch-spyre는 일반 torch code를 Spyre가 실행할 plan으로 compile하고 HF-adapters는 이 두 데이터 표현과 lowering 계약 사이를 연결합니다.
04
AI coding agent는 HuggingFace Transformers의 module·attention block·RoPE·norm 연결과 torch-spyre의 lowering logic을 동시에 읽어 두 codebase가 만나는 지점의 공백을 찾습니다. 이를 위해 두 repository의 source, GitHub issue와 pull request, 그리고 Spyre hardware와 software stack을 기록한 knowledge base를 함께 참조하고 기존 adapter를 유사 architecture의 template로 재사용합니다. 2026년 4월 중순부터 6월 말까지의 집계에서는 13개 distinct adapter가 가장 많이 다운로드된 HF embedding model 10,000개 중 7,960개에 연결됐고, 그중 6,804개가 Spyre end-to-end test를 통과했습니다.
AI coding agent가 model-side codebase와 device-side torch-spyre를 함께 읽고 adapter를 작성한 뒤 end-to-end validation과 사람의 diagnosis를 거치는 흐름도입니다.
Diagram왼쪽의 HuggingFace Transformers와 오른쪽의 torch-spyre에서 code를 읽은 agent가 두 관점을 결합해 adapter를 초안 작성하고 수정합니다. 검증 결과가 divergence를 보이면 사람이 문제를 국소화해 agent에 다시 전달하는 human-in-the-loop 구조가 본문의 역할 분담과 일치합니다.
2026년 4월 21일부터 6월 16일 이후까지 Spyre embedding adapter coverage와 distinct adapter 수의 누적 변화를 나타낸 그래프입니다.
Chart파란색 선은 adapter가 적용된 model 수, 초록색 선은 Spyre green test를 통과한 model 수, 주황색 점선은 distinct adapter 수를 나타냅니다. 소수의 adapter가 한 번에 여러 유사 architecture를 포괄해 최종적으로 7,960개 모델과 6,804개 통과 모델에 도달하는 계단형 증가를 보여줍니다.
05
자동화가 넓은 codebase를 읽고 첫 adapter를 만드는 데 유리해도 device에서만 나타나는 수치 오류의 위치를 확정하는 일은 사람의 판단이 필요합니다. CPU나 GPU에서는 원본과 adapter 코드가 bitwise-identical 출력을 내야 하지만 target hardware에서는 허용 가능한 numerical drift와 실제 lowering 오류를 구별해야 하며, compiler fusion 때문에 단독 연산 테스트와 전체 graph의 결과가 달라질 수 있습니다. 사람은 중간 tensor의 큰 차이를 곧바로 원인으로 단정하지 않고 CPU·GPU reference와 end-to-end output까지 차이를 추적해 실제 원인인지 확인합니다.
python
def gelu_forward(self, x):
    if x.device.type == "spyre":
        # x*x*x lowers on Spyre; torch.pow(x, 3) does not
        inner = COEFF * (x + 0.044715 * (x * x * x))
    else:
        # CPU keeps the stock form → bit-identical to HuggingFace
        inner = COEFF * (x + 0.044715 * torch.pow(x, 3.0))
    return 0.5 * x * (1.0 + torch.tanh(inner))

Spyre에서 lowering이 원활하지 않은 torch.pow(x, 3)을 x * x * x로 바꾸고 CPU 경로에서는 원래 연산을 유지합니다.

python
def pad_lm_head(model):
    """Grow the vocabulary dimension so that the output matrix multiply can be efficiently divided across the device cores.
    The extra rows are unused padding and do not affect the model output.
    """
    padded_vocab = round_up_to_divisible_size(model.vocab_size)
    ...

LM head의 vocabulary 차원을 device core가 균등하게 나눌 수 있는 크기로 올려 matrix multiplication의 compile 실패를 피합니다.

06
adapter는 모델을 실행시키는 호환성 계층인 동시에 compiler와 runtime의 약점을 드러내는 end-to-end validation 도구입니다. 실제 weight와 activation은 random tensor와 달리 특정 값 범위, 거의 일정한 행, 큰 outlier를 가지므로 device-only overflow, NaN, alignment·padding 오류를 일으킬 수 있고, 연산 단위 unit test만으로는 이런 조합을 포착하기 어렵습니다. 한 장애물을 우회한 뒤 모델이 더 깊은 graph까지 실행되면 이전 단계에서 가려졌던 다음 lowering 문제도 드러나므로 각 adapter가 workaround이자 새로운 probe가 됩니다.
07
구체적인 작은 수정은 GPT-2와 GPT-Neo decoder가 사용하는 gelu_new에서 torch.pow(x, 3.0)을 x * x * x로 바꾸는 방식입니다. 두 표현은 같은 cube 계산을 수행하지만 전자는 torch-spyre에서 lowering이 원활하지 않고 후자는 지원되므로 Spyre 경로에만 치환을 적용하며 CPU 경로는 HuggingFace 원형을 유지합니다. 더 높은 수준의 수정은 LM head의 vocabulary 차원을 padding하는 것으로, block 수가 core에 균등하게 분배되지 않아 한 slice가 device memory 제한을 넘는 compile 실패를 피하기 위해 사용하지 않는 행을 소수 개수만큼 추가합니다.
08
두 adapter 사례는 낮은 수준의 단일 operator 치환과 높은 수준의 tensor shape 조정이 모두 같은 원칙을 따른다는 점을 보여줍니다. 첫 번째는 문제가 된 instruction만 바꾸고 두 번째는 vocabulary block의 work division을 유도하지만, 둘 다 모델의 수학과 최종 출력을 변경하지 않은 채 stack이 처리할 수 있는 표현으로 계산을 재구성합니다. 따라서 adapter layer는 새 모델이 등장할 때마다 확장되는 지속적인 연결 계층이며, 각 모델의 실패 결과는 compiler·lowering·runtime을 강화하는 실제 검증 자료가 됩니다.

용어 해설

어댑터(Adapter)
모델이 하드웨어 스택에서 실행되도록 연산 표현이나 데이터 배치를 런타임에서 바꾸는 얇은 코드 계층입니다. 모델이 계산하는 수학은 유지하면서 compiler가 처리할 수 있는 형태로 연산을 치환하거나 tensor를 reshape·padding합니다. 새 모델과 미성숙한 backend 사이의 공백을 빠르게 메우는 역할을 합니다.
연산자 Lowering(Operator Lowering)
PyTorch 코드의 고수준 연산을 특정 하드웨어가 실행할 수 있는 저수준 연산과 kernel 형태로 변환하는 과정입니다. 지원되지 않는 연산이나 특정 fused 조합이 있으면 모델 실행이 실패하거나 잘못된 결과가 나올 수 있습니다. 모델과 compiler 사이의 호환성을 결정하는 핵심 단계입니다.
Dataflow 아키텍처(Dataflow Architecture)
명령어 순서보다 데이터가 compute engine에 도착하는 흐름을 중심으로 연산을 실행하는 하드웨어 구조입니다. Spyre는 여러 core와 local scratchpad memory, processing element를 연결해 반복적인 matrix multiplication을 처리합니다. 일반 GPU와 달리 데이터 도착이 계산을 촉발하는 점이 특징입니다.
Tiled Tensor(Tiled Tensors)
Tensor를 하드웨어가 처리하는 고정 크기 조각에 맞춰 배치하는 방식입니다. Spyre는 128바이트 또는 fp16 값 64개인 stick 단위로 memory와 compute를 처리하므로 tensor 차원이 stick 경계에 맞아야 합니다. 모델의 임의 shape 표현과 장치의 고정된 데이터 배치 계약 사이를 연결하는 데 쓰입니다.
연산 Fusion(Operator Fusion)
인접한 여러 연산을 하나의 결합된 kernel로 묶어 실행하는 compiler 최적화입니다. 어떤 연산이 주변 graph와 결합되는지에 따라 lowering 결과가 달라지므로 단독 테스트를 통과한 연산도 전체 모델에서 실패할 수 있습니다. Spyre adapter의 오류를 재현하고 원인을 좁힐 때 중요한 변수입니다.

기술

  • PyTorch
  • HuggingFace Transformers
  • Spyre
  • AIU
  • torch-spyre
  • HF-adapters
  • Tiled Tensors RFC
  • GitHub

활용 사례

  • 새 model family의 accelerator day-one enablement
  • HuggingFace embedding model의 Spyre 실행
  • compiler lowering과 runtime 오류의 end-to-end 검증
  • model architecture와 hardware stack 사이의 runtime adaptation
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 21.수집 2026. 08. 21.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.