Skip to content

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를 완전히 우회
  • CUDA Toolkit 외 외부 의존성 없음, PyTorch나 cuBLAS 불필요
  • GGUF 모델 포맷을 지원하며, Q4_0, Q8_0, Q4_K_M, Q5_K, Q6_K, F16, F32 양자화 형식 사용 가능

성능 및 캐싱 구조

  • 3단계 적응형 캐싱(3-Tier Adaptive Caching)
    • VRAM 상주 레이어(0 I/O)
    • 고정 RAM(H2D 전송 전용)
    • NVMe/mmap 폴백
  • RTX 3090 + 48GB RAM 환경에서 mmap 대비 83배 속도 향상
  • PCIe Gen3 x8 대역폭(약 6.5 GB/s) 이 병목으로 작용
  • Q4_K_M 양자화는 VRAM에 10개 더 많은 레이어(36 vs 26)를 적재해 전송량 감소
  • Layer skip(코사인 유사도 기반)으로 80개 중 20개 레이어를 생략, 품질 손실 최소화

주요 기능

  • 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 버퍼 → 연산
  • NVMe를 VFIO에 바인딩해 사용자 공간에서 직접 접근
  • 각 레이어(70B Q6_K 기준 약 670MB)는 약 202ms 내 670개의 NVMe 명령으로 읽힘
  • NVMe 읽기, H2D DMA, 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/: 토크나이저, 샘플러, 엔진
  • scripts/: 시스템 설정, NVMe 바인딩 및 복원 스크립트 포함

개발 단계 로드맵

  • 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 라이선스 적용

See also

Favorite site