2026년 6월 18일 · 4² AI 뉴스레터
로컬 모델 실행, 이제는 유용하다
vickiboykis.com
파이랩 정리
로컬 모델 실행의 발전
로컬 모델을 사용한 지 꽤 되었지만, 최근에 그 성능이 놀라울 정도로 향상되었습니다. 저는 2022년형 M2 Mac을 사용하고 있으며, 64GB RAM과 1TB 저장 공간을 갖추고 있습니다. Mistral 7B, Gemma 3, OpenAI OSS-20B, Qwen 3 MOE 등 다양한 모델을 사용해 보았고, Qwen 2.5 Coder와 같은 여러 Qwen 변형도 사용했습니다. 이러한 모델들은 llama.cpp, Open WebUI, llama-cpp-python, Ollama llamafiles, LM Studio 등 다양한 시스템 설정에서 실행되었습니다.
로컬 모델의 초기 문제점
초기 로컬 모델은 속도가 느리고 사용하기 어려웠으며, 대부분의 프로그래밍 작업에 있어 정확도가 떨어졌습니다. 로컬 모델이 뒤처져 있다는 인식은 GPT-OSS가 출시되기 전까지는 대체로 사실이었습니다. 과학적인 증거는 없지만, 개인적인 경험에 따르면 GPT-OSS 이후로 API 모델과 비교해 검증할 필요가 줄어들었습니다. 최근에는 구글의 Gemma 4 시리즈가 출시되면서 로컬에서 에이전트 코딩을 수행할 수 있게 되었고, 이는 최첨단 모델의 약 75% 정확도와 속도로 작동합니다.
로컬 모델의 활용 사례
저는 로컬 모델을 사용하여 다음과 같은 작업을 수행했습니다:
- Python 스크립트를 노트북에서 5-6개의 모듈로 리팩토링
- 모듈에 올바른 제네릭 타입 힌트를 적용하여 린트
- 블로그 게시물 교정
- 단위 테스트 작성
- 추천 시스템을 위한 두 타워 모델을 부트스트랩
이러한 작업들은 6개월 전만 해도 로컬 모델로는 불가능했던 것들입니다. 최근 출시된 Gemma-4-12b-qat 모델은 크기에 비해 성능이 인상적입니다.
로컬 에이전트 모델 실행
로컬 에이전트 흐름을 실행하려면 로컬 모델 추론 엔진, 에이전트 하네스, 로컬 모델 아티팩트가 필요합니다. 제 로컬 설정에서는 Pi를 에이전트 하네스로, LM Studio를 추론 서버로 사용하고 있습니다. 다음은 설정 과정에서의 몇 가지 변경 사항입니다:
- 모델: Gemma 26B A4B 대신 더 최근의 gemma-4-12b-qat를 사용했습니다.
- 보안: 모든 Pi 세션을 Docker 컨테이너에서 실행하며, bash에만 권한을 부여합니다.
- 에이전트 하네스 설정: Docker에서 모든 것을 실행하기 때문에 Pi의 models.json을 편집하여 Pi가 모델과 통신할 수 있도록 했습니다.
Docker 설정
다음은 Docker Compose 설정 예시입니다:
services:
pi:
build:
context: .
dockerfile: Dockerfile
image: pi-agent:0.74.0
init: true
stdin_open: true
tty: true
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
OPENAI_API_KEY: ${OPENAI_API_KEY:-not-needed}
GEMINI_API_KEY: ${GEMINI_API_KEY:-}
OPENAI_API_BASE: ${OPENAI_API_BASE:-http://host.docker.internal:1234/v1}
volumes:
- ${HOME}/.pi/agent/models.json:/config/models.json
- ${WORKSPACE:-.}:/workspace
- pi-config:/config
- pi-sessions:/sessions
working_dir: /workspace
volumes:
pi-config:
pi-sessions:
실행 스크립트
다음은 Pi 에이전트를 실행하는 bash 스크립트입니다:
#!/usr/bin/env bash
# Pi — Start the containerized Pi agent.
SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
WORKSPACE_DIR="${WORKSPACE:-$(pwd)}"
case "$WORKSPACE_DIR" in
/*) ;;
*) WORKSPACE_DIR="$(cd -- "$WORKSPACE_DIR" && pwd)" ;;
esac
export WORKSPACE="$WORKSPACE_DIR"
sandbox="${PI_SANDBOX:-0}"
pi_args=()
while (( $# )); do
case "$1" in
--sandbox) sandbox=1 ;;
--no-sandbox) sandbox=0 ;;
*) pi_args+=("$1") ;;
esac
shift
done
compose_files=(-f "$SCRIPT_DIR/docker-compose.yml")
if [[ "$sandbox" == "1" ]]; then
compose_files+=(-f "$SCRIPT_DIR/docker-compose.sandbox.yml")
fi
repo_slug="$(basename -- "$WORKSPACE_DIR" | tr -c 'a-zA-Z0-9_.-' '-' | sed 's/^-*//')"
[[ -z "$repo_slug" ]] && repo_slug="workspace"
container_name="pi-${repo_slug}-$$"
api_key_args=(-e OPENAI_API_KEY -e DEEPSEEK_API_KEY -e ANTHROPIC_API_KEY -e GEMINI_API_KEY)
cmd=(docker compose --project-directory "$SCRIPT_DIR" "${compose_files[@]}" run --rm --name "$container_name" "${api_key_args[@]}" pi)
if (( ${#pi_args[@]} )); then
cmd+=("${pi_args[@]}")
fi
exec "${cmd[@]}"
이 설정은 실험에 매우 유용했습니다. 여전히 로컬 모델에는 추론 속도가 느리고 컨텍스트 윈도우가 제한적이라는 문제점이 있지만, LM Studio와 HuggingFace의 도구 덕분에 많이 개선되었습니다. 로컬 모델의 장점은 모델의 내부를 직접 살펴볼 수 있다는 점입니다. 예를 들어, 토큰 추론 과정을 실시간으로 관찰하거나, 로컬 컨텍스트 윈도우를 변경하여 성능 변화를 확인할 수 있습니다. 이러한 기능들은 로컬 모델의 매력을 더해줍니다.
