MLC LLM 배포 워크플로우
MLC LLM 배포 워크플로우
MLC LLM을 약간 깊게 들여다보면, 모델을 내 손에 맞게 준비하고 컴파일해 여러 디바이스에 배포하는 일련의 워크플로우가 보여요. 이 글에서는 그 핵심 흐름을 살펴볼게요.
MLC LLM은 설치 후 가장 간단하게는 채팅 CLI로 시작할 수 있어요.
mlc_llm chat HF://mlc-ai/Llama-3-8B-Instruct-q4f16_1-MLC
이 한 줄이 처음 실행될 때는 세 단계가 진행돼요.
- Phase 1. 양자화 가중치 다운로드 — Hugging Face에서 미리 양자화된 모델을 받아 로컬 캐시에 저장
- Phase 2. 모델 컴파일 — Apache TVM 컴파일러로 GPU 추론을 가속하도록 최적화하고, 실행 가능한 바이너리 모델 라이브러리 생성
- Phase 3. 채팅 런타임 — 모델 라이브러리와 가중치를 소비해 플랫폼 네이티브 런타임으로 실행
가중치와 컴파일된 라이브러리는 캐시돼서, Phase 1·2는 여러 번 실행해도 한 번만 수행돼요. 여러 GPU를 쓰는 텐서 병렬화를 원하면 --overrides "tensor_parallel_shards=$NGPU"를 붙이면 돼요.
REST 서버로도 띄울 수 있어요.
mlc_llm serve HF://mlc-ai/Llama-3-8B-Instruct-q4f16_1-MLC
이 서버는 OpenAI 채팅 완성 요청을 그대로 받아주는 OpenAI 호환 REST 서버예요. 자기 모델을 배포할 땐 두 단계를 거쳐요.
Step 1. MLC config 생성.
export LOCAL_MODEL_PATH=models/phi-2
export MLC_MODEL_PATH=dist/phi-2-MLC/
export QUANTIZATION=q0f16
export CONV_TEMPLATE=phi-2
mlc_llm gen_config $LOCAL_MODEL_PATH \
--quantization $QUANTIZATION \
--conv-template $CONV_TEMPLATE \
-o $MLC_MODEL_PATH
Step 2. 가중치 변환.
mlc_llm convert_weight $LOCAL_MODEL_PATH \
--quantization $QUANTIZATION \
-o $MLC_MODEL_PATH
이후 mlc_llm chat $MLC_MODEL_PATH로 실행하면 JIT 모델 컴파일이 자동으로 일어나요. 브라우저·모바일로 배포하거나 의존성을 줄이고 싶다면 mlc_llm compile로 모델 라이브러리를 명시적으로 컴파일할 수도 있고요. 핵심은 '같은 엔진이 모든 백엔드를 구동한다'는 점이에요.