AI가 스스로 설계한 FPGA 추론 가속기 openTPU 공개

Hacker News3일 전

AI 에이전트가 하드웨어 설계를 어디까지 해낼 수 있는지, 그리고 자기 추론을 돌릴 칩을 스스로 만들 수 있는지를 실험한 오픈소스 프로젝트가 나왔다. FeSens/openTPU는 SystemVerilog로 작성된 가속기 RTL, 명령어 집합(ISA), 비트 단위로 동일한 시뮬레이터, 커널 언어와 컴파일러, 실제 PCIe 카드를 구동하는 호스트 소프트웨어를 하나의 모노레포에 담았다. 저장소를 처음부터 끝까지 읽으면 파이썬 행렬곱이 어떻게 배선까지 내려가는지 따라갈 수 있는 구조다.

타깃 하드웨어는 Inspur YPCB-00338 카드로, Xilinx Kintex-7 xc7k480t 칩과 DDR3 두 채널을 쓴다. DDR3-1066에서 이론 대역폭은 17.1GB/s이며, 133.33MHz 클록의 단일 비트스트림이 모든 모델을 처리한다. 메모리 코어 안에 들어간 작은 CPU가 부팅 시 두 DDR3 채널을 12초에 걸쳐 캘리브레이션하고, LiteDRAM 컨트롤러와 4열 시스톨릭 행렬 유닛, 스트림 엔진이 나머지를 맡는다. 설계는 의도적으로 단순하다. 시퀀서가 매 사이클 명령 하나를 발행하면 DMA가 데이터를 옮기고, 행렬 유닛이 DRAM에서 흘러온 int8 가중치를 곱하고, 벡터 유닛이 fp32 연산을 하고, 양자화기가 결과를 다시 int8로 되돌린다. 캐시도, 숨은 스케줄링도 없다. 모든 데이터 이동이 명령이기 때문에 트레이스를 보면 사이클이 어디로 갔는지 그대로 드러난다.

성능은 build B(deploy_fused133c_79c5707a) 기준으로 정리돼 있다. 이전 프로덕션 이미지였던 e698dcd7과 비교해 LFM2-2.6B, SmolLM3-3B, Phi-4-mini의 디코드가 8~9% 빨라졌고 Gemma 4 E2B는 10% 개선됐다. DRAM 피크 대비 도달률도 82~87%에서 91~94%로 올라갔다. 로짓을 카드가 돌아가는 동안 계속 스트리밍하는 방식으로 96토큰을 측정하면, 디바이스/월 기준으로 LFM2-2.6B가 11.07/11.02, SmolLM3-3B가 8.92/8.89, Phi-4-mini가 6.69/6.67 tok/s다. 카드가 토큰을 직접 고르는 자체 디코드 루프에서는 Gemma 4 E2B가 int8 11.01, 4비트 헤드 12.73 tok/s, E4B가 3.83 tok/s를 기록했다.

카드 메모리(4GiB)보다 큰 MoE 모델은 전문가를 호스트 스토리지에서 스트리밍하는 방식으로 처리한다. 카드가 토큰마다 라우팅하고 모든 전문가를 계산하되, 전문가를 DRAM의 레이어별 슬롯에 유지하고 호스트는 빠진 것만 풀 파일에서 링크 속도로 복사한다. 4비트 LFM2.5-8B-A1B(전체 8.5B, 활성 1.7B)는 160토큰 구간에서 10.6 tok/s를 냈고 전문가 사용의 98.5%가 슬롯에 적중했으며 토큰당 5.2MB를 스트리밍했다. Qwen3.5-35B-A3B(34.7B/활성 3.0B)는 3.95 tok/s, 적중률 62%, 토큰당 153MB를 PCIe 1.41GB/s로 흘려보냈다. 두 경우 모두 시뮬레이터와 비트 단위로 일치한다.

양자화는 FP4 값에 2단계 블록 스케일을 얹어 가중치당 4.25비트를 쓰고, 정확도를 위해 LM 헤드만 int8로 남긴다. 토큰당 바이트 수가 약 3분의 1로 줄고 디코드 속도는 Qwen3.5에서 40%, Qwen3와 LFM2에서 45%까지 오른다. 대신 모델별로 측정 가능한 perplexity 비용이 따라붙는다.

개발 환경은 노트북에서 대부분 돌아간다. pytest와 torch, transformers를 설치하고 RTL 테스트에는 Verilator 5를 쓰며, Hugging Face에서 LFM2.5-230M 같은 모델을 내려받아 시뮬레이터 백엔드로 채팅을 띄울 수 있다. 실제 카드가 있으면 보드 디렉터리에서 비트스트림을 빌드해 JTAG으로 올리고 otpu-setup을 실행하는 흐름이다. otpu-smi는 온도와 전력, DRAM 대역폭, 유닛별 사용률을 보여주고, 프로파일러 otpu-lens는 RTL·시뮬레이터·카드 중 어디서든 실행 기록을 받아 브라우저에서 로프라인과 타임라인, 명령별 표로 펼친다. ISA 시뮬레이터가 사실상의 스펙 역할을 하고 RTL이 테스트로 같은 비트를 내는지 검증하는 구조라, 하드웨어를 몰라도 소프트웨어 쪽에서 시작할 수 있다.

배경에는 auto-arch-tournament에서 얻은 교훈을 가속기 설계로 옮기려는 시도가 있다. 질문은 두 가지로 좁혀진다. AI 에이전트가 하드웨어 설계에서 어디까지 갈 수 있는가, 그리고 자기 추론을 실행할 칩을 스스로 만들 수 있는가. 결과물은 연구 데모가 아니라 Qwen3-0.6B부터 Qwen3.5-4B, SmolLM3-3B, Phi-4-mini까지 열 개 남짓한 모델을 실제 가중치로 돌리는 동작하는 시스템이다.

실무 관점에서 이 저장소의 값어치는 성능 숫자보다 스택 전체를 읽을 수 있다는 데 있다. 커널 언어와 컴파일러, ISA, RTL, 호스트 드라이버가 한 저장소에 있고 시뮬레이터가 기준 스펙으로 못 박혀 있어, 특정 최적화가 왜 빨라지는지를 사이클 단위로 추적할 수 있다. FPGA 한 장으로 자기 모델을 돌리는 경로를 직접 밟아보려는 팀에게는 출발점이 될 만하다.

한계도 분명하다. 디코드는 DRAM 대역폭에 묶여 있고 LiteDRAM의 읽기 효율은 DDR3 피크의 82~85% 수준으로, 이전에 쓰던 Xilinx MIG와 비슷하다. 새 이미지의 디코드 성능은 이전 se-cand3 대비 모든 구성에서 2.3% 이내 차이다. 개선이 집중된 곳은 프리필로, Qwen3.5에서 1.3배, LFM2 4비트에서 2.0배 빨라졌다. 메모리 용량 제약도 남는다. Qwen3.5-4B의 int8 이미지는 4GiB를 넘고, Gemma 4 E2B는 int8로는 카드에 들어가지 않는다. E4B는 2.95GB 임베딩 테이블을 호스트에 두고 토큰마다 11KB 행 하나를 복사하는 방식을 택했다. Qwen3.5의 프리필은 여전히 청크마다 호스트에서 프로그램을 컴파일하며, 호스트가 더하는 지연은 토큰당 0.17~0.30ms(omarchy), 0.45~1.3ms(opentpu) 정도다. 4비트 양자화의 perplexity 비용 역시 모델별로 문서에 기록돼 있다.