실행 프로그램과 확장
최종 업데이트
M5 Ultra 두 대로 GLM-5.3 744B를? 메모리와 연결 조건
두 대의 메모리를 합쳐 GLM-5.3 전체 모델을 나눠 실행하지만, 두 Mac 모두 256GB 구성과 유선 연결이 필요해요.
TensorFold 1.0.8은 kindlingai의 trellis-coded EXLR8 home profile로 전체 GLM-5.3 744B를 M5 Ultra 두 대에서 실행해요. 각 장비는 256GB 통합 메모리1를 갖추고, 체크포인트2를 rank별로 내려받은 뒤 유선으로 연결해요. context 8192와 parallel 4에서 rank마다 159.6GB가 필요해요. 두 대를 연결한 단일 스트림은 MTP3를 켜면 31–32 tok/s, 끄면 21 tok/s였고, prefill4은 약 200 tok/s였어요.
한 모델을 두 Mac의 rank로 나눠요
TensorFold의 GLM-5.3 EXLR8 경로는 체크포인트의 expert와 attention5 head를 두 rank에 나눠 올려요. 한 Mac이 완성된 744B 모델 전체를 감당하는 방식이 아니에요. 각 rank는 상대 Mac과 같은 요청을 처리하면서 필요한 모델 조각을 함께 계산해요.
이 글의 수치는 full GLM-5.3 744B의 home profile이에요. Flash 모델은 별도 체크포인트와 실행 경로를 쓰므로 두 모델의 메모리나 속도를 섞지 않아요. 시작 전에는 두 Mac의 모델 이름, 메모리 용량, TensorFold 버전을 모두 맞춰요.

rank별 메모리와 MTP 수치를 확인해요
각 Mac이 내려받는 파일은 expert 가중치 절반 139.5GiB와 rank마다 공통으로 필요한 전체 파일 11GB예요. 이는 체크포인트 파일 크기예요. 별도 측정으로 context 8192·parallel 4에서 실행 중인 rank의 메모리는 159.6GB예요. 파일 용량과 실행 메모리는 측정 대상과 단위가 다르므로, 256GB Mac에서도 OS·앱·캐시 공간을 남겨야 해요.
| 설정 | 값 | 읽는 방법 |
|---|---|---|
| 모델 | GLM-5.3 744B 전체 · EXLR8 home | Flash 제외 |
| 장비 | M5 Ultra 2대 · 각각 256GB | 유선 링크로 rank 연결 |
| 조건 | context 8192 · parallel 4 | rank당 159.6GB |
| decode | MTP 켬 31–32 · 끔 21 tok/s | 단일 스트림 |
두 M5 Ultra에서 단일 스트림을 비교했을 때 MTP를 끄면 21 tok/s, 켜면 31–32 tok/s였어요. prompt6를 읽는 prefill은 약 200 tok/s였어요. 이 수치는 한 스트림의 decode7와 prompt 처리 결과이며, 동시 사용자 수나 장시간 평균 속도와는 측정 대상이 달라요.
두 rank의 파일을 준비하고 링크를 점검해요
TensorFold 1.0.8을 설치하고, 두 Mac에서 각각 --node 0/2와 --node 1/2로 같은 체크포인트 revision을 받아요. 이 값은 파일을 분할 다운로드하는 번호예요. 서버 실행에서는 rank 1을 먼저 열고 rank 0을 5분 안에 시작해요.
tensorfold pull kindlingai/glm-5.3-exlr8-k2-k3-k4@f459f5d0272a529403dd9b3fd32f771f4250a0d4 --exlr8 home --node 0/2 --dir ~/models/glm-5.3-exlr8-hometensorfold pull kindlingai/glm-5.3-exlr8-k2-k3-k4@f459f5d0272a529403dd9b3fd32f771f4250a0d4 --exlr8 home --node 1/2 --dir ~/models/glm-5.3-exlr8-home먼저 두 Mac에서 네트워크를 준비해요. MCDMA의 Thunderbolt fabric 설정에 따라 Recovery에서 RDMA를 활성화한 뒤, 케이블이 연결된 인터페이스와 상대 주소를 확인해요. 이 구성은 내장 Thunderbolt RDMA 경로를 사용하며 Mac·ConnectX 드라이버용 별도 보안 변경 절차는 적용하지 않아요.
MCDMA 저장소 루트에서 평소 macOS 터미널로 아래 빌드를 실행해요. build/rpc/libmcdma-fabric.dylib가 생성되고 공식 fabric 연결 검사를 통과하면 rank JSON을 준비해요.
git clone https://github.com/ashhart/MCDMA.git
cd MCDMA
make -C rpc
ls -l build/rpc/libmcdma-fabric.dylib
printf '%s\n' "$PWD/build/rpc/libmcdma-fabric.dylib"두 Mac의 모델 폴더는 ~/models/glm-5.3-exlr8-home로 맞춰요. Mac A에는 그 안에 rank0.json, Mac B에는 rank1.json을 저장하세요. library에는 앞서 출력된 라이브러리의 절대 경로를, device와 via에는 해당 Mac의 실제 RDMA 장치와 케이블 상대 주소를 넣어요. 192.0.2.x와 /path/to를 실제 값으로 바꾼 뒤 rank 1, rank 0 순으로 실행해요. 두 로그가 준비 상태이면 Mac A의 8080 포트로 요청해요.
{
"rank": 0,
"library": "/path/to/MCDMA/build/rpc/libmcdma-fabric.dylib",
"links": [{"peer": 1, "device": "rdma_en4", "via": "en4/192.0.2.2", "port": 7490, "name": "speedup"}]
}{
"rank": 1,
"library": "/path/to/MCDMA/build/rpc/libmcdma-fabric.dylib",
"links": [{"peer": 0, "device": "rdma_en4", "via": "en4/192.0.2.1", "port": 7490, "name": "speedup"}]
}tensorfold serve ~/models/glm-5.3-exlr8-home --speed-up "$HOME/models/glm-5.3-exlr8-home/rank1.json" --context 8192 --parallel 4 --temperature 0tensorfold serve ~/models/glm-5.3-exlr8-home --speed-up "$HOME/models/glm-5.3-exlr8-home/rank0.json" --context 8192 --parallel 4 --temperature 0 --name glm-5.3curl -fsS http://127.0.0.1:8080/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"glm-5.3","messages":[{"role":"user","content":"Say READY in one word."}],"max_tokens":8,"temperature":0}'
성공 응답 뒤에 실제 사용 범위를 정해요
두 rank가 모두 준비되고 요청에 답하면 연결 경로가 열린 거예요. 이후 context나 parallel을 바꿀 때는 한 번에 하나씩 조정해요. context를 늘리면 각 요청이 유지하는 상태가 커지고, parallel을 늘리면 동시에 필요한 메모리도 커져요. 응답 지연과 메모리 압력을 함께 기록하면 어느 설정이 작업에 맞는지 구분하기 쉬워요.

용어 각주
통합 메모리 — CPU와 GPU가 같은 물리 메모리 풀을 공유하는 구조입니다.
본문으로 돌아가기체크포인트 — 학습된 모델의 가중치 등을 저장한 파일입니다. 같은 모델 계열도 버전이나 용도에 따라 다른 체크포인트를 쓸 수 있습니다.
본문으로 돌아가기MTP — 한 번에 여러 미래 토큰을 예측하도록 학습하는 목표 또는 이를 수행하는 모델 구성입니다. 추측 디코딩에서는 이 예측을 후보 토큰으로 제안할 수 있습니다.
본문으로 돌아가기프리필 — LLM이 입력 프롬프트를 읽고 각 토큰의 내부 표현을 계산하는 단계입니다. 입력이 길수록 처리할 토큰이 많아집니다.
본문으로 돌아가기어텐션 — 입력 토큰 사이의 관련도를 계산해 각 위치의 정보를 현재 표현에 반영하는 신경망 연산입니다.
본문으로 돌아가기프롬프트 — 모델에 보내는 입력문입니다. 생성 모델에서는 만들 결과를 설명하는 문장이 되어 출력의 구성과 내용을 크게 좌우합니다.
본문으로 돌아가기토큰 디코드 — 입력과 앞서 만든 답변을 바탕으로 다음 출력 토큰을 차례로 생성하는 단계입니다.
본문으로 돌아가기
자주 묻는 질문
- 이 글에서 가장 먼저 확인할 것은 무엇인가요?
- TensorFold 1.0.8은 kindlingai의 trellis-coded EXLR8 home profile로 전체 GLM-5.3 744B를 M5 Ultra 두 대에서 실행해요. 각 장비는 256GB 통합 메모리를 갖추고, 체크포인트를 rank별로 내려받은 뒤 유선으로 연결해요. context 8192와 parallel 4에서 rank마다 159.6GB가 필요해요. 두 대를 연결한 단일 스트림은 MTP를 켜면 31–32 tok/s, 끄면 21 tok/s였고, prefill은 약 200 tok/s였어요.
- 필요한 메모리는 어느 정도인가요?
- 각 Mac이 내려받는 파일은 expert 가중치 절반 139.5GiB와 rank마다 공통으로 필요한 전체 파일 11GB예요. 이는 체크포인트 파일 크기예요. 별도 측정으로 context 8192·parallel 4에서 실행 중인 rank의 메모리는 159.6GB예요. 파일 용량과 실행 메모리는 측정 대상과 단위가 다르므로, 256GB Mac에서도 OS·앱·캐시 공간을 남겨야 해요.
