Skip to content

CH 17 · 로컬 배포와 Token 자유 ​

분량약 3,650자소요 시간약 25분선행 지식CH 07 (사용자 지정 제공자)난이도재현 가능

본장 목표 ​

앞선 모든 장에서는 DeepSeek 공식 API를 호출해 왔습니다 — 쓸 만하지만, 토큰당 과금이며, 특히 Agent 세션은 토큰을 많이 먹습니다 (모든 도구 결과가 컨텍스트로 다시 들어가야 합니다). 그리고 이것은 DeepSeek만의 문제가 아닙니다. 클라우드 API를 거치는 한, 공식이든 제3자든, 토큰당 과금에서 벗어날 수 없습니다.

이번 장은 완전히 다른 길을 제시합니다. 로컬 배포. 오픈소스 모델을 자신의 컴퓨터에 받아 돌리고, 추론 전체가 어떤 제3자 서버도 거치지 않습니다 — 토큰 요금 없음, 진정한 "Token 자유".

CH 07에서 이미 배운 방법이 있습니다. dsh는 "OpenAI 호환 엔드포인트"만 인식하며, 모델은 구성이지 묶음이 아닙니다. 이번 장에서는 그 능력을 실제 시나리오에 적용합니다 — dsh가 자신의 모델로 동작하게 하기.

로컬 배포는 클라우드와 무엇이 다른가 ​

먼저 "왜 로컬 배포가 무료인지" 분명히 합니다. DeepSeek 공식 API를 사용할 때, 프롬프트, 도구 결과, 파일 내용이 모두 그 서버로 보내지며, 서버는 자기 GPU로 추론을 한 뒤 토큰당 과금합니다. 모든 클라우드 API가 이렇습니다. 연산은 남의 것이고, 비용은 토큰을 따라옵니다.

로컬 배포는 정반대입니다. 모델이 자신의 컴퓨터에 다운로드되고, 추론이 자신의 GPU/CPU 위에서 돌아가며, 어떤 제3자 서버도 관여하지 않습니다. 연산도 자신의 것이고, 전기세도 자신의 것이므로 당연히 토큰당 비용이 없습니다 — 이것이 "Token 자유"의 진짜 의미입니다.

차원클라우드 API (예: DeepSeek 공식)로컬 배포 (LM Studio로 오픈소스 모델 실행)
과금토큰당 과금무료 (전기세만)
네트워크인터넷 연결 필수완전한 오프라인 가능
데이터서비스 제공자 서버로 보냄자신의 컴퓨터에 머무름
능력플래그십 모델, 가장 강력GPU가 돌릴 수 있는 모델 크기에 따라 좌우
진입 비용0, 가입만 하면 Key를 받음소프트웨어 설치, 모델 다운로드 (수 GB)

로컬 배포의 특징을 한 줄로: 무료, 오프라인, 사적 — 다만 능력은 하드웨어에 따라 제한됩니다 — GPU가 강할수록 더 큰 모델을 돌릴 수 있고 결과도 좋습니다.

원리: 모델은 구성이다 ​

왜 dsh가 모델을 마음대로 바꿀 수 있는지가 모델 라우팅 플러그인 llm-pi-ai 때문입니다. 이것은 "모델 제공자"를 YAML 구성 한 조각으로 취급하며, OpenAI Chat Completions 프로토콜을 노출하는 어떤 엔드포인트(즉 /v1/chat/completions)도 제공자로 꽂을 수 있습니다. 모델 바꾸기 = 구성 한 조각 바꾸기, dsh 자체를 바꿀 필요 없음.

dsh는 OpenAI 호환 엔드포인트만 인식한다

따라서 로컬 배포와 공식 API 연결의 방법은 CH 07과 같으며, 다른 것은 엔드포인트 주소뿐입니다.

방향Base URLKey전형적인 모델
DeepSeek 공식 (클라우드)https://api.deepseek.com공식 Keydeepseek-v4-flash 등
LM Studio 로컬http://localhost:1234/v1무엇이든 (로컬은 검증하지 않음)Qwen3 8B 등

로컬 모델 연결: LM Studio 온보딩 ​

1단계: LM Studio 설치, 모델 다운로드 ​

로컬 모델 러너는 하나뿐이 아닙니다. Ollama에 익숙하다면 Ollama를 직접 써도 됩니다 (명령줄 온보딩이며, 구성 방법은 아래와 동일). 이번 장에서는 LM Studio로 통일해 데모합니다 — 그래픽 인터페이스라 초보자에게 가장 친절합니다.

LM Studio는 Windows / macOS / Linux를 지원합니다. LM Studio 웹사이트에서 설치 프로그램을 받습니다. 설치 후, 어떤 모델을 받을지 추측하지 마시고, 그 일은 dsh에게 맡깁니다 — dsh가 컴퓨터 환경을 점검한 뒤 추천해 줍니다. Web UI 입력창에 다음을 보냅니다.

text
내 컴퓨터의 GPU와 VRAM을 확인하고, Q4 양자화에서 로컬 모델이 어느 정도 크기까지 편하게 돌릴 수 있는지 추정해 주세요. 로컬 Agent에 적합한 모델 2~3개를 추천하고, LM Studio 검색창에서 바로 검색 가능한 모델명을 제시하며, 각 모델에 대해 한 줄 이유를 적어 주세요. 조회와 추천만, 다른 작업은 하지 마세요.

dsh가 GPU를 읽어내어 구체적인 모델 이름을 몇 개 나열합니다. 그 이름을 LM Studio에서 검색합니다.

LM Studio를 엽니다. 좌하단 Settings → Explorer, 검색창에 dsh가 추천한 모델 이름을 입력합니다. 검색 결과에서 **녹색 라벨(하드웨어 호환, 전체 GPU 로드 가능)**이 붙은 것이 본인 컴퓨터에서 돌릴 수 있는 것이며, 클릭해 다운로드합니다.

LM Studio Explorer 페이지: Gemma 4 E2B 검색, 전체 GPU 오프로드와 vision / tools / thinking 기능 표시

변하지 않는 한 가지 상기 사항: Agent를 돌릴 로컬 모델에 있어, 도구 호출 능력이 벤치마크 점수보다 더 중요합니다 — 모델이 지시를 따라 도구를 부를 수 있어야 하며, 그렇지 않으면 Agent는 움직일 수 없습니다.

2단계: 로컬 서버를 켜고 엔드포인트 동작 확인 ​

모델 다운로드가 끝난 뒤, LM Studio 좌하단 Settings → Local Models → Local Model API (Local Server)로 가서 Local API server 스위치를 켭니다. 기본적으로 http://localhost:1234에서 청취하며, OpenAI 호환 엔드포인트는 /v1에 있습니다 — 페이지에 base URL http://localhost:1234/v1이 직접 표시되고, "running"이 보이면 서버가 떠 있는 것입니다.

LM Studio 로컬 모델 API 서버: 실행 중, base URL은 localhost:1234/v1

브라우저에서 다음을 엽니다.

http://localhost:1234/v1/models

다운로드한 모델을 나열한 JSON이 보이면 엔드포인트는 정상입니다. 이 단계에서는 또한 각 모델의 정확한 ID를 알 수 있습니다 (여기서 반환된 것을 그대로 쓰십시오. 예: 제가 다운로드한 Gemma 4 E2B는 gemma-4-e2b-it-qat로 표시됨), 이후 구성에 채워 넣어야 합니다.

localhost:1234/v1/models가 반환한 모델 목록 JSON

리소스 라이브러리의 모델 매개변수 ​

모델이 어떤 매개변수로 도는지 보고 싶으신가요. 좌하단 Settings → Local Models → Resource Library에서 모델을 찾아 오른쪽의 Settings 버튼을 클릭하면, "Model Default Settings" 페이지가 열립니다.

LM Studio 리소스 라이브러리: 내 모델 목록, Gemma 4 E2B Instruct QAT 4.34GB

LM Studio 모델 기본 설정: Automatic Optimize Based on Hardware 등, 전부 기본값

세 부분으로 나뉩니다. Prompt, Context & Performance, Generation. Automatic Optimize Based on Hardware (RECOMMENDED)가 기본 켜져 있고, 컨텍스트 길이, GPU 오프로드 등은 전부 AUTO입니다 — LM Studio가 컴퓨터에 맞춰 자동으로 조율합니다. 이번 장의 데모는 기본값을 그대로 사용하며, 한 가지도 바꿀 필요가 없습니다. 나중에 튜닝하고 싶다면 다시 여기로 오면 됩니다.

3단계: dsh에 "사용자 지정 제공자" 추가 ​

CH 07의 방법 2를 따릅니다. Settings → Models → Add Custom Provider에서 다음을 채웁니다.

필드채울 값
Provider IDlm-studio-local (소문자)
API 주소http://localhost:1234/v1
API 프로토콜OpenAI Chat Completions 호환
Key무엇이든 (로컬은 검증하지 않음, lm-studio 같은 자리 표시자도 무방)
Model앞 단계 /v1/models에서 받은 전체 ID

dsh Settings → Models → Add Custom Provider: Provider ID lm-studio-local, API 주소 http://localhost:1234/v1, 프로토콜 openai-completions, 모델 gemma-4-e2b-it-qat

효과와 기대치 관리 ​

  • 이점: 완전한 오프라인, API 비용 0, 코드와 문서가 자신의 컴퓨터에 머무름 — 사적인 정보가 민감한 시나리오에서는 로컬 모델이 유일한 선택입니다.
  • 현실: 로컬 소형 모델은 "루프를 끝까지 돌려 보는" 용도이지, 무거운 일을 하기 위한 것이 아닙니다. Agent는 특히 도구 호출과 긴 컨텍스트를 많이 먹으며, 소형 모델은 플래그십 모델에 비해 도구 호출을 놓치고 계획을 잘 못 세울 가능성이 큽니다. 플러그인 개발 중 테스트용으로는 매우 적합합니다. 실제 일을 시킬 때는 클라우드 모델로 다시 바꾸십시오.

이 데모에서 배포한 Gemma 4 E2B는 비전 모델입니다 (Google 공식: E2B는 비전 인코더를 가지며 이미지 입력을 지원) — 다만 dsh에서 실제로 이미지를 받아 OCR을 하려면 한 가지 선언이 더 필요합니다. dsh의 사용자 지정 제공자는 기본적으로 일반 텍스트로 취급하며, 선언이 없으면 이미지가 잘못된 입력으로 거부됩니다 (CH 07에서 다룸). 방법은 다음과 같습니다. dsh 설정 창에서 우상단 Open config file을 클릭하고, llm-pi-ai.providers.lm-studio-local.models에서 해당 모델을 찾아 input: [text, image]를 한 줄 더합니다.

yaml
llm-pi-ai:
  providers:
    lm-studio-local:
      apiKeyEnv: LM_STUDIO_API_KEY
      api: openai-completions
      baseURL: http://localhost:1234/v1
      models:
        - id: gemma-4-e2b-it-qat
          input: [text, image]

저장한 뒤 세션을 재시작하고, 이미지를 보내면 OCR을 할 수 있습니다.

dsh에서 새 세션에 gemma-4-e2b-it-qat을 선택해 간단한 작업을 맡기면 정상 응답

도구 호출도 작동합니다: 데모에서 "create a txt file telling me who you are"를 보냈더니 모델이 실제로 write 도구를 호출했습니다 — 몇 차례 오류와 재시도가 있었고, 마침내 identity.txt를 성공적으로 썼습니다. 이것은 로컬 모델이 단순히 채팅만 하는 것이 아니라 정말로 dsh의 도구 루프를 돌릴 수 있다는 증거이며, 다만 플래그십만큼 안정적이지 않고 오류가 더 많을 뿐입니다.

로컬 모델이 write 도구를 호출해 txt 파일 생성: 오류 재시도 후 성공

로컬과 클라우드: 어떻게 고를까 ​

시나리오선택
일상 작업, 가장 좋은 결과를 원함클라우드 API (토큰당 과금, 간편)
간단한 일상 작업, 예: 앞에서 aihot으로 만든 예약 핫토픽 브리핑LM Studio 로컬 모델 (오프라인, 무료)

둘은 서로 배타적이지 않습니다. dsh는 여러 제공자를 동시에 마운트할 수 있으며, 새 세션에서 마음껏 전환할 수 있습니다. 비용에 민감할 때는 일상 세션을 flash로 보내고 무거운 일은 pro에 맡기는 것이 가장 단순한 절약 자세이며, 로컬 모델은 테스트와 사적 시나리오의 토대를 받쳐 줍니다.

흔한 함정 ​

함정회피법
Base URL을 잘못 적음OpenAI 호환 엔드포인트는 보통 /v1로 끝난다. 먼저 브라우저에서 GET {baseURL}/models를 열어 검증한다
Key 환경 변수가 설정되지 않음apiKeyEnv는 참조만 할 뿐 만들지 않는다. dsh가 시작되는 환경에서 실제로 이 변수를 읽을 수 있는지 확인한다
Model ID가 일치하지 않음로컬 모델은 /v1/models가 반환한 전체 ID(vendor/model-name)를 그대로 써야 하며, 기억으로 채우지 않는다
이미지 오류, OCR을 지원하지 않는다고 함사용자 지정 제공자의 모델은 기본적으로 일반 텍스트로 취급된다 — 모델 자체가 OCR을 지원하더라도 제공자 구성에 input: [text, image]를 반드시 적어야 한다
로컬 모델이 계속 도구 호출을 놓침구성 문제가 아니라 소형 모델의 능력 경계이다. 클라우드 모델로 돌아가거나 더 큰 로컬 모델로 바꾼다

이번 장에서 배운 것 ​

  • [ ] "모델은 구성이다"를 말할 수 있다: dsh는 OpenAI 호환 엔드포인트만 인식하며, 모델 바꾸기 = 제공자 구성 한 조각 바꾸기
  • [ ] 로컬 배포와 클라우드 API의 본질적 차이를 말할 수 있다: 왜 무료인지 (연산이 자신의 것), 오프라인, 데이터가 자신의 컴퓨터에 머무름
  • [ ] LM Studio로 모델을 받고, 로컬 서버를 켜고, localhost:1234/v1/models가 살아 있는지 확인하는 법을 안다
  • [ ] dsh에서 lm-studio-local 사용자 지정 제공자를 추가해 로컬 세션을 성공적으로 돌리는 법을 안다
  • [ ] 비전 모델에는 input: [text, image]가 필요하다는 것을 알고, 로컬 소형 모델은 테스트에 적합하지 무거운 일에는 적합하지 않다는 것을 안다

Open Source · MIT · Community Driven