실행 프로그램과 확장
최종 업데이트
DGX Spark 한 대와 두 대, Qwen3.8 Flash-Next는 얼마나 달라질까?
1대 구성은 기본 창에서 한 요청 64.4 tok/s, 8개 동시 200.9 tok/s였고, 2대 NVFP4는 한 요청 67.4 tok/s, 16개 동시 390.1 tok/s였어요.
한 대 레시피는 TensorFold Zig 엔진과 INT4-AutoRound 체크포인트1를 사용해 기본 262,144토큰2 창에서 단일 요청 64.4 tok/s, 8개 동시 200.9 tok/s를 기록했어요. 두 대 레시피는 ConnectX-7로 연결한 두 rank에 NVFP43 또는 INT4-AutoRound를 올리고 1,048,576토큰 창을 제공해요. NVFP4 기준 한 요청 67.4 tok/s, 16개 동시 합계 390.1 tok/s였어요. 장비 수와 함께 체크포인트, 문맥, 병렬 수가 달라지므로 결과는 레시피별 조건으로 비교해야 해요.
DGX Spark에서 Qwen3.8 Flash-Next에 질문을 보내고 답변을 받는 두 가지 구성을 비교해요. 한 대 레시피는 INT4-AutoRound를 쓰고, 두 대는 ConnectX-7로 연결해 NVFP4 또는 INT4-AutoRound를 선택해요. 아래 표에서 한 요청의 생성 속도와 여러 요청의 합산 처리량4을 나눠 본 뒤, 서버를 여는 과정까지 따라갈 수 있어요.
한 대와 두 대는 다른 실행 구성을 써요
DGX Spark 한 대 레시피는 TensorFold의 Zig 엔진으로 Qwen3.8 Flash Next를 서비스해요. 기본 설정은 INT4-AutoRound 체크포인트, FP85 KV cache6, 이미지 입력, context 262,144, parallel 8이에요. 두 대 레시피는 rank마다 Spark 한 대를 배정하고 ConnectX-7 링크로 연결해 더 큰 문맥 창과 두 체크포인트 선택지를 제공해요.
이 Spark 수치는 MIA가 공개한 CUDA7 recipe별 TensorFold Zig 빌드와 설정에서 나온 값이에요. 일부 MIA 레시피가 TensorFold 0.6.x를 패치해 쓰는 것과 마찬가지로, 이 결과도 기본 TensorFold 1.0.8의 검증표로 옮겨 읽지 않아요. 모델·브랜치·패치가 바뀌면 같은 이름의 GPU8에서도 조건이 달라져요.
두 구성 모두 별도 레시피예요. 한 대 측정값을 두 대의 같은 체크포인트·문맥 결과로 읽지 않고, 추가 장비의 효과와 양자화9 차이를 나눠 봐요.

요청 수에 따라 단일 응답과 합계가 달라져요
표의 decode10는 prose 생성 측정이에요. 단일 요청 값과 동시 요청 전체의 합계를 분리했어요. 동시 요청 수가 늘면 합계는 커질 수 있지만 각 요청에 돌아가는 토큰 속도는 낮아지고 첫 토큰 대기시간은 길어져요.
좌우로 밀어 표 전체를 비교하세요.
| 구성 | 1개 요청 | 동시 요청 합계 | 측정 병렬 수 |
|---|---|---|---|
| 1 Spark · INT4-AR | 64.4 tok/s | 200.9 tok/s | 8 |
| 2 Sparks · NVFP4 | 67.4 tok/s | 390.1 tok/s | 16 |
| 2 Sparks · INT4-AR | 89.3 tok/s | 483.6 tok/s | 16 |
혼자 쓸 때는 1개 요청 열을 비교해요. 공동 서버라면 합산 처리량과 측정 병렬 수도 함께 읽어요. 두 대의 NVFP4와 INT4-AutoRound 행은 서로 다른 체크포인트를 사용하므로 구성 선택에도 그 조건을 남겨두세요.

한 대 레시피를 설치하고 첫 응답을 확인해요
한 대 구성은 NVIDIA GPU 드라이버가 포함된 DGX Spark, Docker와 NVIDIA Container Toolkit, 약 160GB 여유 디스크가 준비물이에요. README가 제공하는 start.sh가 컨테이너와 체크포인트를 내려받고 기본 설정으로 서버를 준비해요.
git clone https://github.com/MiaAI-Lab/Qwen3.8-Flash-Next-Single-DGX-Spark-TensorFold.git
cd Qwen3.8-Flash-Next-Single-DGX-Spark-TensorFold
./start.sh저장소의 Quick start에서 현재 브랜치에 고정된 절차를 따라요. 설치가 끝나면 서버가 포트 8888에서 LIVE 상태를 표시하고, API11 base는 head 장비의 주소에 /v1을 붙여요. 모델 ID는 Qwen3.8-Flash-Next예요. curl 요청에 답이 오면 클라이언트 설정에 같은 주소와 모델 이름을 입력해요.
curl -s http://127.0.0.1:8888/v1/models
curl -s http://127.0.0.1:8888/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"Qwen3.8-Flash-Next","messages":[{"role":"user","content":"Write a Python fibonacci function."}],"max_tokens":1000}'두 대 recipe는 먼저 아래 명령으로 scripts/local.sh를 만들어요. 다음 설정 블록은 터미널에서 실행하지 않고 파일 편집기로 그 파일의 WORKER·FABRIC_PEER 값을 바꿔 저장하세요. WORKER는 관리망 SSH 대상, FABRIC_PEER는 필요한 경우 worker의 CX7 직결 주소예요. 예시의 192.0.2.x는 실제 주소로 바꿔요. 양쪽에 Docker와 NVIDIA Container Toolkit을 준비하고, head에서 키 기반 SSH를 확인해요. 기본 copy 방식은 양쪽에 체크포인트를 저장하므로 두 장비의 디스크 여유가 필요해요.
git clone https://github.com/MiaAI-Lab/Qwen3.8-Flash-Dual-DGX-Sparks-TensorFold.git
cd Qwen3.8-Flash-Dual-DGX-Sparks-TensorFold
cp scripts/local.sh.example scripts/local.sh# Replace both reserved documentation addresses with your actual values.
WORKER=user@192.0.2.2 # worker SSH target on the management LAN
FABRIC_PEER=192.0.2.12 # worker CX7 address when neededgrep -nE 'WORKER=|FABRIC_PEER=' scripts/local.shssh-copy-id user@192.0.2.2
ssh -o BatchMode=yes user@192.0.2.2 true./start.shcurl -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":"Qwen3.8-Flash-Next","messages":[{"role":"user","content":"Write a Python fibonacci function."}],"max_tokens":1000}'prefill과 문맥도 함께 맞춰 선택해요
두 대 레시피는 최대 1M 문맥, 기본 parallel 16을 제공하지만 이를 실제 요청에서 항상 채울 수 있다는 의미로 읽으면 안 돼요. Spark마다 약 102GiB 여유 메모리가 필요하고, 요청을 늘리면 KV pool을 나눠 써요. 1M 문맥과 16개 동시 요청을 동시에 원하는지, 혹은 짧은 문맥의 한두 요청이 대부분인지에 따라 장비 선택이 달라져요.
prefill12은 입력 프롬프트13를 읽고 첫 토큰을 준비하는 구간이에요. 한 대는 32K prompt에서 2,630 tok/s였고, 두 대 NVFP4는 같은 길이 근처에서 약 2,575 tok/s, INT4-AR는 약 3,285 tok/s였어요. 첫 토큰 대기시간은 문맥 길이에도 좌우되므로 모델 답변 속도와 따로 살펴요.

용어 각주
체크포인트 — 학습된 모델의 가중치 등을 저장한 파일입니다. 같은 모델 계열도 버전이나 용도에 따라 다른 체크포인트를 쓸 수 있습니다.
본문으로 돌아가기토큰 — 모델이 입력이나 출력을 나누어 처리하는 단위입니다.
본문으로 돌아가기NVFP4 — NVIDIA가 정의한 4비트 부동소수점 데이터 형식입니다. 지원 여부는 GPU 세대, 모델과 소프트웨어 구현에 따라 다릅니다.
본문으로 돌아가기처리량 — 일정 시간 동안 처리하거나 생성한 작업량입니다. 토큰/초, 요청/초처럼 단위를 함께 확인해야 비교할 수 있습니다.
본문으로 돌아가기FP8 — 값 하나를 8비트로 표현하는 부동소수점 수치 형식입니다.
본문으로 돌아가기KV 캐시 — 어텐션에서 이전 토큰의 키·값을 저장해 다음 토큰 생성 때 재사용하는 메모리입니다. 문맥 길이와 배치 크기에 따라 용량이 달라집니다.
본문으로 돌아가기CUDA — NVIDIA GPU에서 범용 계산을 실행하기 위한 소프트웨어 플랫폼입니다.
본문으로 돌아가기GPU — 많은 계산을 병렬로 처리하는 프로세서입니다. AI 모델 실행에서는 모델 계산을 맡습니다.
본문으로 돌아가기양자화 — 모델의 가중치나 계산값을 더 적은 비트로 표현해 저장 공간과 메모리 사용량을 줄이는 방법입니다. 표현 단계가 거칠어져 정확도에도 영향을 줄 수 있습니다.
본문으로 돌아가기토큰 디코드 — 입력과 앞서 만든 답변을 바탕으로 다음 출력 토큰을 차례로 생성하는 단계입니다.
본문으로 돌아가기API — 프로그램의 기능을 다른 코드에서 호출하기 위한 약속된 인터페이스입니다.
본문으로 돌아가기프리필 — LLM이 입력 프롬프트를 읽고 각 토큰의 내부 표현을 계산하는 단계입니다. 입력이 길수록 처리할 토큰이 많아집니다.
본문으로 돌아가기프롬프트 — 모델에 보내는 입력문입니다. 생성 모델에서는 만들 결과를 설명하는 문장이 되어 출력의 구성과 내용을 크게 좌우합니다.
본문으로 돌아가기
자주 묻는 질문
- 이 글에서 가장 먼저 확인할 것은 무엇인가요?
- 한 대 레시피는 TensorFold Zig 엔진과 INT4-AutoRound 체크포인트를 사용해 기본 262,144토큰 창에서 단일 요청 64.4 tok/s, 8개 동시 200.9 tok/s를 기록했어요. 두 대 레시피는 ConnectX-7로 연결한 두 rank에 NVFP4 또는 INT4-AutoRound를 올리고 1,048,576토큰 창을 제공해요. NVFP4 기준 한 요청 67.4 tok/s, 16개 동시 합계 390.1 tok/s였어요. 장비 수와 함께 체크포인트, 문맥, 병렬 수가 달라지므로 결과는 레시피별 조건으로 비교해야 해요.
- 필요한 메모리는 어느 정도인가요?
- 두 대 레시피는 최대 1M 문맥, 기본 parallel 16을 제공하지만 이를 실제 요청에서 항상 채울 수 있다는 의미로 읽으면 안 돼요. Spark마다 약 102GiB 여유 메모리가 필요하고, 요청을 늘리면 KV pool을 나눠 써요. 1M 문맥과 16개 동시 요청을 동시에 원하는지, 혹은 짧은 문맥의 한두 요청이 대부분인지에 따라 장비 선택이 달라져요.
