API 크레딧을 낭비하고 VRAM을 점유하는 로컬 에이전트의 무한 루프에 지쳐서, 이를 자동으로 동결하는 오픈 소스 eBPF 서킷 브레이커를
요약
로컬 AI 에이전트의 무한 루프로 인한 API 크레딧 낭비와 VRAM 점유 문제를 해결하기 위해 eBPF 기반의 오픈 소스 서킷 브레이커인 KernelCap을 소개합니다. Linux 커널 수준에서 폭주하는 워크로드를 실시간으로 감지하고 프로세스를 즉각 동결하여 자원을 보호합니다.
핵심 포인트
- eBPF를 활용해 커널 수준에서 AI 워크로드의 이상 동작을 저지연으로 포착
- SimHash 엔진을 통해 반복적인 토큰 생성 및 문자열 루프를 밀리초 단위로 감지
- OLS 회귀 분석을 적용하여 오탐을 최소화하고 실제 메모리 누수 여부 판별
- SIGSTOP 신호를 사용하여 프로세스를 즉시 동결하고 자원 점유를 차단
이곳의 많은 분들처럼, 저도 Ollama나 vLLM 같은 로컬 백엔드 및 외부 API를 대상으로 로컬 에이전트 프레임워크(Autogen, CrewAI, LangChain 등)를 실험해 왔습니다.
며칠 전, 처리되지 않은 포맷팅 예외(formatting exception)로 인해 백그라운드 에이전트 스크립트 루프 중 하나가 좁은 무한 루프(infinite loop)에 빠졌습니다. 이 루프는 동일한 컨텍스트 문자열과 토큰을 계속해서 반복적으로 쏟아냈습니다. 이로 인해 GPU VRAM이 완전히 잠기고 CPU 점유율이 치솟았으며, 만약 해당 실행에 외부 API를 사용하고 있었다면 제가 알아차리기도 전에 크레딧 잔액이 완전히 바닥났을 것입니다.
표준 모니터링 도구들은 10~30초마다 폴링(poll)을 수행하는데, 에이전트가 통제 불능 상태로 치닫고 있을 때는 너무 느립니다. 저는 이를 즉각적으로 처리할 수 있는 저수준(low-level)의 무언가를 원했고, 그래서 KernelCap을 만들었습니다. 이는 Linux 커널을 사용하여 폭주하는 AI 워크로드를 포착하고 동결하는, Go 언어로 작성된 오픈 소스의 가벼운 백그라운드 데몬입니다.
내부 작동 원리는 다음과 같습니다:
- eBPF 커널 프로파일링 (eBPF Kernel Profiling): eBPF kprobes 및 tracepoints를 사용하여 Linux 커널에 직접 후킹(hook)함으로써 호스트 링 버퍼(ring buffers)에서 프로세스 스케줄링 동작을 직접 추적합니다. 에이전트는 매우 작아서 RAM 사용량을 15MB 미만으로 엄격하게 제한하므로 모델의 소중한 자원을 빼앗지 않습니다.
- 인라인 프록시 및 SimHash 루프 (Inline Proxy & SimHash Loops): 스트리밍되는 텍스트 블록을 읽는 인라인 역방향 프록시(reverse proxy) 미들웨어를 실행합니다. Go 기반의 SimHash 엔진을 사용하여 흐르는 텍스트에 대한 비트 단위 해밍 거리(Hamming distances)를 계산하며, 이를 통해 반복적인 문자열 생성 및 토큰 루프를 밀리초 단위 내에 잡아냅니다.
- OLS 회귀 분석 (OLS Regression Analytics): 일반적인 프롬프트 처리 스파이크(spike) 중에 짜증 나는 오탐(false positives)을 발생시키지 않으면서 호스트 메모리 누수를 차단하기 위해, 들어오는 텔레메트리(telemetry) 배열에 대해 내부적인 최소제곱법 (OLS, Ordinary Least Squares) 선형 회귀 모델을 실행하여 실제 단조적 누수($R^2 > 0.95$)인지 확인합니다.
OS 서킷 브레이커 (OS Circuit Breaker): 폭주하는 토큰 루프(runaway token loop)나 구조적 누수(structural leak)를 감지하는 즉시, 저수준 시스템 콜 래퍼 (low-level syscall wrapper)를 호출하여 정확한 대상 PID에 POSIX SIGSTOP 신호를 보냅니다. 이는 프로세스를 즉각적으로 동결시키고 CPU/GPU 사용률을 절대 0으로 떨어뜨립니다. VRAM은 할당된 상태로 유지되어 아무것도 충돌하지 않지만, 실행은 완전히 중단됩니다. 로그를 확인하고 스크립트를 수정한 뒤, 준비가 되면 SIGCONT를 보내 실행을 재개할 수 있습니다.
또한 호스트 기능(루트 권한, BTF 커널 맵 지원, 포트 바인딩)에 대한 빠른 사전 점검을 수행하는 kernelcap doctor CLI 명령과, 간단한 로컬 개발자 웹 UI로 메트릭 (metrics)을 스트리밍하는 내장 WebSocket 서버를 포함했습니다.
이 프로젝트는 Apache 2.0 라이선스 하에 100% 오픈 소스로 제공되며, make build-oss 명령으로 로컬에서 빠르게 컴파일할 수 있습니다.
여러분들의 의견이 궁금합니다. 특히 토큰 프록시 레이어 (token proxy layer)를 최적화하거나 NVML/GPU 프로파일링 훅 (profiling hooks)을 확장하는 것에 대한 아이디어가 있다면 알려주세요.
코드와 아키텍처 설정은 여기서 확인하실 수 있습니다:
github.com/eerbium/kernelcap
/u/Tgamerydk 님이 r/LocalLLaMA 에 제출함
[link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/OpenAI Codex (search)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기