M4 통합 메모리에서는 배치·컨텍스트·KV가 한 예산입니다. 형태를 고른 뒤 노브를 조여야 데모와 운영이 맞물립니다.

M4급 체크리스트입니다. 연관 글: llama.cpp·Ollama·다중 모델 라우팅·GenAI 관측성·로컬 RAG 쿼터. 운영 전에는 동일 스크립트로 원격 노드를 한 번 더 돌리세요.

선택 시나리오 · 배치 크기와 메모리 대조표 · 검수 절차와 모니터링 지표 · FAQ

리스크. 선행·디코드 피크가 다르고 KV는 길이·레이어에 민감하며 배치는 활성화와 캐시를 동시에 키워 꼬리 지연을 부풀립니다.

선택 시나리오

워크로드 기하부터 고르세요. 대화형은 첫 토큰·꼬리, 오프라인은 처리량, 파인튜닝은 Trainer·PEFT면 HF 우선. 표는 출발점이며 실측으로 확인합니다.

시나리오 MLX-LM Transformers+MPS
추론 배포 MLX 그래프·양자 경로가 스윕에 유리 MPS 배치·dtype·패딩 명시 후 E2E 측정
HF 학습 스택 변환·서빙 병행 Trainer·PEFT 주간 루틴이면 척추 유지
긴 컨텍스트·동시 세션 KV·캐시 재사용 정책 스트레스 프로세스 분리·대화·배치 상한 분리
Ollama·llama.cpp 공존 MLX 가중치 트랙 분리 파이썬 평가 트랙·라우팅은 다중 모델 글

KV는 길이·레이어에 민감하고 선행은 스파이크를 만듭니다. RAG는 검색·임베딩과 경합하니 쿼터 글을 병행하세요.

배치 크기와 메모리 대조표

출발점이며 보장은 아닙니다. 압력 색·스왑·십 분 안정 구간을 게이트로 삼고 24GB급은 여유 8~12GB를 두는 팀이 많습니다.

워크로드 출발 배치·컨텍스트 통합 메모리에서 볼 것
대화형 배치 1·최단 컨텍스트 RSS·압력·스왑·첫 토큰 회귀
오프라인 평가 배치·max_tokens 단계 상향 선행 스파이크·인덱싱과 분리
RAG 합성 청크 토큰 상한·임베딩 배치 분리 리트리버+생성 피크·쿼터 정합

MLX-LM. 경로·프롬프트·온도로 치환. 지원 시 --max-kv-size로 캐시 상한.

python -m mlx_lm.generate --model MODEL --prompt P.txt --max-tokens 512 --temp 0.7 python -m mlx_lm.server --model MODEL --port 8080

Transformers+MPS. 폴백·dtype·패딩·마스크 명시.

export PYTORCH_ENABLE_MPS_FALLBACK=1 # AutoModelForCausalLM.from_pretrained(..., device_map="mps") 후 generate

검수 절차와 모니터링 지표

절차. 리비전·토크나이저 고정→대화·오프라인 분리·p50·p95→요청별 토큰·배치·캐시·오류 로그→피크 메모리·스왑→필드를 GenAI 관측성에 맞춤→전용 호스트에서 2~4시간 재생.

지표. time_to_first_token·tokens_per_sec_decode·kv_cache_bytes·mem_pressure_peak·oom_or_fallback_count로 기준선 대비 회귀만 판단.

  • 통과: 안정 처리량·스왑 없음·SLO·저오류
  • 조사: 디코드 정지·유휴 갭·배치 오설정
  • 실패: 지속 압축·스왑·MPS 폴백 반복·무한 큐

FAQ

둘 다 같은 M4에? 프로세스 분리·상한 명시로 대역 경합을 막으세요.

표와 실측이 왜 다르죠? 선행·디코드 병목이 다르고 KV 재사용이 곡선을 바꿉니다.

다음 단계? 런북에 스크립트·메트릭을 커밋한 뒤 원격 mini M4에서 장시간 재검증 후 트래픽을 붙이세요.

요금·구매··문서.

요약: 시나리오→스택, 배치·KV→통합 메모리, 스크립트·관측→배포 가능성.