모델별 실행 레시피
Qwen3.8-Flash-Next 최적 설정: 단일 DGX Spark SGLang 레시피
단일 Spark에서도 Flash-Next가 빠르게 돌아간다는 실행 기록을 보면 같은 명령을 써보고 싶어집니다. 그런데 이 경로는 모델만 받는 것으로 끝나지 않습니다. 전용 압축본과 PLE SSD 패치, MTP와 백엔드 설정을 한 묶음으로 맞춰야 합니다. 무엇을 재현하는지부터 확인해보겠습니다.
하드웨어별 속도 튜닝 및 서빙 레시피 요약
가중치, KV 캐시, 프리필 배치, 동시 요청과 가속 기능을 분리하고 균형·속도·긴 문맥 프로필로 제공합니다.
| 하드웨어 | 적합도 | 권장 런타임 | 운용 프로필 | 시작 문맥 | 토큰 생성 |
|---|---|---|---|---|---|
| MBP M5 Pro 48GB (41GB) | 메모리 초과 (미지원) | 적재 불가 | 검증 대기 | 4,096 토큰 | - |
| Studio M5 Ultra 256GB (236GB) | 메모리 적정 | oMLX | 균형 설정 · 생성 속도 · MTP · 긴 문맥 | 16,384 토큰 | 47.8 ~ 82.9 tok/s |
| Studio M5 Ultra 512GB (480GB) | 메모리 적정 | oMLX | 균형 설정 · 생성 속도 · MTP · 긴 문맥 | 16,384 토큰 | 47.8 ~ 82.9 tok/s |
| RTX 4090 24GB (22.5GB) | 메모리 초과 (미지원) | 적재 불가 | 검증 대기 | 4,096 토큰 | - |
| 2× RTX 3090 48GB (NVLink) (45GB) | 메모리 초과 (미지원) | 적재 불가 | 검증 대기 | 4,096 토큰 | - |
| RTX PRO 6000 96GB (93GB) | 메모리 초과 (미지원) | 적재 불가 | 검증 대기 | 4,096 토큰 | - |
| DGX Spark 128GB (116GB) | 실험적 구동 | SGLang · GB10 패치 구성 | 단일 Spark 공개 구성 · 262K 긴 문맥 | 32,768 토큰 | 코드 40.3–42.3 tok/s · 일반 문장 21.2–25.5 tok/s |
| Ryzen AI Max+ 395 128GB (96GB) | 메모리 초과 (미지원) | 적재 불가 | 검증 대기 | 4,096 토큰 | - |
상세 페이지에서 프로필별 실행 명령, 적용값, 멈춰야 할 조건과 측정 순서를 확인할 수 있습니다. 실행 명령은 모델 파일과 실행 프로그램가 확인된 조합에만 표시합니다.
같은 모델 이름만으로는 같은 구성이 아닙니다
이 경로는 Qwen3.8-Flash-Next의 특정 NVFP4 체크포인트를 사용합니다. 모든 텐서가 일괄 4비트라는 뜻은 아닙니다. 어텐션과 MTP 등 더 높은 정밀도로 유지하는 부분이 있어 전체 파일과 실제 적재를 확인해야 합니다.
단일 Spark의 통합 메모리 안에서 가중치를 CPU 쪽으로 옮기는 것만으로 물리 공간이 늘지는 않습니다. 큰 PLE 테이블을 NVMe 파일에 두고 필요한 부분을 조회하는 전용 mmap 패치가 핵심입니다. 기본 SGLang에 플래그만 추가한 경로와 구분하세요.
실험 파일과 스크립트는 버전과 내용을 검토하고 정상 환경과 분리해 준비합니다. 다운로드·변환용 임시 공간도 필요합니다. 아래 실행 묶음의 약 140GB 이상 여유 안내를 참고하되 현재 배포 파일에 필요한 총공간을 다시 확인하세요.
32K 기록을 재현하는 출발점
현재 공개 스크립트는 TP 1, 메모리 비율 0.85와 프리필 청크 2,048에서 시작합니다. 프리필은 Triton, 디코드는 trtllm_mha를 사용하고, MTP는 NEXTN 3단계·top-k 1·draft token 4개입니다. 이 기본값을 공개 측정 당시의 모든 조건이 확인됐다는 뜻으로 읽지는 마세요.
공개 기록의 디코드는 영어 코드 약 41.5 tok/s, 스페인어 일반 문장 약 22.8 tok/s로 나뉩니다. 한국어 답변에도 같은 속도가 나온다는 뜻은 아닙니다. 이전에 소개한 프리필 1,910 tok/s는 비교 기준에서 뺐습니다. 원문이 입력 캐시 재사용에 따른 측정 오염을 알렸고, 캐시를 비운 반복 측정은 아직 끝나지 않았기 때문입니다. 이 수치를 새 문서의 입력 처리 속도로 사용하면 안 됩니다.
준비 스크립트와 검증을 통과한 뒤 실제 요청은 한 개씩 보내 기준을 남깁니다. 서버의 최대 요청 허용값과 측정 중 동시에 보낸 요청 수는 다릅니다. Docker 바깥의 포트가 127.0.0.1에만 게시됐는지도 확인하세요.
단일 DGX Spark 32K 실행
git clone https://github.com/hashd1ve/qwen38-flash-next-one-dgx-spark.git
cd qwen38-flash-next-one-dgx-spark
./scripts/download.sh
./scripts/prepare.sh
sed -i.bak 's/-p "$PORT":30000/-p "127.0.0.1:$PORT:30000"/' scripts/serve.sh
MEMFRAC=0.85 PREFILL=2048 CTX=32768 ./scripts/serve.sh
python3 verify.pyDocker와 약 140GB 이상의 NVMe 여유 공간이 필요합니다.
공개 스크립트의 핵심 SGLang 옵션
# Docker 포트는 127.0.0.1:30000에만 게시
--tp-size 1
--prefill-attention-backend triton
--decode-attention-backend trtllm_mha
--quantization modelopt_fp4
--ple-offload-embedding
--mamba-radix-cache-strategy extra_buffer
--mem-fraction-static 0.85
--chunked-prefill-size 2048
--max-running-requests 4
--speculative-algorithm NEXTN
--speculative-num-steps 3
--speculative-eagle-topk 1
--speculative-num-draft-tokens 4
--speculative-draft-model-quantization unquantPLE mmap 패치가 없는 stock SGLang에 이 플래그만 복사하면 같은 메모리 배치가 되지 않습니다.
문맥 숫자 하나만 키우지 않습니다
긴 문맥에서는 메모리 비율 0.79, 프리필 청크 1,024를 여유 공간을 남기는 시작값으로 사용합니다. 공개된 긴 문맥 측정은 메모리 비율 0.85와 요청 한 개 조건이므로, 아래 명령은 그 측정의 정확한 재현 명령이 아닙니다. 문맥을 262,144로 설정할 수 있다는 사실만으로 내 문서가 안정적으로 처리된다고 보장되지는 않습니다.
먼저 작은 입력에서 정상 동작을 확인한 뒤 8K·32K·128K처럼 단계적으로 늘립니다. 각 길이에서 정답을 아는 문장을 중간에도 넣어 실제로 찾는지 확인하세요. 다른 GPU 작업을 줄이고 요청 한 개 조건으로 메모리와 첫 토큰 시간을 함께 봅니다.
청크를 줄여 메모리 정점을 낮추면 짧은 입력의 처리량은 낮아질 수 있습니다. 긴 문맥이 필요하지 않다면 가장 큰 설정을 유지할 이유는 없습니다. 평소 길이의 결과로 돌아와 어느 프로필을 남길지 결정하세요.
단일 DGX Spark 262K 실행
# 앞의 다운로드·준비 및 로컬 포트 설정을 마친 뒤 실행
# 서버 주소: http://127.0.0.1:30000
cd qwen38-flash-next-one-dgx-spark
sed -i.bak 's/--max-running-requests 4/--max-running-requests 1/' scripts/serve.sh
MEMFRAC=0.79 PREFILL=1024 CTX=262144 ./scripts/serve.sh
python3 verify.py프리필 청크를 줄이는 대신 짧은 입력의 처리량은 낮아질 수 있습니다.
남의 숫자보다 느릴 때 확인할 순서
체크포인트와 패치·컨테이너 버전을 먼저 확인하고 PLE 파일이 실제 NVMe 경로에 있는지 봅니다. 그다음 로그에서 프리필·디코드 백엔드와 MTP 가중치의 정밀도가 의도대로 선택됐는지 확인합니다. 후보 단계부터 무작정 늘리지 마세요.
첫 디스크 접근과 페이지 캐시가 남은 반복 접근도 구분해야 합니다. 준비 직후의 숫자와 평소 여러 앱을 켜둔 상태의 숫자는 다를 수 있습니다. MTP를 끈 값과 켠 값을 코드·일반 문장 각각 같은 조건으로 기록합니다.
실행이 자주 실패하면 속도보다 안정적인 기준을 먼저 복구합니다. 포트가 외부에 열려 있다면 접근 범위를 제한하고, 공유 서버로 바꿀 때는 별도의 인증과 방화벽을 준비해야 합니다.
이 레시피로 얻고 싶은 결과
특수 패치로 큰 모델을 한 대에 올리는 것은 의미 있는 실험입니다. 하지만 설정을 재현했다는 성취와 매일 편하게 쓸 도구를 얻었다는 결과는 다를 수 있습니다. 필요한 문서와 코드를 실제로 끝까지 처리해보세요.
이미 한 대의 안정적인 설정에서 원하는 일이 된다면 두 대를 살 이유는 줄어듭니다. 더 긴 문맥이나 여러 요청이 꼭 필요하다면 그 조건으로 두 대와 비교합니다. 기록의 최고 속도보다 내 환경에서 반복되는 결과를 구매 판단에 사용하세요.
수정 내역
사이트의 안내가 바뀐 기록입니다. 설치된 엔진·모델 버전을 자동으로 확인한 결과는 아닙니다.
Flash-Next 본문과 실행 프로필의 설정값 통일
본문의 프리필 청크를 공개 스크립트와 같은 2,048로 고치고 긴 문맥 명령에도 요청 상한 1개를 반영했습니다. 공개 측정의 언어 조건과 안전한 시작값을 구분했습니다.
Flash-Next 단일 Spark의 프리필 수치 정정
캐시 재사용이 섞인 1,910 tok/s를 첫 입력의 프리필 속도로 제시하던 문구를 제거했습니다. 캐시를 쓰지 않은 조건의 재측정이 필요한 상태로 바꿨습니다.
Flash-Next 긴 문맥의 요청 상한 조정
단일 Spark의 262K 문맥 명령에서 실행 요청 상한을 4개에서 1개로 낮췄습니다. 오래된 QSA 패치의 출력 오류를 확인하도록 검증 순서도 보완했습니다.
Mac의 모델 형식과 실행 설정 정정
Mac의 MLX 실행 경로를 GGUF Q4_K_M과 구분하고, 엔진 이름·모델 형식·명령의 표기를 맞췄습니다. 명령에서 지정하지 않는 KV 캐시 정밀도와 프리필 배치는 모델·런타임 설정에서 확인하도록 바꿨습니다.
명령이 그대로인데 배치만 커진 것처럼 보이던 MLX 속도 프로필도 제거했습니다.
첫 입력과 캐시 재사용의 기록 분리
검증 순서에서 처음 읽는 입력과 같은 입력을 반복한 결과를 따로 기록하도록 바꿨습니다. 캐시 효과를 프리필 처리량이나 장비 차이로 합산하지 않습니다.
장비·프로필 저장과 다시 열기 추가
실행 가능한 프로필은 장비와 함께 이 브라우저에 최대 5개까지 저장하고, 가이드 목록에서 다시 열 수 있게 했습니다. 저장한 뒤 공개 설정이 바뀌거나 프로필이 없어지면 실행 전에 다시 확인하도록 안내합니다.
실행 엔진 설명으로 이어지는 링크 추가
설정에 표시된 엔진 이름에서 해당 실행 프로그램의 설명으로 이어지도록 했습니다. 엔진이 확인되지 않은 경로에는 임의의 프로그램을 연결하지 않습니다.