goccy/go-llama
C 라이브러리 없이 순수 Go 코드만으로 LLM을 돌리는 방법
go-llama는 AI 모델을 돌리는 유명 엔진인 llama.cpp를 WebAssembly로 컴파일한 뒤 다시 Go 코드로 변환해 만든 라이브러리다. cgo(C언어 연동 기능)나 별도의 공유 라이브러리 없이, 하나의 정적 바이너리만으로 GGUF 형식의 모델을 실행할 수 있다. Go 컴파일러가 지원하는 모든 환경에서 그대로 동작하는 것이 핵심이다.
무엇을 하는 레포인가
- llama.cpp를 llama-wasm 프로젝트로 WebAssembly로 컴파일한 뒤, wasm2go 도구로 다시 Go 언어 코드로 번역해서 실행 시점에는 wasm 런타임이 전혀 필요 없다.
- 하나의 Llama 인스턴스 안에 여러 모델을 올리고, 각 모델마다 여러 개의 대화 컨텍스트(KV 캐시)를 만들 수 있어 독립된 대화 여러 개를 하나의 모델로 서비스하거나, 추측 디코딩(작은 모델로 먼저 예측하고 큰 모델이 검증하는 가속 기법)에 필요한 여러 모델 동시 로드가 가능하다.
- 생성 결과를 토큰 단위로 실시간으로 받아보는 스트리밍 기능과, 다른 고루틴(Go의 경량 스레드)에서 생성을 즉시 중단시키는 인터럽트 기능을 제공한다.
- 디렉터리 접근 범위 제한, 메모리 상한 설정 등 샌드박스 옵션을 지원해 모델 실행 환경을 격리할 수 있다.
- wasm32 구조의 한계로 선형 메모리가 4GiB로 제한되어, 모델 가중치와 대화 컨텍스트의 KV 캐시가 모두 이 안에 들어가야 하므로 대략 30억 파라미터급 Q4 양자화 모델이 적정 크기로 권장된다.
왜 중요한가
cgo나 별도 공유 라이브러리 설치 없이 Go 애플리케이션 하나만 빌드해서 배포하면 되기 때문에, 여러 운영체제나 아키텍처에 크로스컴파일해 AI 추론 기능을 쉽게 심을 수 있다. 서버, CLI 도구, 임베디드 환경 등 Go가 돌아가는 곳이라면 별도 런타임 설치 걱정 없이 LLM 기능을 넣을 수 있다는 뜻이다.
이 레포의 용어
- cgo · Go 코드에서 C 언어 라이브러리를 호출할 수 있게 해주는 Go의 기능
- GGUF · llama.cpp 계열에서 쓰는 압축된 AI 모델 파일 형식
- WebAssembly(wasm) · 브라우저나 다양한 환경에서 실행되도록 만든 저수준 바이트코드 포맷
- KV 캐시 · 이전에 계산한 결과를 저장해 다음 단어 생성 속도를 높이는 대화별 임시 저장 공간
- 추측 디코딩(speculative decoding) · 작은 모델이 먼저 여러 단어를 예측하고 큰 모델이 한 번에 검증해 속도를 높이는 기법
레포 원문 소개 (영문)
llama.cpp in pure Go
GitHub에서 보기주목받는 레포
- liustack/modlens텍스트만 읽는 DeepSeek 같은 AI 모델이 이미지를 붙여넣으면 그 내용을 구조화된 텍스트로 바꿔 '보게' 해주는 플러그인
- vorssaint/vorssaint-utils메뉴바 아이콘 하나로 유료 맥 앱 열 개 값을 대신하는 오픈소스 도구
- MadsLorentzen/ai-job-search구직 활동 전체를 Claude Code로 자동화하는 개인용 프레임워크, 만든 사람은 실제로 이걸로 취업했다
- rohitg00/ai-engineering-from-scratchAI를 처음부터 손으로 만들어보며 배우는 무료 커리큘럼, 511개 수업이 실전 도구로 이어진다
- AgriciDaniel/claude-obsidianClaude Code로 Obsidian 노트를 관리하는 개인 지식 시스템, 파일은 항상 사용자 손에
- openclaw/openclaw내 컴퓨터와 휴대폰에서 돌아가며 카톡·슬랙처럼 쓰던 메신저로 말 거는 개인용 AI 비서
- tashfeenahmed/freellmapi34개 AI 회사의 무료 사용량을 하나로 묶어 API 하나로 쓰게 해주는 오픈소스 라우터
- Alishahryar1/free-claude-code코딩 AI 에이전트를 무료 모델 49곳에 자유롭게 연결해주는 로컬 프록시