프로젝트 소개

goinfer는 오픈 가중치 LLM을 로컬에서 실행하기 위한 순수 Go, no-cgo 라이브러리이자 바이너리 모음이다. 단일 사용자 추론을 목표로 한다: 하나의 프로세스, 하나의 머신, 파일 복사로 배포. 서빙 엔진(연속 배칭이나 페이지드 어텐션 없음)이 아니며 프로바이더 오케스트레이션 계층도 아니다. 주요 기능: - **라이브러리 사용**: `go get`으로 decoder와 tokenizer 패키지를 받아 임포트하고 `decoder.Model.Generate`로 텍스트를 생성한다. 40줄 예제는 `examples/embed/main.go`에 있다. - **보장된 출력 타입**: Go 구조체에서 JSON Schema를 도출하고, 증분 바이트 수준 문법에 대한 logit 마스크로 생성을 제약한 뒤 결과를 `json.Unmarshal`한다. 유효하지 않은 토큰은 재시도되지 않고 도달 불가능하다. 모든 JSON Schema와 명령줄에서 작동한다. 도구 호출도 Qwen, Nemotron-3-Nano, Mellum2, Granite 4.2 계열에서 동일하게 처리된다. - **신뢰도 캡처**: `.CaptureConfidence(...)`는 enum, boolean, integer 필드의 결정 위치에서 허용된 값에 대한 모델의 확률을 보고한다. 라우팅에 유용하지만 보정되지는 않는다. - **바이너리**: `goinfer-serve`(OpenAI + Anthropic API, 웹 UI, GPU 내장), `goinfer-chat`(단발 런타임), 그리고 모델 포함 변형(0.5B 및 1.5B)은 약 0.4초에 부팅하고 100 MB 미만 힙을 사용한다. - **모델 가져오기**: `pull`로 HuggingFace에서 GGUF를 직접 가져온다. 중단된 전송은 재개되며 익명 접근만 가능하다. - **백엔드**: CPU, CUDA, Metal, WebGPU 모두 cgo 없이. GPU 백엔드는 별도 진입점(`-tags metal`, `-tags cuda`)을 가진다. - **양자화**: f32, int8, int8int8, int4(W4A8), int4mix. 15가지 GGUF 타입을 읽고 다섯 가지 정밀도로 계산한다. `--quant int4`가 기본값이다. - **대형 모델**: `-stream-weights`는 라우팅된 전문가만 상주시킨다(MoE용). `-moe-cache-experts`는 전문가를 호스트→VRAM으로 온디맨드 스트리밍한다. - **소형 기기**: `CGO_ENABLED=0`으로 64비트 ARM Linux(예: Raspberry Pi)로 크로스 컴파일한다. 512 MB 보드가 하한이다. - **모델 계열**: Gemma 1/2/3/4, Qwen 2.5/3, Llama, Mistral, Mixtral, Phi-3, DeepSeek/MLA, GLM, Kimi, Granite, Nemotron, Mellum을 포함한 39개 계열. 각각 HuggingFace logit-parity 게이트 뒤에 있다. - **시퀀스 믹싱**: softmax·GQA, gated-linear(DeltaNet), state-space(Mamba-2), latent-KV(MLA), 그리고 dense 및 sparse-MoE. - **로더**: GGUF, safetensors, GPTQ, AWQ, 사전 양자화된 `.giw` 번들. - **서빙**: OpenAI 호환 및 Anthropic Messages 엔드포인트, 다중 모델, 비전, 임베딩. `POST /v1/systemone`은 TypeSafe의 decisions 와이어 형태로 응답한다. - **성능**: Ollama 대비 벤치마크는 더 빠른 콜드 스타트(M1 Pro에서 25초 vs 33초), CUDA(1.05–1.47×)와 Metal(1.5B/7B에서 1.03–1.19×)에서 더 빠른 그리디 디코드를 보이지만, Metal의 긴 프롬프트 프리필과 Mac의 CPU 디코드는 llama.cpp보다 느리다. 모든 수치는 머신, 체크포인트, 양자화, 날짜와 함께 문서화되어 있다. 상태: Pre-1.0. 순전파 및 양자화 계약은 parity-gated이며 안정적이고, 로더와 아키텍처 디스크립터 표면은 아직 변동 중이다. MIT 라이선스.