--- license: mit tags: - qwen3 - qwen3-next - 80b - gb10 - nvidia - gpu - ollama - optimization - gguf - quantization --- # Qwen3-Next-80B on NVIDIA DGX Spark(GB10 Grace Blackwell GPU): 완전한 가이드 ## 📋 개요 이 문서는 **NVIDIA GB10 GPU**에서 **Qwen3-Next-80B** 모델을 실행하기 위한 완전한 가이드입니다. vLLM의 호환성 문제를 해결하기 위해 **Ollama**로 전환하고, 60GB VRAM을 최대한 활용하는 최적화 설정을 포함합니다. **작성일**: 2025-12-20 **테스트 환경**: GB10 GPU (60GB VRAM), CUDA 12.1, PyTorch 2.9.x **모델**: [Qwen/Qwen3-Next-80B-A3B-Instruct-GGUF](https://huggingface.co/Qwen/Qwen3-Next-80B-A3B-Instruct-GGUF) (Q5_K_M 양자화) --- ## 🎯 주요 성과 ✅ **vLLM 호환성 문제 해결**: GB10에서 vLLM의 `EngineCore exiting` 오류를 Ollama로 우회 ✅ **Qwen3-Next-80B Q5_K_M 모델 성공적으로 실행**: GGUF 양자화 모델 사용 ✅ **성능 최적화**: 동시 처리 8개, Context Window 32K 토큰 지원 ✅ **통합 시작 스크립트**: Ollama부터 NIKA 서비스까지 원클릭 시작 --- ## ⚠️ vLLM에서 발생한 문제 ### 문제 증상 - `EngineCore exiting` 오류로 모델 로딩 후 즉시 종료 - `RuntimeError: Engine core initialization failed` - 다양한 환경변수와 플래그 시도에도 해결되지 않음 ### 시도한 해결책 (모두 실패) 1. **환경변수 조정** - `VLLM_DISABLE_CUSTOM_ALL_REDUCE=1` - `VLLM_WORKER_MULTIPROC_METHOD=spawn` - `VLLM_ENGINE_INIT_TIMEOUT=1200` - `VLLM_IPC_RETRY_COUNT=20` - 기타 GB10 호환성 관련 환경변수 다수 2. **vLLM 버전 변경** - `vllm/vllm-openai:nightly` (최신 개발 버전) - `vllm/vllm-openai:latest` (안정 버전) - 소스 빌드 시도 3. **결론** - GB10 아키텍처와 vLLM의 IPC 통신 방식 간 근본적인 호환성 문제로 판단 - vLLM 실행 시 초기화 단계에서 멈춤(Hang) 현상 발생 - 로그상에서 GPU 간 통신(NCCL)이 맺어지지 않고 타임아웃(Timeout) 발생 - Ray(분산 처리 프레임워크)가 워커 프로세스와 통신하지 못해 죽는 현상 - GB10의 특수 아키텍처인 **NVLink-C2C (Chip-to-Chip)**와 vLLM이 사용하는 통신 라이브러리(NCCL) 간의 호환성 문제 - 기본 P2P(Peer-to-Peer) 통신이 ARM64 환경 드라이버 충돌로 인해 제대로 수행되지 않음 - "강제 TCP 전환" (The TCP Workaround) - vLLM on GB10 (ARM64): 아직 소프트웨어 생태계(PyTorch, Triton, NCCL)가 완벽하게 GB10의 하드웨어 특성을 받아주지 못함. (특히 직접 빌드해야 하는 경우가 많아 의존성 지옥 발생) - **Ollama로 전환 결정** --- ## 🚀 Ollama로 전환 ### 1. Ollama 설치 및 모델 다운로드 ```bash # Ollama 설치 (이미 설치되어 있다면 생략) # Ubuntu/Debian curl -fsSL https://ollama.com/install.sh | sh # Qwen3-Next-80B Q5_K_M 모델 다운로드 (HuggingFace) ollama pull hf.co/Qwen/Qwen3-Next-80B-A3B-Instruct-GGUF:Q5_K_M ``` ### 2. 모델 이름 변경 (선택사항) ```bash # 다운로드한 모델을 더 짧은 이름으로 등록 ollama create qwen3-next-80b-q5km -f /path/to/Modelfile ``` ### 3. Modelfile 생성 (템플릿 문제 해결) 초기 다운로드 시 빈 응답이 발생할 수 있습니다. 이는 템플릿 문제로, 다음 Modelfile을 사용하세요: ```modelfile FROM qwen3-next-80b-q5km PARAMETER num_thread 8 PARAMETER num_ctx 32768 PARAMETER stop "<|im_end|>" PARAMETER stop "<|endoftext|>" PARAMETER stop "<|eot_id|>" TEMPLATE """{{- $lastUserIdx := -1 -}} {{- range $idx, $msg := .Messages -}} {{- if eq $msg.Role "user" }}{{ $lastUserIdx = $idx }}{{ end -}} {{- end }} {{- if or .System .Tools }}<|im_start|>system {{ if .System }}{{ .System }} {{ end }} {{- if .Tools }}# Tools You may call one or more functions to assist with the user query. You are provided with function signatures within XML tags: {{- range .Tools }} {"type": "function", "function": {{ .Function }}} {{- end }} For each function call, return a json object with function name and arguments within XML tags: {"name": , "arguments": } {{- end -}} <|im_end|> {{ end }} {{- range $i, $_ := .Messages }} {{- $last := eq (len (slice $.Messages $i)) 1 -}} {{- if eq .Role "user" }}<|im_start|>user {{ .Content }}<|im_end|> {{ else if eq .Role "assistant" }}<|im_start|>assistant {{ if (and $.IsThinkSet (and .Thinking (or $last (gt $i $lastUserIdx)))) -}} {{ .Thinking }} {{ end -}} {{ if .Content }}{{ .Content }}{{ end }} {{- if .ToolCalls }} {{- range .ToolCalls }} {"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}} {{- end }} {{- end }}{{ if not $last }}<|im_end|> {{ end }} {{- else if eq .Role "tool" }}<|im_start|>user {{ .Content }} <|im_end|> {{ end }} {{- if and (ne .Role "assistant") $last }}<|im_start|>assistant {{ end }} {{- end }}""" SYSTEM """You are a helpful AI assistant.""" ``` --- ## ⚡ 성능 최적화 (60GB VRAM 활용) ### 핵심 최적화 설정 60GB VRAM이 충분히 남아있을 때, 다음 설정으로 성능을 극대화할 수 있습니다: #### 1. 동시 처리량 증가 (`OLLAMA_NUM_PARALLEL`) **가장 중요**: RAG 시스템은 보통 [검색 → 요약 → 답변] 과정을 거치며 여러 번 모델을 호출합니다. 기본값(1)이라면 요청이 2개만 동시에 들어와도 한 명은 줄 서서 기다려야 합니다. ```bash export OLLAMA_NUM_PARALLEL=8 # 60GB면 대략 8~10명 동시 처리 가능 ``` **효과**: 질문 4개가 동시에 들어와도 4개 다 즉시 답변 시작 (체감 속도 4배 향상) #### 2. Context Window 확장 (`OLLAMA_NUM_CTX`) 기본값(4096 토큰)은 A4용지 5~6장 분량입니다. RAG 문서를 많이 넣으면 잘립니다. ```bash export OLLAMA_NUM_CTX=32768 # 32K 토큰 (기본값의 8배) ``` **효과**: PDF 매뉴얼 수십 페이지를 한 번에 입력(Prompt)으로 넣어도 OOM 없이 한 방에 답변 (나눠서 여러 번 물어볼 필요 없음 → 전체 시간 단축) #### 3. KV Cache 양자화 (선택사항) 60GB나 남기 때문에 굳이 안 해도 되지만, 만약 `num_ctx`를 128k(책 한 권)까지 늘리고 싶다면: ```bash export OLLAMA_KV_CACHE_TYPE=q8_0 # KV Cache 양자화 ``` ### 전체 최적화 스크립트 ```bash #!/bin/bash # Ollama 성능 최적화 환경변수 설정 # 60GB VRAM을 활용한 동시 처리량 및 문맥 크기 최적화 export OLLAMA_NUM_PARALLEL=8 # 동시 처리 요청 수 (60GB VRAM 기준 8~10명 가능) export OLLAMA_MAX_LOADED_MODELS=1 export OLLAMA_FLASH_ATTENTION=1 export OLLAMA_NUM_CTX=32768 # Context Window 확장 (기본 4096 → 32768) export OLLAMA_KV_CACHE_TYPE=q8_0 # KV Cache 양자화 (선택사항, 128k까지 확장 시 유용) ``` ### Ollama 서버 시작 (최적화 설정 적용) ```bash # 최적화 환경변수 로드 source setup_ollama_optimization.sh # Ollama 서버 시작 nohup env OLLAMA_NUM_PARALLEL=8 \ OLLAMA_NUM_CTX=32768 \ OLLAMA_KV_CACHE_TYPE=q8_0 \ ollama serve > /tmp/ollama_server.log 2>&1 & ``` --- ## 📊 성능 비교 ### 최적화 전 vs 후 | 항목 | 최적화 전 | 최적화 후 | 개선율 | |------|----------|----------|--------| | 동시 처리 | 1개 | 8개 | **8배** | | Context Window | 4,096 토큰 | 32,768 토큰 | **8배** | | 긴 문서 처리 | 여러 번 분할 필요 | 한 번에 처리 | **시간 단축** | | 동시 요청 대기 | 큐잉 발생 | 즉시 처리 | **체감 속도 향상** | --- ## 🐛 문제 해결 ### 1. 빈 응답 문제 **증상**: 모델이 로딩되지만 응답이 비어있음 **해결책**: Modelfile의 TEMPLATE 섹션을 Qwen3 표준 형식으로 수정 (위의 Modelfile 예시 참조) ### 2. OOM (Out of Memory) 오류 **증상**: 모델 로딩 시 메모리 부족 **해결책**: - `OLLAMA_NUM_PARALLEL` 값을 줄이기 (8 → 4) - `OLLAMA_NUM_CTX` 값을 줄이기 (32768 → 16384) - 다른 프로세스의 메모리 사용량 확인 ### 3. API 연결 실패 **증상**: `curl: connection refused` 또는 타임아웃 **해결책**: ```bash # Ollama 프로세스 확인 ps aux | grep "ollama serve" # 포트 확인 netstat -tlnp | grep 11434 # Ollama 재시작 pkill -f "ollama serve" ollama serve ``` --- ## 📝 API 사용 예시 ### Python ```python import requests url = "http://localhost:11434/api/chat" payload = { "model": "qwen3-next-80b-q5km", "messages": [ {"role": "user", "content": "안녕하세요!"} ], "options": { "num_ctx": 32768, # Context Window 확장 "num_predict": 512, "temperature": 0.7, "top_p": 0.9 } } response = requests.post(url, json=payload) print(response.json()) ``` ### cURL ```bash curl http://localhost:11434/api/chat \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3-next-80b-q5km", "messages": [ {"role": "user", "content": "안녕하세요!"} ], "options": { "num_ctx": 32768, "num_predict": 512 } }' ``` --- ## 🔗 관련 리소스 - [Ollama 공식 문서](https://ollama.com/docs) - [Qwen3-Next 모델 정보](https://huggingface.co/Qwen/Qwen3-Next-80B-A3B-Instruct-GGUF) - [GGUF 양자화 가이드](https://github.com/ggerganov/llama.cpp) --- ## 🙏 감사의 말 이 가이드는 GB10 GPU에서 Qwen3-Next-80B를 실행하기 위해 수많은 시행착오를 거쳐 완성되었습니다. vLLM의 호환성 문제를 Ollama로 우회하고, 60GB VRAM을 최대한 활용하는 최적화 방법을 찾아냈습니다. **다른 사람들이 같은 고생을 하지 않기를 바라며 이 문서를 공유합니다.** --- ## 📄 라이선스 이 문서는 MIT 라이선스 하에 배포됩니다. 자유롭게 사용, 수정, 배포하실 수 있습니다. --- **작성자**: NIKA 개발팀 **최종 업데이트**: 2025-12-20