실행 프로그램과 확장

최종 업데이트

Basalt로 Qwen3.8 Flash-Next가 665 tok/s? 설치와 GPU 조건

Basalt로 Qwen3.8 Flash-Next를 더 빠르게 실행하려면?

Basalt는 Linux x86-64와 Blackwell(sm_120) GPU1에서 Qwen3.8-Flash-Next를 실행하는 추론 엔진이에요. .basalt 모델 팩과 프롬프트2를 받아 OpenAI·Anthropic 호환 API3로 텍스트 답변을 돌려줘요. VRAM4에 들어가지 않는 전문가 가중치는 시스템 RAM5에서 읽어 실행합니다.

Linux PC에서 준비된 Qwen3.8-Flash-Next 모델 팩을 Basalt 서버에 연결하고 프롬프트를 보내면 답변이 로컬 API로 돌아와요. 지원 조건을 확인한 뒤 IQ3_XXS 모델을 내려받고 서버를 빌드해 첫 응답을 받는 순서까지 따라가요.

Strata에서 파생됐고, 다음 토큰을 제안하는 모델을 다듬었어요

Basalt는 Strata에서 파생된 엔진이에요. IQ3_XXS·IQ3_S·Q2_0 팩에는 Qwen3.8 Flash-Next가 생성한 답변으로 추가 학습한 MTP6 초안 모델이 들어 있어요. 이 모델이 다음 토큰7 여러 개를 먼저 제안하고 본 모델이 확인하므로, 제안이 많이 받아들여질수록 생성 속도를 높일 수 있어요.

Basalt는 Strata에서 파생된 엔진으로, 이 모델을 실행하는 서버와 호환 API를 제공해요. 채팅 화면이 필요하면 OpenAI·Anthropic 호환 클라이언트를 연결해요.

RAM과 VRAM이 전문가 가중치를 나눠 담아요

Qwen3.8-Flash-Next는 mixture-of-experts(MoE8) 모델이에요. 입력 토큰마다 전체 전문가를 모두 계산하는 대신 선택된 전문가를 사용합니다. Basalt는 자주 쓸 전문가를 GPU 메모리(VRAM)의 캐시에 두고, VRAM에 들어가지 않는 전문가 가중치는 시스템 RAM에 상주시켜 필요할 때 가져와요. 이 구조라면 모델 파일을 전부 VRAM에 올리지 않고도 실행할 수 있지만, RAM은 남는 부분을 실제로 보관할 만큼 커야 해요.

IQ3_XXS 파일은 74.4 GiB이고, 그중 전문가 가중치는 40.0 GiB예요. IQ3_S는 각각 81.0 GiB와 46.8 GiB입니다. 먼저 저장장치에는 모델 파일 전체를 받을 공간을 확보하세요. 실행할 때는 GPU에 올린 캐시와 RAM에 남길 전문가 가중치, 운영체제가 쓸 메모리까지 함께 준비해야 해요.

빈 모니터와 키보드가 있는 책상에 소형 워크스테이션과 메모리 모듈 두 개가 놓여 있습니다.
Basalt는 모델 가중치 일부를 GPU 메모리에, 나머지를 시스템 메모리에 둬요.

두 GPU 구성에서 산문은 354, 구조화 출력은 665 tok/s였어요

아래는 Qwen3.8-Flash-Next GSQ-RCO IQ3_XXS를 한 요청씩 생성한 속도예요. RTX 5090만 쓴 구성에서는 산문 316 tok/s, 구조화 출력 585 tok/s가 보고됐고, RTX 5060 Ti를 전문가용 추가 계층으로 붙인 구성에서는 두 값이 각각 354 tok/s와 665 tok/s였어요.

Basalt 개발자가 공개한 IQ3_XXS 속도
GPU 구성산문 생성구조화 출력
RTX 5090 + RTX 5060 Ti354 tok/s665 tok/s
RTX 5090316 tok/s585 tok/s

두 GPU 구성은 Ryzen 9 9950X, RAM 32GB, GPU 전력 제한 400W에서 측정했어요. 모델 카드의 별도 IQ3_S 동시 처리 결과는 요청 1개에서 338 tok/s, 8개 요청을 합쳐 623 tok/s예요. 623 tok/s는 요청당 속도가 아니라 전체 처리량9이며, 이 표의 IQ3_XXS와는 다른 양자화10 파일을 사용했어요. 두 속도 결과는 개발자가 공개한 측정값이에요.

열린 워크스테이션 케이스 안에 그래픽카드 두 장이 위아래로 장착되어 있습니다.
5090 한 장으로 낸 값과 5090+5060 Ti의 합산 구성은 따로 읽어야 해요.

설치 전에 Linux와 GPU 조건부터 맞춰요

Basalt를 빌드하고 서버로 실행하려면 Linux x86-64, AVX2 CPU11, NVIDIA Blackwell compute capability 12.0(sm_120), CUDA12 13, CMake 3.24 이상, C++20 컴파일러가 필요해요. Python 서버에는 Python 3.10 이상과 저장소의 requirements.txt 패키지도 필요해요.

RAM은 VRAM에 담지 못한 전문가 가중치를 보관해요. 선택한 모델 팩의 나머지 가중치와 운영체제가 쓸 공간이 RAM에 남는지 확인해요.

저장소 루트에서 Release 빌드와 Python 서버 환경을 준비해요. 빌드가 끝나면 실행 파일은 bin/basalt에 생깁니다.

엔진 빌드와 서버 패키지 설치
git clone https://github.com/jesdga95/basalt.git
cd basalt
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt

IQ3_XXS 모델 팩을 저장소 루트에 받아요

Basalt는 Qwen 가중치를 새로 변환할 필요 없이 Hugging Face에 올라온 완성된 .basalt 파일을 바로 읽어요. 여기서는 IQ3_XXS 팩을 받아요. 파일은 74.4 GiB이므로 다운로드를 시작하기 전에 저장장치에 그만큼의 빈 공간을 확보하세요.

저장소 루트에서 models 폴더를 만든 뒤 아래 명령을 실행해요. 완료되면 models 안에 같은 이름의 파일이 생겨야 해요.

IQ3_XXS 모델 다운로드
mkdir -p models
curl -fL --output models/Qwen3.8-FN-GSQ-RCO-IQ3_XXS.basalt https://huggingface.co/jesdga/Qwen3.8-Flash-Next-Basalt/resolve/main/Qwen3.8-FN-GSQ-RCO-IQ3_XXS.basalt

서버는 처음에 localhost에서만 실행해요

처음에는 서버가 127.0.0.1에서만 요청을 받도록 설정해요. 다른 컴퓨터에서 접속할 필요가 있다면 실행 명령에 --api-key를 지정해 인증을 켜야 합니다. API 키는 설정 파일에 저장할 수 없는 명령줄 전용 옵션이에요.

설정 파일에 모델과 엔진 옵션을 함께 적어요

모델 파일에는 엔진 실행 옵션이 들어 있지 않아요. 최신 저장소 README의 기본값은 문맥 4096, fp1613 KV, 추측 디코딩14 없음, 전문가 캐시 없음이라 성능을 재현하려면 명시적으로 설정해야 해요. 모델 경로와 서버 포트는 server 영역에, 캐시·prefill15·추측 디코딩·문맥 길이는 engine 영역에 넣어요.

아래 JSON을 저장소 루트의 basalt_config.json으로 저장하세요. 첫 실행은 max-context를 16384로 두고, expert-cache와 prefill은 auto를 사용해요. spec: 7은 초안 토큰을 최대 7개 제안하는 설정이고, spec-min-p: 0.5는 그 제안의 확률 기준입니다. 응답을 확인한 뒤 문맥과 캐시를 조정하세요.

콘솔의 [server] engine: 줄에서 적용된 설정을 확인해요. RAM에 여유가 있는 경우에만 resident-experts를 추가해 RAM 상주 전문가를 쓰고, 그렇지 않으면 auto 캐시로 먼저 실행하세요. 응답이 확인된 뒤 max-context와 캐시 설정을 한 번에 하나씩 조정하면 원인을 추적하기 쉬워요.

첫 실행용 basalt_config.json
{
  "server": {
    "model": "models/Qwen3.8-FN-GSQ-RCO-IQ3_XXS.basalt",
    "alias": "Qwen 3.8 FN",
    "gpu": "0",
    "host": "127.0.0.1",
    "port": 8080
  },
  "engine": {
    "expert-cache": "auto",
    "prefill": "auto",
    "spec": 7,
    "spec-min-p": 0.5,
    "max-context": 16384,
    "kv": "int8",
    "vram-reserve-mib": 700
  }
}
설정 파일로 서버 실행
bin/basalt serve --config basalt_config.json
책상 위에 그래픽카드 두 장과 메모리 모듈 두 개가 놓여 있고 옆에 공책이 있습니다.
먼저 모델 팩 크기와 RAM 여유를 맞추고, 그다음 GPU 캐시와 문맥 설정을 조정하세요.

정상 응답과 첫 오류를 확인해요

다른 터미널에서 /v1/models 경로를 열어 모델 ID가 표시되는지 보고, 간단한 요청을 보내 응답이 오는지 확인하세요. 예시에서 모델 ID는 Qwen 3.8 FN이에요. 서버 응답에는 요청한 메시지에 대한 모델 텍스트가 들어오고, 브라우저에서 http://127.0.0.1:8080/을 열면 처리 속도와 요청 로그가 있는 통계 화면을 볼 수 있어요.

모델 목록에서 Qwen 3.8 FN이 보이고, 두 번째 요청의 JSON 응답에 choices[0].message.content가 오면 첫 호출이 성공한 거예요.

모델 목록이 비면 설정의 model 경로가 실제 파일을 가리키는지, 다운로드가 끝났는지 먼저 보세요. CUDA 오류나 GPU 미감지 메시지가 나오면 드라이버·CUDA 13과 카드의 compute capability가 지원 조건에 맞는지 확인해요. 서버가 뜨지만 모델이 로딩되지 않으면 콘솔의 첫 경고에서 RAM 부족, VRAM reserve, KV 캐시16가 차지하는 공간을 살펴보고 문맥 길이를 낮춰 다시 시작하세요.

모델 확인과 첫 채팅 요청
curl http://127.0.0.1:8080/v1/models
curl http://127.0.0.1:8080/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"Qwen 3.8 FN","messages":[{"role":"user","content":"Explain what a mixture-of-experts model is in one sentence."}],"max_tokens":80}'

지원 하드웨어와 다음에 비교할 실행 경로

Linux와 지원 GPU, 모델에 필요한 RAM이 준비되어 있으면 IQ3_XXS 파일로 localhost API를 먼저 실행해요. 요청이 성공하면 실제 작업에 필요한 문맥과 캐시가 안정적으로 동작하는지 확인하고 설정을 조정해요.

Strata 계열의 다른 실행 방법과 GPU 구성을 비교하거나, RTX 5090에서 쓸 모델을 찾거나, 여러 엔진의 공개 속도를 살펴보려면 아래 관련 가이드를 이어서 읽어 보세요.

용어 각주

  1. GPU — 많은 계산을 병렬로 처리하는 프로세서입니다. AI 모델 실행에서는 모델 계산을 맡습니다.

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

    본문으로 돌아가기
  3. API — 프로그램의 기능을 다른 코드에서 호출하기 위한 약속된 인터페이스입니다.

    본문으로 돌아가기
  4. VRAM — 그래픽카드의 GPU가 사용하는 메모리입니다. 모델 가중치와 계산 중간값을 저장합니다.

    본문으로 돌아가기
  5. 시스템 RAM — 프로그램이 실행되는 동안 데이터를 임시로 보관하는 시스템 메모리입니다.

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

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

    본문으로 돌아가기
  8. MoE — 여러 전문가 하위망 중 일부를 입력에 따라 선택해 사용하는 모델 구조입니다. 총 파라미터 수와 한 토큰 처리에 활성화되는 파라미터 수는 다를 수 있습니다.

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

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

    본문으로 돌아가기
  11. CPU — 운영체제와 일반 프로그램 명령을 실행하고, AI에서는 전처리·데이터 이동 등 범용 연산을 맡는 중앙 처리 장치입니다.

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

    본문으로 돌아가기
  13. FP16 — 16비트 부동소수점 수치 형식입니다. BF16과 비트 수는 같지만 지수부와 유효숫자 배분이 다릅니다.

    본문으로 돌아가기
  14. 추측 디코딩 — 초안 모델·MTP 헤드·반복 문맥 조회가 출력 후보를 먼저 만들고, 본 모델이 후보를 검증해 확정하는 생성 기법입니다.

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

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

    본문으로 돌아가기

자주 묻는 질문

이 글에서 가장 먼저 확인할 것은 무엇인가요?
Basalt는 Linux x86-64와 Blackwell(sm_120) GPU에서 Qwen3.8-Flash-Next를 실행하는 추론 엔진이에요. .basalt 모델 팩과 프롬프트를 받아 OpenAI·Anthropic 호환 API로 텍스트 답변을 돌려줘요. VRAM에 들어가지 않는 전문가 가중치는 시스템 RAM에서 읽어 실행합니다.
필요한 메모리는 어느 정도인가요?
Qwen3.8-Flash-Next는 mixture-of-experts(MoE) 모델이에요. 입력 토큰마다 전체 전문가를 모두 계산하는 대신 선택된 전문가를 사용합니다. Basalt는 자주 쓸 전문가를 GPU 메모리(VRAM)의 캐시에 두고, VRAM에 들어가지 않는 전문가 가중치는 시스템 RAM에 상주시켜 필요할 때 가져와요. 이 구조라면 모델 파일을 전부 VRAM에 올리지 않고도 실행할 수 있지만, RAM은 남는 부분을 실제로 보관할 만큼 커야 해요.
선택하지 않는 편이 좋은 경우는 언제인가요?
Basalt는 Qwen 가중치를 새로 변환할 필요 없이 Hugging Face에 올라온 완성된 .basalt 파일을 바로 읽어요. 여기서는 IQ3_XXS 팩을 받아요. 파일은 74.4 GiB이므로 다운로드를 시작하기 전에 저장장치에 그만큼의 빈 공간을 확보하세요.