실행 프로그램과 확장
최종 업데이트
Laya-MLX: 맥에서 13ms로 선택을 끝내는 결정 모델
글을 생성하지 않고 확률만 계산해요
Laya-MLX는 4억2,100만 파라미터 결정 모델을 MLX1로 실행하는 파이썬 패키지예요. 문장을 생성하지 않고 선택지별 확률을 한 번의 계산으로 내요. 짧은 질문 하나에 13ms가 걸리고, 50개를 묶으면 초당 146.8개를 처리해요.
답을 쓰지 않고 확률만 계산해요
Laya-MLX는 문장을 만들지 않아요. 상태와 질문을 함께 넣고, 정해진 선택지마다 확률을 돌려줘요. 출력 토큰2이 0개인 이유가 여기에 있어요.
구조는 인코더와 결정 헤드로 나뉘어요. 양방향 인코더가 상태와 질문을 함께 읽고, 헤드가 확률을 계산해요. 토큰을 하나씩 이어 붙이는 과정이 없어서 지연이 짧아요.
생성 모델에 선택을 맡기면 답을 문장으로 받아 다시 파싱해야 해요. 형식이 어긋나면 재시도가 붙고, 그만큼 지연이 늘어나요. 확률을 직접 받으면 파싱 단계가 사라져요.
모델은 4억2,100만 파라미터와 3억2,200만 파라미터 두 계열이에요. 같은 맥에서 생성 모델을 돌리는 것에 비해 메모리 사용이 1GB 안쪽이에요.

선택·점수·참거짓 세 가지 질문이에요
선택은 이름 붙은 후보 중 어디에 속하는지 확률로 답해요. 점수는 정해진 등급에 걸릴 확률과 기대 점수를 내고, 참거짓은 명제가 맞을 확률 하나를 돌려줘요.
| 유형 | 돌아오는 값 | 쓰는 곳 |
|---|---|---|
| 선택형 | 후보별 확률 | 분류·라우팅 |
| 점수 | 등급 확률과 기대 점수 | 품질 평가 |
| 참거짓 | P(참) 하나 | 조건 확인 |
글을 쓰거나 여러 단계를 추론하는 일에는 맞지 않아요. 정해진 후보 중에서 고르거나, 정해진 등급에 점수를 매기는 일에 쓰는 도구예요.
설치하고 첫 결정을 받아요
패키지를 설치하고 모델을 불러온 뒤, 상태와 질문을 넘기면 돼요. 아래 예시는 문의 문장을 부서 셋 중 하나로 나누는 코드예요.
pip install laya-mlx처음 불러올 때 체크포인트3를 내려받고, 그 다음부터는 로컬에서만 실행돼요. 파이썬 3.11 이상과 macOS 14 이상이 필요해요.
import laya_mlx as laya
agent = laya.load("aac6fef/laya-mlx")
result = agent.predict(
"I was billed twice. Please refund the duplicate.",
{"department": {
"type": "choice",
"instructions": "Who should handle this?",
"criteria": ["billing", "technical", "sales"],
}},
)
print(result["answers"]["department"])체크포인트 세 개 중에서 골라요
영어 입력만 다루면 421M 모델로 충분하고, 여러 언어가 섞이면 다국어 체크포인트가 빨라요. 문맥 한도가 각각 달라서 긴 지시문을 넣을 때는 이 값을 먼저 확인해야 해요.
좌우로 밀어 표 전체를 비교하세요.
| 체크포인트 | 파라미터 | 문맥 한도 | 쓰는 목적 |
|---|---|---|---|
| Laya | 4억 2,100만 | 512토큰 | 영어 입력 |
| 다국어 | 3억 2,200만 | 1,024토큰 | 여러 언어 입력 |
| 타입 결정 | 4억 2,100만 | 1,024토큰 | 원본 워크플로 이식 |
미리 변환된 FP166 체크포인트가 공개되어 있어서, 원본 저장소에서 직접 변환하지 않아도 바로 불러올 수 있어요.
맥에서 잰 지연과 처리량이에요
측정 환경은 M3 Max 40코어 GPU에 128GB 메모리예요. 시간에는 프롬프트7 준비와 토큰화, 동기화된 추론, 보정, 결과 형식화가 모두 들어가고 모델을 읽는 시간은 빠져 있어요.
| 측정 항목 | Laya 421M | 다국어 322M |
|---|---|---|
| 짧은 질문 P50 | 13.42ms | 7.39ms |
| 짧은 질문 P95 | 13.92ms | 7.79ms |
| 50개 묶음 처리량 | 초당 146.8개 | 초당 395.0개 |
| 최대 메모리 사용 | 943.6MiB | 687.6MiB |
질문 길이와 개수가 달라지면 값도 달라져요. 표의 숫자는 짧은 질문 하나와 50개 묶음을 잰 것이라, 긴 지시문을 넣으면 지연이 늘어나요.

같은 답을 내는지 먼저 확인했어요
MLX로 옮긴 구현이 원본과 같은 선택을 하는지 63개 검증 질문으로 확인했어요. FP328와 FP16 양쪽에서 63개가 모두 일치해서 378번 비교가 전부 통과했어요.
같은 호출을 100번 반복해도 결과가 유한하고 같았고, 메모리 사용이 늘지 않았어요. 이건 그 검증 질문들에 대한 결과라서 모든 질문에서 같다는 뜻은 아니에요.
게임 데모도 같은 검증에 쓰여요. 스네이크 한 판에서 2,400번의 이동을 처리했고, 안전 장치가 두 번 개입했으며 중간에 멈추지 않았어요.
속도보다 먼저 본 것이 이 일치 여부예요. 확률을 쓰는 곳에서는 1% 차이가 판단을 바꾸기 때문에, 옮긴 구현이 원본과 같은 답을 내는지가 시작점이에요.

앱과 서버에 붙여요
포트라는 점을 알고 써야 해요
이 패키지는 원 제작사의 공식 배포가 아니라 MLX로 옮긴 독립 포트예요. 가중치와 질문 형식, 보정, 출력 스키마는 원본을 그대로 쓰지만, 지원 범위는 원본과 달라요.
CUDA12와 ONNX 실행, 학습은 들어 있지 않아요. 학습이 필요하면 원본 프로젝트를 써야 하고, 이 패키지는 추론과 변환만 담당해요.
원본 프로젝트의 어느 버전을 따라가는지 저장소에 기록되어 있어요. 그 기록을 보고 원본 문서와 대조하면, 어떤 기능이 아직 없는지 확인할 수 있어요.
측정은 macOS 27.2에서 이뤄졌고, 더 오래된 macOS에서는 같은 값이 나온다고 볼 수 없어요. 처음 쓸 때는 짧은 질문으로 지연을 직접 재 보는 편이 좋아요.
용어 각주
MLX — Apple이 개발하는 머신러닝 프레임워크로, Apple Silicon의 CPU와 GPU가 공유하는 메모리를 활용해 모델을 실행합니다.
본문으로 돌아가기토큰 — 모델이 입력이나 출력을 나누어 처리하는 단위입니다.
본문으로 돌아가기체크포인트 — 학습된 모델의 가중치 등을 저장한 파일입니다. 같은 모델 계열도 버전이나 용도에 따라 다른 체크포인트를 쓸 수 있습니다.
본문으로 돌아가기GPU — 많은 계산을 병렬로 처리하는 프로세서입니다. AI 모델 실행에서는 모델 계산을 맡습니다.
본문으로 돌아가기CPU — 운영체제와 일반 프로그램 명령을 실행하고, AI에서는 전처리·데이터 이동 등 범용 연산을 맡는 중앙 처리 장치입니다.
본문으로 돌아가기FP16 — 16비트 부동소수점 수치 형식입니다. BF16과 비트 수는 같지만 지수부와 유효숫자 배분이 다릅니다.
본문으로 돌아가기프롬프트 — 모델에 보내는 입력문입니다. 생성 모델에서는 만들 결과를 설명하는 문장이 되어 출력의 구성과 내용을 크게 좌우합니다.
본문으로 돌아가기FP32 — 32비트 부동소수점 수치 형식입니다. BF16보다 값 하나에 더 많은 메모리를 쓰며 수치를 더 세밀하게 표현할 수 있습니다.
본문으로 돌아가기MCP — 모델이 사용할 도구와 데이터 소스를 클라이언트에 연결하기 위한 프로토콜입니다. 연결이 가능하다는 사실과 해당 도구를 실행할 권한은 따로 설정해야 합니다.
본문으로 돌아가기파이프라인 — 입력부터 결과까지 이어지는 처리 단계의 묶음입니다. 각 단계에서 서로 다른 모델이나 도구를 사용할 수 있습니다.
본문으로 돌아가기처리량 — 일정 시간 동안 처리하거나 생성한 작업량입니다. 토큰/초, 요청/초처럼 단위를 함께 확인해야 비교할 수 있습니다.
본문으로 돌아가기CUDA — NVIDIA GPU에서 범용 계산을 실행하기 위한 소프트웨어 플랫폼입니다.
본문으로 돌아가기
자주 묻는 질문
- 이 글에서 가장 먼저 확인할 것은 무엇인가요?
- Laya-MLX는 4억2,100만 파라미터 결정 모델을 MLX로 실행하는 파이썬 패키지예요. 문장을 생성하지 않고 선택지별 확률을 한 번의 계산으로 내요. 짧은 질문 하나에 13ms가 걸리고, 50개를 묶으면 초당 146.8개를 처리해요.
- 필요한 메모리는 어느 정도인가요?
- 모델은 4억2,100만 파라미터와 3억2,200만 파라미터 두 계열이에요. 같은 맥에서 생성 모델을 돌리는 것에 비해 메모리 사용이 1GB 안쪽이에요.
