저렴한 이베이 채굴 하드웨어에서 FPGA 패브릭을 활용한 Qwen3.5 9B/27B INT4 모델 구현
Qwen3.5 arch implementation in FPGA fabric for 9B/27B INT4 models on relatively cheap eBay mining hardware
핵심 요약
저렴한 FPGA 보드를 활용해 LLM 추론 엔진을 구축하고, Qwen 모델을 구동하여 성능을 최적화하는 프로젝트입니다.
- 하드웨어 활용 — 저렴한 이베이 채굴용 FPGA 보드(SQRL FK33)를 LLM 추론에 사용함
- 성능 최적화 — 9B 모델을 2tok/s 속도로 구동하며 27B 모델을 위한 확장성을 설계함
- 기술적 도전 — FPGA의 HBM 대역폭 활용과 가중치 로딩 방식 개선을 위해 노력함
- 오픈 소스 — VHDL 기반의 LLM 추론 엔진을 MIT 라이선스로 공개함
FPGA에서 LLM 추론 돌려보는 거 예전부터 해보고 싶었는데, 9B~27B 급에서 딱히 꽂히는 모델이 없어서 미루고 있었거든(3.6 27B도 좋긴 했는데 굳이 할 정도는 아니었음). 근데 3.8 나오니까 이 사이즈에서 보여주는 성능이 꽤 인상적이더라고. 그래서 모델 올릴 만한 싼 FPGA를 찾아봤지. SQRL FK33(280달러, 8GB HBM2, 대역폭 약 400GB/s)을 찾았는데, 이걸 여러 장 꽂으면 돌릴 수 있겠다 싶었어. 그전에는 AXU3EG FPGA 개발 보드에서 llama.c 추론 돌리는 거 작업하고 있었고, 구현할 때는 주로 Opus 4.8(CC)을 써서 아키텍처 쪽 도움을 좀 받았음.
FK33으로 3.5 9B를 75MHz에서 2tok/s로 돌리는 데 성공했다(클럭 더 올리려면 RTL 최적화랑 코어 전압을 더 높여야 함). Qwen 구현에는 Fable/Opus5, 5.5/Kimi K3를 쓰기로 했고, FK33에서 잘 돌아가는 거 확인하고 나서는 SQRL Jungle Cat(채굴용 FPGA, 375달러)을 샀어. 이건 FK33 두 장에 8 GTY 레인 인터커넥트, 이더넷 비트스트림 로드까지 지원해서 프리필이랑 생성 성능이 더 잘 나올 것 같았거든(XCVU35P당 FK33 패브릭 두 배). 근데 Jungle Cat Lite 보드는 PCB 레진 작업을 안 하면 가중치를 빨리 로드할 방법이 없는 것 같고, GTY 레인용 클럭 제너레이터도 없더라(이건 부품 몇 개 납땜하면 해결되는 거라 금방 알아냄).
지금은 XCVU35P 4개(32GB HBM2)를 박은 이상적인 FPGA 추론 엔진을 목표로 하고 있는데, 이건 커스텀 캐리어 보드가 필요해. 몇 가지 결과는 이래:
Qwen3.5-9B INT4, 2x FK33, 75MHz (파이프라인 분할, 호스트가 카드 간 잔차 처리):
- 프리필: ~6 tok/s (256 토큰 프롬프트), ~5.5 tok/s (2.3k 토큰 프롬프트)
- 생성: 시작 부분 ~3.2 tok/s, 2~3k 컨텍스트에서 ~2.4 tok/s
- 출력값은 llama.cpp랑 레이어별로 대조해서 검증함
예상치: Qwen3.8-27B INT4 (9B 연산 프로필 측정값 기반 모델링, 아직 실제로 돌려보진 않음):
- Jungle Cat 한 장(2x VU35P)에 FK33 설계를 75MHz로 그대로 올릴 경우: 프리필 ~2 tok/s, 짧은 컨텍스트 생성 ~1.1 tok/s, 16k에서 ~0.5 tok/s.
- 같은 다이 두 개에 RTL을 더 큰 다이에 맞춰 리사이징하고 75MHz로 돌릴 경우: 프리필 ~6 tok/s, 생성 ~3 tok/s (두 다이 간 텐서 병렬 처리 시 ~5.5 tok/s), 16k에서 ~1.1 tok/s.
- 리사이징하고 200MHz로 돌릴 경우 (클럭에 비례해서 스케일링): 프리필 ~16 tok/s, 생성 ~8 tok/s (텐서 병렬 시 ~15 tok/s), 16k에서 ~3 tok/s.

