OpenAI 방식 서버가 이미 들어 있어
mlx-lm에는 OpenAI API와 같은 요청·응답 모양으로 /v1/chat/completions를 제공하는 HTTP 서버가 있어. OpenAI 프로토콜을 아는 공식 openai Python SDK, LangChain, LlamaIndex, 셸 별칭을 로컬 mlx-lm 서버로 돌리면 그대로 동작해.
MLX 모델 하나를 가장 적은 노력으로 배포하는 방법이야. 명령 하나로 안정된 HTTP 엔드포인트를 열고, 이미 OpenAI를 아는 도구에서 곧바로 말을 걸 수 있어. 동시 요청, 대기열, 여러 모델처럼 운영에서 중요한 문제는 prod.lesson1에서 다루고 여기서는 단순한 경우에 집중해.
서버를 시작해
준비는 두 줄이야. 모델은 시작할 때 한 번 불러온 뒤 요청 사이에도 메모리에 남아 있어. 다음 요청부터는 추론 비용만 내.
openai-python으로 호출해
OpenAI 클라이언트의 주소를 기본 포트인 http://localhost:8080/v1로 바꿔. 포트는 설정할 수 있어. API 키에는 비어 있지 않은 아무 문자열이나 넣어. 로컬 서버는 인증하지 않아. 그다음은 OpenAI를 호출하듯 쓰면 돼.
되는 것과 안 되는 것
- 돼: chat-completions 엔드포인트, 스트리밍 SSE 응답, 모델 이름에 따른 분기, temperature·top_p·max_tokens 같은 기본 샘플링 값이 동작해. 여러 포트에 인스턴스를 띄우면 여러 모델도 서빙할 수 있어.
- 안 돼: mlx-lm은 텍스트 생성 서버라 embeddings를 제공하지 않아. 함수 호출은 모델과 템플릿에 달려 있어 OpenAI의 정확한 JSON 스키마를 늘 지원하지는 않아. 파인튜닝 엔드포인트도 없고 트랙 5의 자체 LoRA 흐름을 써야 해.
- 프로세스 하나야: 내장 서버는 단일 프로세스로 돌아. 대기열과 여러 작업자를 쓰는 진짜 동시 서빙은 prod.lesson1에서 mlx-lm을 얇은 FastAPI 계층으로 감싸 해결할 거야.
어디까지 내장 서버로 충분할까
로컬 개발, 사용자 한 명짜리 시연, 나와 팀원 한 명 정도만 쓰는 내부 도구라면 충분해. 외부 사용자가 있거나 동시 요청, 인증, 호출 제한이 필요하다면 FastAPI 계층으로 넘어가. 기준은 MLX 자체가 아니라 트래픽과 운영 요구야.