FPGA 패브릭에 구현된 Qwen3.5 아키텍처를 이용한 9B/27B INT4 모델의 성능 테스트
요약
본 기사는 FPGA 패브릭을 활용하여 Qwen 3.5 및 Qwen 3.8 아키텍처 기반의 대규모 LLM(9B/27B) 추론 성능 테스트 결과를 다룹니다. 저자는 SQRL FK33 등 다양한 FPGA 보드를 사용하여 모델 크기별, 클럭 속도별 최적화된 추론 성능을 측정하고 그 과정을 공유합니다.
핵심 포인트
- FPGA를 이용한 LLM 추론의 실질적인 구현 및 테스트 사례 제공
- 모델 규모(9B/27B)와 컨텍스트 길이에 따른 성능 변화 분석
- 텐서 병렬 처리 등 하드웨어 최적화 기법 적용 결과 제시
저는 오랫동안 LLM 추론을 FPGA에서 시험해보고 싶었지만, 9B~27B 규모의 최첨단(frontier class) 모델이 없어서 큰 동기 부여가 되지 않았습니다 (3.6 27B도 훌륭했지만 충분하지 않았습니다). 3.8이 출시되었을 때 그 크기에서 보여줄 수 있는 성능에 매우 깊은 인상을 받았습니다. 그래서 저는 모델을 담을 수 있는 저렴한 FPGA를 찾기 시작했습니다. SQRL FK33 (280달러, 8GB HBM2 ~400GB/s BW)를 발견하고 여러 카드를 사용하여 실행할 수 있을지 생각했습니다. 그전에 더 작은 AXU3EG FPGA 개발 보드에서 llama.c 추론을 작업한 적이 있었고, 구현에는 Opus 4.8 (CC)을 주로 사용하며 일부 아키텍처적인 조언을 받았습니다.
FK33를 사용하여 75MHz에서 Qwen 3.5 9B 모델을 2tok/s로 실행할 수 있었습니다 (더 높은 클럭은 추가적인 RTL 최적화와 더 높은 코어 전압이 필요합니다). Qwen 구현에는 Fable/Opus5,5.5/Kimi K3를 사용하기로 결정했고, FK33가 입증되자 SQRL Jungle Cat 중고 마이닝 FPGA (375달러)를 구매하기로 했습니다 (8 GTY 레인 인터커넥트, 이더넷 비트스트림 로드 기능을 가진 두 개의 FK33 포함). 이는 더 높은 프리필(prefill) 및 생성(generation) 성능을 가능하게 할 것이기 때문입니다 (XCVU35P당 두 배의 FK33 패브릭). 하지만 Jungle Cat Lite 보드는 PCB 수지 처리 없이는 가중치를 더 빠르게 로드할 방법이 없는 것 같았고, GTY 레인에 대한 클럭 생성 기능도 부족했습니다 (이는 쉽게 해결할 수 있는 부품들을 납땜하는 것으로 해결 가능합니다).
4x XCVU35P (32GB HBM2)를 갖춘 이상적인 FPGA 추론 엔진을 목표로 하고 있지만, 이는 맞춤형 캐리어 보드가 필요합니다. 일부 결과는 다음과 같습니다:
Qwen3.5-9B INT4 모델을 75 MHz에서 2x FK33에 적용 (파이프라인 분할, 호스트가 카드 간의 잔여 데이터를 전달):
- 프리필: ~6 tok/s (256 토큰 프롬프트), ~5.5 tok/s (2.3k 토큰 프롬프트)
- 생성: 시작 시점 근처에서
3.2 tok/s, 23k 컨텍스트에서 ~2.4 tok/s - 출력은 llama.cpp를 사용하여 레이어별로 확인했습니다.
예상치: Qwen3.8-27B INT4 (측정된 9B당 연산 프로파일을 모델링하여; 아직 실행되지 않음):
-
Jungle Cat 하나 (2x VU35P)가 FK33 설계를 그대로 사용하여 75 MHz로 실행 시: 짧은 컨텍스트에서 ~2 tok/s 프리필 및 ~1.1 tok/s 생성, 16k 컨텍스트에서 ~0.5 tok/s.
-
두 개의 다이(dies)를 더 큰 다이에 맞게 RTL을 재조정하고, 여전히 75 MHz에서: 프리필(prefill) 시 약 6 tok/s, 생성(generation) 시 약 3 tok/s (~두 다이에 걸친 텐서 병렬 처리(tensor parallelism)로 약 5.5 tok/s), 16k 컨텍스트에서는 약 1.1 tok/s를 기록했습니다.
-
재조정하여 200 MHz에서 (클럭에 선형적으로 비례): 프리필 시 약 16 tok/s, 생성 시 약 8 tok/s (~텐서 병렬 처리로 약 15 tok/s), 16k 컨텍스트에서는 약 3 tok/s를 기록했습니다.
-
200 MHz에서 4개의 VU35P와 4방향 텐서 병렬 처리를 사용했을 때: 짧은 컨텍스트에서 프리필 시 약 25 tok/s, 생성 시 약 25 tok/s를 기록했으며, 16k 컨텍스트에서는 약 10 tok/s, 전체 262k 컨텍스트에서는 약 1 tok/s를 기록했습니다.
두 개의 다이는 27B 모델의 KV 캐시가 그 이상의 가중치(weights) 14.5 GB 옆에 들어가지 않아 약 45k 컨텍스트에서 성능이 한계에 도달합니다. 전체 262k 컨텍스트를 위해서는 네 개의 다이가 필요합니다.
전반적으로 지금까지는 재미있는 프로젝트였으며, 주로 Jungle Cat 보드에 가중치를 로드하는 방법을 찾는 데 중점을 두었고, 다른 제안도 환영합니다. 또한, 얼마 전에 BC-250을 60달러와 75달러짜리로 2개를 구했는데, 성능 대비 비용 면에서 엄청난 구매였습니다. Jungle Cat에 BC-250을 프로그래밍하는 사진입니다. 이곳 사람들에게 이 프로젝트가 흥미로울 것 같아 공유합니다.
또 한 가지 항상 해보고 싶었던 것은 tinytapeout과 같은 것을 시도해보는 것입니다 (ASIC에 RTL을 구축하여 클럭을 올리고 전원을 내리는 방식). 그래서 Opus 5.5에게 추정해달라고 요청했습니다만, TSMC의 2023 공정 노드에서요. 하하: TSMC의 2023 N3 노드와 해당 연도의 HBM3 여섯 스택(4.9 TB/s)을 사용한다면, 이 RTL을 ASIC으로 2 GHz에서 구현할 경우 짧은 컨텍스트에서 27B 모델을 약 294 tok/s로, 16k 컨텍스트에서 106 tok/s로, 262k 컨텍스트에서 10 tok/s로 구동할 수 있으며, 전력 소모는 약 125-340 W가 될 것입니다!
레포지토리(MIT): https://github.com/Nero7991/llm.vhdl
제출자: /u/I_am_purrfect
[링크] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기