Ntransformer
싱글 RTX 3090에서 Llama 3.1 70B를 실행하는 NVMe-to-GPU 추론 엔진
About
- C++/CUDA 기반 LLM 추론 엔진으로, GPU 메모리 스트리밍과 NVMe 직접 입출력을 통해 Llama 70B 모델을 RTX 3090(24GB VRAM) 에서 실행 가능
- 3단계 적응형 캐싱 구조를 사용해 VRAM, 고정 RAM, NVMe/mmap을 자동 분할하며, mmap 대비 최대 83배 속도 향상 달성
- gpu-nvme-direct 백엔드는 CPU를 완전히 우회해 NVMe에서 GPU로 직접 데이터를 전송, PCIe 대역폭을 최대한 활용
- Layer skip과 self-speculative decoding 기능으로 불필요한 연산을 줄이고, 품질 손실 없이 처리 속도를 높임
- 소비자용 하드웨어에서 초대형 모델을 효율적으로 구동할 수 있게 해, 고성능 LLM 추론의 접근성 확대 가능성 제시
NTransformer 개요
- 고효율 C++/CUDA LLM 추론 엔진으로, RTX 3090(24GB VRAM)에서 Llama 70B 모델을 실행
- GPU 메모리를 통해 모델 레이어를 스트리밍하며, 선택적으로 NVMe 직접 I/O를 사용해 CPU를 완전히 우회
성능 및 캐싱 구조
- 3단계 적응형 캐싱(3-Tier Adaptive Caching)
- VRAM 상주 레이어(0 I/O)
- 고정 RAM(H2D 전송 전용)
- NVMe/mmap 폴백
주요 기능
- SLEP 스트리밍: NVMe 읽기, PCIe DMA, GPU 연산을 이중 버퍼로 중첩 처리
- gpu-nvme-direct 백엔드: NVMe 데이터를 GPU 접근 가능한 고정 메모리로 직접 읽기
- Self-speculative decoding: VRAM 상주 레이어를 초안 모델로 활용, 추가 모델 불필요
- 자동 데이터 경로 선택: VRAM 상주 > 고정 RAM H2D > mmap 고정 > CPU memcpy
- Llama 아키텍처 지원: RoPE, GQA, SwiGLU, RMSNorm, KV 캐시 포함
시스템 요구사항
- Linux (Ubuntu, kernel 6.17+), CUDA Toolkit 13.1, gcc/g++ 14, CMake 3.24+
- Compute Capability 8.0+ GPU (RTX 3090 테스트됨)
- NVMe 직접 I/O 사용 시 별도 PCIe 슬롯의 NVMe SSD 및 gpu-nvme-direct 라이브러리 필요
NVMe 직접 스트리밍
- 모델이 VRAM에 맞지 않을 경우, NVMe → GPU 직접 경로로 CPU를 완전히 배제
- 데이터 흐름: NVMe SSD → DMA → 고정 스테이징 메모리 → PCIe H2D → GPU 버퍼 → 연산
시스템 설정 및 위험 경고
- 자동 설정 스크립트(setup_system.sh)가 GRUB, NVIDIA DKMS, CUDA 헤더, VFIO, NVMe 바인딩을 순차적으로 구성
- IOMMU 비활성화, 커널 모듈 패치, NVMe VFIO 바인딩 등 고위험 작업 포함
- 잘못된 설정 시 부팅 실패, NVMe 데이터 손실, 시스템 불안정 가능
- 부트 드라이브는 절대 사용 금지, 별도 NVMe 전용 장치 필요
- 모든 변경 사항은 백업 및 복원 스크립트 제공
아키텍처 및 코드 구조
- src/ 디렉터리 내 주요 구성
- core/: 텐서, 메모리 할당, GPU 장치 관리
- cuda/: GEMV, RMSNorm, RoPE, SwiGLU, softmax 커널
- memory/: NVMe 및 mmap 기반 SLEP 스트리밍 엔진
- model/: Transformer 구성, GGUF 로더, attention, FFN, normalization
- inference/: 토크나이저, 샘플러, 엔진
개발 단계 로드맵
- 1단계: Llama 8B Q8_0, 커스텀 CUDA 커널, 48.9 tok/s (완료)
- 2단계: SLEP 스트리밍, 단일 GPU에서 70B 실행, 33배 속도 향상 (완료)
- 3단계: Q4_K_M/Q5_K 지원, Layer skip, self-speculative decoding, F16 KV 캐시 (완료)
- 4단계: NVMe Direct 백엔드, GPU 주도 NVMe 읽기 3.35 GB/s (완료)
- 5단계: 추론 최적화 및 공개 C API (예정)
라이선스
- BSD-2-Clause 라이선스 적용