Docker Model Runner – Docker 블로그 이미지 출처: docker.com
인공지능의 새로운 접근법
인공지능, 특히 대규모 언어 모델(LLM)은 현대 소프트웨어 개발에서 중요한 부분이 되었습니다. 그러나 개발자들은 종종 두 가지 방식 중 하나를 선택해야 했습니다: 클라우드 기반 API를 사용하거나 복잡한 로컬 설정을 구축하는 것입니다. 각각의 방식은 장단점이 있는데, 클라우드 API는 간편하지만 비용과 데이터 프라이버시 문제가 있으며, 로컬 설정은 비용이 없지만 설정이 복잡하고 하드웨어 최적화의 문제가 있습니다.
이런 상황에서 Docker의 새로운 기능인 Model Runner는 개발자들에게 로컬에서 LLM을 쉽게 실행할 수 있는 혁신적인 방법을 제공합니다. Docker Desktop 4.40 버전에서 베타로 출시된 이 기능은 특히 개발, 테스트, 오프라인 사용 사례에 최적화되어 있습니다.
Docker Model Runner란?
Docker Model Runner는 로컬 컴퓨터에서 LLM 모델을 쉽게 실행할 수 있게 해주는 Docker Desktop의 새로운 기능입니다. 인프라 구성의 복잡성 없이, 복잡한 설정 없이도 바로 실행할 수 있습니다. 현재는 macOS의 Apple Silicon 하드웨어에서만 베타로 제공되지만, 향후 다른 플랫폼으로도 확장될 예정입니다.
주요 특징
- OpenAI 호환 API: llama.cpp 기반의 추론 엔진을 통합하여 OpenAI와 호환되는 API를 제공합니다.
- Apple Silicon GPU 가속: Apple Silicon에서 네이티브 호스트 프로세스로 실행하여 GPU 가속을 지원합니다.
- OCI 호환 모델 패키징: 표준 OCI 아티팩트로 패키징된 다양한 모델을 제공하여 기존 컨테이너 레지스트리 인프라에서 쉽게 배포하고 재사용할 수 있습니다.
Docker Model Runner 시작하기
활성화 방법
Docker Model Runner는 Docker Desktop 4.40 버전에서 기본적으로 활성화되어 있습니다. 하지만 비활성화했다면 다음 명령어로 쉽게 다시 활성화할 수 있습니다:
docker desktop enable model-runner
만약 TCP 호스트 접근을 통해 호스트 프로세스에서 직접 접근하고 싶다면 다음과 같이 포트를 지정할 수 있습니다:
docker desktop enable model-runner --tcp 12434
기본 명령어 사용법
Docker Model Runner의 CLI는 컨테이너 작업과 유사하게 작동합니다. 다음은 기본적인 명령어들입니다:
- 모델 다운로드(pull):
docker model pull ai/smollm2:360M-Q4_K_M
- 모델 실행(run):
docker model run ai/smollm2:360M-Q4_K_M "Give me a fact about whales."
이 예제에서는 SmolLM2 모델을 360M 파라미터와 4비트 양자화로 다운로드하고 실행합니다. 모델 태그는 일반적으로 {모델}:{파라미터}-{양자화}
형식을 따릅니다.
기술적 작동 방식
docker model run
명령어는 실제로 컨테이너를 생성하지 않습니다. 대신, Docker Desktop을 통해 호스팅되는 추론 서버 API 엔드포인트를 호출합니다. 이 추론 서버는 llama.cpp를 기반으로 한 추론 엔진을 사용하며, 네이티브 호스트 프로세스로 실행됩니다.
요청된 모델을 필요에 따라 메모리에 로드하고 추론을 수행한 후, 모델은 다른 모델이 요청되거나 일정 시간(현재 5분) 동안 비활성 상태가 될 때까지 메모리에 유지됩니다.
Model Runner 작동 방식 – 출처: docker.com
애플리케이션에서 Model Runner 통합하기
Model Runner는 컨테이너나 호스트 프로세스에서 액세스할 수 있는 OpenAI 호환 엔드포인트를 노출합니다:
- 컨테이너용:
http://model-runner.docker.internal/engines/v1
- 호스트 프로세스용:
http://localhost:12434/engines/v1
(TCP 호스트 액세스가 활성화된 경우)
다음은 Java와 LangChain4j를 사용한 통합 예시입니다:
OpenAiChatModel model = OpenAiChatModel.builder()
.baseUrl("http://localhost:12434/engines/v1")
.modelName("ai/smollm2:360M-Q4_K_M")
.build();
String answer = model.chat("Give me a fact about whales.");
System.out.println(answer);
이 코드는 Model Runner에 연결하여 지정된 모델을 사용해 질문에 대한 답변을 생성합니다. 주의할 점은 모델이 이미 로컬에 있어야 코드가 동작한다는 것입니다.
사용 가능한 모델 찾기
Docker Hub의 ai/ 네임스페이스에서 Docker Model Runner와 함께 사용할 수 있는 다양한 모델을 찾을 수 있습니다. 다양한 하드웨어 요구 사항과 성능 니즈에 맞는 여러 버전의 모델이 제공됩니다.
각 모델에 대한 자세한 정보는 모델 저장소의 개요 페이지에서 확인할 수 있는 모델 카드를 통해 제공됩니다.
개발자를 위한 실용적 제안
- 하드웨어에 맞는 모델 선택하기:
- 작은 모델(예: SmolLM 시리즈)은 리소스가 제한된 환경에서도 잘 작동합니다.
- 더 큰 모델은 더 좋은 결과를 제공하지만 더 많은 메모리와 처리 능력이 필요합니다.
- 양자화 이해하기:
- 더 낮은 양자화(예: Q4_K_M)는 더 적은 메모리를 사용하지만 품질이 약간 저하될 수 있습니다.
- Apple Silicon의 Metal 통합은 양자화된 모델에서도 뛰어난 성능을 제공합니다.
- API 호환성 활용하기:
- OpenAI 호환 API를 사용하면 기존 OpenAI 기반 프로젝트를 쉽게 로컬 실행으로 전환할 수 있습니다.
- 개발 단계에서는 작은 모델을 사용하고, 프로덕션에서는 클라우드 API로 전환하는 하이브리드 접근 방식을 고려해보세요.
한계점과 향후 계획
현재 Docker Model Runner는 몇 가지 제한이 있습니다:
- 베타 단계로, 예상치 못한 문제가 발생할 수 있습니다.
- 현재는 macOS의 Apple Silicon에서만 사용 가능합니다.
- 특히 작은 모델의 경우 응답이 항상 정확하지 않을 수 있습니다.
그러나 Docker는 추가 기능과 플랫폼 지원을 확장할 계획이며, 커뮤니티 피드백을 통해 기능을 개선해 나갈 예정입니다.
결론: 로컬 AI 개발의 새로운 시대
Docker Model Runner는 AI 개발자들에게 로컬 LLM 구축의 장벽을 크게 낮춰주는 혁신적인 도구입니다. OpenAI 호환 API, 간단한 모델 관리, GPU 가속 지원을 통해 효율적인 개발 워크플로우를 제공합니다.
특히 다음과 같은 상황에서 Model Runner는 탁월한 선택이 될 수 있습니다:
- AI 애플리케이션 프로토타이핑
- 인터넷 연결 없이 작동해야 하는 개발 환경
- 데이터 프라이버시가 중요한 프로젝트
- 클라우드 API 비용을 절감하고 싶은 개발 팀
Docker의 익숙한 인터페이스와 워크플로우를 통해 LLM 기술을 쉽게 활용할 수 있게 됨으로써, 더 많은 개발자가 AI 기능을 자신의 애플리케이션에 통합할 수 있게 되었습니다.
참고자료: Run LLMs Locally with Docker: A Quickstart Guide to Model Runner
Comments