콘텐츠로 이동

10주차: 오픈소스 코딩 LLM과 로컬 배포

Phase 410주차고급강의일: 2026-05-05

개념 관점

오픈웨이트 vs 오픈소스 구분, 2026년 주요 코딩 LLM 계열(Qwen3-Coder, DeepSeek-V4, GLM-5.1, MiniMax-M2.7, DeepSeek-Coder-V2-Lite)의 위치를 설명한다.

설계 관점

상용 API, 클라우드 에이전트, 로컬 추론 3가지 옵션을 데이터 경계·비용·운영 난이도 기준으로 비교하고 의사결정 트리로 매핑한다.

구현 관점

vllm serve 명령으로 단일/멀티 GPU/MIG 환경에 OpenAI 호환 서버를 띄우고, 모델 어댑터를 통해 alias·tool parser·token accounting을 통일한다.

운영 관점

동일 task를 상용 모델과 로컬 모델에 같은 하네스로 반복 실행해 throughput·지연시간·실패율·예상 비용을 정량 비교한다.


2026년의 핵심 변화는 오픈웨이트 모델이 실제 에이전트 하네스 안에서 상용 모델과 비교 가능한 후보가 되었다는 점이다. 모델 자체의 코딩 성능뿐 아니라 tool calling, long context, 추론 서버 호환성, 라이선스, 운영비가 함께 비교 대상이 되었다.

Open-weight Coding LLM 2026
Open-weight Coding LLM (2026)
QwenQwen3-Coder-Next 80B MoE · 3B active · 256KQwen3-Coder-30B-A3B
DeepSeekV4-Pro 1.6T MoE · 1M ctxV4-Flash 284B MoE · Coder-V2-Lite 16B
GLMGLM-5.1agentic engineering
MiniMaxMiniMax-M2.7agent + office
모델공개 단위파라미터컨텍스트강점운영 메모
Qwen3-Coder-NextApache 2.080B MoE, 3B 활성256Kagentic coding, tool calling, local development대형 이전 세대보다 경량화된 coding-agent 후보
DeepSeek-V4-Pro / Flash공개 모델 카드1.6T/284B MoE1Mlong-context reasoning, coding, agentic taskPro는 품질, Flash는 효율 지향
GLM-5.1공개 가중치공개 GLM 계열long-context agent workagentic engineering, coding, tool useGLM 계열 비교 기준
MiniMax-M2.7공개 모델 카드230B급 MoE 계열장문 agentic workflowcoding, search, office work, long-horizon agentsMiniMax 계열 agentic 후보
DeepSeek-Coder-V2-LiteDeepSeek16B/236B 계열128K단일 GPU 실습, 코드 수정/완성교육용 Lab에 적합. 고성능 기준선으로는 부적합

모델 카드는 벤치마크 표보다 운영 제약을 먼저 읽어야 한다. 수업에서는 다음 순서로 후보를 평가한다.

확인 순서질문탈락 신호
License수업/연구/상용 PoC에 쓸 수 있는가?재배포·서비스 사용 조건이 불명확함
Serving supportvLLM, SGLang, Transformers 중 무엇을 공식 지원하는가?공식 예제가 없고 community patch만 존재함
Tool formattool call, JSON mode, reasoning output을 어떻게 표현하는가?parser를 매번 ad hoc으로 고쳐야 함
Context policy최대 context와 권장 운영 context가 다른가?1M context를 표기하지만 실제 GPU 예산이 없음
Failure behaviorOOM, invalid JSON, refusal, timeout이 어떻게 나타나는가?실패가 구조화되지 않아 retry 판단이 어려움

위 표는 강의 기준 시점의 후보 목록이다. 실제 캡스톤에서는 모델 이름보다 같은 task packet을 같은 harness로 실행한 재현 결과가 선택 근거가 된다.

Qwen3-Coder-Next는 80B total / 3B active MoE 모델이며, 256K context와 agentic coding/tool calling을 전면에 둔다. 대형 이전 세대보다 경량화된 coding-agent 후보로, 수업에서는 Qwen 계열 비교 기준으로 사용한다.

운영 관점에서 Qwen3-Coder의 의미는 단순한 코딩 성능에 그치지 않는다. 긴 저장소 컨텍스트, 함수 호출 포맷, vLLM/SGLang 배포 지원이 결합되어 로컬 또는 기관 서버에서 agentic coding harness를 구성할 수 있는 후보가 되었다.

DeepSeek-V4-Pro와 DeepSeek-V4-Flash는 DeepSeek V4 계열 모델 카드 기준의 비교 후보다. 1.6T/284B MoE와 1M context를 제시하며, V4-Pro는 품질과 장문 reasoning, V4-Flash는 효율과 throughput 후보로 구분한다.

계열강의 내 사용
DeepSeek-Coder-V2-Lite실습 서버에서 구동하기 쉬운 교육용 모델
DeepSeek-V4-ProDeepSeek 계열 고성능 비교 기준
DeepSeek-V4-Flash비용/처리량 비교 기준
DeepSeek 이전 세대long-context 기준선 비교용

GLM-5.1은 공개 GLM 계열 후보로, agentic engineering과 coding workflow를 비교할 때 확인할 모델이다. 실무 교훈은 동일하다. 모델 교체는 단순한 model= 값 변경만으로 충분하지 않으며, 하네스가 모델별 tool/reasoning parser와 serving 옵션을 알아야 한다.

MiniMax-M2.7은 MiniMax 계열의 agentic workflow 후보다. 코딩뿐 아니라 검색, office work, 장기 agentic task를 강조한다. 모델 카드의 성능 수치는 제공사가 제시한 참고 자료이므로 강의에서는 성능 순위로 단정하지 않는다. 대신 10주차 Lab에서 동일 태스크를 같은 하네스, 같은 예산, 같은 평가 기준으로 비교한다.

오픈웨이트 모델 도입은 API 비용 절감만의 문제가 아니다. 실제 선택지는 세 가지다.

상용 API

Claude, GPT, Gemini API를 직접 사용한다. 품질과 운영 편의성은 높지만 데이터 경계, 비용 예측, rate limit을 관리해야 한다.

클라우드 에이전트

Codex Web/App, Claude Code on the Web, GitHub Agent HQ처럼 원격 sandbox와 GitHub 연동을 사용한다. 비동기 작업과 리뷰 흐름에 강하다.

로컬 추론

vLLM/SGLang으로 OpenAI 호환 API를 제공한다. 기관 데이터 경계와 예측 가능한 GPU 비용이 장점이지만 운영 복잡도가 커진다.

기준상용 API클라우드 에이전트로컬 추론
시작 속도매우 빠름빠름느림
데이터 통제낮음-중간중간높음
장기 비용사용량 의존좌석/사용량 의존GPU 고정비 중심
신규 모델 접근빠름빠름모델 공개 후 가능
운영 난이도낮음중간높음
강의 실습 가치API 설계workflow 설계MLOps/infra 이해
Model Selection Decision Tree
Q1. 데이터가 외부로 나가도 되는가?
✓ 예
✗ 아니오→ 로컬 추론 vLLM/SGLang
Q2. 최상위 모델 성능이 필요한가?
✓ 예
✗ 아니오→ 상용 API + cache + budget gate
Q3. 대화형 IDE인가, 비동기 PR인가?
대화형상용 API + Claude Code/Codex CLI
비동기 PR클라우드 에이전트 GitHub Agent HQ
Q4. (로컬일 때) 하나의 모델로 충분한가?
✓ 예단일 모델 + admission control
✗ 아니오모델 라우팅 게이트웨이

이 트리는 정답이 아니라 결정 기록의 출발점이다. 캡스톤 ADR에 분기를 명시하고 결정 이유를 1-2문장으로 적어 둔다.

오픈웨이트 모델을 운영하려면 추론 서버가 필요하다. 강의에서는 vLLM을 기본으로 쓰지만, 후보를 비교 평가할 줄 알아야 한다.

기준vLLMSGLangTGI (Hugging Face)
OpenAI-compatible API기본 제공기본 제공기본 제공
Continuous batching
Prefix cachingautomaticRadixAttention부분 지원
Speculative decoding일부 모델
Disaggregated prefill실험적×
Tool/structured output✓ (auto-tool, guided JSON)✓ (constrained decoding)
운영 복잡도중-상
커뮤니티매우 활발빠르게 성장안정
강의 권장 용도기본 실습/캡스톤RadixAttention 비교 학습빠른 PoC

상용 API와 로컬 추론을 동일 단위로 비교하려면 token 가격뿐 아니라 GPU amortization을 함께 계산한다.

항목수식
상용 API 1회 비용(prompt_tokens × in_price) + (completion_tokens × out_price)
로컬 GPU 시간당 비용GPU 임대단가 또는 (구매가 / 감가상각 시간) + 전력비
로컬 1회 비용GPU 시간당 비용 × (run_latency_s / 3600) / 동시 처리 수
break-even 호출량GPU 시간당 비용 / 평균 1회 API 비용
예시
- 상용 API 기준 예시: $3/M in, $15/M out → 1회 평균 $0.012 (3K in, 600 out)
- DGX H100 1대 시간당 ~ $4.5 (실습용 단가 가정), 동시 처리 4건
- 로컬 1회 비용 ≈ 4.5 / 4 / (3600/12) ≈ $0.0038
- break-even: 시간당 4.5 / 0.012 ≈ 375 회 호출 이상이면 로컬이 유리

이 표는 캡스톤 보고서의 “왜 로컬을 선택했는가” 슬라이드에 활용할 수 있다.

AGENTIC CODING TOOL ECOSYSTEM (2026)
Agent Harness
  • Claude Code: subagents, hooks, skills, MCP
  • Codex CLI/App/Web: sandbox, AGENTS.md, MCP, subagents
  • Gemini CLI: 1M context, Google Search grounding, MCP
  • GitHub Agent HQ: GitHub 안의 Claude/Codex 선택 실행
Open-Weight Models
  • Qwen3-Coder-Next
  • DeepSeek-V4-Pro / Flash
  • GLM-5.1
  • MiniMax-M2.7
  • DeepSeek-Coder-V2-Lite
Serving + Control Plane
  • vLLM / SGLang: OpenAI-compatible serving
  • LiteLLM / gateway: routing, budget, policy
  • OpenTelemetry: trace, metrics, logs
  • Agent OS Runtime: event store, contracts, replay

터미널 기반 AI 코딩 CLI 도구 비교는 AI 코딩 도구 선택 가이드 참조.

OpenAI 호환 API가 표준 인터페이스가 되는 이유

섹션 제목: “OpenAI 호환 API가 표준 인터페이스가 되는 이유”

vLLM과 SGLang은 대부분 OpenAI-compatible /v1/chat/completions 또는 Responses 스타일 클라이언트 패턴을 지원한다. 이 인터페이스를 쓰면 하네스는 모델 제공자에 덜 묶인다.

from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="local-dev-token",
)
response = client.chat.completions.create(
model="Qwen/Qwen3-Coder-Next",
messages=[
{"role": "system", "content": "You are a careful coding agent."},
{"role": "user", "content": "Add tests for the parser edge cases."},
],
temperature=0.2,
)

핵심은 추상화 계층이다.

계층책임
Agent CLI파일 읽기/쓰기, 명령 실행, 사용자 승인, 작업 흐름
Gateway모델 라우팅, 예산, rate limit, audit
Servingbatching, KV cache, speculative decoding, GPU scheduling
Model토큰 생성, tool-call JSON, reasoning output

OpenAI 호환 API는 공통 출발점일 뿐이다. 하네스가 모델을 실제로 바꿔 끼우려면 adapter가 다음 항목을 흡수해야 한다.

항목구현 기준
Model aliaslocal-coder, qwen3-coder, glm-5.1처럼 강의/실습용 이름을 고정한다
Message templatesystem/developer/user/tool 메시지가 모델별 chat template과 충돌하지 않게 한다
Tool parser함수 호출 JSON, XML-like block, plain text plan을 모델별로 파싱한다
Retry policytimeout, invalid JSON, context overflow, refusal을 서로 다른 failure reason으로 기록한다
Token accountingprompt/completion/cache token을 run id와 연결한다
Evaluation hook동일 task packet을 상용 API와 로컬 모델에 반복 실행할 수 있게 한다

이 체크리스트가 없으면 “모델 교체 가능”은 실제 운영 속성이 아니라 구현되지 않은 선언에 그친다.

# adapter.py — 모델 alias, tool parser, token accounting을 통일하는 thin layer
from dataclasses import dataclass
from typing import Callable, Any
@dataclass
class ModelSpec:
alias: str
backend_url: str
backend_model: str
tool_parser: Callable[[str], list[dict]]
chat_template: str | None = None
REGISTRY: dict[str, ModelSpec] = {}
def register(spec: ModelSpec) -> None:
REGISTRY[spec.alias] = spec
def call(alias: str, messages: list[dict], **kw) -> dict:
spec = REGISTRY[alias]
from openai import OpenAI
client = OpenAI(base_url=spec.backend_url, api_key="local")
resp = client.chat.completions.create(
model=spec.backend_model, messages=messages, **kw
)
text = resp.choices[0].message.content
tools = spec.tool_parser(text)
return {
"alias": alias,
"text": text,
"tools": tools,
"usage": resp.usage.model_dump(),
}
  1. 환경 확인

    Terminal window
    nvidia-smi
    python --version
    uv venv .venv
    source .venv/bin/activate
    uv pip install vllm openai
  2. 실습 모델 선택

    Terminal window
    vllm serve deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct \
    --served-model-name local-coder \
    --max-model-len 32768 \
    --port 8000
  3. OpenAI 호환 API 테스트

    Terminal window
    curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
    "model": "local-coder",
    "messages": [
    {"role": "user", "content": "Python으로 stable topological sort를 구현해줘"}
    ],
    "temperature": 0.2
    }'
  4. 동일 태스크 비교

    각 팀은 같은 5개 태스크를 상용 API 1개와 로컬 모델 1개에 실행한다.

    태스크평가 기준
    버그 수정테스트 통과 여부
    리팩터링동작 보존 + 가독성
    테스트 생성커버리지와 edge case
    문서 업데이트변경 반영 정확도
    CLI 기능 추가요구사항 충족 + UX
  5. 비용/처리량 측정

    Terminal window
    python -m vllm.benchmarks.benchmark_serving \
    --backend openai-chat \
    --base-url http://localhost:8000 \
    --model local-coder \
    --num-prompts 100 \
    --request-rate 4
  6. 모델 어댑터 등록

    adapter.py 패턴으로 alias 2-3개(local-coder, qwen3-coder, gpt-baseline 등)를 등록하고, 같은 task packet을 alias만 바꿔 실행할 수 있게 한다.

제출 마감: 2026-05-12 23:59

요구사항:

  1. DGX 또는 로컬 GPU에서 vLLM 서버 구동 로그
  2. OpenAI 호환 API 호출 결과 3개 이상
  3. 상용 모델 1개 vs 오픈웨이트 모델 1개 동일 태스크 5개 비교
  4. 처리량(tokens/sec), 지연시간, 실패율, 비용 추정 표
  5. 최종 선택: 어떤 모델을 어떤 작업에 쓸 것인지에 대한 근거
  6. 모델 어댑터 코드 (adapter.py)와 등록된 alias 2개 이상
  1. 오픈웨이트 ≠ 오픈소스: 가중치만 공개되었을 뿐 학습 데이터/코드는 비공개일 수 있다. 라이선스를 먼저 읽는다.
  2. 모델 선택은 하네스 선택: 같은 모델도 다른 하네스에서 다른 결과를 낸다. 단일 변수 비교를 위해 task packet과 평가 기준을 고정한다.
  3. 세 가지 옵션을 동시에 본다: 상용 API / 클라우드 에이전트 / 로컬 추론. 한 가지로 통일하지 말고 작업 성격에 맞춰 분리 운영한다.
  4. vLLM·SGLang·TGI는 서로 보완: 기본은 vLLM, RadixAttention 비교는 SGLang, 빠른 PoC는 TGI.
  5. 비용은 break-even 호출량으로: token 단가만 보지 말고 GPU 시간당 비용과 동시 처리 수를 함께 계산한다.
  6. 모델 어댑터가 운영 자산: alias·tool parser·token accounting·retry를 흡수하지 않으면 “모델 교체 가능”은 구현되지 않은 선언에 그친다.
  7. 재현 가능한 선택 근거: 모델 이름이 아니라 우리 환경의 Lab 결과가 캡스톤 결정문서의 근거가 된다.

모델 카드

서빙 인프라

에이전트 도구