[LLM] mlx로 모델 올려서 사용해보기 (MacOS)
MacOS 환경에서 로컬 LLM을 서빙해서 사용하는 방법을 간단히 정리해본다.
서빙 도구로는 mlx-lm&mlx-vlm을 선택했다. MacOS 환경에서는 Ollama보다는 mlx 자체 스택이 kv 캐시 같은 최적화 대응이 좀 더 잘 되어있기 때문이다.
서빙 도구
Ollama를 쓰면 편하고 좋지만, 최대한의 성능을 원한다면 mlx 기반으로 마개조된 도구들을 쓰는 것이 이롭다.
텍스트 전용 모델을 쓴다면 mlx-lm, 미디어 지원 모델을 쓴다면 mlx-vlm를 쓰면 된다.
모델 선택
번역을 포함한 이미지 처리, 범용 기능들이 필요하다면 gemma가 좋다. 대신 코딩 기능은 좀 쳐진다.
그리고 코딩을 포함한 범용 작업이 필요하다면 qwen 계열이 좋다.
정말 코딩에만 특화해서 쓸거라면 qwen 기반의 변종들을 선택하면 된다. (ornith 등)
그래서 일반적인 선택지는 다음과 같다. (향후 바뀔 수 있음)
64GB
완전 범용: Gemma 4 26B-A4B 6bit
코딩&범용 Qwen3.6 35B-A3B 6bit
코딩 전용: Ornith 35B 5bit-XL
32GB
완전 범용: Gemma 4 26B-A4B 4bit
코딩&범용: Qwen3.6 35B-A3B 4bit
코딩 전용: Ornith 35B 4bit
CLI 설치
가장 권장되는 방법은 uv를 쓰는 것이다. 바로 설치할 수 있다.
uv tool install mlx-lm
uv tool install mlx-vlm


근데 그러면 실행은 되는데, 처리를 이상하게 해놔서 간단한 help나 version 처리도 안되더라.
아무튼 저대로 실행하면 된다.
경량 텍스트 모델 사용해보기
mlx_lm으로 텍스트 전용 모델을 서빙할 거라면, 이런 식으로 즉시 채팅 모드 실행이 가능하다.
다음 모델은 파라미터가 적고 양자화가 빡세게 들어가서 VRAM을 1GB쯤 먹는 소형 모델이다.
mlx_lm.chat --model mlx-community/Qwen3-0.6B-4bit


그리고 서버로서 실행해서 지속적으로 활용하려면 이렇게 띄우면 된다.
mlx_lm.server \
--model mlx-community/Qwen3-0.6B-4bit \
--host 127.0.0.1 \
--port 8002
OpenAI 호환 API다.
그럼 곧장 쏴서 사용해볼 수 있다.
curl http://127.0.0.1:8002/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "mlx-community/Qwen3-0.6B-4bit",
"messages": [
{
"role": "system",
"content": "한국어 문장을 의미적으로 독립적인 최소 단위로 분리한다. 조사와 어미는 앞 단어에 붙인다. 복합명사와 고유명사는 의미가 유지되면 붙인다. 설명하지 말고 JSON 문자열 배열만 출력한다. /no_think"
},
{
"role": "user",
"content": "인공지능기반검색서비스를다음달부터제공합니다."
}
],
"temperature": 0,
"max_tokens": 128,
"stream": false
}'
꽤 빨랐다.
vlm으로 코딩 모델 띄워보기
이번에는 코딩 특화 모델인 ornith를 선택했다. 64GB에서 선택할 수 있는 모델이다.
vlm으로 이렇게 실행하면 된다.
mlx_vlm.server \
--model leonsarmiento/Ornith-1.0-35B-5bit-XL-mlx \
--host 127.0.0.1 \
--port 8001

그럼 openai 호환 API를 통해서 사용해볼 수 있다.
curl http://127.0.0.1:8001/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "leonsarmiento/Ornith-1.0-35B-5bit-XL-mlx",
"messages": [
{
"role": "user",
"content": "안녕."
}
],
"max_tokens": 512,
"temperature": 0.6,
"stream": false
}'
cold start는 약간 느리지만, 그래도 꽤 쓸만한 속도로는 동작한다.
참조
https://github.com/ml-explore/mlx-lm
https://velog.io/@wonterry/mlx-lm%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC-250717