명령줄 인터페이스¶
mlxcel은 19개의 서브명령어를 제공합니다. run과 generate는 모델 출력을 만들고 generate-image는 이미지를 렌더링하며 embed는 밀집·다중 벡터 표현을 생성하고 rerank는 질의-문서 쌍의 점수를 계산합니다. detect는 객체를 찾고 predict는 밀집 맵과 키포인트를 쓰며, tag와 extract는 고정 레이블 토큰 분류와 요청 시점 스팬 추출을 실행합니다. inspect는 로드 전 메모리를 산정하고 serve는 HTTP 서버를 시작합니다. list, arch, download, rm은 모델 가용성을 관리하거나 확인하고 tune은 커널 실행 설정을 측정하여 캐시하며, split-mtp는 원본 GLM-4.7-Flash 체크포인트에서 독립 MTP 초안 모델을 만듭니다. prepare-external-ple과 prepare-expert-stream은 qwen4_exp가 MLX 파라미터 밖에서 읽는 디스크 구조를 만듭니다. generate에는 gen, list에는 ls, arch에는 supported 별칭이 있습니다.
목차¶
- 환경 변수
- mlxcel run
- mlxcel generate
- 모델 옵션
- 생성 옵션
- KV 캐시 옵션
- 샘플링 옵션
- 프롬프트 조회 옵션
- 디퓨전 옵션
- 파이프라인 병렬 옵션
- Tensor Parallel 옵션
- 런타임 모델 변환 옵션
- 언어 바이어스 옵션
- 예시
- mlxcel inspect
- mlxcel detect
- mlxcel predict
- mlxcel generate-image
- mlxcel embed
- mlxcel rerank
- mlxcel tag
- mlxcel extract
- mlxcel serve
- 네트워크 및 인증
- 동시성 및 배칭
- 임베딩 및 재순위화 작업자
- 투기적 디코딩
- 엔드포인트 토글
- 모델 해석과 저장소
- 라우터 모드
- WebUI
- LoRA 어댑터
- 구조적 출력 기본값
- 기본 샘플링 파라미터
- 분산 추론
- 예시
- mlxcel list
- mlxcel arch
- mlxcel download
- mlxcel rm
- mlxcel tune
- mlxcel split-mtp
- mlxcel prepare-external-ple
- mlxcel prepare-expert-stream
환경 변수¶
이 변수들은 플래그 처리 전에 시작 시점에 읽힙니다.
| 변수 | 기본값 | 설명 |
|---|---|---|
MLXCEL_DEVICE | gpu | 런타임 디바이스. 유효한 값: gpu, metal, cpu. |
MLXCEL_WIRED_LIMIT | GPU 최대 메모리 | GPU 와이어드 메모리 한도. 미설정 또는 max는 GPU 최대값까지 고정하고 0 또는 none은 한도를 설정하지 않으며 96GB와 같은 값은 명시적 한도를 설정합니다(GB, MB, 또는 바이트 단위 지원). |
MLXCEL_MEMORY_LIMIT | - | soft allocator memory cap. 0이 아닌 값은 mlxcel inspect, --estimate-memory, MLX runtime setup의 사용 가능 메모리 예산으로 사용됩니다. |
MLXCEL_HEADROOM_FACTOR | 1.20 | 통합 메모리 estimator가 weights + KV에 곱하는 allocator 오버헤드 배율. activation 예약분(MLXCEL_ACTIVATION_MULT)은 별도 항이며 이 배율이 곱해지지 않습니다. <= 1.0인 양수는 headroom 항을 비활성화하며 잘못된 값이나 0 이하 값은 경고 후 기본값으로 돌아갑니다. |
MLXCEL_CACHE_DIR | $HOME/.cache/mlxcel | 기본 model store($MLXCEL_CACHE_DIR/models/<owner>/<name>)와 기타 mlxcel 디스크 캐시의 루트. |
MLXCEL_MODELS_DIR | - | model-store 루트를 직접 재정의합니다. repo-id 다운로드와 조회는 추가 models/ 없이 $MLXCEL_MODELS_DIR/<owner>/<name>을 사용합니다. --models-dir가 우선합니다. |
MLXCEL_DEFAULT_ORG | mlx-community | 모델 인자에 slash가 없을 때 사용할 기본 HuggingFace owner입니다. 예: Qwen3-4B-4bit -> mlx-community/Qwen3-4B-4bit. |
MLXCEL_WEIGHT_MATERIALIZATION | eager | eager는 생성 모델의 체크포인트 텐서를 읽고 업로드한 뒤에 Model loaded를 보고하고, lazy는 각 텐서를 처음 쓸 때 구체화합니다. 성능 튜닝을 참조하십시오. |
MLXCEL_EXTRA_CA_CERTS | - | 모델 다운로드와 원격 미디어 가져오기에서 운영체제 신뢰 저장소에 더해 신뢰할 추가 CA의 PEM 번들. |
MLXCEL_SURGERY | - | --surgery가 없을 때 사용할 런타임 모델 변환 YAML 파일입니다. generate와 serve에 적용됩니다. |
MLXCEL_WIRED_LIMIT=max로 설정하면 대형 모델의 처리량을 향상시킬 수 있지만 모델과 작업 텐서를 합친 크기가 물리적 메모리를 초과하는 경우 메모리 부족이 발생할 수 있습니다.
mlxcel run¶
ollama 스타일의 위치 기반 모델 인자로 모델을 실행합니다. -p/--prompt가 없으면 대화형 다중 턴 chat REPL을 열고 -p가 있으면 한 번 생성하고 종료합니다. 모델 인자를 생략하면 기본값 mlx-community/gemma-4-e2b-it-4bit를 사용합니다.
MODEL_OR_REPO_ID는 generate -m과 같은 resolver 입력을 받습니다. 기존 로컬 경로, HuggingFace owner/name repo-id, 또는 ${MLXCEL_DEFAULT_ORG:-mlx-community}/<name>으로 해석되는 bare 이름을 사용할 수 있습니다. repo-id가 캐시에 없으면 mlxcel model store에 다운로드되고 이후 어느 디렉터리에서나 재사용됩니다.
| 플래그 / 인자 | 기본값 | 설명 |
|---|---|---|
[MODEL_OR_REPO_ID] | mlx-community/gemma-4-e2b-it-4bit | 로컬 경로, HuggingFace repo-id, 또는 bare 모델 이름. |
--models-dir <PATH> | MLXCEL_MODELS_DIR / cache root | repo-id 해석과 자동 다운로드에 사용할 model-store 루트 재정의. |
--revision <REV> | main | repo-id 해석에 사용할 repository branch, tag, commit. |
--adapter <PATH> | - | LoRA 어댑터 디렉터리 경로. |
-p, --prompt <TEXT> | - | 일회성 프롬프트. 생략하면 대화형 REPL을 엽니다. |
--draft-model <PATH_OR_REPO_ID> | - | 투기적 디코딩 초안 체크포인트입니다. -m처럼 해석하는 경로 또는 owner/name repo id이며, DFlash 초안 모델, MTP 헤드, 또는 자체 KV 캐시로 초안을 만드는 일반 소형 모델을 받습니다. mlxcel serve --draft-model과 같은 서버 투기적 dispatch 경로로 처리합니다. |
--draft-kind <dflash\|mtp\|full-model> | auto | 체크포인트가 종류를 밝히지 않을 때 쓸 초안 종류입니다. gemma4_assistant, gemma4_unified_assistant, qwen3_5_mtp는 mtp, DFlash 패밀리 디렉터리는 dflash, 그 밖의 읽을 수 있는 모델 디렉터리는 full-model입니다. LLAMA_ARG_DRAFT_KIND / MLXCEL_DRAFT_KIND에서도 읽습니다. |
--draft-block-size <N> | 시작 시 결정 | 투기적 block 크기이며 서버와 같은 방식으로 결정합니다. |
예시:
# 대화형 채팅. 첫 사용 시 자동 다운로드합니다.
mlxcel run Qwen3.5-0.8B-4bit
# 일회성 생성.
mlxcel run Qwen3.5-0.8B-4bit -p "Hello" -n 100
# bare 이름에 사용할 기본 owner 재정의.
MLXCEL_DEFAULT_ORG=my-org mlxcel run My-Model-4bit
run의 실행 방식¶
run과 REPL은 mlxcel-server 모델 워커의 클라이언트입니다. 워커는 같은 프로세스 안에서 슬롯 하나(--parallel 1, --max-batch-size 1)로 시작하고 HTTP 리스너는 열지 않으며, 각 턴은 /v1/chat/completions 요청 경로를 거칩니다. 이 경로가 채팅 템플릿 렌더링, reasoning과 본문 분리, 도구 호출 파싱, stop 문자열 적용을 맡습니다. 같은 요청이면 mlxcel run -p와 mlxcel-server는 같은 토큰을 만들고, MLXCEL_SDPA_DETERMINISTIC=1에서는 run -p --temp 0과 서버의 탐욕적 출력이 완전히 같습니다. CLI와 서버 사이의 토큰 일치를 참조하십시오.
run -p는 프롬프트를 다시 출력하지 않고 응답만 출력한 뒤 [Generated N tokens ...] 요약 줄을 찍으며, 초안 모델이 동작했다면 [Speculative ...] 수락 통계 줄도 출력합니다. 프롬프트 캐시는 run -p에서는 꺼져 있고 REPL에서는 켜져 있습니다. REPL의 대화마다 고유한 prompt_cache_key가 붙으므로 후속 턴은 새 메시지만 prefill합니다.
채팅 템플릿이 없는 체크포인트는 서버의 범용 채팅 형식으로 렌더링하고, base 모델일 가능성이 높다는 안내를 출력합니다. --no-chat-template을 주면 원문 텍스트를 /v1/completions 경로로 보냅니다.
채팅 서버가 처리하지 않는 일회성 모드는 generate 흐름에서 실행됩니다. block-diffusion, Florence-2, Nemotron-Parse, Nemotron VoiceChat 체크포인트와 --output-audio, --layout-detections, --audio, --video, --profile, --estimate-memory, --recommend-quant 플래그가 여기에 해당하고, --no-chat-template과 --image를 함께 줄 때도 generate에 남습니다. 그 밖의 --image는 채팅 클라이언트의 image_url 파트처럼 서버를 거칩니다.
run이 받는 플래그 그룹¶
run은 generate의 생성, 미디어, KV 캐시, 디퓨전, 샘플링 옵션과 아래 서버 샘플링 옵션, 위 표의 투기적 디코딩 플래그를 받습니다. 파이프라인 병렬, 텐서 병렬, 언어 바이어스, 모델 변환, 프롬프트 조회 그룹은 받지 않습니다. 전체 목록은 mlxcel run --help를 기준으로 하십시오.
샘플링 플래그는 이름이 같은 mlxcel-server 옵션으로 그대로 전달됩니다. 지정하지 않은 플래그는 서버 기본값을 따르는데, 예외가 하나 있습니다. 체크포인트의 generation_config.json이 temperature를 정하지 않으면 기본 샘플러는 탐욕적 디코딩으로 남습니다. --repeat-last-n과 --dry-penalty-last-n은 지정했을 때만 전달되므로, 지정하지 않은 run은 서버의 64토큰 윈도를 쓰고(페널티가 꺼져 있으면 효과 없음) generate는 -1(전체 이력)을 씁니다.
| 서버 샘플링 옵션 | 기본값 | 설명 |
|---|---|---|
--frequency-penalty <N> | 0.0 | frequency penalty. 0.0이면 비활성화됩니다. |
--presence-penalty <N> | 0.0 | presence penalty. 0.0이면 비활성화됩니다. |
--xtc-probability <N> | 0.0 | XTC 제거 확률. 0.0이면 XTC를 끕니다. |
--xtc-threshold <N> | 서버 기본값 | XTC 확률 임계값. 0.5보다 크면 XTC가 동작하지 않습니다. |
--mirostat <N> | 0 | 0 비활성화, 1 Mirostat, 2 Mirostat 2.0. |
--mirostat-lr <N> | 서버 기본값 | Mirostat 학습률(eta). |
--mirostat-ent <N> | 서버 기본값 | Mirostat 목표 엔트로피(tau). |
--dynatemp-range <N> | 0.0 | 동적 temperature 범위. 0.0이면 비활성화됩니다. |
--dynatemp-exp <N> | 서버 기본값 | 동적 temperature 지수. |
--dry-sequence-breaker <STRING> | "\n", ":", "\"", "*" | 쉼표로 구분한 DRY sequence breaker 목록. none이면 breaker를 두지 않습니다. |
--stop <STRING> | - | 응답이 이 문자열을 만들면 생성을 멈춥니다. 여러 번 줄 수 있으며 요청의 stop 필드로 전송됩니다. |
대화형 명령¶
| 입력 | 동작 |
|---|---|
/bye | 채팅을 종료합니다. |
/clear | 새 대화를 시작합니다. transcript를 비우고 다음 턴부터 새 prompt_cache_key를 쓰므로 이전 대화에서 캐시한 내용은 다시 채택되지 않습니다. |
/image <path> | 다음 메시지에 이미지를 첨부합니다(비전 모델). |
/?, /help | 명령 목록을 보여 줍니다. |
""" ... """ | 여러 줄 블록을 메시지 하나로 보냅니다. |
| Ctrl-C | 응답이 스트리밍되는 중이면 그 응답을 취소하고 프롬프트로 돌아가며, 중단된 주고받기는 transcript에서 빠집니다. 응답이 멈추는 중에 Ctrl-C를 한 번 더 누르면 종료합니다. 프롬프트에서 누르면 현재 줄을 취소합니다. |
이미지를 포함한 transcript 전체가 턴마다 다시 전송됩니다. 그래서 /image와 --image는 대화가 서버의 요청당 이미지 상한(기본 16장)을 넘게 만드는 이미지를 거절하고, /clear로 개수를 초기화할 수 있습니다. raw 모드(--no-chat-template)의 턴에는 미디어가 실리지 않으므로 REPL은 /image를 거절하고 --image는 안내와 함께 무시합니다.
mlxcel generate¶
mlxcel generate [OPTIONS] --model <PATH_OR_REPO_ID> [--prompt <TEXT>]
mlxcel gen [OPTIONS] --model <PATH_OR_REPO_ID> [--prompt <TEXT>] # alias
모델을 로드하고 프롬프트가 제공된 경우 이를 적용한 뒤 생성된 토큰을 stdout으로 스트리밍하고 요약 줄을 출력합니다. --prompt를 생략하면 generate는 mlxcel run과 같은 대화형 다중 턴 REPL로 진입합니다.
generate -p는 raw completion 클라이언트입니다. 엔진의 직접 클라이언트(mlxcel_core::engine::DirectEngine)에서 디코딩하며, 서버의 단일 시퀀스 행과 같은 샘플러, finish 단계, B=1 lookahead 파이프라인을 씁니다. MLXCEL_FORCE_SYNC는 이 파이프라인을 끕니다. 채팅 프롬프트는 서버와 같은 방식으로 체크포인트 템플릿을 렌더링합니다. --profile의 [TTFT] 줄은 샘플러 구성 시간을 eval에 포함하므로 sample=0으로 표시합니다.
모델 옵션¶
| 플래그 | 기본값 | 설명 |
|---|---|---|
-m, --model <PATH_OR_REPO_ID> | 필수 | 기존 로컬 모델 디렉터리, HuggingFace owner/name repo-id, 또는 bare 모델 이름. repo-id가 캐시에 없으면 mlxcel store에 자동 다운로드합니다. |
--models-dir <PATH> | MLXCEL_MODELS_DIR / cache root | repo-id 조회와 자동 다운로드에 사용할 model-store 루트를 재정의합니다. --model이 이미 존재하는 로컬 경로이면 영향이 없습니다. |
--revision <REV> | main | -m/--model이 repo-id일 때 쓸 리포지터리 revision(브랜치·태그·커밋 해시)입니다. mlxcel store는 revision으로 네임스페이스를 나누지 않으므로, 이미 있는 리포는 알 수 없는 revision으로 답하는 대신 거절됩니다. revision마다 --models-dir를 따로 주십시오. -m/--model이 존재하는 로컬 경로이면 쓸 수 없습니다. |
--adapter <PATH> | - | LoRA 어댑터 디렉터리 경로. LoRA 어댑터를 참조하십시오. |
--surgery <FILE> | MLXCEL_SURGERY | 로드 시점 모델 변환에 사용할 YAML 파일입니다. 런타임 모델 변환을 참조하십시오. |
--draft-model <PATH_OR_REPO_ID> | - | 초안 체크포인트입니다. -m처럼 해석하는 경로 또는 owner/name repo id이며, MTP 초안 모델이면 MTP round loop, Laguna 대상 모델의 Laguna DFlash 초안 모델이면 DFlash round loop, 일반 소형 체크포인트면 토큰 전용 full-model loop를 구동합니다. --prompt-lookup과 함께 쓸 수 없습니다. 투기적 디코딩을 참조하십시오. |
--draft-kind <dflash\|mtp\|full-model> | auto / 없음 | 초안 종류입니다. 지정하지 않으면 초안 디렉터리에서 자동 감지합니다. gemma4_assistant, gemma4_unified_assistant, qwen3_5_mtp는 mtp, DFlash 패밀리 디렉터리는 dflash, 그 밖의 읽을 수 있는 모델 디렉터리는 full-model입니다. mtp는 지원되는 Gemma 4/Unified, Qwen 3.5/Qwen3.8 계열, GLM-4.7-Flash(glm4_moe_lite) pair(text-only prompt)에 대해 offline MTP round loop를 구동하며, MTP를 지원하지 않는 target이나 multimodal 요청은 명확한 오류를 반환합니다. dflash는 Laguna 대상 모델과 그 Laguna DFlash 초안 모델 조합에서만 오프라인으로 실행되며, 탐욕적 디코딩 전용이고 서버와 같은 정확성 검사를 거칩니다. 다른 DFlash 조합은 서버에서 실행합니다. full-model은 대상 모델과 토크나이저를 공유하는 일반 소형 체크포인트를 자체 KV 캐시에서 구동하며, trim으로 되돌릴 수 없는 대상 모델이나 초안 모델, 대상 모델보다 큰 초안 어휘, DFlash 디렉터리에는 거부됩니다. prompt-lookup은 여기서 받지 않으며, 파싱 오류가 --prompt-lookup을 안내합니다. |
--draft-block-size <N> | 시작 시 결정 | 오프라인 round loop의 MTP, DFlash, full-model block size이며 서버와 같은 방식으로 결정합니다(선언되거나 측정된 더 좁은 값이 없으면 mtp와 full-model은 4, dflash는 16). |
초안 모델 loop
일반 인과 LM 초안 모델은 프롬프트 조회가 쓰는 것과 같은 엔진의 토큰 전용 검증 loop에서 full-model 초안 모델로 실행됩니다. 따라서 --draft-block-size가 모든 초안 종류에 공통인 유일한 폭 옵션이며, mlxcel generate에는 --num-draft-tokens 플래그가 없습니다.
생성 옵션¶
| 플래그 | 기본값 | 설명 |
|---|---|---|
-p, --prompt <TEXT> | - | 입력 프롬프트. --no-chat-template이 설정되지 않는 한 채팅 템플릿 형식이 자동으로 적용됩니다. 생략하면 대화형 REPL로 진입합니다. |
--image <PATH>... | - | 비전-언어 모델을 위한 하나 이상의 이미지 파일 경로. 여러 경로를 공백으로 구분하여 지정할 수 있습니다. |
--image-soft-tokens <N> | 체크포인트 설정, 보통 280 | Gemma 4 전용. 이미지별 vision budget으로 70, 140, 280, 560, 1120 중 하나를 사용합니다. 값이 클수록 patch grid가 조밀하고 context를 더 사용합니다. |
--layout-detections <PATH> | - | Falcon-OCR 전용. mlxcel detect --format json 출력 형태의 region detection을 받아 목록 순서대로 textual region을 crop·OCR합니다. 이 경로는 --prompt를 무시합니다. |
--audio <PATH> | - | 오디오 입력을 지원하는 모델(예: 오디오 타워가 있는 Gemma 4)에 전달할 오디오 파일 경로. gemma4_unified 체크포인트는 --video와 함께 받을 수도 있습니다. Nemotron VoiceChat 체크포인트에는 필수이며, 이때 WAV는 전이중 타임라인의 사용자 쪽이고 -p는 시스템 프롬프트입니다. |
--video <PATH>... | - | 하나 이상의 비디오 파일 경로. 고유 비디오 경로가 있는 계열(Gemma 4, Gemma 4 Unified, Inkling, Kimi-VL, Qwen-VL 계열)은 자체 시간 축 처리기로 클립을 소비하고, 비전 타워가 있는 그 밖의 체크포인트는 샘플링한 프레임을 순서가 있는 이미지로 받습니다. gemma4_unified는 --video와 --audio를 함께 받습니다. PATH에 ffmpeg가 필요합니다. |
--fps <FLOAT> | 2.0 | --video 프레임 추출에 사용할 목표 샘플링 FPS. |
--video-max-frames <N> | 16 (MLXCEL_VIDEO_MAX_FRAMES) | 체크포인트에 고유 비디오 경로가 없어 --video를 순서가 있는 이미지로 보낼 때 남기는 프레임 수. 클립을 --fps로 디코딩한 뒤 첫 프레임과 마지막 프레임을 항상 남기며 이 개수로 고르게 줄입니다. 2보다 작은 값은 2로 올립니다. 고유 비디오 계열은 이 값을 무시합니다. 고유 비디오 경로가 없는 모델의 비디오를 참조하십시오. |
--output-audio <PATH> | - | 합성한 음성을 mono PCM16 WAV로 씁니다. Qwen3-Omni는 text-only generation 뒤 talker와 code2wav를 lazy load해 24 kHz 오디오를 쓰며, 이미지·입력 오디오·비디오와 함께 쓸 수 없습니다. Nemotron VoiceChat은 --audio 타임라인 전체에 대한 22.05 kHz 어시스턴트 음성을 씁니다. |
--extra-decoding-seconds <SECONDS> | 3.0 | Nemotron VoiceChat 전용. 사용자가 말을 멈춘 뒤에도 모델이 답을 마칠 수 있도록 --audio 입력 뒤에 붙이는 무음 길이(초). |
--stream | false | Nemotron VoiceChat 전용. 오프라인 타임라인 대신 캐시 기반 온라인 세션을 80 ms 프레임 단위로 구동하고, 프레임마다 생긴 텍스트와 전사 delta를 바로 출력합니다. --profile과 함께 쓰면 단계별 지연과 실시간 배율(real-time factor)을 출력합니다. |
--max-streaming-seconds <SECONDS> | - | Nemotron VoiceChat --stream 전용. 세션이 이 시간만큼 오디오를 소비하면 오류로 멈춥니다. |
--speaker <NAME> | ethan | Qwen3-Omni talker 음성: ethan, chelsie, aiden. |
-n, --max-tokens <N> | -1 | 최대 생성 토큰 수. -1이면 EOS 또는 남은 context window가 찰 때까지 계속합니다. |
--profile | false | 프로파일링 모드 활성화. 간단한 요약 줄만 출력하는 대신 프롬프트/생성 토큰 수, 프리필 타이밍, 디코드 타이밍을 출력합니다. |
--no-chat-template | false | 자동 채팅 템플릿 적용을 건너뜁니다. 프롬프트가 토크나이저에 그대로 전달됩니다. 이미 프롬프트를 직접 형식화한 경우 유용합니다. |
--show-reasoning | false | 지원 체크포인트의 reasoning channel을 출력합니다. 기본적으로 숨기며 raw channel marker는 어느 경우에도 출력하지 않습니다. |
--recommend-quant | false | 선택한 모델에 대해 하드웨어를 고려한 양자화 권장 사항을 출력합니다. M5 Neural Accelerator 관련 참고 사항도 포함됩니다. |
--estimate-memory | false | 모델 로드 전에 통합 메모리 preflight를 실행합니다. 추정 총량이 사용 가능 예산을 초과하면 중단합니다. |
--force, --no-memory-check | false | 초과 예산 --estimate-memory 결과를 경고로 낮추고 계속 진행합니다. --estimate-memory가 없으면 효과가 없습니다. |
KV 캐시 옵션¶
| 플래그 | 기본값 | 설명 |
|---|---|---|
--cache-type-k <TYPE>, --cache-type-v <TYPE> | fp16 | 독립 K/V mode: fp16, int8, fp16+turbo4, fp16+turbo3, turbo4, turbo4-delegated. 한쪽만 주면 다른 쪽은 fp16입니다. --kv-cache-mode보다 우선합니다. |
--kv-cache-mode <MODE> | fp16 | 양쪽을 함께 설정하는 legacy shorthand. Split flag를 권장합니다. |
--turbo-boundary-v <COUNT> | MLXCEL_KV_BOUNDARY_V_LAYERS / 2 | Turbo mode에서 앞·뒤 COUNT개 V layer를 FP16으로 유지합니다. Layer 수의 절반으로 clamp됩니다. |
호환성과 품질 지침은 TurboQuant KV 캐시를 참조하십시오.
샘플링 옵션¶
이 플래그들은 모델의 확률 분포에서 다음 토큰을 선택하는 방식을 제어합니다.
| 플래그 | 기본값 | 설명 |
|---|---|---|
-t, --temp <FLOAT> | 0.0 | 샘플링 온도. 0.0은 가장 높은 확률의 토큰을 선택합니다(탐욕적 디코딩). 높은 값일수록 무작위성이 증가합니다. |
--top-p <FLOAT> | 1.0 | 핵 샘플링 임계값. 누적 확률이 이 값을 초과하는 토큰은 제외됩니다. 1.0은 핵 샘플링을 비활성화합니다. |
--top-k <K> | 0 | Top-K 샘플링 한도. 가장 확률이 높은 K개의 토큰만 고려됩니다. 0은 Top-K를 비활성화하고, 어휘 크기 이상인 값도 0과 같이 동작합니다. |
--min-p <FLOAT> | 0.0 | Min-P 임계값. min_p * max_token_prob 미만의 확률을 가진 토큰은 제외됩니다. 0.0은 Min-P를 비활성화합니다. |
--repetition-penalty <FLOAT> | 1.0 | 이미 등장한 토큰에 적용되는 반복 페널티 배수. 1.0은 페널티 없음을 의미하며 1.0 초과 값은 반복을 억제합니다. |
--dry-multiplier <FLOAT> | 0.0 | DRY(Don't Repeat Yourself) 페널티 배수. 0.0은 DRY를 비활성화합니다. |
--dry-base <FLOAT> | 1.75 | DRY 페널티 스케일링을 위한 지수 밑(base). |
--dry-allowed-length <N> | 2 | DRY 페널티가 적용되기 전의 최소 일치 길이. |
--dry-penalty-last-n <N> | -1 | DRY 되돌아보기 윈도우(토큰 단위). -1은 전체 생성 기록을 사용하고 0은 DRY를 끕니다. |
--seed <N> | 미설정(비결정적) | MLX 전역 RNG의 시드. 블록 디퓨전 모델의 난수 캔버스 초기화까지 포함해 샘플링 생성을 재현 가능하게 만듭니다. |
--repeat-last-n <N> | -1 | 반복 페널티가 참조할 토큰 lookback 창입니다. -1은 생성 이력 전체를 쓰고 0은 창을 끕니다. |
--top-n-sigma <FLOAT>, --top-nsigma <FLOAT> | 0.0 | Top-n-sigma 로짓 필터. 원시 로짓이 행 최댓값에서 N 표준편차 안에 있는 토큰만 남기며 0.0이면 끕니다. 높은 temperature에서도 안정적이고 temperature 값 자체에는 불변입니다. |
--typical-p <FLOAT>, --typical <FLOAT> | 1.0 | Locally typical 샘플링. surprisal이 행 엔트로피에 가장 가까운 토큰부터 확률 질량 P가 쌓일 때까지 남기며 1.0이면 끕니다. |
--p-less | false | 하이퍼파라미터가 없는 p-less 절단. temperature를 적용한 분포에서 확률이 sum(p^2) 이상인 토큰만 남깁니다. 확률이 가장 높은 토큰은 항상 남고, 탐욕적 요청은 이 필터를 건너뜁니다. mlxcel run에서도 받습니다. |
프롬프트 조회 옵션¶
프롬프트 조회는 초안 모델 없이 n-gram으로 하는 투기적 디코딩입니다. 라운드마다 시퀀스의 마지막 몇 토큰이 앞서 나타났던 위치를 찾아 그 뒤에 이어졌던 토큰을 제안하고, 대상 모델 forward 한 번으로 검증합니다. 프롬프트를 베껴 쓰는 응답(수정, 다시 쓰기, 형식 변환)에서 효과가 있고, 그 밖의 응답에서는 제안을 줄이거나 멈춰 일반 디코딩에 가까운 속도를 유지합니다. 수락 규칙은 샘플러 일치(sampler-match) 방식이라 one-hot 제안에 대해 손실이 없으며, 탐욕적 출력은 logit이 거의 같은 지점에서만 일반 디코딩과 달라질 수 있습니다. 서버 형태(--draft-kind prompt-lookup)는 투기적 디코딩을 참조하십시오.
| 플래그 | 기본값 | 설명 |
|---|---|---|
--prompt-lookup | false | 프롬프트 조회 투기적 디코딩을 켭니다. --draft-model과 함께 쓸 수 없습니다. |
--prompt-lookup-ngram-max <N> | 3 | 컨텍스트와 맞춰 보는 가장 긴 접미 n-gram. 최대 16. |
--prompt-lookup-ngram-min <N> | 2 | 컨텍스트와 맞춰 보는 가장 짧은 접미 n-gram. |
--prompt-lookup-max-draft <N> | 7 | 라운드당 최대 제안 토큰 수. 검증 block은 이보다 하나 넓습니다(기본 8). 최대 64. |
--prompt-lookup-no-adaptive | false | 제안이 맞지 않아도 줄이거나 멈추지 않고 매 라운드 최대치를 제안합니다(A/B 측정용). |
--prompt-lookup-policy <auto\|graded\|gated> | auto | 제안을 줄이고 재개하는 방식. graded는 최근 수락률에 따라 block을 정하고 짧게 쉰 뒤 다시 시도하며(Apple Silicon에 맞춤), gated는 좁은 block과 전체 block 중 하나를 쓰고 검증 없이 조회한 제안이 실제로 맞았을 때만 재개합니다(CUDA에 맞춤). auto는 CUDA 빌드에서 gated, 그 밖에서는 graded를 고릅니다. |
튜닝 플래그는 --prompt-lookup이 있어야 합니다. mlxcel generate --draft-kind prompt-lookup은 --prompt-lookup을 안내하는 파싱 오류가 납니다. --prompt-lookup 실행은 대화형 채팅(-p 없음), 이미지·오디오·비디오 입력, 파이프라인 병렬, 그리고 캐시 trim으로 상태를 되돌릴 수 없는 대상 모델에서 거절됩니다. 마지막 경우는 recurrent·hybrid 모델과 어텐션 캐시를 모델이 직접 소유하는 모델(Qwen 3.5, Gemma 3과 4, Llama 4)입니다. 첫 실행은 측정 대상 생성 전에 모든 검증 폭을 예열합니다. GB10에서 수정형 응답은 일반 디코딩보다 1.10배에서 1.94배 빨랐고, 자유 서술은 gated 정책에서 약 0.98배에서 1.00배를 유지했습니다.
디퓨전 옵션¶
블록 디퓨전 생성을 제어하는 플래그로, DiffusionGemma 같은 디퓨전 모델에만 적용되며 자기회귀 모델은 무시합니다. 생성 메커니즘과 튜닝 지침은 블록 디퓨전을 참조하십시오.
| 플래그 | 기본값 | 설명 |
|---|---|---|
--max-denoising-steps <N> | 체크포인트 generation_config(보통 48) | 캔버스 블록당 최대 denoising 반복 수. 낮출수록 품질을 양보하고 속도를 얻습니다. |
--diffusion-sampler <entropy-bound\|confidence-threshold> | entropy-bound | 스텝별 토큰 수락 전략. |
--diffusion-threshold <FLOAT> | 0.9 | confidence-threshold 샘플러의 확신 임계값. |
--diffusion-min-canvas-length <N> | 64 | 생성 꼬리에 할당하는 최소 캔버스 길이. |
--diffusion-max-canvas-length <N> | 모델 canvas_length(보통 256) | 블록당 캔버스 길이 상한. |
--diffusion-full-canvas | false | 블록마다 모델의 전체 canvas_length를 할당합니다. |
파이프라인 병렬 옵션¶
이 플래그들은 mlxcel generate에서 단일 프로세스 내 파이프라인 경로를 활성화합니다.
| 플래그 | 기본값 | 설명 |
|---|---|---|
--pp-size <N> | 1 | 파이프라인 단계 수. 1 이하이면 표준 단일 모델 경로를 유지합니다. |
--pp-layers <RANGES> | - | 수동 단계 파티션입니다. 예: 0-15,16-31. 생략하면 model-aware partitioner가 요청 stage 수에 맞는 범위를 선택합니다. |
--pp-micro-batch-size <N> | 1 | 단일 프로세스 워커 루프에서 사용할 마이크로 배치 수. |
현재 CLI 파이프라인 참고 사항:
- 이 경로는 Llama만이 아니라 파이프라인 병렬화에 나열된 stage-executor family에서 사용할 수 있습니다.
- Text-only이며 speculative decoding과 VLM input은 지원하지 않습니다. 현재 Llama stage executor에서는 load-time adapter 하나를 stage별로 fuse할 수 있고 다른 family는 명시적으로 실패합니다.
- 지원되는 dense runtime에서는 in-process CLI PP×TP 조합을 사용할 수 있지만 TP×LoRA는 지원하지 않습니다. Remote pipeline serving은 제한이 더 엄격하여 현재 adapter와 TP 조합을 거부합니다.
Tensor Parallel 옵션¶
이 플래그들은 지원되는 dense 텍스트 모델 계열에서 현재 단일 프로세스 tensor-parallel 런타임을 활성화합니다.
| 플래그 | 기본값 | 설명 |
|---|---|---|
--tp-size <N> | 1 | Tensor-parallel 랭크 수. 2의 거듭제곱이어야 합니다. 1보다 큰 값은 지원되는 dense 텍스트 모델을 단일 프로세스 내 랭크로 샤딩합니다. |
--tp-moe-mode <MODE> | expert_parallel | MoE expert 샤딩 모드: expert_parallel 또는 within_expert. 현재 프로덕션 TP 지원은 dense 런타임에 집중되어 있습니다. |
--tp-embedding-mode <MODE> | replicated | 임베딩 샤딩 모드. 현재 런타임은 replicated를 요구합니다. |
--tp-lm-head-mode <MODE> | replicated | LM head 샤딩 모드. 현재 런타임은 replicated를 요구합니다. |
지원되는 tp_size > 1 계열은 dense Llama, Qwen2/2.5, Qwen3, Qwen3.5 text, Gemma 3 text, Gemma 4 text, ERNIE 4.5, Hunyuan v1 Dense입니다. LoRA 어댑터는 TP와 함께 사용할 수 없습니다.
런타임 모델 변환 옵션¶
런타임 모델 변환은 체크포인트가 로드되는 동안 YAML로 정의된 가중치 변환을 적용합니다. 디스크의 모델 파일을 수정하지 않고 일시적이고 재현 가능한 가중치 조정을 해야 할 때 사용합니다. 연산 스키마와 제한 사항은 런타임 모델 변환을 참조하십시오.
| 플래그 | 기본값 | 설명 |
|---|---|---|
--surgery <FILE> | MLXCEL_SURGERY | 로드 시점 surgery pipeline을 적용합니다. 연산은 YAML 순서대로 실행되며 안전하게 적용할 수 없는 규칙이 있으면 로딩이 실패합니다. |
언어 바이어스 옵션¶
mlxcel generate와 두 서버 진입점은 샘플링 시 특정 문자권을 억제하거나 장려하는 언어 바이어스 제어를 제공합니다. 운영 가이드는 Language Bias를 참조하십시오.
| 플래그 | 기본값 | 설명 |
|---|---|---|
--lang-bias <ENTRIES> | - | ja=-inf,zh=-10,ko=+5.0 같은 쉼표 구분 항목. |
--lang-bias-config <PATH> | - | 언어 바이어스 YAML 설정 파일. CLI 값이 우선합니다. |
--lang-bias-policy <POLICY> | conservative | 토큰 포함 정책: conservative 또는 strict. |
--lang-bias-include-special | false | 언어 집합에 special token을 포함합니다. |
--lang-bias-include-numeric | false | 언어 집합에 숫자 토큰을 포함합니다. |
--lang-bias-include-punctuation | false | 언어 집합에 문장부호 전용 토큰을 포함합니다. |
--lang-bias-include-byte-fragments | false | UTF-8 시작 바이트 분류기를 사용해 바이트 조각 토큰을 포함합니다. |
--lang-bias-rebuild-cache | false | 실행 전에 토크나이저 스크립트 캐시를 재생성합니다. |
Generate 예시¶
탐욕적 디코딩을 이용한 기본 텍스트 생성:
# Bare 이름은 mlx-community/Qwen2.5-7B-Instruct-4bit로 해석됩니다.
mlxcel generate \
--model Qwen2.5-7B-Instruct-4bit \
--prompt "Explain the difference between a mutex and a semaphore." \
--max-tokens 300
generate에서 대화형 채팅 시작:
더 큰 vision token budget을 사용하는 Gemma 4:
mlxcel generate -m ./models/gemma-4-e2b-it-4bit \
--image page.png --image-soft-tokens 560 \
-p "Read the small text in this page."
Falcon-OCR region 단위 OCR:
mlxcel detect -m ./models/docling-layout -i page.png --format json > regions.json
mlxcel generate -m ./models/falcon-ocr --image page.png --layout-detections regions.json
Qwen3-Omni 음성 출력:
mlxcel generate -m ./models/qwen3-omni \
-p "Give a short welcome." --output-audio welcome.wav --speaker chelsie
높은 온도와 핵 샘플링을 이용한 창의적 글쓰기:
mlxcel generate \
--model ./models/Llama-3.1-8B-Instruct \
--prompt "Write the opening paragraph of a science fiction novel." \
--max-tokens 200 \
--temp 0.8 \
--top-p 0.95
LoRA 어댑터 사용:
mlxcel generate \
--model ./models/Mistral-7B-v0.3 \
--adapter ./adapters/mistral-sql-lora \
--prompt "Write a SQL query to find the top 10 customers by revenue." \
--max-tokens 150
런타임 모델 변환 적용:
mlxcel generate \
--model ./models/Qwen2.5-7B-Instruct \
--surgery ./surgery.yaml \
--prompt "배포 체크리스트를 요약해 주세요." \
--max-tokens 150
이미지를 이용한 비전-언어 모델:
mlxcel generate \
--model ./models/Qwen2.5-VL-7B-Instruct \
--image ./photos/diagram.png \
--prompt "Describe what you see in this image." \
--max-tokens 200
Gemma 4 비디오 입력:
mlxcel generate \
--model ./models/gemma-4-vl \
--video ./demo.mp4 \
--fps 2.0 \
--prompt "Summarize the visible events in this clip." \
--max-tokens 200
비디오 디코딩은 ffmpeg를 사용합니다. --video를 사용하기 전에 설치되어 있고 PATH에서 찾을 수 있는지 확인하십시오.
--image 플래그를 반복하여 여러 이미지를 지정할 수 있습니다:
mlxcel generate \
--model ./models/Qwen2.5-VL-7B-Instruct \
--image ./before.png --image ./after.png \
--prompt "What changed between these two images?" \
--max-tokens 200
full-model 투기 디코딩(일반 소형 체크포인트를 초안 모델로 사용):
mlxcel generate \
--model ./models/Llama-3.1-70B-4bit \
--draft-model ./models/Llama-3.2-1B \
--draft-kind full-model \
--prompt "Summarize the key ideas in the Rust ownership model." \
--max-tokens 400
--draft-kind full-model은 대상 모델과 토크나이저를 공유하는 소형 체크포인트를 자체 KV 캐시에서 실행하고, 엔진의 토큰 전용 검증 loop가 모든 위치를 결정합니다. MTP도 DFlash도 아닌 읽을 수 있는 모델 디렉터리는 full-model로 자동 감지됩니다. --draft-kind dflash는 Laguna 대상 모델과 그 Laguna DFlash 초안 모델 조합에서만 오프라인으로 실행되며, Qwen 3.5, LFM2 DSpark, Muse Glimmer DFlash 조합은 서버 방식으로 실행됩니다. --draft-kind mtp는 자격을 갖춘 Gemma 4/Unified, Qwen 3.5/Qwen3.8 계열, GLM-4.7-Flash 텍스트 전용 조합에서 지원됩니다.
알려진 문제: temperature 0 출력
temperature 0에서 블록 검증 경로(--prompt-lookup 또는 full-model 초안 모델)는 plain decode 토큰 스트림에서 벗어날 수 있어, 투기적 디코딩을 쓰지 않은 실행과 출력이 같다고 보장하지 않습니다(#2778). 근본 원인은 아직 알려지지 않았습니다. 바이트 단위로 같은 출력에 의존하기 전에 plain 실행과 비교하십시오.
초안 모델 없이 수정형 요청에 프롬프트 조회 적용:
mlxcel generate \
--model mlx-community/Qwen3-1.7B-4bit \
--prompt-lookup \
--prompt "Fix the typos in this paragraph and return it unchanged otherwise: ..." \
--max-tokens 400
Nemotron VoiceChat 오프라인 턴(음성 입력, 음성 출력):
mlxcel generate -m models/NemotronLabs-VoiceChat-11B-4bit \
--audio question.wav --output-audio response.wav \
-p "Be concise and answer in one sentence."
[user] <전사 결과>, 어시스턴트 텍스트, 그리고 function 채널이 무언가를 만들었다면 [function] <text>를 출력하고 response.wav(22050 Hz mono PCM16)를 씁니다. 출력 길이가 입력 타임라인 길이와 같으므로 -n은 무시되고, 이 계열에서 --seed의 기본값은 0이라 음성이 재현 가능하며, --image와 --video는 거절됩니다. --stream --profile을 더하면 온라인 세션으로 실행하면서 단계별 지연과 실시간 배율을 출력합니다. --audio 없는 대화형 generate는 이 체크포인트를 거절합니다. 서버 형태는 Nemotron VoiceChat Realtime API를 참조하십시오.
모델 로드 전 메모리 preflight:
mlxcel generate \
--model ./models/Qwen2.5-7B-Instruct \
--prompt "Summarize the deployment plan." \
--max-tokens 1024 \
--estimate-memory
preflight는 렌더링된 prompt token 수와 --max-tokens를 더한 길이를 사용하고 정확한 가중치 크기, KV 캐시, runtime headroom을 사용 가능 메모리와 비교합니다. 자세한 내용과 override 기준은 메모리 추정을 참조하십시오.
성능 측정을 위한 프로파일링 모드:
mlxcel generate \
--model ./models/Gemma-3-4B-Instruct \
--prompt "What is photosynthesis?" \
--max-tokens 200 \
--profile
--profile 사용 시 타이밍 단계별 상세 정보가 출력됩니다:
[Profile Results]
Prompt tokens: 12
Generated tokens: 148
Prefill: 84.3 ms (142.3 tok/s)
Decode: 3241.7 ms (45.6 tok/s)
--profile 없이 실행하면 간단한 요약이 출력됩니다:
원시 프롬프트 주입을 위한 채팅 템플릿 비활성화:
mlxcel generate \
--model ./models/Qwen2.5-7B-Instruct \
--prompt "<|im_start|>user\nHello<|im_end|>\n<|im_start|>assistant\n" \
--no-chat-template \
--max-tokens 50
지원되는 텍스트 모델의 단일 머신 파이프라인 generate:
mlxcel generate \
--model ./models/llama-3.2-1b-4bit \
--prompt "Hello" \
--max-tokens 64 \
--temp 0 \
--no-chat-template \
--pp-size 2
mlxcel inspect¶
모델을 로드하지 않고 로드 전 메모리 breakdown을 출력합니다. 출력에는 가중치, KV 캐시, runtime headroom, 총 byte, 사용 가능 byte, 해당 구성이 들어맞을지 여부가 포함됩니다. 이 명령은 --estimate-memory와 --recommend-quant가 사용하는 것과 같은 추정기를 사용합니다. 자세한 내용은 메모리 추정을 참조하십시오.
| 플래그 | 기본값 | 설명 |
|---|---|---|
-m, --model <PATH_OR_REPO_ID> | 필수 | 기존 로컬 모델 디렉터리, HuggingFace owner/name repo-id, 또는 bare 모델 이름. repo-id가 캐시에 없으면 inspect 전에 mlxcel store로 자동 다운로드합니다. |
--models-dir <PATH> | MLXCEL_MODELS_DIR / cache root | 해석/download에 사용할 model-store root 재정의. |
--revision <REV> | main | repo-id inspect에 사용할 repository branch, tag, commit. |
-n, --max-tokens <N> | 8192 | KV 캐시 추정에 사용할 컨텍스트 길이. |
--batch <N> | 1 | KV 캐시 추정에 사용할 배치 크기. 동시 서버 슬롯을 모델링할 때 사용합니다. |
--quant <default\|fp16\|int8\|int4> | default | 출력에 의도한 가중치 모드를 표시합니다. 가중치 총량은 여전히 체크포인트 metadata에서 가져옵니다. |
--json | 비활성 | text banner 대신 raw byte field를 담은 JSON object 하나를 출력합니다. 캐시 hit에서는 stdout에 JSON만 쓰고, resolution 또는 estimator error는 기존처럼 stderr에 쓰고 nonzero로 종료합니다. |
--kv-cache-mode <MODE> | fp16 | K/V 캐시 모드 shorthand. int8은 추정에서 KV 캐시 byte 폭을 절반으로 줄입니다. |
--cache-type-k <TYPE> / --cache-type-v <TYPE> | fp16 | generate 및 서버 모드와 공유하는 split K/V 캐시 모드 플래그입니다. --kv-cache-mode보다 우선합니다. |
--turbo-boundary-v <COUNT> | MLXCEL_KV_BOUNDARY_V_LAYERS / 2 | Turbo cache 추정에서 높은 precision으로 유지할 boundary V layer 수. |
예시:
mlxcel inspect -m ./models/Qwen2.5-7B-Instruct-4bit
mlxcel inspect -m ./models/Qwen2.5-7B-Instruct-4bit --max-tokens 32768
mlxcel inspect -m ./models/Qwen2.5-7B-Instruct-4bit --batch 4 --kv-cache-mode int8
mlxcel inspect --json -m mlx-community/Qwen3-4B-4bit | python3 -m json.tool
JSON 형식은 recipe builder와 scheduler가 hardware-fit 입력값을 읽기 위한 표면입니다. 출력 field는 mlxcel_version, model, model_type, family, inputs, weights_bytes, weights_source, kv_bytes_per_token, kv_bytes_total, kv_detail, per_slot_overhead_bytes, activation_bytes, backend_inflight_bytes(ROCm 빌드에서만 0이 아니며 headroom_bytes에 포함), headroom_bytes, headroom_factor, budget_bytes, total_bytes, fits입니다. 추정기가 제공할 수 없는 값은 추측하지 않고 null로 둡니다.
mlxcel detect¶
이미지에서 객체 검출을 수행하고 원본 이미지 픽셀 좌표로 바운딩 박스를 출력합니다. 검출 모델은 토큰 스트림이 아니라 클래스 레이블과 신뢰도가 포함된 박스(l, t, r, b)를 출력하므로 generate/serve와는 별도의 명령어입니다.
config.json과 model.safetensors가 있는 디렉터리에서 RT-DETRv2, PP-DocLayoutV3, YOLO11, RF-DETR 체크포인트를 로드합니다. 사전 변환된 MLX 체크포인트(예: mlx-community/docling-layout-heron-mlx-bf16)와 원본 HuggingFace 체크포인트를 모두 받고, HF 가중치는 로드 시 MLX 레이아웃으로 변환합니다.
| 플래그 | 기본값 | 설명 |
|---|---|---|
-m, --model <PATH> | 필수 | 검출 모델 디렉터리. |
-i, --image <PATH> | 필수 | 입력 이미지 경로(PNG, JPEG 등). |
-t, --threshold <FLOAT> | 검출기별 기본값 | [0, 1] 범위의 신뢰도 임계값. 이보다 낮은 검출은 제거됩니다. 기본값은 RT-DETRv2와 PP-DocLayoutV3가 0.3, RF-DETR이 0.5, YOLO11이 0.05입니다. |
--size <PIXELS> | 원본 해상도 | 추론 전 가장 긴 변의 크기. YOLO11 전용이며, 입력 크기가 고정된 검출기는 경고와 함께 무시합니다. |
--iou <FLOAT> | 0.1 | [0, 1] 범위의 NMS IoU 임계값. YOLO11 전용이며 박스는 최대 300개입니다. |
--masks-dir <DIR> | 미설정 | 검출마다 바이너리 인스턴스 마스크 PNG를 하나씩 저장합니다. RF-DETR 세그멘테이션 체크포인트 전용입니다. |
--format <text\|json> | text | 출력 형식. text는 정렬된 표를, json은 기계가 읽을 수 있는 객체를 출력합니다. |
클래스 이름은 체크포인트의 config.json::id2label에서 해석하고, YOLO11은 config.json의 클래스 목록을 씁니다. 없으면 숫자 클래스 id가 표시됩니다. PP-DocLayoutV3 검출에는 모델이 매긴 전역 읽기 순서도 함께 실립니다.
예시:
# 페이지 이미지에 대한 문서 레이아웃 검출(17개 클래스 docling 모델).
mlxcel detect -m ./models/docling-layout-heron-mlx-bf16 -i page.png
# 더 높은 임계값, 다운스트림 도구용 JSON 출력.
mlxcel detect -m ./models/rt-detr-v2 -i photo.jpg --threshold 0.5 --format json
# 가장 긴 변을 줄여서 수행하는 OmniParser v2 아이콘 검출.
mlxcel detect -m axiom-of-choice/OmniParser-v2-icon-detect -i ui.png --size 1280 --format json
JSON 출력 스키마:
{
"image": "page.png",
"threshold": 0.3,
"detections": [
{ "label": "section_header", "label_id": 7, "confidence": 0.89,
"box": { "l": 390.3, "t": 21.7, "r": 738.5, "b": 41.4 } }
]
}
mlxcel predict¶
박스보다 많은 것을 반환하는 체크포인트를 위한 밀집 태스크 출력을 기록합니다. 깊이, 표면 노멀, 세그멘테이션, 포인트 맵, 키포인트, 인스턴스별 마스크, 메시, 가우시안 스플랫이 여기에 해당합니다. 모든 실행은 출력 디렉터리에 result.safetensors와 meta.json을 쓰고, 그 밖에 keypoints.json, depth.png, normal.png, segmentation.png, instances.json, masks/ 같은 태스크별 파일을 씁니다.
# Image-encoder features from DINOv2.
mlxcel predict -m ./models/dinov2-small -i input.png -o features --task features
# Pose from Sapiens2 with an explicit box.
mlxcel predict -m ./models/sapiens2-pose -i person.png -o pose \
--opts '{"boxes":[[140,90,920,700]],"flip_test":true}'
# Depth over a video.
mlxcel predict -m ./models/video-depth -v clip.mp4 -o depth --max-frames 32
--image와 --video 중 정확히 하나가 필요하고 --output은 필수입니다. 선택한 패밀리가 해당 입력의 기본값을 선언하면 --task를 생략할 수 있습니다. --prompt는 반복 지정할 수 있고, --boxes는 픽셀 단위 x1,y1,x2,y2 박스를 받으며(플래그를 반복하거나 ;로 박스를 구분합니다), --mask와 --pointmap은 SAM 3D Objects 입력을 제공하고, --max-frames와 --target-fps는 비디오 샘플링을 제어하며, --opts는 모델별 옵션을 JSON 객체로 전달합니다.
지원 패밀리, 각 태스크, 출력 계약은 고밀도 예측과 비전 태스크를 참조하십시오.
mlxcel generate-image¶
Diffusers 레이아웃의 디퓨전 체크포인트로 프롬프트에서 이미지를 생성하거나 참조 이미지 하나 이상을 편집합니다. 시드는 항상 출력되며, -n이 1보다 크면 이미지 i는 시드 seed + i를 사용하고(FLUX.2 생성은 노이즈 배치 하나를 뽑는 예외) <stem>-01.png, <stem>-02.png 같은 이름으로 기록됩니다.
mlxcel generate-image -m ./models/flux2-klein -p "a watercolor fox"
mlxcel generate-image -m ./models/flux2-klein -p "a fox" --size 768x512 --seed 7 -n 2 -o fox.png
mlxcel generate-image -m ./models/flux2-klein --task edit --image fox.png -p "make it night"
주요 플래그는 --task generate|edit(기본 generate), --image(반복 지정 가능, edit에는 필수이고 generate에는 거부됨), --size WxH(기본 512x512), --negative-prompt, --steps, --guidance, --seed, -n(1~10), -o/--output(기본 outputs/image-<seed>.png), 모델별 옵션을 JSON으로 받는 --gen-kwargs입니다.
패밀리, 기본값, /v1/images 경로는 이미지 생성을 참조하십시오.
mlxcel embed¶
임베딩 체크포인트를 불러와 입력마다 벡터 하나를 출력합니다. 입력이 둘 이상이면 밀집 벡터에는 코사인 유사도 행렬, 후기 상호작용 벡터에는 최대 유사도 합산 행렬도 출력합니다. 서버와 같은 모델 감지, 로더, 풀링, 정규화, 길이 제한, 소규모 배칭을 사용합니다.
| 옵션 | 기본값 | 설명 |
|---|---|---|
-m, --model <MODEL_OR_REPO_ID> | 필수 | 로컬 체크포인트, HuggingFace 저장소 식별자, 해석 가능한 짧은 이름 |
-p, --prompt <TEXT> | - | 임베딩할 텍스트. 여러 번 지정 가능. 공백만 있는 프롬프트는 rerank -d가 공백만 있는 문서를 거절하듯 거절합니다 |
--image <FILE> | - | 지원되는 멀티모달 임베딩 모델의 이미지 입력. 여러 번 지정 가능 |
--instruction <TEXT> | - | 모델 계열별 질의 지시문 |
--dimensions <N> | 원래 폭 | 앞쪽 N개 성분만 남기고 필요하면 다시 정규화 |
--pooling <mean\|cls\|last> | 체크포인트·계열 | 밀집 풀링 덮어쓰기 |
--embd-normalize <N> | 체크포인트 | -1 없음, 0 절댓값 최댓값 기준 int16, 1 L1, 2 L2, p > 2 p-노름 |
--max-length <N> | 자동 결정 | 체크포인트에서 구한 토큰 상한을 더 낮춤 |
--batch-size <N> | 16 | 순전파 한 번에 처리할 텍스트 수 |
--models-dir <PATH> | 모델 저장소 루트 | 저장소 식별자 해석 위치 덮어쓰기 |
--json | 거짓 | 임베딩, 모양, 토큰 수, 유사도를 객체 하나로 출력 |
mlxcel embed -m nomic-ai/modernbert-embed-base \
-p "search_query: 벡터 검색이란 무엇인가?" \
-p "search_document: 벡터 검색은 가까운 임베딩을 찾는다."
mlxcel rerank¶
한 질의에 대한 각 문서의 점수를 계산한 뒤 요청 순서의 점수와 최종 순위를 출력합니다. 교차 인코더, Qwen3 생성형, Qwen3-VL 멀티모달 재순위화 모델을 지원합니다.
| 옵션 | 기본값 | 설명 |
|---|---|---|
-m, --model <MODEL_OR_REPO_ID> | 필수 | 재순위화 체크포인트 |
-q, --query <TEXT> | - | 질의 텍스트. 이미지만 있는 질의는 --query-image 사용 가능 |
-d, --document <TEXT> | - | 후보 문서. 여러 번 지정 가능 |
--query-image <FILE> | - | 멀티모달 모델에서 질의에 붙일 이미지 |
--image <FILE> | - | 이미지 후보. 여러 번 지정하며 결과에서 텍스트 문서 뒤에 배치 |
--instruction <TEXT> | 종류별 기본값 | 생성형 모델의 과제 지시문. 분류기는 거부 |
--top-n <N> | 전체 | 순위에서 상위 N개 문서만 출력 |
--max-length <N> | 자동 결정 | 쌍마다 적용하는 토큰 상한을 더 낮춤 |
--batch-size <N> | 종류별 기본값 | 순전파 한 번에 처리할 쌍 수 |
--models-dir <PATH> | 모델 저장소 루트 | 저장소 식별자 해석 위치 덮어쓰기 |
--json | 거짓 | 점수, 순위, 종류, 토큰 수를 객체 하나로 출력 |
mlxcel rerank -m BAAI/bge-reranker-v2-m3 \
-q "벡터 검색이란 무엇인가?" \
-d "벡터 검색은 가까운 임베딩을 찾는다." \
-d "컴파일러는 소스 코드를 번역한다." \
--top-n 1
접두문, 모델 계열, 점수 의미는 임베딩과 재순위화를 참고하십시오.
mlxcel tag¶
텍스트에 고정 레이블 BIO 또는 BIOES 토큰 분류기를 실행하고, 유니코드 문자 오프셋과 마스킹된 사본을 포함한 태깅된 스팬을 출력합니다. 텍스트 인자로 -를 주면 stdin에서 읽습니다. --argmax는 제약된 Viterbi 디코더가 기본인 체크포인트에서 토큰별 디코딩을 강제하고, --replacement는 마스킹 문자열을 정하며, --keep은 마스킹된 텍스트에 남길 레이블을 나열하고, --operating-point는 Viterbi로 디코딩하는 체크포인트의 캘리브레이션 지점을 고릅니다.
mlxcel tag -m nativ-community/rampart-mlx-fp16 --keep CITY,STATE,ZIP_CODE \
"I'm Sarah Connor, 1984 Cyberdyne Ave, Los Angeles CA 90012, sarah@sky.net"
mlxcel extract¶
mlxcel extract -m <PATH_OR_REPO_ID> (--labels <L1,L2> | --labels-json <JSON> | --classify <JSON>) <TEXT>
스팬 추출 체크포인트에서 요청마다 선택한 레이블의 스팬을 추출하거나 텍스트를 분류합니다. --include-confidence와 --include-spans는 각 스팬의 점수와 오프셋을 더하고, --threshold(기본 0.5)는 최소 엔터티 점수와 기본 다중 레이블 임계값을 정하며, --max-len과 --word-splitter whitespace|char는 GLiNER2.5에 적용됩니다.
mlxcel extract -m fastino/gliner2.5-small-v1 --labels company,person,location \
--include-confidence --include-spans "Apple hired Sam in New York."
두 명령, 지원 패밀리, 출력 형태는 토큰 분류와 스팬 추출을 참조하십시오.
mlxcel serve¶
OpenAI API 및 llama.cpp 서버 API와 호환되는 지속적인 HTTP 서버를 시작합니다. 서버는 모델을 한 번만 로드하여 메모리에 상주시키고 연속 배칭을 통해 여러 요청을 처리합니다.
여러 플래그는 커맨드라인 인수가 불편한 배포 환경에서 환경 변수로도 설정할 수 있습니다.
네트워크 및 인증¶
| 플래그 | 환경 변수 | 기본값 | 설명 |
|---|---|---|---|
-m, --model <PATH_OR_REPO_ID> | LLAMA_ARG_MODEL | 라우터 모드가 아니면 필수 | 기존 로컬 모델 디렉터리, HuggingFace owner/name repo-id, 또는 MLXCEL_DEFAULT_ORG로 해석되는 bare 모델 이름. --models-dir, --models-preset, --webui와 함께 생략하면 모델 없이 라우터를 시작합니다. |
--models-dir <PATH> | LLAMA_ARG_MODELS_DIR | 비활성 | 라우터가 찾아서 제공하는 모델 디렉터리. 모델 인자와 함께 쓸 수 없으며, model-store 루트를 정하려면 --model-store-root 또는 MLXCEL_MODELS_DIR을 사용하십시오. |
--revision <REV> | - | main | -m/--model이 repo-id일 때 쓸 리포지터리 revision(브랜치·태그·커밋 해시)입니다. 해당 revision의 HuggingFace 캐시 스냅샷을 해석하고 없으면 받아옵니다. mlxcel store는 revision으로 네임스페이스를 나누지 않으므로, 이미 있는 리포는 알 수 없는 revision으로 답하는 대신 거절됩니다. revision마다 --models-dir를 따로 주십시오. -m/--model이 존재하는 로컬 경로이면 쓸 수 없습니다. |
--adapter <PATH>, --lora <PATH> | - | - | 서빙 모델과 함께 LoRA 어댑터 디렉터리를 쉼표로 구분해 하나 이상 로드합니다. --lora-fuse를 지정하지 않으면 어댑터는 융합되지 않고 스케일을 바꿀 수 있는 상태로 유지됩니다. --lora는 llama-server 호환 별칭입니다. LoRA 어댑터를 참조하십시오. |
--surgery <FILE> | MLXCEL_SURGERY | - | 로드 시점 모델 변환에 사용할 YAML 파일입니다. 런타임 모델 변환을 참조하십시오. |
--host <ADDR> | LLAMA_ARG_HOST | 127.0.0.1 | 바인딩할 호스트 주소. 모든 인터페이스의 연결을 수락하려면 0.0.0.0을 사용하십시오. .sock으로 끝나는 값은 그 경로의 Unix 도메인 소켓으로 서빙합니다. |
--port <N> | LLAMA_ARG_PORT | 8080 | 수신할 TCP 포트. 0은 커널이 고르는 임시 포트에 바인딩합니다. --host가 .sock으로 끝나면 무시합니다. |
--api-key <KEY> | LLAMA_API_KEY | - | Bearer 토큰 인증을 위한 API 키. 설정 시 /health와 /를 제외한 모든 엔드포인트에서 Authorization: Bearer <KEY>가 필요합니다. |
--api-key-file <PATH> | - | - | API 키가 포함된 파일 경로. --api-key와 상호 배타적이며 파일 내용의 공백은 제거됩니다. |
--allowed-origins <ORIGINS> | MLXCEL_ALLOWED_ORIGINS | permissive | 쉼표로 구분한 정확한 CORS origin. 미설정 시 모든 origin을 reflect하므로 browser-accessible production listener에서는 설정하십시오. |
-a, --alias <NAME> | LLAMA_ARG_ALIAS | - | 디렉터리 이름 대신 API 응답에서 반환되는 모델 별칭. |
--api-prefix <PATH> | LLAMA_ARG_API_PREFIX | "" | 서버가 서비스할 접두 경로(끝 슬래시 없음). --api-prefix /llama를 주면 모든 경로가 /llama 아래로 옮겨져 /v1/chat/completions는 /llama/v1/chat/completions가 됩니다. llama-server b10621과 동일하게 공개 health 경로는 접두사 없는 경로로 인식하므로, API 키가 설정돼 있으면 /llama/health에는 인증이 필요합니다. { 또는 }가 들어간 값은 거부합니다. |
--cors-origins <LIST> | LLAMA_ARG_CORS_ORIGINS | * | 허용할 CORS origin. 값이 그대로 Access-Control-Allow-Origin으로 나가며, *는 --cors-credentials가 켜져 있을 때 요청 Origin을 그대로 되돌려 주고 localhost는 host가 localhost·127.0.0.1·::1일 때만 되돌려 줍니다. 목록 대조로 origin별 매칭을 하려면 mlxcel 고유 --allowed-origins를 쓰십시오. 둘은 상호 배타적입니다. |
--cors-headers <LIST> | LLAMA_ARG_CORS_HEADERS | * | 쉼표로 구분한 허용 헤더. preflight에서 Access-Control-Allow-Headers로 전송됩니다. |
--cors-methods <LIST> | LLAMA_ARG_CORS_METHODS | GET,POST,OPTIONS | 쉼표로 구분한 허용 메서드. preflight에서 Access-Control-Allow-Methods로 전송됩니다. |
--cors-credentials / --no-cors-credentials | LLAMA_ARG_CORS_CREDENTIALS | 활성 | CORS 자격 증명 허용 여부. 이 값이 켜져 있고 --cors-origins *이면 Origin 헤더를 그대로 되돌려 주고 자격 증명을 항상 허용하며 llama-server b10621과 동일합니다. |
--ssl-cert-file <PATH> | LLAMA_ARG_SSL_CERT_FILE | - | PEM 인코딩 인증서. HTTP 대신 HTTPS로 서비스하며 --ssl-key-file과 함께 지정해야 합니다. |
--ssl-key-file <PATH> | LLAMA_ARG_SSL_KEY_FILE | - | PEM 인코딩 개인 키. --ssl-cert-file과 함께 지정해야 합니다. |
--threads-http <N> | LLAMA_ARG_THREADS_HTTP | -1 | Tokio 런타임의 HTTP 워커 스레드 수를 정합니다. -1은 llama-server b10621의 공식 max(--parallel + 4, cores - 1)을 씁니다. |
--reuse-port | LLAMA_ARG_REUSE_PORT | 꺼짐 | 여러 소켓이 같은 포트에 바인딩하도록 허용합니다(SO_REUSEPORT). |
--sse-ping-interval <SECS> | LLAMA_ARG_SSE_PING_INTERVAL | 30 | 스트림이 조용한 동안 내보내는 SSE 주석 ping 간격입니다. 긴 prefill에서 리버스 프록시가 연결을 끊지 않게 해 줍니다. -1이면 끕니다. |
동시성 및 배칭¶
| 플래그 | 환경 변수 | 기본값 | 설명 |
|---|---|---|---|
--n-parallel <N>, --parallel <N> | LLAMA_ARG_N_PARALLEL | 4 | 병렬 요청 슬롯 수. 이 값은 --max-batch-size가 명시적으로 설정되지 않은 경우의 기준값이며 명시적 --ctx-size의 기본 나눗수입니다. |
--max-batch-size <N> | - | n_parallel | 활성 디코드 배치의 최대 시퀀스 수. 이 값을 늘리면 더 많은 동시 디코드 단계가 가능하지만 더 많은 메모리를 사용하며 명시하면 --ctx-size를 이 값으로 나눕니다. |
--max-queue-depth <N> | - | 32 | 프리필 큐에서 대기하는 최대 요청 수. 큐가 꽉 차면 서버가 HTTP 503을 반환합니다. |
--prefill-chunk-size <N> | MLXCEL_PREFILL_CHUNK | 디코딩 중인 시퀀스가 없으면 2048, 있으면 512 | 프리필 청크당 토큰 수. 긴 프롬프트는 이 크기의 청크로 분할되고 활성 시퀀스의 대기 시간 급증을 방지하기 위해 청크 사이에 디코드 단계가 삽입됩니다. 지정하지 않으면 다른 시퀀스가 디코딩하지 않는 동안은 2048, 디코드 배치가 돌고 있는 동안은 512를 씁니다. 이 플래그, -b, MLXCEL_PREFILL_CHUNK 중 하나로 값을 명시하면 두 상태 모두 그 값으로 고정됩니다. 0으로 설정하면 청크 분할이 비활성화됩니다. |
--prefill-grant-interval <N> | MLXCEL_PREFILL_GRANT_INTERVAL | 16 | Parked prefill이 guaranteed prefill tick을 받기 전 양보하는 decode tick 수. 낮추면 TTFT가 개선되고 decode ITL이 늘며 0은 grant를 끕니다. |
-b, --batch-size <N> | LLAMA_ARG_BATCH | 디코딩 중인 시퀀스가 없으면 2048, 있으면 512 | --prefill-chunk-size의 llama-server 별칭이며, 값을 명시하면 두 상태 모두 고정됩니다. 두 플래그에 서로 다른 값을 주면 --prefill-chunk-size가 우선하고 경고가 기록됩니다. |
--ubatch-size <N> | LLAMA_ARG_UBATCH | - | llama-server physical micro-batch 설정. Apple Silicon unified memory에서는 무시합니다. |
--max-batch-prefill <N> | - | 4 | 대기 중인 요청을 하나의 배치 프리필 패스로 합칠 최대 개수. |
--max-batch-prefill-tokens <N> | MLXCEL_MAX_BATCH_PREFILL_TOKENS | 파생값 | Batched prefill의 quadratic FP32 mask를 제한하는 padded-token cap. 지정하지 않으면 2 * max_batch_prefill * min(prefill_chunk_size, 512)이고 기본 설정에서는 4096입니다. 0이면 비활성화합니다. |
--enable-preemption | - | false | 배치가 꽉 찼을 때 우선순위가 낮은 시퀀스의 선점적 축출을 허용합니다. |
--preemption-policy <POLICY> | - | longest-first | 선점이 발생할 때 축출할 시퀀스 선택 방식. longest-first는 가장 많은 토큰을 생성한 시퀀스를 축출하고 lowest-priority는 우선순위가 가장 낮은 시퀀스를 축출합니다. |
--no-batch | - | false | 배치 스케줄러를 완전히 비활성화하고 레거시 순차 워커를 사용합니다. 요청이 FIFO 순서로 하나씩 처리되며 명시적 --ctx-size 전체를 유지합니다. |
--ctx-size <N> | LLAMA_ARG_CTX_SIZE | 0 | 컨텍스트 예산. 0은 모델의 기본 컨텍스트 길이를 사용하고 명시 값은 활성 슬롯들이 나누어 사용합니다. |
-n, --n-predict <N>, --predict <N> | LLAMA_ARG_N_PREDICT | -1 | 요청에 max_tokens가 없을 때 사용할 기본 최대 생성 토큰 수입니다. --predict는 호환 별칭입니다. llama.cpp와 동일하게 -1은 유효 per-slot 컨텍스트 윈도우(설정된 --ctx-size를 슬롯 수로 나눈 값, 없으면 모델의 max_position_embeddings)로 해석되며 둘 다 없을 때만 4096으로 폴백합니다. 0 이상 값은 그대로 사용됩니다. |
--timeout <SECS> | LLAMA_ARG_TIMEOUT | 3600 | llama-server b10621과 동일한 HTTP 소켓 read/write 타임아웃(초 단위)입니다. 소켓 읽기·쓰기 한 번이 블로킹될 수 있는 시간을 제한할 뿐 느린 생성을 취소하지는 않습니다. 그 용도로는 --decode-timeout을 사용하십시오. |
--decode-timeout <SECS> | MLXCEL_DECODE_TIMEOUT | 600 | 요청별 디코드 워치독. 생성이 토큰을 더 내놓지 못하는 요청을 취소합니다. 이 값을 함께 설정하지 않고 --timeout만 설정하면 시작 시 마이그레이션 경고를 남깁니다. 0은 내장 300초 가드로 물러나며 경고합니다. |
--max-kv-size <N> | LLAMA_ARG_MAX_KV_SIZE | 0 | 일반 non-sliding KV 캐시를 시퀀스당 N 토큰으로 제한합니다. 0이면 제한하지 않습니다. Sliding-window 모델은 모델별 윈도우를 유지합니다. |
--decode-storage-backend <auto\|dense\|paged> | MLXCEL_SERVER_DECODE_STORAGE | auto | 연속 배칭 디코드 스토리지 백엔드를 선택합니다. |
--kv-cache-budget <BYTES\|auto\|none> | MLXCEL_KV_CACHE_BUDGET | auto | 통합 paged KV 캐시 풀의 블록 예산. auto는 메모리 추정에서 상한을 도출하고 바이트 값은 명시적으로 설정하며 none/0은 풀을 무제한으로 둡니다. --decode-storage-backend paged의 풀 기반 FP16 모델에 적용됩니다. |
--kv-admission-watermark <FRACTION> | MLXCEL_KV_ADMISSION_WATERMARK | 0.01 | 디코딩 중인 행이 있을 때 프리필 admission이 비워 두는 paged KV 블록 예산의 비율이며 범위는 0.0..=0.5입니다. admission은 빈 블록이 요청량과 이 비율을 합친 만큼 될 때까지 기다리며, 그 공간을 만들려고 오래 쓰이지 않은 프롬프트 캐시 prefix를 축출하고 우선순위가 더 높은 요청이면 우선순위가 엄격히 낮은 행을 선점합니다. 예산 안에 들어가는 요청은 거절하지 않습니다. 0이면 끄고, 블록 예산이 없으면 무시합니다. 예산이 빠듯할 때의 디코드 여유분을 참조하십시오. |
--kv-bits <BITS> | LLAMA_ARG_KV_BITS | 0 | Continuous-batching KV quantization. uniform은 8, turboquant는 4를 지원하며 0은 비활성화합니다. |
--kv-group-size <N> | LLAMA_ARG_KV_GROUP_SIZE | 64 | Uniform quantization channel group size. V head_dim을 나누어야 합니다. |
--kv-quant-scheme <uniform\|turboquant> | LLAMA_ARG_KV_QUANT_SCHEME | uniform | Batched KV quantization scheme. Uniform 4-bit은 거부하므로 4-bit에는 TurboQuant를 사용하십시오. |
--kv-skip-last-layer <BOOL> | LLAMA_ARG_KV_SKIP_LAST_LAYER | true | 품질 보존을 위해 마지막 transformer layer를 양자화하지 않습니다. |
--turbo-boundary-v <COUNT> | MLXCEL_KV_BOUNDARY_V_LAYERS | 2 | Turbo mode에서 앞·뒤 V boundary layer를 FP16으로 유지합니다. |
--vision-cache-size <N> | - | 20 | 로드된 VLM당 후처리된 이미지 피처를 LRU로 캐싱하는 최대 개수. 동일 이미지를 다시 참조하는 멀티턴 대화에서 vision tower와 multimodal embedder 실행을 생략합니다. 0이면 캐시 비활성화. 현재 Gemma 4 VLM, Qwen 2.5-VL, Qwen 3-VL에 연결되어 있고 나머지 계열은 비캐시 경로로 폴백합니다. 자세한 내용은 Vision Feature Cache를 참조하십시오. |
--media-path <DIR> | - | 미설정 | 로컬 미디어 파일을 읽는 루트. 설정하지 않으면 file:// 미디어 URL을 거부합니다. 설정하면 요청의 경로를 먼저 루트 기준 상대 경로로 resolve하고, 절대 경로는 루트 안의 파일을 가리킬 때만 받습니다. 미디어 입력을 참조하십시오. |
--max-image-payload-size <BYTES> | LLAMA_ARG_MAX_IMAGE_PAYLOAD_SIZE | 67108864 | 이미지당 최대 encoded byte. |
--max-images <N> | LLAMA_ARG_MAX_IMAGES | 16 | 요청당 최대 이미지 수. 비디오를 이미지로 바꾸는 대체 경로의 프레임도 여기에 포함됩니다. |
--video-max-frames <N> | MLXCEL_VIDEO_MAX_FRAMES | 16 | 고유 비디오 경로가 없는 체크포인트에 video_url 블록을 순서가 있는 이미지로 보낼 때 남기는 프레임 수. 2보다 작은 값은 2로 올립니다. |
--video-fps <FLOAT> | MLXCEL_VIDEO_FPS | 2.0 | 요청의 video_url.fps가 없을 때 그 대체 경로의 샘플링 속도. |
--max-image-width <PX>, --max-image-height <PX> | LLAMA_ARG_MAX_IMAGE_WIDTH, LLAMA_ARG_MAX_IMAGE_HEIGHT | 16384 | 최대 decoded image dimension. |
--max-image-decode-alloc-bytes <BYTES> | LLAMA_ARG_MAX_IMAGE_DECODE_ALLOC_BYTES | 536870912 | 이미지 하나의 decoder allocation 예산. |
--estimate-memory | - | false | 서버가 모델을 로드하기 전에 통합 메모리 preflight를 실행합니다. 추정 총량이 사용 가능 예산을 초과하면 중단합니다. |
--force, --no-memory-check | - | false | 초과 예산 memory preflight 결과를 경고로 낮추고 계속 진행합니다. --estimate-memory가 없으면 효과가 없습니다. |
--ctx-size C가 0이 아니면 mlxcel은 llama.cpp 서버 의미론을 따릅니다. 이 값은 서버 전체 컨텍스트 예산이며 슬롯별 실제 컨텍스트 윈도우는 floor(C / active_slots)입니다. active_slots는 명시된 --max-batch-size, 없으면 --n-parallel이고 --no-batch는 슬롯 1개를 사용합니다. /health.context_size, /slots[].context_size, 메모리 preflight는 모두 이 슬롯별 값을 보고하고 사용합니다. 명시 예산이 슬롯당 512토큰 미만으로 나뉘면 시작 시 거부합니다.
오디오 worker¶
| 플래그 | 환경 변수 | 기본값 | 설명 |
|---|---|---|---|
--audio-queue-depth <N> | MLXCEL_AUDIO_QUEUE_DEPTH | 8 | 단일 audio worker 뒤의 bounded waiting queue. 가득 차면 503을 반환합니다. |
--audio-request-timeout-secs <N> | MLXCEL_AUDIO_REQUEST_TIMEOUT_SECS | 120 | 호출자 대기 한도. 만료되면 504를 반환하지만 이미 실행 중인 작업은 취소하지 않습니다. |
Whisper와 Kokoro 설정은 OpenAI 오디오 API를 참조하십시오.
임베딩 및 재순위화 작업자¶
| 옵션 | 환경 변수 | 기본값 | 설명 |
|---|---|---|---|
--embedding-model <PATH_OR_REPO_ID> | LLAMA_ARG_EMBEDDING_MODEL, MLXCEL_EMBEDDING_MODEL | - | 주 모델 옆에 임베딩 체크포인트 하나를 불러옵니다. |
--reranker-model <PATH_OR_REPO_ID> | LLAMA_ARG_RERANKER_MODEL, MLXCEL_RERANKER_MODEL | - | 주 모델 옆에 재순위화 모델 하나를 불러옵니다. 생성형 모델을 선택할 때 필수입니다. |
--embedding-batch-size <N> | MLXCEL_EMBEDDING_BATCH_SIZE | 16 | 임베딩 순전파 한 번에 넣는 텍스트 수 |
--embedding-max-length <N> | MLXCEL_EMBEDDING_MAX_LENGTH | 자동 결정 | 체크포인트에서 구한 임베딩 토큰 상한을 더 낮춥니다. |
--embedding-queue-depth <N> | MLXCEL_EMBEDDING_QUEUE_DEPTH | 8 | 각 임베딩·재순위화 작업자 큐의 상한 |
--embedding-request-timeout-secs <N> | MLXCEL_EMBEDDING_REQUEST_TIMEOUT_SECS | 120 | 두 작업자 종류가 사용하는 응답 제한 시간 |
--rerank-batch-size <N> | MLXCEL_RERANK_BATCH_SIZE | 0 | 종류별 기본값: 텍스트 쌍 8개 또는 멀티모달 쌍 2개 |
--pooling <mean\|cls\|last\|rank> | - | 체크포인트·계열 | 풀링을 덮어쓰거나 rank로 재순위화 모드를 선택합니다. none은 거부합니다. |
--embd-normalize <N> | - | 체크포인트 | 임베딩 정규화를 덮어씁니다. |
--embedding, --embeddings | - | 거짓 | 임베딩 전용 호환 모드를 선택하고 임베딩 제공자를 요구합니다. |
--rerank, --reranking | - | 거짓 | 재순위화 전용 호환 모드를 선택하고 재순위화 제공자를 요구합니다. |
-m에 임베딩 또는 시퀀스 분류 체크포인트를 지정하면 대화 모델 없이 해당 전용 작업자를 시작합니다. -m의 대화 모델은 두 보조 제공자와 함께 실행할 수 있습니다. 생성형 재순위화 전용 서버는 같은 체크포인트를 -m과 --reranker-model에 지정하며 모델을 두 번 불러오지 않습니다. 한 프로세스는 임베딩 제공자 하나와 재순위화 제공자 하나까지만 지원합니다. 임베딩 및 재순위화 API를 참고하십시오.
투기적 디코딩 (serve)¶
| 플래그 | 환경 변수 | 기본값 | 설명 |
|---|---|---|---|
--draft-model <PATH_OR_REPO_ID> | - | - | Drafter 체크포인트입니다. -m처럼 해석하는 경로 또는 owner/name repo id입니다. 두 binary 모두 --draft-model과 --model-draft를 받으며 mlxcel serve는 전자, standalone mlxcel-server는 후자를 primary로 표시합니다. config.json이 없거나 형식이 잘못된 drafter는 config 오류와 함께 시작이 실패합니다. |
--draft-max <N> | LLAMA_ARG_SPEC_DRAFT_N_MAX(없으면 LLAMA_ARG_DRAFT_MAX) | 16 | llama-server 호환을 위해 받는 옵션이며 --draft, --spec-draft-n-max, --draft-n으로도 쓸 수 있습니다. 값은 /props의 n_max로 보고되고, 제안 폭은 정하지 않습니다. 제안 폭은 --draft-block-size가 정합니다. |
--draft-kind <dflash\|mtp\|full-model\|prompt-lookup> | LLAMA_ARG_DRAFT_KIND, MLXCEL_DRAFT_KIND | auto | drafter kind를 강제합니다. prompt-lookup은 초안 체크포인트를 쓰지 않으며(함께 --draft-model을 주면 시작에 실패), 조건을 갖춘 요청에 대해 배치 스케줄러 안에서 n-gram 검증 라운드를 실행합니다. 투기적 디코딩을 참조하십시오. full-model은 일반 소형 체크포인트를 자체 KV 캐시에서 같은 토큰 전용 검증 loop로 실행하며, 같은 --prompt-lookup-max-batch 게이트를 따릅니다. 생략하면 drafter config.json::model_type에서 자동 감지합니다(gemma4_assistant, gemma4_unified_assistant, qwen3_5_mtp, glm4_moe_lite_mtp는 mtp, DFlash 패밀리 디렉터리는 dflash, 그 밖의 읽을 수 있는 모델 디렉터리는 full-model이며, Qwen 3.5, LFM2 DSpark, Laguna DFlash 초안 모델은 명시적으로 지정할 때만 여기에 해당합니다). |
--draft-block-size <N> | LLAMA_ARG_DRAFT_BLOCK_SIZE, MLXCEL_DRAFT_BLOCK_SIZE | 시작 시 결정 | DFlash, MTP, full-model block size입니다. 지정하지 않으면 초안 체크포인트가 선언한 폭, 측정 기반 장치별 기본값, MTP와 full-model 4, DFlash 16 순으로 정합니다. --draft-kind prompt-lookup에서는 최대 제안 길이를 정합니다(기본 7). 초안 블록 폭을 참조하십시오. |
--prompt-lookup-max-batch <N> | - | 2 | 프롬프트 조회 행이 자기 검증 라운드를 실행할 수 있는 최대 활성 디코드 배치 크기. 행이 이보다 많은 tick에서는 모든 행이 일반 배치 단계를 밟습니다. 1 이상이어야 합니다. |
디퓨전 옵션 (serve)¶
서빙 중인 모델이 DiffusionGemma 같은 디퓨전 모델일 때 블록 디퓨전 생성을 조정하는 플래그입니다. 자기회귀 모델은 무시합니다. 블록 디퓨전을 참조하십시오.
| 플래그 | 기본값 | 설명 |
|---|---|---|
--max-denoising-steps <N> | 체크포인트 generation_config(보통 48) | 캔버스 블록당 최대 denoising 반복 수. |
--diffusion-sampler <entropy-bound\|confidence-threshold> | entropy-bound | 스텝별 토큰 수락 전략. |
--diffusion-threshold <FLOAT> | 0.9 | confidence-threshold 샘플러의 확신 임계값. 시작 시 [0, 1] 범위를 검증합니다. |
이미지 모델 (serve)¶
| 플래그 | 환경 변수 | 기본값 | 설명 |
|---|---|---|---|
--image-model <PATH_OR_REPO_ID> | MLXCEL_IMAGE_MODEL | - | 채팅 모델과 함께 이미지 생성 체크포인트를 로드하고 POST /v1/images/generations, POST /v1/images/edits를 마운트합니다. 요청은 한 번에 하나씩 실행됩니다. 체크포인트가 지원되는 이미지 계열이 아니면 시작이 실패합니다. 이미지 생성을 참조하십시오. |
채팅 템플릿¶
| 플래그 | 기본값 | 설명 |
|---|---|---|
--chat-template <TEMPLATE> | - | Jinja2 템플릿 문자열로 채팅 템플릿을 재정의합니다. |
--chat-template-file <PATH> | - | 파일에서 채팅 템플릿 재정의를 로드합니다. |
--chat-template-kwargs <JSON> | - | 서버 기본 Jinja kwargs. 요청별 chat_template_kwargs가 같은 key를 덮어씁니다. |
--reasoning-budget <N> | -1 | Qwen3 계열 thinking-token budget. -1은 무제한, 0은 즉시 종료, 양수는 thinking cap이며 요청 값이 우선합니다. |
엔드포인트 토글¶
| 플래그 | 기본값 | 설명 |
|---|---|---|
--slots / --no-slots | 활성화 | 슬롯별 상태를 표시하는 /slots 엔드포인트를 활성화 또는 비활성화합니다. |
--props | 비활성화 | 서버 속성을 반환하는 /props 엔드포인트를 활성화합니다. |
--metrics | 비활성화 | Prometheus 호환 메트릭을 위한 /metrics 엔드포인트를 활성화합니다. |
--warmup / --no-warmup | 활성화 | 모델 로드 후 Metal 컴파일 초기화를 위한 1토큰 워밍업 패스를 실행합니다. |
--settings | 비활성화 | 인증이 필요한 GET/PATCH /v1/settings 엔드포인트를 활성화합니다. |
--slot-save-path <PATH> | 비활성화 | POST /slots/:id_slot으로 슬롯 KV 캐시를 저장하고 복원할 디렉터리입니다. |
--sleep-idle-seconds <SECS> | -1 | 지정한 초만큼 유휴 상태가 이어지면 잠들어 모델을 해제하고 다음 요청이 깨웁니다. -1이면 잠들지 않습니다. |
모델 해석과 저장소¶
| 플래그 | 환경 변수 | 기본값 | 설명 |
|---|---|---|---|
--hf-repo <OWNER/NAME> | - | - | 서빙할 HuggingFace 리포지터리를 llama-server 표기로 지정합니다. -m에 같은 값을 준 것과 똑같이 해석해 ./models/, HuggingFace 캐시, mlxcel store에서 재사용하고 없으면 mlxcel store로 내려받습니다. 둘 다 주면 llama-server와 동일하게 -m보다 우선합니다. |
--hf-token <TOKEN> | HF_TOKEN, HUGGING_FACE_HUB_TOKEN | - | 리포지터리를 내려받을 때 쓰는 액세스 토큰이며 두 환경 변수보다 우선합니다. 값은 --help에 표시되지도, 로그에 남지도, 디스크에 기록되지도 않습니다. |
--model-store-root <PATH> | MLXCEL_MODELS_DIR | - | 스냅샷을 직접 담는 디렉터리를 지정하므로 repo-id는 중간 models/ 단계 없이 <PATH>/<owner>/<name>으로 해석·다운로드됩니다. 환경 변수보다 우선하며 모델 인자가 이미 로컬 경로이면 효과가 없습니다. |
--offline | LLAMA_ARG_OFFLINE | 꺼짐 | 로컬 캐시에서만 모델을 찾고 절대 내려받지 않습니다. ./models/·HuggingFace 캐시·mlxcel store 어디에도 없는 리포지터리 식별자는 다운로드 대신 오류가 됩니다. |
--hf-file, --model-url, --docker-repo는 llama-server CLI 호환을 위해 파싱하지만 시작 시 거부합니다. --hf-file은 리포지터리 안의 GGUF 파일 하나를 고르는데 MLX는 SafeTensors 스냅샷 전체를 로드합니다. --model-url은 URL로 해석하는데 mlxcel은 리포지터리 식별자로 해석합니다. Docker Hub 모델 리포지터리는 GGUF 아티팩트를 배포합니다.
라우터 모드¶
서버가 모델을 둘 이상 호스팅할 때 적용되는 플래그입니다.
| 플래그 | 기본값 | 설명 |
|---|---|---|
--models-max <N> | 4 | 동시에 메모리에 올릴 모델의 최대 개수입니다. 0이면 제한이 없습니다. |
--models-preset <PATH> | 비활성화 | 라우터가 서빙할 모델 프리셋을 기술한 INI 파일입니다. |
--models-autoload / --no-models-autoload | 활성화 | 명시적 로드를 요구하지 않고 첫 요청에서 모델을 로드합니다. |
--tags <LIST> | - | 쉼표로 구분한 모델 태그입니다. 정보 표시용이며 라우팅에는 쓰이지 않습니다. |
WebUI¶
| 플래그 | 환경 변수 | 기본값 | 설명 |
|---|---|---|---|
--webui, --ui | LLAMA_ARG_UI | 꺼짐 | 번들 관리용 WebUI를 {api_prefix}/webui/에서 제공합니다. 모델 인자가 없으면 서버는 autoload를 끈 라우터 모드로 모델 없이 시작합니다. 기본으로 켜져 있는 webui Cargo feature로 빌드한 바이너리가 필요합니다. 이 플래그는 --help에 나타나지 않습니다. |
--no-webui, --no-ui | LLAMA_ARG_UI=0 | - | WebUI를 명시적으로 끕니다. |
보안 규칙과 화면 구성은 WebUI를 참조하십시오. llama-server 자체 브라우저 UI를 설정하는 옵션(--ui-config, --ui-config-file, --path, --tools, --tools-runtime, --mcp-servers-config, --mcp-servers-json, --ui-mcp-proxy, --agent)은 시작 시 거부합니다.
LoRA 어댑터 (serve)¶
| 플래그 | 기본값 | 설명 |
|---|---|---|
--lora-scaled <FNAME:SCALE,...> | - | 쉼표로 구분한 경로:스케일 쌍으로 어댑터별 스케일을 지정해 LoRA를 로드합니다. |
--lora-fuse | 꺼짐 | 로드 시점에 LoRA 어댑터를 기본 가중치에 융합합니다. mlxcel 고유 기능이며 디코드 비용이 없는 대신, 이후 런타임 스케일 변경과 요청별 어댑터 선택은 거부됩니다. |
--lora-init-without-apply | 꺼짐 | 어댑터를 적용하지 않고 로드만 해 두었다가 나중에 POST /lora-adapters로 적용합니다. |
구조적 출력 기본값¶
요청이 자체 제약을 담지 않았을 때 적용되는 서버 전역 제약입니다. 요청이 자체 grammar나 스키마를 지정하면 그쪽이 우선합니다.
| 플래그 | 기본값 | 설명 |
|---|---|---|
--grammar <TEXT> | - | 모든 생성을 제약하는 BNF 유사 grammar입니다. |
--grammar-file <PATH> | - | 파일에서 grammar를 읽습니다. |
--json-schema <JSON> | - | 모든 생성을 제약하는 JSON Schema입니다. 예를 들어 {}는 임의의 JSON 객체를 뜻합니다. 외부 $ref를 담은 스키마는 grammar로 변환해 --grammar로 넘기십시오. |
--json-schema-file <PATH> | - | 파일에서 JSON Schema를 읽습니다. |
Responses API 저장소¶
이 플래그들은 OpenAI Responses API의 응답/대화 저장소 크기와 TTL을 제어합니다. 자세한 내용은 REST API를 참조하십시오.
| 플래그 | 환경 변수 | 기본값 | 설명 |
|---|---|---|---|
--responses-store-max-entries <N> | LLAMA_ARG_RESPONSES_STORE_MAX_ENTRIES | 1024 | 저장할 응답 엔트리 최대 수. 0이면 응답 저장 기능을 비활성화합니다. |
--responses-store-ttl-secs <SECS> | LLAMA_ARG_RESPONSES_STORE_TTL_SECS | 3600 | 저장된 응답의 TTL. |
--conversation-store-max-entries <N> | LLAMA_ARG_CONVERSATION_STORE_MAX_ENTRIES | 256 | 저장할 conversation 엔트리 최대 수. |
--conversation-store-ttl-secs <SECS> | LLAMA_ARG_CONVERSATION_STORE_TTL_SECS | 3600 | 저장된 conversation의 TTL. |
프롬프트 캐시 및 APC¶
프롬프트 프리픽스 KV 캐시는 기본적으로 활성화되어 있습니다. 아래 플래그들은 캐시 용량과 기본 활성화된 APC 블록 해시 계층을 조정합니다. 동작, 지표, 문제 해결은 프롬프트 캐시를 참조하십시오.
| 플래그 | 환경 변수 | 기본값 | 설명 |
|---|---|---|---|
--prompt-cache-enabled[=BOOL] | MLXCEL_PROMPT_CACHE_ENABLED, 폴백 LLAMA_ARG_CACHE_REUSE | true | 요청 간 프롬프트 프리픽스 KV 재사용을 활성화 또는 비활성화합니다. |
--no-prompt-cache | - | false | --prompt-cache-enabled=false의 명시적 축약형. Cache 환경 변수보다 우선합니다. |
--prompt-cache-capacity-bytes <BYTES> | MLXCEL_PROMPT_CACHE_CAPACITY_BYTES | 2147483648 | 전체 프롬프트 캐시 바이트 예산. |
--prompt-cache-max-entries <N> | MLXCEL_PROMPT_CACHE_MAX_ENTRIES | 1024 | 실시간 프롬프트 캐시 항목 최대 수. |
--prompt-cache-ttl <SECONDS> | MLXCEL_PROMPT_CACHE_TTL | 3600 | 마지막 성공 조회 이후 TTL. |
--prompt-cache-min-prefix <N> | MLXCEL_PROMPT_CACHE_MIN_PREFIX | 32 | 캐싱 대상이 되는 최소 토큰 프리픽스 길이. |
--prompt-cache-snapshot-capacity-bytes <BYTES> | MLXCEL_PROMPT_CACHE_SNAPSHOT_CAPACITY_BYTES | 536870912 | Recurrent·linear-attention 모델군의 exact-prefix snapshot 예산. |
--prompt-cache-snapshot-max-entries <N> | MLXCEL_PROMPT_CACHE_SNAPSHOT_MAX_ENTRIES | 4096 | 최대 live snapshot 수. |
--prompt-cache-snapshot-ttl <SECONDS> | MLXCEL_PROMPT_CACHE_SNAPSHOT_TTL | 7200 | Snapshot TTL. |
--apc-enabled[=BOOL] | APC_ENABLED | true | 프롬프트 캐시 위에 APC 블록 단위 해시 체인을 활성화합니다. 하이브리드 SSM/attention 모델에서는 자동으로 비활성화됩니다. |
--apc-block-size <N> | APC_BLOCK_SIZE | 16 | APC 블록당 토큰 수. |
--apc-num-blocks <N> | APC_NUM_BLOCKS | 파생값 | 추적할 APC 블록 항목 최대 수. |
--apc-hash <sha256\|blake3> | APC_HASH | sha256 | 블록 해시 알고리즘. SHA-256은 기본 와이어 호환 모드이고 BLAKE3는 더 빠르지만 와이어 호환은 아닙니다. |
--enable-vlm-prefix-cache | MLXCEL_ENABLE_VLM_PREFIX_CACHE | false | 실험적 기능. 멀티모달 채팅 요청이 KV 프리픽스를 adopt/donate할 수 있게 하여, 같은 이미지를 이어가는 멀티턴 대화가 공유 프리필을 생략합니다. 텍스트 전용 동작은 변하지 않습니다. |
기본 샘플링 파라미터¶
이 플래그들은 요청이 자체 샘플링 파라미터를 지정하지 않을 때 사용되는 서버 전체 기본값을 설정합니다. 개별 요청은 이 모든 값을 재정의할 수 있습니다.
| 플래그 | 환경 변수 | 기본값 |
|---|---|---|
--temp <FLOAT> | - | 0.8 |
--top-k <K> | LLAMA_ARG_TOP_K | 40 |
--top-p <FLOAT> | - | 0.9 |
--min-p <FLOAT> | - | 0.1 |
-s, --seed <N> | - | -1 (무작위) |
--repeat-last-n <N> | - | 64 |
--repeat-penalty <FLOAT> | - | 1.0 |
--presence-penalty <FLOAT> | - | 0.0 |
--frequency-penalty <FLOAT> | - | 0.0 |
--dry-multiplier <FLOAT> | - | 0.0 |
--dry-base <FLOAT> | - | 1.75 |
--dry-allowed-length <N> | - | 2 |
--dry-penalty-last-n <N> | - | 64 (0이면 DRY 비활성화, 음수는 거절) |
--dry-sequence-breaker <LIST> | - | - |
--dry-sequence-breakers <LIST> | - | 단수 표기의 visible alias |
--typical <FLOAT> | - | 1.0 (disabled) |
--top-nsigma <FLOAT> | - | -1.0 (disabled) |
--xtc-probability <FLOAT> | - | 0.0 (disabled) |
--xtc-threshold <FLOAT> | - | 0.1 |
--dynatemp-range <FLOAT> | - | 0.0 (disabled) |
--dynatemp-exp <FLOAT> | - | 1.0 |
--mirostat <N> | - | 0 (disabled) |
--mirostat-lr <FLOAT> | - | 0.1 |
--mirostat-ent <FLOAT> | - | 5.0 |
--adaptive-target <FLOAT> | - | -1.0 (disabled) |
--adaptive-decay <FLOAT> | - | 0.9 |
--ignore-eos | - | off |
--logit-bias <TOKEN(+/-)BIAS> | - | - |
--reverse-prompt <STRING> | - | - |
--samplers <LIST> | - | - |
--sampler-seq <CHARS> | - | - |
--adaptive-target와 --adaptive-decay는 adaptive-p를 제어하며 b10621과 동일하게 샘플러 목록에 adaptive_p가 있을 때만 동작합니다. --ignore-eos는 생성 종료 토큰을 억제해 토큰 예산이나 stop 문자열까지 생성을 이어 갑니다. --logit-bias는 모든 요청에서 특정 토큰 id에 바이어스를 주며(TOKEN_ID(+/-)BIAS, 예: 15043+1) 반복 지정할 수 있습니다. --reverse-prompt는 서버 전역 stop 문자열을 모든 요청의 stop 집합에 병합하며 반복 지정할 수 있습니다. --samplers와 b10621의 단일 문자 형식인 --sampler-seq는 받아들이지만 mlxcel의 체인 순서는 b10621 기본값으로 고정돼 있어 다른 순서는 시작 시 거부됩니다.
분산 추론¶
| 플래그 | 기본값 | 설명 |
|---|---|---|
--distributed-config <PATH> | - | TOML 클러스터 설정 파일 경로. |
--node-role <ROLE> | - | 이 노드의 역할: prefill, decode, router, pipeline_stage, tensor_parallel_rank, pipeline_tensor_parallel, 또는 hybrid. router는 모델을 로드하지 않는 분리형 서빙 HTTP 프런트를 시작하고 pipeline_tensor_parallel은 2D (pp_stage, tp_rank) 메시 역할입니다. |
--node-id <ID> | - | 클러스터 내 이 노드의 고유 식별자. |
--peers <ADDR,...> | - | 정적 검색을 위한 쉼표로 구분된 피어 주소 목록. |
--serving-bind <ADDR> | - | 분리형 서빙 역할 transport에서 이 노드 자신이 바인드할 주소. prefill과 decode 역할에 필수이며 라우터도 result frame 수신을 위해 여기에 바인드합니다. 분리형 추론을 참조하십시오. |
--prefill-peers <ADDR,...> | - | 라우터가 토큰화된 요청을 전달할 prefill 노드의 서빙 주소 목록. |
--decode-peers <ADDR,...> | - | prefill 노드가 KV 캐시를 넘길 decode 노드의 서빙 주소 목록. 라우터도 result demultiplex를 위해 등록합니다. |
--pp-layers <RANGES> | - | 수동 파이프라인 병렬 레이어 파티션, 예: 0-15,16-31. 생략 시 자동 파티셔너가 바이트 기반으로 레이어를 분할하며 MoE expert와 Gemma 4 KV-shared pair의 인접 제약도 고려하므로 이종 메모리 클러스터에서도 수동 --pp-layers 지정은 거의 필요하지 않습니다. |
--pp-micro-batch-size <N> | 1 | 파이프라인 병렬성을 위한 마이크로 배치 크기. |
--pp-auto <N> | - | (coordinator) 원하는 파이프라인 단계 수를 선언합니다. coordinator가 --cluster-peers 또는 --cluster-discovery=mdns로 피어를 발견하고 파티션을 계획하고 클러스터 TOML을 생성한 뒤 서빙을 시작합니다. --distributed-config, --pp-layers와 상호 배타적입니다. Zero-Config Startup을 참조하십시오. |
--pp-peer | - | 제로 구성 파이프라인 스테이지. 프로세스가 --cluster-control-addr에서 --pp-auto coordinator의 스테이지 할당을 기다리고, coordinator가 같은 클러스터 시크릿, 클러스터 이름, 모델, mlxcel 버전을 갖고 있는지 확인한 뒤 할당된 스테이지를 서빙합니다. --distributed-config와 --node-id는 필요 없습니다. |
--cluster-discovery <static\|mdns> | static | 피어 발견 방식. static은 --cluster-peers를 그대로 사용하고 mdns는 UDP 브로드캐스트로 LAN 피어 announcement를 받습니다. |
--cluster-discovery-port <PORT> | 49555 | --cluster-discovery=mdns에서 사용할 UDP beacon port. |
--cluster-name <NAME> | mlxcel-cluster | 생성된 TOML과 mDNS 비콘에 들어가는 클러스터 이름. |
--cluster-peers <ADDR[,ADDR...]> | - | --pp-auto가 사용할 정적 시드 피어(host:port). |
--cluster-control-addr <host:port> | 127.0.0.1:19000 | coordinator 컨트롤 플레인 주소. HTTP 포트와 분리되어 있어 두 서비스가 같은 포트를 공유하지 않아도 됩니다. |
--cluster-config-out <PATH> | ./.mlxcel/cluster.toml | 생성된 클러스터 TOML의 출력 경로. |
--dry-run | - | 클러스터 토폴로지를 계획해 요약을 출력하고 TOML을 생성한 뒤 종료합니다. 포트·피어 수·버전 충돌이 있으면 0이 아닌 종료 코드로 끝납니다. |
--enable-elastic-pp | false | 실험적 elastic 파이프라인 병렬 repartitioning을 활성화합니다. 진행 중인 요청을 배출(drain)한 뒤 파티션 계획을 재계산하고 전체 클러스터 재시작 없이 서빙을 재개합니다. Elastic repartitioning을 참조하십시오. |
--elastic-pp-drain-timeout <SECS> | 120 | 리밸런스를 강제하기 전까지 기다릴 최대 drain 시간(초). |
--elastic-pp-pressure-fraction <FLOAT> | 0.92 | repartition 트리거 임계값. KV 용량 대비 비율로 표현합니다. |
--elastic-pp-cool-down <SECS> | 30 | 두 repartition 이벤트 사이의 최소 간격(초). |
--metrics-port <PORT> | - | PP 전용 시리즈(단계별 utilization, bubble ratio, activation transfer 지연 히스토그램, KV admission rejection, elastic repartition 이벤트)가 포함된 /metrics 엔드포인트를 활성화합니다. 현재 메인 HTTP 포트에 다중화되며 다른 포트를 지정하면 경고를 출력합니다. |
--debug-pp-trace <PATH> | - | 스케줄러 동작의 chrome-tracing JSON 트레이스를 PATH에 기록합니다. 종료 시 flush됩니다. |
--tp-size <N> | 1 | 텐서 병렬 랭크 수(2의 거듭제곱이어야 함). |
--tp-moe-mode <MODE> | expert_parallel | MoE 전문가 샤딩: expert_parallel 또는 within_expert. |
--tp-embedding-mode <MODE> | replicated | 임베딩 샤딩: vocab_parallel 또는 replicated(현재 런타임은 replicated만 지원). |
--tp-lm-head-mode <MODE> | replicated | LM 헤드 샤딩: vocab_parallel 또는 replicated(현재 런타임은 replicated만 지원). |
현재 tp_size > 1 런타임 참고:
- 지원 계열: dense Llama, dense Qwen2/2.5, dense Qwen3, dense Qwen3.5 text, Gemma 3 text, Gemma 4 text, ERNIE 4.5, Hunyuan v1 Dense
- 현재 런타임은 한 머신 내 in-process multi-rank 방식입니다
- LoRA adapter는 TP와 함께 지원하지 않습니다
mlxcel serve는 현재 지원되는 dense TP 런타임에서 continuous batching을 유지하지만 Gemma 4 E2B 계열 보수적 폴백 체크포인트는 예외입니다mlxcel serve는 decode storage 기본값으로auto를 사용합니다. Llama, Qwen 3, Qwen 3.5 text, Gemma 3 text, Llama 4 워커는 paged decode를 자동 선택합니다. ExaOne4, Ministral3, Gemma 4, Qwen3 Next, GPT-OSS, 그리고 모델별 paged decode dispatch가 없는 표준 외부-KV 계열은 연속 배칭의 paged-default 체크리스트를 충족할 때까지 dense decode를 유지합니다
예시:
mlxcel generate \
--model ./models/ernie-4.5-0.3b-4bit \
--prompt "TP에 대해 짧게 한 문장 써 주세요." \
--tp-size 2
원격 TCP 파이프라인 병렬 예시:
CLUSTER_NAME=studio-pp \
TRANSPORT_BACKEND=tcp \
COORDINATOR_CONTROL_ADDR=192.168.1.22:19000 \
STAGE0_ADDR=192.168.1.22:19001 \
STAGE1_ADDR=192.168.1.24:19001 \
scripts/benchmark_pipeline_remote_rollout.sh write-config \
examples/distributed/generated_pipeline_remote_2node_tcp.toml
# Machine B
mlxcel serve \
--model ./models/llama-3.2-1b-4bit \
--distributed-config examples/distributed/generated_pipeline_remote_2node_tcp.toml \
--node-id stage-1 \
--host 0.0.0.0 \
--port 18081 \
--no-warmup
# Machine A
mlxcel serve \
--model ./models/llama-3.2-1b-4bit \
--distributed-config examples/distributed/generated_pipeline_remote_2node_tcp.toml \
--node-id stage-0 \
--host 0.0.0.0 \
--port 18081 \
--no-warmup
# Machine A coordinator
mlxcel serve \
--model ./models/llama-3.2-1b-4bit \
--alias llama-remote-pp \
--distributed-config examples/distributed/generated_pipeline_remote_2node_tcp.toml \
--node-id coordinator \
--host 0.0.0.0 \
--port 18080 \
--n-parallel 2 \
--max-batch-size 2 \
--pp-micro-batch-size 2 \
--metrics \
--no-warmup
smoke test:
COORDINATOR_URL=http://192.168.1.22:18080 \
MODEL_ALIAS=llama-remote-pp \
scripts/benchmark_pipeline_remote_rollout.sh smoke
Thunderbolt 모드는 같은 절차를 사용하되 다음만 바꾸면 됩니다.
TRANSPORT_BACKEND=thunderbolt- LAN IP 대신 Thunderbolt Bridge IP 사용
- coordinator/stage 역할과 포트 구성은 동일
예시:
CLUSTER_NAME=studio-pp \
TRANSPORT_BACKEND=thunderbolt \
COORDINATOR_CONTROL_ADDR=169.254.20.10:19000 \
STAGE0_ADDR=169.254.20.10:19001 \
STAGE1_ADDR=169.254.20.11:19001 \
scripts/benchmark_pipeline_remote_rollout.sh write-config \
examples/distributed/generated_pipeline_remote_2node_thunderbolt.toml
로깅¶
| 플래그 | 환경 변수 | 기본값 | 설명 |
|---|---|---|---|
-v, --verbose | - | false | 디버그 수준 로깅을 활성화합니다. |
--log-disable | - | false | 모든 로그 출력을 억제합니다. |
--log-file <PATH> | LLAMA_LOG_FILE | - | stderr 대신 파일에 로그를 기록합니다. |
Serve 예시¶
로컬호스트에서 최소 서버 실행:
서버가 127.0.0.1:8080에서 시작됩니다. curl로 테스트할 수 있습니다:
채팅 완성 요청:
curl -s http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen2.5-7B-Instruct",
"messages": [
{"role": "user", "content": "What is 2 + 2?"}
],
"max_tokens": 50
}'
인증 및 공개 바인딩을 사용하는 서버:
mlxcel serve \
--model ./models/Llama-3.1-8B-Instruct \
--host 0.0.0.0 \
--port 8080 \
--api-key "my-secret-key"
인증된 요청:
curl -s http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer my-secret-key" \
-H "Content-Type: application/json" \
-d '{"model":"Llama-3.1-8B-Instruct","messages":[{"role":"user","content":"Hello"}]}'
배칭 및 메트릭을 사용한 고동시성 서버:
mlxcel serve \
--model ./models/Qwen2.5-7B-Instruct \
--max-batch-size 8 \
--prefill-chunk-size 512 \
--enable-preemption \
--metrics
--prefill-chunk-size를 명시하면 두 스케줄러 상태 모두 그 값으로 고정됩니다. 적응형 기본값(디코딩 중인 시퀀스가 없으면 2048, 있으면 512)을 쓰려면 생략하십시오.
DFlash speculative decoding을 사용하는 서버:
mlxcel serve \
--model ./models/qwen3.5-27b-4bit \
--draft-model ./models/Qwen3.5-27B-DFlash \
--draft-kind dflash \
--draft-block-size 16
Standalone server binary에서는 --model-draft가 primary spelling이며 --draft-model도 허용됩니다.
mlxcel-server \
--model ./models/qwen3.5-27b-4bit \
--model-draft ./models/Qwen3.5-27B-DFlash \
--draft-kind dflash \
--draft-block-size 16
Unix 소켓 모드(로컬 IPC용):
환경 변수 사용(배포 패턴):
export LLAMA_ARG_MODEL=./models/Qwen2.5-7B-Instruct
export LLAMA_API_KEY=my-secret-key
export LLAMA_ARG_PORT=9000
mlxcel serve
mlxcel list¶
로컬 mlxcel store에 다운로드된 모델을 한 줄에 하나씩, repo-id와 디스크 사용량, 마지막 수정 시각과 함께 보여줍니다. 모델 로딩은 일어나지 않습니다. 지원하는 모델 아키텍처 목록을 보려면 mlxcel arch를 쓰면 됩니다.
| 플래그 | 기본값 | 설명 |
|---|---|---|
--models-dir <PATH> | MLXCEL_MODELS_DIR / 캐시 루트 | 기본 위치 대신 나열할 model-store 루트로, <PATH>/<owner>/<name> 바로 아래의 스냅샷을 나열합니다. |
--json | false | {repo_id, size_bytes, path, modified} JSON 배열을 출력하며(modified는 Unix epoch 초 또는 null), 테이블과 헤더, 스타일을 끕니다. --quiet / --verbose와 함께 쓸 수 없습니다. |
-q, --quiet | false | repo-id만 한 줄에 하나씩 출력해서 파이프로 넘기기 좋습니다(예: mlxcel list -q \| xargs -n1 mlxcel rm). --json / --verbose와 함께 쓸 수 없습니다. |
-v, --verbose | false | 기본 테이블에 절대 경로 열을 다시 붙입니다. --json / --quiet와 함께 쓸 수 없습니다. |
--sort <SORT> | name | 정렬 순서로, name(repo-id, 기본값), size(디스크 용량 큰 순), modified(최근 수정 순, mtime을 모르면 맨 뒤) 중 하나입니다. 테이블과 --json 모두에 적용됩니다. |
mlxcel list # 기본 테이블, repo-id 순 정렬
mlxcel list --sort size # 용량 큰 모델부터
mlxcel list -q # repo-id만, 파이프용
mlxcel list --json # 기계가 읽기 좋은 형식
mlxcel list --models-dir /data/mlxcel-models
mlxcel arch¶
지원하는 모든 모델 아키텍처를 카테고리별로 그룹화하여 출력한 후 종료합니다. --json을 주면 recipe 및 coverage tooling이 읽을 수 있는 동일 registry를 machine-readable JSON object 하나로 출력합니다. 모델 로딩은 발생하지 않습니다.
출력 예시(축약):
Supported Model Architectures:
Llama:
- Llama 1/2/3
- Llama 4 (MoE)
Speech-to-text:
- Whisper (encoder-decoder ASR)
Text-to-speech:
- Kokoro (StyleTTS2 + iSTFTNet)
Embedding:
- BERT / MiniLM encoder
- Qwen3-VL-Embedding
Reranker:
- SequenceClassifier
Other VLM:
- Falcon-OCR (early fusion)
- Florence-2 (DaViT + BART seq2seq, task prompts)
...
JSON 형식은 mlxcel_version과 지원하는 각 아키텍처마다 하나씩의 families entry를 담으며, 안정적인 id, display_name, category, model_types, aliases, runtimes, modalities_in, output, backends(Metal, CUDA, ROCm 상태. 백엔드가 실험 단계인 동안 모든 계열의 ROCm 항목은 partial), tensor_parallel, pipeline_parallel, drafters, kv_modes field를 제공합니다. 커밋된 recipes/registry/CURRENT marker는 해당 snapshot 파일을 recipes/registry/ 아래에서 가리킵니다.
정확한 목록은 실행 중인 바이너리의 ALL_MODEL_TYPES에서 생성됩니다. 배포 환경을 확인할 때 복사된 목록 대신 mlxcel arch를 사용하십시오. Architecture key와 capability는 지원 모델을 참조하십시오.
모델 감지는 자동입니다. 생성, 임베딩, 재순위화 로더가 model_type과 아키텍처·체크포인트 배치 메타데이터를 함께 사용하므로 아키텍처를 수동으로 지정하는 옵션은 필요하지 않습니다.
mlxcel download¶
Python 의존성 없이 HuggingFace 저장소 스냅샷을 다운로드합니다. 기본적으로 스냅샷은 ${MLXCEL_CACHE_DIR:-$HOME/.cache/mlxcel}/models/<owner>/<name> 전역 mlxcel store에 저장되며 가능한 경우 기존 HuggingFace 캐시 사본을 재사용합니다. 독립 실행형 mlxcel-server 바이너리도 서버 실행 파일만 포함한 배포 이미지에서 사용할 수 있도록 같은 download 하위 명령어를 제공하며, mlxcel-server download --help(-h, --usage도 동일)로 도움말을 볼 수 있습니다.
| 플래그 | 기본값 | 설명 |
|---|---|---|
<REPO_ID> | 필수 | HuggingFace 저장소 ID. 예: mlx-community/Qwen3-4B-4bit. |
--local-dir <PATH> | - | 명시적 대상 디렉터리. 전역 store를 우회하고 스냅샷을 정확히 PATH에 씁니다. |
--models-dir <PATH> | MLXCEL_MODELS_DIR / cache root | <owner>/<name>이 생성될 model-store 루트. --local-dir가 있으면 무시됩니다. |
--revision <REV> | main | 다운로드할 브랜치, 태그, 또는 커밋 해시. |
--token <TOKEN> | HF_TOKEN, 그다음 HUGGING_FACE_HUB_TOKEN, 없으면 anonymous | gated 또는 private 저장소 접근 토큰. |
--force | false | 동일한 로컬 파일이 있어도 다시 다운로드합니다. |
예시:
# 기본값: 전역 store.
mlxcel download mlx-community/Qwen3-4B-4bit
# store 대신 정확한 디렉터리에 씁니다.
mlxcel download mlx-community/Qwen3-4B-4bit --local-dir /tmp/qwen
# 이 명령에 사용할 store root를 재배치합니다.
mlxcel download mlx-community/Qwen3-4B-4bit --models-dir /data/mlxcel-models
# gated/private 저장소.
mlxcel download meta-llama/Llama-3.1-8B-Instruct --token "$HF_TOKEN"
mlxcel rm¶
mlxcel store에서 다운로드된 모델 스냅샷을 제거합니다. 관리 대상 store root 아래의 스냅샷만 삭제합니다. 읽기 전용 HuggingFace 캐시에만 존재하는 모델은 보고만 하고 삭제하지 않습니다.
| 플래그 / 인자 | 기본값 | 설명 |
|---|---|---|
<REPO_ID> | 필수 | 제거할 HuggingFace repository id. 예: mlx-community/Qwen3-4B-4bit. |
--models-dir <PATH> | MLXCEL_MODELS_DIR / cache root | 제거할 store root. 삭제 경로는 <PATH>/<owner>/<name>입니다. |
-y, --yes | false | 대화형 확인 프롬프트를 건너뜁니다. |
--revision <REV> | main | mlxcel-store 사본이 없을 때 HuggingFace 캐시 스냅샷을 찾아 보고하는 데만 사용됩니다. |
예시:
mlxcel rm mlx-community/Qwen3-4B-4bit
mlxcel rm mlx-community/Qwen3-4B-4bit --yes
mlxcel rm mlx-community/Qwen3-4B-4bit --models-dir /data/mlxcel-models
mlxcel tune¶
지원하는 kernel launch configuration을 profile하고 가장 빠르면서 안정적인 선택을 ${MLXCEL_CACHE_DIR:-$HOME/.cache/mlxcel}/autotune에 기록합니다. MLXCEL_AUTOTUNE=cache 또는 MLXCEL_AUTOTUNE=1을 설정하기 전에는 추론에 영향을 주지 않습니다. 성능 튜닝을 참조하십시오.
| 플래그 | 기본값 | 설명 |
|---|---|---|
--op <OP> | 지원 항목 전체 | 반복 가능한 operation 선택: paged-decode-splits, qmm-tile, qmv-multirow. 뒤의 두 항목은 CUDA 전용이며 아직 검증되지 않았습니다. |
--dry-run | false | Profile하거나 결과를 쓰지 않고 후보 행렬을 출력합니다. |
-m, --model <PATH> | - | config.json에서 head_dim, query head, KV head를 읽습니다. 가중치는 로드하지 않습니다. |
--head-dim <N> | 128 | Paged decode의 head당 dimension. |
--q-heads <N> | 32 | Query-head 수. |
--kv-heads <N> | 8 | KV-head 수. |
--block-size <N> | 32 | Paged KV block size. |
--batch-sizes <LIST> | 1,2,4,8 | 쉼표로 구분한 batch size. |
--context-lengths <LIST> | 1024,4096,16384 | 쉼표로 구분한 visible context length. |
--warmup <N>, --warmup-ms <MS> | 3, 40 | 최소 warmup 반복과 wall-clock 예산. |
--reps <N>, --max-reps <N> | 5, 1000 | 최소·최대 adaptive timed repetition. |
--sample-ms <MS> | 250 | 후보별 sampling 예산. |
--min-improvement <FLOAT> | 0.02 | 최소 relative win. 측정한 median spread가 effective threshold를 높일 수 있습니다. |
--qmm-tile-cap <N> | 128 | CUDA qmm CTA tile_m 상한. |
mlxcel tune --dry-run
mlxcel tune --op paged-decode-splits -m ./models/qwen3-4b-4bit
MLXCEL_AUTOTUNE=cache mlxcel serve -m ./models/qwen3-4b-4bit
mlxcel split-mtp¶
원본 zai-org/GLM-4.7-Flash 체크포인트에서 GLM-4.7-Flash의 next-token-prediction 계층을 꺼내 독립 glm4_moe_lite_mtp 초안 모델 디렉터리로 씁니다. 커뮤니티 4비트 변환본은 model.layers.47.* 텐서를 버리므로 원본 체크포인트를 입력으로 써야 하며, 도구는 safetensors 인덱스가 이 계층을 담았다고 밝힌 shard만 읽습니다. 결과 디렉터리는 mlxcel generate --draft-model 또는 mlxcel-server --model-draft로 형상이 같은 모든 glm4_moe_lite 대상 모델과 짝을 이룹니다. 이 명령에는 기본으로 켜져 있는 surgery Cargo feature가 필요합니다.
| 플래그 | 기본값 | 설명 |
|---|---|---|
-m, --model <PATH> | - | 원본 GLM-4.7-Flash 체크포인트 디렉터리(config.json, shard, 인덱스). 인덱스에 next-token-prediction 계층이 없는 체크포인트는 거부합니다. |
-o, --output <PATH> | - | 출력 초안 모델 디렉터리이며 없으면 만듭니다. 원본 디렉터리를 가리키면 거부합니다. |
--block-size <N> | num_nextn_predict_layers + 1 (2) | 초안 모델 설정에 기록할 검증 블록 크기(보너스 토큰 포함). 초안 모델을 로드할 때 기본 검증 폭이 됩니다. 최대 16입니다. |
--q-bits <BITS> | bf16 | 양자화할 수 있는 모든 사영을 2, 3, 4, 5, 6, 8비트로 affine 양자화합니다. 라우터, 정규화, 선택 편향은 양자화하지 않습니다. |
--q-group-size <N> | 64 | 양자화 그룹 크기: 32, 64, 128. --q-bits와 함께 쓸 때만 읽습니다. |
--force | false | 이미 체크포인트가 있는 출력 디렉터리를 덮어씁니다. 초안 모델 자신의 model.safetensors 외에 다른 *.safetensors 파일이 있으면 로더가 그 파일을 초안 모델 일부로 읽게 되므로 여전히 거부하며 파일 이름을 알려 줍니다. |
비트 수, 그룹 크기, 출력 경로는 출력 디렉터리를 건드리기 전에 검증합니다.
mlxcel split-mtp -m models/glm-4.7-flash-bf16 -o models/glm-4.7-flash-mtp-4bit --q-bits 4
mlxcel generate -m models/glm-4.7-flash-4bit --draft-model models/glm-4.7-flash-mtp-4bit -p "Hi"
mlxcel prepare-external-ple¶
PLE n-gram 테이블을 MLX 파라미터에 들고 있지 않고 text_config.ple_storage를 통해 디스크에서 읽는 qwen4_exp 모델 뷰를 만듭니다. 그러면 로드 메모리에서 약 30 GiB가 빠집니다. Python이 필요 없고 mlx-vlm v2 형식으로 매니페스트를 씁니다. 샤드를 하드 링크하므로 출력 디렉터리는 원본과 같은 파일시스템에 있어야 하고, 원본 밖으로 나가는 이름은 거부합니다.
| 플래그 | 기본값 | 설명 |
|---|---|---|
-m, --model <PATH> | - | n-gram 테이블이 SafeTensors 샤드에 들어 있는 원본 체크포인트. |
-o, --output <PATH> | - | 출력 디렉터리. 없으면 만들고 비어 있어야 합니다. |
--layout <LAYOUT> | interleaved | interleaved는 행마다 레코드 하나인 ple-q4.rows 파일을 쓰며 320M 행 테이블에서 약 32 GB입니다. ranges는 원본 샤드를 가리키는 매니페스트만 씁니다. |
--cache-rows <N> | 0 | 매니페스트에 기록할 행 캐시 힌트입니다. 0이면 MLXCEL_PLE_CACHE_BYTES 예산을 씁니다. |
명령은 대상 경로, 행 수, 테이블 크기, 링크한 샤드 수를 출력합니다. OptiQ 2비트 체크포인트에서 이 뷰를 로드하면 상주 메모리는 45.39 GB입니다. 자세한 내용은 외부 가중치 저장소를 참조하십시오.
mlxcel prepare-expert-stream¶
SSD expert 스트리밍이 파일이 있을 때 자동으로 쓰는 연속 expert 파일을 만들고, 체크포인트와 대조해 검증한 뒤 결과를 보고합니다. 파일은 모델 디렉터리 안에 생성됩니다. 체크포인트는 qwen4_exp여야 합니다. 스트리밍 자체는 실행 시 MLXCEL_EXPERT_STREAM(기본값 auto)이 고르고 MLXCEL_EXPERT_ARENA_BYTES가 크기를 정합니다. 외부 가중치 저장소를 참조하십시오.