- Mesin inferensi LLM berbasis C++/CUDA yang memungkinkan model Llama 70B berjalan di RTX 3090 (24GB VRAM) melalui streaming memori GPU dan I/O langsung NVMe
- Menggunakan struktur caching adaptif 3 tingkat untuk membagi otomatis antara VRAM, RAM pinned, dan fallback NVMe/mmap, serta mencapai peningkatan kecepatan hingga 83x dibanding mmap
- Backend gpu-nvme-direct mentransfer data langsung dari NVMe ke GPU dengan sepenuhnya melewati CPU, sehingga bandwidth PCIe dapat dimanfaatkan semaksimal mungkin
- Fitur Layer skip dan self-speculative decoding mengurangi komputasi yang tidak perlu dan meningkatkan kecepatan pemrosesan tanpa penurunan kualitas
- Memungkinkan model berukuran sangat besar berjalan efisien di hardware konsumen, sehingga membuka kemungkinan akses yang lebih luas ke inferensi LLM berkinerja tinggi
Ikhtisar NTransformer
- Mesin inferensi LLM C++/CUDA berisiensi tinggi yang menjalankan model Llama 70B pada RTX 3090 (24GB VRAM)
- Melakukan streaming layer model melalui memori GPU, dengan opsi direct I/O NVMe untuk sepenuhnya melewati CPU
- Tidak memiliki dependensi eksternal selain CUDA Toolkit, tidak memerlukan PyTorch atau cuBLAS
- Mendukung format model GGUF, dengan format kuantisasi Q4_0, Q8_0, Q4_K_M, Q5_K, Q6_K, F16, F32
Performa dan struktur caching
- Caching adaptif 3 tingkat (3-Tier Adaptive Caching)
- Layer yang menetap di VRAM (0 I/O)
- RAM pinned (khusus transfer H2D)
- Fallback NVMe/mmap
- Pada lingkungan RTX 3090 + RAM 48GB, mencapai peningkatan kecepatan 83x dibanding mmap
- Bandwidth PCIe Gen3 x8 (sekitar 6.5 GB/s) menjadi bottleneck
- Kuantisasi Q4_K_M memuat 10 layer lebih banyak di VRAM (36 vs 26), sehingga mengurangi volume transfer
- Layer skip (berbasis cosine similarity) melewati 20 dari 80 layer dengan kehilangan kualitas minimal
Fitur utama
- Streaming SLEP: pembacaan NVMe, PCIe DMA, dan komputasi GPU ditumpangtindihkan dengan double buffer
- Backend gpu-nvme-direct: membaca data NVMe langsung ke memori pinned yang dapat diakses GPU
- Self-speculative decoding: memanfaatkan layer yang menetap di VRAM sebagai model draft, tanpa memerlukan model tambahan
- Pemilihan jalur data otomatis: menetap di VRAM > H2D RAM pinned > mmap pinned >
memcpy CPU
- Dukungan arsitektur Llama: termasuk RoPE, GQA, SwiGLU, RMSNorm, dan cache KV
Kebutuhan sistem
- Linux (Ubuntu, kernel 6.17+), CUDA Toolkit 13.1, gcc/g++ 14, CMake 3.24+
- GPU Compute Capability 8.0+ (RTX 3090 telah diuji)
- Untuk direct I/O NVMe, diperlukan NVMe SSD pada slot PCIe terpisah serta library gpu-nvme-direct
Streaming langsung NVMe
- Jika model tidak muat di VRAM, jalur NVMe → GPU langsung sepenuhnya mengeluarkan CPU dari alur
- Alur data: NVMe SSD → DMA → memori staging pinned → PCIe H2D → buffer GPU → komputasi
- NVMe di-bind ke VFIO agar dapat diakses langsung dari user space
- Tiap layer (sekitar 670MB untuk 70B Q6_K) dibaca dalam sekitar 202ms melalui 670 perintah NVMe
- Pembacaan NVMe, H2D DMA, dan komputasi GPU diproses paralel dalam pipeline double buffer
Konfigurasi sistem dan peringatan risiko
- Skrip setup otomatis (
setup_system.sh) mengonfigurasi GRUB, NVIDIA DKMS, header CUDA, VFIO, dan binding NVMe secara berurutan
- Mencakup pekerjaan berisiko tinggi seperti menonaktifkan IOMMU, patch modul kernel, dan binding NVMe ke VFIO
- Konfigurasi yang salah dapat menyebabkan gagal boot, kehilangan data NVMe, dan ketidakstabilan sistem
- Jangan pernah gunakan drive boot, diperlukan perangkat NVMe terpisah khusus
- Backup dan skrip pemulihan disediakan untuk semua perubahan
Arsitektur dan struktur kode
- Komponen utama dalam direktori
src/
core/: tensor, alokasi memori, manajemen perangkat GPU
cuda/: kernel GEMV, RMSNorm, RoPE, SwiGLU, softmax
memory/: mesin streaming SLEP berbasis NVMe dan mmap
model/: komponen Transformer, loader GGUF, attention, FFN, normalization
inference/: tokenizer, sampler, engine
scripts/: mencakup skrip setup sistem, binding NVMe, dan pemulihan
Roadmap tahap pengembangan
- Tahap 1: Llama 8B Q8_0, kernel CUDA kustom, 48.9 tok/s (selesai)
- Tahap 2: Streaming SLEP, menjalankan 70B di single GPU, peningkatan kecepatan 33x (selesai)
- Tahap 3: dukungan Q4_K_M/Q5_K, Layer skip, self-speculative decoding, cache KV F16 (selesai)
- Tahap 4: backend NVMe Direct, pembacaan NVMe yang dikendalikan GPU 3.35 GB/s (selesai)
- Tahap 5: optimasi inferensi dan C API publik (direncanakan)
Lisensi
- Menggunakan lisensi BSD-2-Clause
1 komentar
Komentar Hacker News
Saya pikir pendekatan transfer langsung dari NVMe ke GPU dengan melewati CPU ini benar-benar cerdas
Saat menjalankan model besar secara lokal, bottleneck-nya selalu ada di hierarki memori, dan ini pada dasarnya memperlakukan NVMe seperti VRAM yang diperluas yang diakses langsung lewat DMA
Menarik untuk dibandingkan dengan pendekatan unified memory pada Apple M-series. M4 Max bisa memuat seluruh model 70B ke memori, tetapi throughput-nya lebih rendah daripada 3090
Akan menarik jika ada benchmark yang membandingkan performa native 3090 dengan pendekatan NVMe melawan M4 Max berdasarkan batch inference
Dengan GPUdirect, dimungkinkan melakukan transfer DMA langsung ke perangkat penyimpanan
Saya sempat berpikir, bagaimana jika penyimpanan m.2 itu sebenarnya adalah DRAM? Saat melakukan spill model dari GPU, persistensi tidak diperlukan, jadi RAM sistem bisa tetap disisakan untuk CPU
Kecepatan 0,2 token per detik memang lambat untuk chat, tetapi cukup untuk pekerjaan batch/asinkron
Saya menjalankan pipeline pembuatan konten otomatis dan mengeksekusi beberapa panggilan LLM secara bersamaan. Pembuatan gambar adalah bottleneck-nya, jadi seluruh pekerjaan tetap memakan waktu sekitar 20 menit
Jika model 70B bisa dijalankan secara lokal, itu bisa menjadi penghematan biaya besar karena mengurangi biaya token API
0,2 tok/s oke untuk eksperimen, tetapi tidak cukup untuk penggunaan interaktif
Dalam kebanyakan kasus, model 8B atau 13B yang dikuantisasi dengan baik memberi keseimbangan latensi-kualitas yang lebih baik
Ini eksperimen yang benar-benar menarik. Saya mestinya mencoba hal seperti ini lebih dulu
Saya penasaran dengan angka throughput nyata dibanding bandwidth teoretis PCIe. Saya ingin tahu apakah ini masalah latency atau bandwidth
Ini hack yang keren, tetapi 0,5 tok/s pada model 70B tetap lambat dibanding model 7B yang bisa mencapai 30+ tok/s pada kartu yang sama
Menurut riset NVIDIA, model di bawah 10B sudah bisa menangani 40~70% tugas agen, dan kesenjangan kualitasnya juga cepat menyempit
Bidang ini sangat layak dieksplorasi ke depan
Dalam jangka panjang, yang tampaknya akan jadi kunci adalah optimisasi model, yaitu penelitian untuk menemukan bagian model yang bisa dihilangkan tanpa memengaruhi performa. Pada akhirnya model juga merupakan semacam struktur kompresi lossy. Arah seperti ini juga membantu demokratisasi AI
Proyek yang sangat keren. Saya penasaran latar belakang sistem/perangkat keras seperti apa yang dibutuhkan untuk bisa memikirkan ide seperti ini
Saya bekerja di lingkungan yang perangkat kerasnya sangat diabstraksikan, jadi sulit membayangkan pendekatan seperti ini. Rasanya bukan cuma soal kreativitas, tetapi juga perlu pemahaman tingkat sistem
Saat mencoba menjalankan LLM di PS2, saya terbentur batas RAM 32MB dan VRAM 4MB lalu merancang pendekatan layer streaming. PS2 bisa memproses alamat 32-bit secara langsung di VRAM sehingga sangat cepat, dan saya mencoba mereplikasikannya di PC
Saya juga sedang mencoba hal serupa. Saya bereksperimen menjalankan model 1T dengan VRAM kurang dari setengah kebutuhan
Saya rasa dengan memodifikasi routing layer SGLang, kita bisa mengimplementasikan expert swap berbasis prediksi JIT dari Gen5 NVMe ke memori GPU. Saya memanfaatkan primitive NVIDIA Dynamo dan NIXL
Saya penasaran apakah sudah ada yang pernah mencobanya
Proyek yang keren. Saya ingin tahu lebih detail soal proses patch DKMS pada GPU umum. Saya juga ingin mencobanya
Tautan terkait: RTX4090 P2P Unlock, vGPU Unlock