실행 프로그램과 확장

최종 업데이트

GLM-5.3 Flash의 2·3·4 Spark 실행과 속도 비교

한 요청 decode는 2·3·4대에서 각각 60.4·77.6·95.2 tok/s였고, 네 대 tp4는 실험 branch예요.

MIA 레시피는 TensorFold 0.6.0에 patch 96개를 더한 구성이고, EXL3 4-bit 기본 설정을 사용해요. 단일 요청은 2대 60.4, 3대 77.6, 4대 95.2 tok/s였어요. 동시 처리 합계는 2대 4건에서 108.8, 3대 4건에서 146.2, 4대 8건에서 222.4 tok/s예요. 4대는 실험 tp4 branch로 실행해요.

실행 조건과 핵심 내용
  • single 요청: 2대 60.4, 3대 77.6, 4대 95.2 tok/s.
  • 합계 처리량: 2대 108.8(4개), 3대 146.2(4개), 4대 222.4 tok/s(8개). 요청당 속도와 구분해요.
  • 4대 tp4는 실험 branch이며, 최신 수정이 모두 반영되지 않았어요.

먼저 2대 레시피의 범위를 잡아요

GLM-5.3-Flash는 전체 GLM-5.3 744B와 다른 모델이에요. 이 글은 Flash 모델의 두 rank TensorFold 레시피를 다뤄요. MIA 페이지의 기본 실행은 TensorFold v0.6.0 위에 패치를 얹고, 한 Spark가 rank 하나를 맡아요.

네트워크는 ConnectX-7 포트를 직접 연결하고 RoCE v2를 설정해요. 3대 실험은 삼각형 배선과 rank 순서가 필요하고, 4대는 스위치 또는 링 구성과 별도 tp4 branch 절차를 따라요.

검은 화면의 모니터와 소형 데스크톱, 여러 팬이 보이는 PC 본체
여러 Spark에서 나오는 속도는 한 요청과 동시 요청을 나눠 비교해요.

단일 요청과 동시 처리량을 따로 비교해요

한 요청 열은 응답 하나의 생성 속도예요. 합계 열에는 동시 요청 수를 함께 적었어요. 2·3대는 4건, 4대는 8건을 동시에 처리한 기록이니 공동 서버를 비교할 때 이 요청 수까지 확인하세요.

좌우로 밀어 표 전체를 비교하세요.

prose decode 속도와 동시 처리량
Spark 수한 요청합계 (동시 요청 수)구성 상태
260.4 tok/s108.8 tok/s (4개)기본 레시피
377.6 tok/s146.2 tok/s (4개)패치 실험
495.2 tok/s222.4 tok/s (8개)tp4 branch · 실험

2대 결과는 1M context, FP81 KV cache2, 4-bit dense weights, DFlash2와 copy drafts, vision on, GPU3 clock 2,200MHz 제한에서 sparkDash로 측정했어요. 3대도 기본 4 stream, 1M window, FP8 KV, DFlash2+copy drafts를 사용했어요. 요청 수와 설정이 다르니 모델 버전과 함께 비교해요.

서로 연결된 두 소형 데스크톱과 입자 흐름이 보이는 모니터
rank별 서버가 링크에서 맡는 역할을 확인해요.

장비와 저장소를 준비하고 서버를 시작해요

각 Spark는 GB10과 128GB 통합 메모리4를 사용하고 서버 시작 때 약 110GiB 여유가 필요해요. 두 대 레시피는 각 장비에 Docker와 NVIDIA Container Toolkit을 설치하고, head에서 worker로 키 기반 SSH가 되는지 확인해요. 체크포인트5, DFlash2와 컨테이너 이미지를 위한 디스크 공간도 필요해요.

head에서 저장소를 받고 scripts/local.sh.example을 scripts/local.sh로 복사해요. 다음 설정 블록은 파일 편집기로 scripts/local.sh의 같은 항목에 저장하세요. WORKER에는 worker의 관리망 SSH 주소를, FABRIC_PEER에는 필요한 경우 worker의 CX7 주소를 적어요. 저장한 값을 확인한 다음, 실제 SSH 주소로 키 인증을 점검하고 서버를 시작하세요.

두 Spark 저장소와 설정 파일 준비
git clone https://github.com/MiaAI-Lab/GLM-5.3-Flash-EXL3-2x-DGX-Sparks-TensorFold.git
cd GLM-5.3-Flash-EXL3-2x-DGX-Sparks-TensorFold
cp scripts/local.sh.example scripts/local.sh
파일 편집기로 scripts/local.sh에 저장할 설정
WORKER=user@192.0.2.2
FABRIC_PEER=192.0.2.12
설정 확인 후 head에서 SSH 점검
grep -nE 'WORKER=|FABRIC_PEER=' scripts/local.sh
# Replace the reserved address with the actual worker SSH target.
ssh-copy-id user@192.0.2.2
ssh -o BatchMode=yes user@192.0.2.2 true

2대 기본 서버는 첫 실행 때 컨테이너·체크포인트·DFlash2를 준비하고 두 rank를 smoke test해요. 성공 로그에 GLM-5.3-Flash-EXL3 is now LIVE! on port 8888이 표시돼요. 3대는 start-tp3.sh, 4대는 tp4 branch의 switchless ring 절차를 써요. 4대는 실험 구성이라 시작 전에 dry run으로 실제 배선과 rank 순서를 확인해요.

두 Spark 서버 시작
./start.sh
LIVE 이후 모델 목록과 첫 요청 확인
curl -fsS http://127.0.0.1:8888/v1/models
curl -fsS http://127.0.0.1:8888/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"GLM-5.3-Flash-EXL3","messages":[{"role":"user","content":"Say READY in one word."}],"max_tokens":8,"temperature":0}'
3 Spark TP3 시작
./start-tp3.sh
4 Spark ring dry run
git clone --branch tp4 https://github.com/MiaAI-Lab/GLM-5.3-Flash-EXL3-2x-DGX-Sparks-TensorFold.git ../glm-flash-tp4
cd ../glm-flash-tp4
DRY_RUN=1 ./start-tp4-switchless.sh
배선 점검 후 4 Spark tp4 시작
./start-tp4-switchless.sh
4 Spark 서버 응답 확인
curl -fsS http://127.0.0.1:8888/v1/models
curl -fsS http://127.0.0.1:8888/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"GLM-5.3-Flash-EXL3","messages":[{"role":"user","content":"Say READY in one word."}],"max_tokens":8,"temperature":0}'

4대 실험은 별도 검증 범위로 판단해요

2대에서 4대까지 수치가 늘어나는 흐름은 장비를 늘릴 때 얻는 decode6 개선을 보여줘요. 다만 3대에는 레시피 패치가 추가됐고 4대는 실험 branch라, 전체 정확성 검사가 3대와 같은 범위로 수행되지 않았어요. 4대 수치는 환경에 바로 적용되는 보장값이 아니라 토폴로지와 branch를 고정한 재현 기준으로 봐요.

동시 처리량7이 목표라면 합계 tok/s와 요청당 tok/s를 모두 기록해요. 작업자가 한두 명이고 한 응답의 흐름이 중요하면 single 결과와 TTFT8가 우선이에요. 요청이 많아도 사용자별 대기가 길어질 수 있으니 자신의 prompt9와 응답 길이로 따로 측정해요.

문서와 차트가 보이는 노트북 주변에 쌓인 인쇄물과 펼친 노트
실제 요청 수와 답변 길이로 마지막 선택을 검증해요.

용어 각주

  1. FP8 — 값 하나를 8비트로 표현하는 부동소수점 수치 형식입니다.

    본문으로 돌아가기
  2. KV 캐시 — 어텐션에서 이전 토큰의 키·값을 저장해 다음 토큰 생성 때 재사용하는 메모리입니다. 문맥 길이와 배치 크기에 따라 용량이 달라집니다.

    본문으로 돌아가기
  3. GPU — 많은 계산을 병렬로 처리하는 프로세서입니다. AI 모델 실행에서는 모델 계산을 맡습니다.

    본문으로 돌아가기
  4. 통합 메모리 — CPU와 GPU가 같은 물리 메모리 풀을 공유하는 구조입니다.

    본문으로 돌아가기
  5. 체크포인트 — 학습된 모델의 가중치 등을 저장한 파일입니다. 같은 모델 계열도 버전이나 용도에 따라 다른 체크포인트를 쓸 수 있습니다.

    본문으로 돌아가기
  6. 토큰 디코드 — 입력과 앞서 만든 답변을 바탕으로 다음 출력 토큰을 차례로 생성하는 단계입니다.

    본문으로 돌아가기
  7. 처리량 — 일정 시간 동안 처리하거나 생성한 작업량입니다. 토큰/초, 요청/초처럼 단위를 함께 확인해야 비교할 수 있습니다.

    본문으로 돌아가기
  8. 첫 토큰 지연 — 요청을 보낸 뒤 첫 출력 토큰이 도착하기까지 걸린 시간입니다.

    본문으로 돌아가기
  9. 프롬프트 — 모델에 보내는 입력문입니다. 생성 모델에서는 만들 결과를 설명하는 문장이 되어 출력의 구성과 내용을 크게 좌우합니다.

    본문으로 돌아가기

자주 묻는 질문

이 글에서 가장 먼저 확인할 것은 무엇인가요?
MIA 레시피는 TensorFold 0.6.0에 patch 96개를 더한 구성이고, EXL3 4-bit 기본 설정을 사용해요. 단일 요청은 2대 60.4, 3대 77.6, 4대 95.2 tok/s였어요. 동시 처리 합계는 2대 4건에서 108.8, 3대 4건에서 146.2, 4대 8건에서 222.4 tok/s예요. 4대는 실험 tp4 branch로 실행해요.
필요한 메모리는 어느 정도인가요?
각 Spark는 GB10과 128GB 통합 메모리를 사용하고 서버 시작 때 약 110GiB 여유가 필요해요. 두 대 레시피는 각 장비에 Docker와 NVIDIA Container Toolkit을 설치하고, head에서 worker로 키 기반 SSH가 되는지 확인해요. 체크포인트, DFlash2와 컨테이너 이미지를 위한 디스크 공간도 필요해요.