AI Briefing

우리가 자체 C 및 C++ 추론 엔진을 작성하는 이유

·2026.08.01 01:17

LocalAI가 Python 의존성을 줄인 자체 C/C++ 추론 엔진의 성능과 비용을 공개했다.

LocalAI는 대부분의 백엔드에서 llama.cpp, vLLM, whisper.cpp, MLX 같은 기존 엔진을 래핑하지만, 18개 백엔드는 C/C++로 직접 포팅했다고 밝혔다. Python·PyTorch 기반 스택의 큰 설치 용량, CUDA·glibc 의존성, C++ 구현이 없는 모델을 배포하기 어려운 문제가 자체 엔진 개발의 배경이다.

대표 사례인 vllm.cpp는 vLLM V1의 서빙 구조를 C++20으로 구현했다. paged KV cache, continuous batching, prefix caching, scheduler, sampler를 지원하며 추론 시 ggml조차 사용하지 않는다.

  • vLLM 설치 용량: 9.1GiB virtualenv
  • vllm.cpp 바이너리: 66MiB
  • NVIDIA GB10에서 Qwen3.6-27B NVFP4 기준, 동시성 1~32 구간의 처리량은 vLLM과 사실상 동률
  • 동시성 1에서는 vllm.cpp가 4.5% 빠른 86.05 tok/s를 기록
  • 최대 호스트 메모리는 24.88GiB로 vLLM의 28.18GiB보다 낮음
  • 모든 테스트 구간에서 vLLM과 토큰 단위 출력이 동일함

같은 GGUF 파일을 사용하는 CPU 환경에서는 prefill이 llama.cpp보다 1.18배 빠르고, Apple M4에서는 MLX-LM 대비 warm total throughput이 **97.6%**였다.

depth-anything.cpp는 ByteDance의 Depth Anything 3를 C++/ggml로 포팅한 사례다. Ryzen 9 9950X3D에서 PyTorch와 비교한 결과, q8_0 모델은 다음과 같은 수치를 보였다.

  • 모델 크기: 516MB → 142MB
  • 로딩 시간: 749ms → 40ms
  • 추론 시간: 416.9ms → 319.4ms, 1.31배 향상
  • 최대 RAM: 1,328MB → 363MB
  • q4_k 빌드는 99MB이며 기준 구현과 거의 손실 없는 결과를 냄

성능 향상의 핵심은 행렬곱 커널 자체보다, 매번 다시 계산하던 positional embedding과 bicubic embedding을 캐싱해 매 추론마다 발생하던 약 95ms의 CPU 오버헤드를 제거한 데 있었다. LocalAI는 자체 C/C++ 엔진이 작은 배포 바이너리, 예측 가능한 메모리 사용량, 낮은 의존성뿐 아니라 모델별 실행 경로 최적화도 제공한다고 설명했다.

이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.

요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.