[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

Search