모델별 실행 레시피

최종 업데이트

CMP 170HX에서 Qwen3.8-27B를 가장 빠르게 실행하려면?

측정된 한 장 구성에서는 vLLM DFlash2가 3.2K 입력의 디코드 평균에서 더 빨랐어요.

Qwen3.8-27B를 CMP 170HX에서 실행하면 GGUF1 Q4_K_M 또는 W4A16 AutoRound 가중치를 서빙 엔진에 올려 텍스트 요청에 답할 수 있어요. 2026년 10월 10일 한 장 측정의 개별 약 3.2K-token 요청에서는 vLLM DFlash2가 109.42 tok/s, open-jet MTP2 d=4가 77.20 tok/s를 기록했어요. 별도로 greedy 5개 프롬프트3의 평균도 각각 181.8과 94.1 tok/s였어요.

짧은 입력에서 빠르게 답을 이어 쓰려면 vLLM DFlash2 구성을 먼저 살펴보세요. 긴 문서를 넣는다면 open-jet 쪽에 18,976토큰4을 끝까지 처리한 공개 기록이 있어요. 아래에서 속도와 첫 답변 대기 시간, 실행 방법을 비교할게요.

실행 조건과 핵심 내용
  • 180W 한 장 측정에서 vLLM DFlash2의 greedy 평균은 181.8 tok/s, open-jet MTP d=4는 94.1 tok/s였습니다.
  • 서로 다른 Q4_K_M GGUF와 W4A16 AutoRound 체크포인트를 사용해 순수 엔진 차이로 볼 수 없습니다.
  • 고정 버전 레시피는 현재 fresh 환경에서 설치 오류가 있어 재현 노트북의 수정 기록까지 확인해야 합니다.

속도표에서는 디코드와 입력 처리 결과를 나눠 봐요

요청을 받은 뒤 입력을 처리해 첫 토큰을 내기까지의 구간은 prefill5이고, 첫 토큰 뒤 답변을 이어 쓰는 속도는 decode6예요. Oct10 비교에서 180W로 돌린 vLLM DFlash2 k=7은 greedy 5개 프롬프트 평균 181.8 tok/s, open-jet megakernel MTP d=4는 94.1 tok/s였습니다. 생각 모드를 켠 네 프롬프트 평균도 각각 156.3과 75.6 tok/s로 vLLM 쪽이 높았어요.

2026년 10월 10일 CMP 170HX 한 장의 측정 결과
작업·입력 조건vLLM DFlash2 k=7open-jet MTP d=4
개별 chat · 입력 3,163 / 3,158토큰109.42 tok/s · TTFT 1.6515초 · 출력 58/12877.20 tok/s · TTFT 2.0662초 · MTP 없음: 48.74 tok/s
greedy 평균 · 5개 프롬프트181.8 tok/s94.1 tok/s
thinking 평균 · 4개 프롬프트156.3 tok/s75.6 tok/s

CMP 64GiB·74 SM, HBM 1,728MHz, PCIe Gen2 x16을 180W로 제한하고 강제 공기 흐름을 적용해 한 요청씩 처리했어요. vLLM 0.27.1은 stock guest driver 580.178.04와 host unlock commit 88e39ce를, open-jet은 공개 커밋 93c2b9a를 사용했습니다.

작업대 위에 CMP 170HX 카드 한 장과 돋보기, 공책이 놓여 있습니다.
속도 비교 결과는 카드 수와 전력 제한, 입력 길이를 함께 봐야 해요.

서버를 켜둘 때와 다시 시작할 때

두 실행은 모두 Qwen3.8-27B의 4비트 가중치를 썼지만 파일이 달랐어요. open-jet은 특정 revision의 Qwen3.8-27B-Q4_K_M.gguf를, vLLM은 W4A16 AutoRound 모델과 DFlash2 drafter를 사용했습니다. 양자화7 형식과 체크포인트8가 출력과 속도에 영향을 줄 수 있으므로 이 표는 해당 두 구성을 비교한 결과예요.

vLLM 서버는 CUDA9 graph capture와 DFlash2 준비를 포함해 427초 뒤 사용할 수 있었고, open-jet은 수초 만에 시작했어요. 하루 한 번 띄워 계속 쓰면 초기 준비 시간은 하루 한 번의 비용이고, 자주 다시 시작하는 개발 중에는 반복해서 기다릴 수 있습니다. 반대로 서버가 계속 켜져 있을 때는 요청별 decode 속도가 더 직접적인 비교 기준이에요.

재현할 때는 공개된 vLLM 레시피의 핀을 따라요

측정에 쓰인 vLLM은 0.27.1이에요. 연결된 syv.ai 레시피의 69ba4d0688c6ae76cb9d3c4a5c3b36445e1b040c 커밋과 requirements.lock을 기준으로 준비하세요. 서버는 SPEC=dflash2, CTX=fast, MAX_SEQS=1, DFLASH_TOKENS=7, GPU_UTIL=0.90, BF1610 KV 캐시11로 설정됐어요. 문맥 설정값은 65,536이고, 모델 파일과 실행 순서는 reproduce.ipynb와 recipe.json에 있어요.

새 환경에서 재현할 때는 CUDA 컴파일러 설치 경로도 확인해야 해요. 공개 노트북에서는 nvidia-cuda-nvcc 13.4.92가 nvidia/cu13/에 설치돼 import nvidia.cuda_nvcc에서 오류가 났어요. 연구자가 적용한 경로 수정은 노트북의 appendix에 있어요.

open-jet을 시험하려면 측정에 쓰인 커밋을 받아 GA100용으로 빌드하세요. 아래 명령은 CUDA 12.8.93과 해당 저장소의 의존성을 준비한 환경에서 실행합니다. 서버 실행과 모델 다운로드 순서는 연결된 재현 노트북을 따라가세요.

고정된 open-jet 소스에서 CMP 아키텍처로 빌드
git clone https://github.com/L-Forster/open-jet.git
cd open-jet
git checkout 93c2b9abee50ea2ea41981c406cfd201989e4d58
make ARCH=sm_80
PixelML의 공개 측정 커밋과 CUDA 12.8.93 조건에서 사용한 빌드 명령입니다. 해당 저장소의 고정 커밋에서 실행하세요.
그래픽카드가 장착된 워크스테이션 옆 모니터에 빈 창이 열려 있습니다.
vLLM 레시피를 따라갈 때는 실행 버전과 모델 파일을 먼저 고정하세요.

내가 쓰는 문맥 길이에서 다시 판단해요

짧은 프롬프트에서 가장 높은 디코드 속도를 얻고 싶다면, 공개된 한 장 구성에서는 vLLM DFlash2가 유력한 출발점이에요. 서버를 다시 켜는 시간이 더 중요하거나 설치가 간단한 경로가 필요하면 open-jet의 짧은 시작 시간도 고려할 수 있습니다. 다만 open-jet의 180W 결과와 vLLM 결과는 체크포인트 형식도 다르므로, 최종 선택 전에는 같은 입력과 응답 설정으로 비교해야 해요.

입력을 늘린 시험에서는 요청 방식에 따라 결과가 달랐어요. vLLM은 6,603토큰의 /v1/completions 과제를 완료했지만, 9,472토큰의 채팅 요청에서는 Xid 31 오류로 종료됐어요. open-jet은 18,976토큰 입력까지 완료했어요. 긴 문서를 주로 다룬다면 이 완료 기록을 기준으로 엔진을 고르고, 실제 문서로 시험해 보세요.

결정하기 전에 실제 작업에서 자주 넣는 프롬프트 길이와 답변 길이를 고정해요. 서버 로그에서 엔진이 요청을 끝까지 처리하는지, 첫 토큰까지 걸린 시간과 생성 속도, 완료 여부를 각각 기록합니다. 더 긴 입력이 필요하면 문맥을 한 번에 늘리기보다 사용 중인 엔진과 checkpoint에서 정상 완료되는 길이를 단계적으로 확인하고, 실패가 나면 검증된 범위를 넘긴 것으로 표시해요.

개방형 워크스테이션에 GPU 카드 두 장이 장착되어 있고 옆에 팬과 눈금 없는 측정기가 있습니다.
측정값을 내 작업에 적용하려면 입력 길이와 완료 여부를 같은 기준으로 비교하세요.

용어 각주

  1. GGUF — 모델 정보를 담는 파일 형식으로 llama.cpp 계열 도구에서 널리 사용됩니다.

    본문으로 돌아가기
  2. MTP — 한 번에 여러 미래 토큰을 예측하도록 학습하는 목표 또는 이를 수행하는 모델 구성입니다. 추측 디코딩에서는 이 예측을 후보 토큰으로 제안할 수 있습니다.

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

    본문으로 돌아가기
  4. 토큰 — 모델이 입력이나 출력을 나누어 처리하는 단위입니다.

    본문으로 돌아가기
  5. 프리필 — LLM이 입력 프롬프트를 읽고 각 토큰의 내부 표현을 계산하는 단계입니다. 입력이 길수록 처리할 토큰이 많아집니다.

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

    본문으로 돌아가기
  7. 양자화 — 모델의 가중치나 계산값을 더 적은 비트로 표현해 저장 공간과 메모리 사용량을 줄이는 방법입니다. 표현 단계가 거칠어져 정확도에도 영향을 줄 수 있습니다.

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

    본문으로 돌아가기
  9. CUDA — NVIDIA GPU에서 범용 계산을 실행하기 위한 소프트웨어 플랫폼입니다.

    본문으로 돌아가기
  10. BF16 — 모델 수치를 저장하고 계산하는 16비트 부동소수점 형식입니다. FP32와 같은 폭의 지수부를 써 넓은 값 범위를 표현합니다.

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

    본문으로 돌아가기

자주 묻는 질문

이 글에서 가장 먼저 확인할 것은 무엇인가요?
Qwen3.8-27B를 CMP 170HX에서 실행하면 GGUF Q4_K_M 또는 W4A16 AutoRound 가중치를 서빙 엔진에 올려 텍스트 요청에 답할 수 있어요. 2026년 10월 10일 한 장 측정의 개별 약 3.2K-token 요청에서는 vLLM DFlash2가 109.42 tok/s, open-jet MTP d=4가 77.20 tok/s를 기록했어요. 별도로 greedy 5개 프롬프트의 평균도 각각 181.8과 94.1 tok/s였어요.