FeSens/openTPU
An open-source AI accelerator, developed by AI: RTL, ISA, simulator, compiler and profiler in one repo. Runs Qwen3, LFM2.5 and Qwen3.5 on a Kintex-7 PCIe card.
openTPU – 오픈소스 AI 가속기
개요
openTPU는 소형 Xilinx Kintex‑7 FPGA 카드를 중심으로 구축된 풀스택 오픈소스 AI 가속기입니다. 저장소에는 다음이 포함되어 있습니다:
- 하드웨어 RTL (SystemVerilog) (가속기 코어용)
- 명령어 집합 아키텍처 (ISA) 및 비트 정확한 Python 시뮬레이터
- 커널 언어 및 컴파일러 (고수준 Python 커널을 ISA 명령어로 변환)
- 호스트 소프트웨어 (
otpu‑chat,otpu‑serve,otpu‑smi,otpu‑lens등) (PCIe를 통해 FPGA를 구동하고 추론 인터페이스 제공) - 검증, 성능 측정 및 프로파일링을 위한 문서, 테스트 및 스크립트
이 프로젝트는 실제 가속기 (물리적 PCIe 카드에서 실행)인 동시에 학습 플랫폼이기도 합니다. 전체 스택이 작아서 처음부터 끝까지 읽어볼 수 있습니다.
중요성
- 엔드투엔드 개방성 – 대부분의 상용 AI 칩과 달리 실리콘 RTL부터 Python 수준의 추론 API까지 모든 계층이 오픈소스입니다.
- 하드웨어 인식 AI 연구 – 명령어 스케줄링, 메모리 레이아웃, 양자화, 심지어 AI가 생성한 하드웨어 설계(저장소에서 AI 에이전트가 하드웨어를 설계하는 auto‑arch‑tournament 프로젝트 언급)를 실험할 수 있습니다.
- 실제 성능 – Kintex‑7 보드에서 저전력 GPU에 필적하는 토큰 속도로 최신 LLM(230 M에서 35 B 파라미터)을 실행하며, DRAM 사용률은 DDR3 피크에 가깝습니다.
- 교육적 가치 – 모노레포는 의도적으로 단순하게 설계되었습니다. 사이클당 단일 이슈 시퀀서, 명시적 DMA 명령어, 그리고 사이클이 어디에 소비되는지 정확히 보여주는 비주얼 프로파일러 (Lens)를 갖추고 있습니다.
작동 원리 (하이레벨)
Python kernel → otpu.language (ol) → JIT → ISA instructions →
RTL (matrix unit, vector unit, DMA, quantiser) → FPGA card → PCIe ↔ Host
- 커널은 작은 Python DSL (
opentpu.language)로 작성됩니다. - 컴파일러 (
@ol.jit)가 이를 8‑word, 32‑bit ISA로 변환합니다. - ISA 시뮬레이터 (
opentpu.isasim.py)가 참조 모델을 제공합니다. - 하드웨어에서 RTL은 간단한 시퀀서를 구현하여 사이클당 하나의 명령어를 실행합니다. DMA를 통해 데이터를 이동하고, int8 행렬 곱셈, fp32 벡터 연산을 수행하며, 결과를 int8로 다시 양자화합니다.
- 호스트 도구는 모든 모델을 지원하는 단일 비트스트림을 로드하고 DRAM을 관리하며 다음을 제공합니다:
otpu-chat– 대화형 CLI 채팅otpu-serve– OpenAI 호환 API 서버otpu-smi– 런타임 통계 (온도, 전력, DRAM 대역폭)otpu‑lens– 플로어플랜상의 실행을 시각화하는 프로파일러
성능 하이라이트 (README 참조)
| 모델 | 가중치 형식 | 디코드 (장치) | 디코드 (실측) | DRAM 대역폭 |
|---|---|---|---|---|
| LFM2.5‑230M | int8 | 59 tok/s | 52 tok/s | 14.5 GB/s (85 % 피크) |
| LFM2.5‑230M | 4‑bit | 85.8 tok/s | 82.1 tok/s | 14.1 GB/s |
| Qwen3‑0.6B | int8 | 21.6 tok/s | 21.3 tok/s | 14.4 GB/s |
| Gemma 4 E2B | 4‑bit head | 12.14 tok/s | 12.09 tok/s | 15.5 GB/s |
| Phi‑4‑mini (3.8B) | int8 | 3.99 tok/s | 3.98 tok/s | 16 GB/s |
| Qwen3.5‑35B (MoE) | 4‑bit + int8 head | 3.95 tok/s (전문가 스트리밍) | – | 1.41 GB/s PCIe |
포인트: 4‑bit 양자화 (FP4 + 블록 스케일)는 가중치 트래픽을 약 ⅓ 줄이고, 정확도 손실을 최소화하면서 디코드 속도를 40‑45 % 향상시킵니다. DRAM 사용률은 DDR3 피크의 80‑95 %를 유지하며, 연산보다 메모리가 병목인 설계임을 보여줍니다.
시작하기 (빠른 단계)
# Python 스택 설치 (시뮬레이터는 모든 노트북에서 작동)
pip install -e .
pip install pytest torch transformers
python -m pytest -q # RTL 인식 테스트 실행 (Verilator 필요)
# 시뮬레이터에서 모델 실행
hf download LiquidAI/LFM2.5-230M --local-dir models/LFM2.5-230M
otpu-chat --model lfm2 --backend isa # 시뮬레이터에서의 대화형 채팅
물리적 카드 사용 시:
make bit # FPGA 비트스트림 빌드 (boards/ypcb-00338)
sudo otpu-setup # JTAG을 통해 카드 프로그래밍
otpu-chat --backend board # 실제 가속기와 통신
README에는 다른 호스트 명령어 (otpu-serve, otpu-smi, otpu-lens, otpu-selftest)도 나열되어 있습니다.
예상 사용자
- 연구자: LLM 추론을 위한 새로운 양자화 방식, 명령어 집합, 메모리 레이아웃 최적화를 탐구하는 분.
- 교육자 및 학생: 구체적이고 개방적인 하드웨어 AI 가속기 예제를 찾는 분.
- 취미 사용자: FPGA 기반 추론에 관심이 있고 저렴한 PCIe 카드에서 LLM을 실행하려는 분.
- AI 하드웨어 개발자: 명시적 DMA 스케줄링을 갖춘 간단한 시스톨릭 행렬 엔진의 참조 구현을 찾는 분.
제한 사항 / 미해결 과제
- 하드웨어는 Kintex‑7 (≈ 200 mm², DDR3)로 제한되어 최신 ASIC의 성능에는 미치지 못합니다.
- 4 GiB 온보드 DRAM을 초과하는 모델은 전문가 오프로드가 필요하며, 이로 인해 PCIe 트래픽이 증가합니다.
- 4‑bit 가중치의 정확도는 int8보다 낮으며, README에 상세한 KL‑loss 수치가 제공됩니다.
- 비트스트림 빌드에는 FPGA 툴체인 (Vivado)에 대한 지식이 필요합니다.
요약
openTPU는 하드웨어 설명, ISA, 시뮬레이터, 컴파일러, 호스트 도구를 완벽하게 갖춘 완전히 개방된 FPGA 기반 LLM 추론 가속기입니다. 소형 Kintex‑7 보드에서 수십 개의 최신 모델을 실행하여 초당 수십 개의 토큰 속도를 달성하면서도, 학습과 연구를 위해 전체 스택을 공개하고 있습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트