Show HN: Tiny-vLLM – high performance LLM inference engine in C++ and CUDA

개요

tiny-vLLM은 C++와 CUDA를 사용하여 고성능 LLM 추론 엔진을 구축하는 프로젝트로, VLLM의 축소판인 동시에 학습용으로 설계되었다.

주요 내용

* LLM 추론 엔진의 필요성: LLM은 훈련된 가중치 파일과 모델 아키텍처로 구성되며, 이를 실행하기 위한 추론 서버/엔진이 필요하다. C++와 CUDA를 사용하는 이유는 하드웨어 효율성을 극대화하여 빠른 응답 속도와 동시 요청 처리를 위해서다.
* tiny-vLLM의 구성 요소:
* Safetensors 형식의 실제 LLM 모델 로딩 (예: Llama 3.2 1B Instruct)
* 전체 LLM 순방향 전달 (prefill + decode)
* CUDA 커널을 사용한 모든 연산: KV 캐시, 정적 배치, 연속 배치, 온라인 소프트맥스, FlashAttention 유사 PagedAttention.
* 학습 과정 및 내용:
* LLM, vLLM, 모델, 추론 서버 소개
* Safetensors 및 모델 형식 설명
* 부동소수점 연산 (bfloat16 포함) 및 GPU/CPU 메모리 관리
* 단일 토큰 추론, 토큰화, 임베딩, CUDA 커널 엔지니어링
* RMSNorm, RoPE, 잔차 연결, cublasGemmEx, 전치 트릭
* Prefill vs Decode, KV 캐시, Attention (GQA), SiLU, Softmax, Causal mask, Argmax
* Feed forward network, 버퍼 재사용, 배치 처리 (정적, 연속)
* Paged Attention 및 Paged KV 캐시
* 기술 요구 사항: NVIDIA GPU, Linux, CUDA Toolkit 13.1, C++ 17, GCC 15.2.1, nlohmann/json 3.12.0 (단일 헤더)
* Safetensors 형식: 헤더 크기, JSON 헤더 (텐서 이름, dtype, shape, offsets), 텐서 데이터로 구성된다.
* 부동소수점 표현: float16, bfloat16의 구조 (부호, 지수, 분수)와 계산 방식을 설명하며, LLM 추론에서 bfloat16이 널리 사용되는 이유를 분석한다.
* GPU/CPU 메모리 관리: 호스트(CPU)와 디바이스(GPU) 메모리의 개념, 데이터 전송 및 할당 과정을 cudaMalloc, cudaMemcpy를 사용하여 설명한다.

시사점

tiny-vLLM 프로젝트는 C++와 CUDA를 활용하여 LLM 추론 엔진의 내부 동작 원리를 학습하고 직접 구현하는 실습 환경을 제공하며, LLM 추론 최적화에 대한 깊이 있는 이해를 돕는다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions