LLM 구성¶
범용 LLM 6종을 미리 구성했습니다. 각 LLM 모델에 맞는 최적의 구동 스크립트를 제공합니다.
구성 내용¶
구성 요약¶
| LLMs | 구동방식 | 실행 스크립트 | 모델 크기 | Port |
|---|---|---|---|---|
| openai/gpt-oss-120b | TensorRT-LLM | start-gpt-oss-120b.sh |
183GB | 8355 |
| openai/gpt-oss-20b | TensorRT-LLM | start-gpt-oss-20b.sh |
39GB | 8356 |
| Qwen/Qwen3-30B-A3B-Instruct-2507 | vLLM | start-qwen3-30b.sh |
57GB | 8357 |
| Qwen/Qwen3-Coder-30B-A3B-Instruct | vLLM | start-qwen3-corder-30b.sh |
57GB | 8358 |
| Qwen/Qwen2.5-VL-32B-Instruct | vLLM | start-qwen2.5-vl-32b.sh |
64GB | 8359 |
| nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16 | vLLM | start-nemotron-3-nano-30b.sh |
59GB | 8360 |
| mistralai/Devstral-Small-2-24B-Instruct-2512 | vLLM | start-devstral-small-2-24b.sh |
48GB | 8361 |
| qwen3-vl:32b | Ollama | start-qwen3-vl-32b.sh |
20GB | 11434 |
실행 방법¶
모델별 실행 스크립트를 실행하여 모델을 구동합니다.
메모리 제약
DGX Spark의 메모리 제약으로 한 번에 하나의 모델만 구동할 수 있습니다.
[참고] 모델 다운로드 방법
새로운 모델이 필요한 경우 인터넷이 가능한 환경에서 HuggingFace 전용 유틸리티로 다운로드할 수 있습니다.
다운로드 경로
~/.cache/huggingface/hub/
1단계: HuggingFace CLI 설치
2단계: HuggingFace 로그인
hf 명령어를 못 찾는 경우
실행 파일 경로를 직접 지정: ~/.local/bin/hf auth login
3단계: 모델 다운로드
hf download openai/gpt-oss-120b
hf download openai/gpt-oss-20b
hf download Qwen/Qwen3-30B-A3B-Instruct-2507
hf download Qwen/Qwen3-Coder-30B-A3B-Instruct
hf download Qwen/Qwen3-VL-30B-A3B-Instruct
hf download nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16
hf download mistralai/Devstral-Small-2-24B-Instruct-2512
hf download PaddlePaddle/PaddleOCR-VL
이해를 돕기 위한 자료
아래 내용대로 DGX Spark에 이미 구성이 되어 있습니다.
과정을 설명하기 위한 자료로 작성했습니다.
TensorRT-LLM 구동 방법¶
openai/gpt-oss-120b¶
Docker 이미지 준비¶
nvidia에서 제공하는 TensorRT-LLM 이미지를 사용합니다.
필요 파일 준비¶
gpt-oss-120b 모델을 실행하기 위한 추가 파일들을 준비합니다.
| 파일 | 경로 | 용도 |
|---|---|---|
extra-llm-api-config.yml |
./ |
TensorRT-LLM Serving 추가 설정 |
o200k_base.tiktoken |
./harmony-reqs/ |
GPT 계열 토큰화 라이브러리 |
cl100k_base.tiktoken |
./harmony-reqs/ |
GPT 계열 토큰화 라이브러리 |
extra-llm-api-config.yml 내용
tiktoken 파일 다운로드
실행 스크립트¶
~/lab/LLMs/start-gpt-oss-120b.sh
#!/usr/bin/bash
export PORT=8355
export CONTAINER="gpt-oss-120b"
export MODEL_HANDLE="openai/gpt-oss-120b"
docker stop $CONTAINER 2>/dev/null
docker rm $CONTAINER 2>/dev/null
docker run -d \
--name $CONTAINER \
--gpus all \
--ipc host \
-p $PORT:8355 \
-e MODEL_HANDLE="$MODEL_HANDLE" \
-v $HOME/.cache/huggingface/:/root/.cache/huggingface/ \
-v ./harmony-reqs/:/tmp/harmony-reqs/ \
-v ./extra-llm-api-config.yml/:/tmp/extra-llm-api-config.yml/ \
--restart unless-stopped \
nvcr.io/nvidia/tensorrt-llm/release:spark-single-gpu-dev \
bash -c '
export TIKTOKEN_ENCODINGS_BASE="/tmp/harmony-reqs" && \
trtllm-serve "$MODEL_HANDLE" \
--max_batch_size 64 \
--trust_remote_code \
--host 0.0.0.0 \
--port 8355 \
--extra_llm_api_options /tmp/extra-llm-api-config.yml
'
실행 점검¶
API 테스트
openai/gpt-oss-20b¶
gpt-oss-120b와 동일한 방식으로 구성했습니다. 모델명과 포트만 변경했습니다.
Docker 이미지 준비¶
gpt-oss-120b와 동일한 이미지를 사용합니다.
필요 파일 준비¶
gpt-oss-120b와 동일한 파일을 준비합니다.
실행 스크립트¶
~/lab/LLMs/start-gpt-oss-20b.sh
#!/usr/bin/bash
export PORT=8356
export CONTAINER="gpt-oss-20b"
export MODEL_HANDLE="openai/gpt-oss-20b"
docker stop $CONTAINER 2>/dev/null
docker rm $CONTAINER 2>/dev/null
docker run -d \
--name $CONTAINER \
--gpus all \
--ipc host \
-p $PORT:8355 \
-e MODEL_HANDLE="$MODEL_HANDLE" \
-v $HOME/.cache/huggingface/:/root/.cache/huggingface/ \
-v ./harmony-reqs/:/tmp/harmony-reqs/ \
-v ./extra-llm-api-config.yml/:/tmp/extra-llm-api-config.yml/ \
--restart unless-stopped \
nvcr.io/nvidia/tensorrt-llm/release:spark-single-gpu-dev \
bash -c '
export TIKTOKEN_ENCODINGS_BASE="/tmp/harmony-reqs" && \
trtllm-serve "$MODEL_HANDLE" \
--max_batch_size 64 \
--trust_remote_code \
--host 0.0.0.0 \
--port 8355 \
--extra_llm_api_options /tmp/extra-llm-api-config.yml
'
실행 점검¶
API 테스트
vLLM 구동 방법¶
Qwen/Qwen3-30B-A3B-Instruct-2507¶
Docker 이미지¶
nvidia에서 제공하는 vLLM 이미지를 사용합니다.
실행 스크립트¶
~/lab/LLMs/start-qwen3-30b.sh
#!/usr/bin/bash
export PORT=8357
export CONTAINER="qwen3-30b"
export MODEL_HANDLE="Qwen/Qwen3-30B-A3B-Instruct-2507"
docker stop $CONTAINER 2>/dev/null
docker rm $CONTAINER 2>/dev/null
docker run -d \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--gpus all \
-p $PORT:8000 \
--name $CONTAINER \
--restart unless-stopped \
nvcr.io/nvidia/vllm:25.12-py3 \
vllm serve $MODEL_HANDLE
실행 점검¶
API 테스트
Qwen/Qwen3-Coder-30B-A3B-Instruct¶
Docker 이미지¶
nvidia에서 제공하는 vLLM 이미지를 사용합니다.
실행 스크립트¶
~/lab/LLMs/start-qwen3-corder-30b.sh
#!/usr/bin/bash
export PORT=8358
export CONTAINER="qwen3-corder-30b"
export MODEL_HANDLE="Qwen/Qwen3-Coder-30B-A3B-Instruct"
docker stop $CONTAINER 2>/dev/null
docker rm $CONTAINER 2>/dev/null
docker run -d \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--gpus all \
-p $PORT:8000 \
--name $CONTAINER \
--restart unless-stopped \
nvcr.io/nvidia/vllm:25.12-py3 \
vllm serve $MODEL_HANDLE
실행 점검¶
API 테스트
Qwen/Qwen2.5-VL-32B-Instruct¶
Docker 이미지¶
nvidia에서 제공하는 vLLM 이미지를 사용합니다.
실행 스크립트¶
~/lab/LLMs/start-qwen2.5-vl-32b.sh
#!/usr/bin/bash
export PORT=8359
export CONTAINER="qwen2.5-vl"
export MODEL_HANDLE="Qwen/Qwen2.5-VL-32B-Instruct"
docker stop $CONTAINER 2>/dev/null
docker rm $CONTAINER 2>/dev/null
docker run -d \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--gpus all \
-p $PORT:8000 \
--name $CONTAINER \
--restart unless-stopped \
nvcr.io/nvidia/vllm:25.12-py3 \
vllm serve $MODEL_HANDLE
실행 점검¶
API 테스트
nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16¶
Docker 이미지¶
nvidia에서 제공하는 vLLM 이미지를 사용합니다.
실행 스크립트¶
~/lab/LLMs/start-nemotron-3-nano-30b.sh
#!/usr/bin/bash
export PORT=8360
export CONTAINER="nemotron-3-nano-30b"
export MODEL_HANDLE="nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16"
docker stop $CONTAINER 2>/dev/null
docker rm $CONTAINER 2>/dev/null
docker run -d \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--gpus all \
-p $PORT:8000 \
--name $CONTAINER \
--restart unless-stopped \
nvcr.io/nvidia/vllm:25.12-py3 \
vllm serve $MODEL_HANDLE \
--trust-remote-code
실행 점검¶
API 테스트
mistralai/Devstral-Small-2-24B-Instruct-2512¶
Docker 이미지¶
vLLM 공식 Nightly 이미지를 사용합니다.
실행 스크립트¶
~/lab/LLMs/start-devstral-small-24b.sh
#!/usr/bin/bash
export PORT=8361
export CONTAINER="devstral-small-2-24b"
export MODEL_HANDLE="mistralai/Devstral-Small-2-24B-Instruct-2512"
docker stop $CONTAINER 2>/dev/null
docker rm $CONTAINER 2>/dev/null
docker run -d \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--gpus all \
--ipc=host \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
-e VLLM_USE_V1=0 \
-e VLLM_ATTENTION_BACKEND=FLASH_ATTN \
-p $PORT:8000 \
--name $CONTAINER \
--restart unless-stopped \
vllm/vllm-openai:nightly \
--model $MODEL_HANDLE \
--trust-remote-code \
--max-model-len 32768 \
--tool-call-parser mistral \
--enable-auto-tool-choice \
--dtype bfloat16 \
--enforce-eager
안정적 구동을 위한 핵심 설정
구동 중 발생하는 커널 컴파일 오류 및 아키텍처 충돌을 해결하기 위해 아래 옵션을 지정했습니다.
-e VLLM_USE_V1=0: 최신 아키텍처와 충돌하는 V1 엔진을 끄고 안정적인 V0 엔진을 사용합니다.--enforce-eager: (중요) 커널 컴파일(Autotuning) 실패를 방지하기 위해 즉시 실행하는 Eager 모드를 강제합니다. Blackwell 하드웨어에서 현재 가장 안정적인 방법입니다.-e VLLM_ATTENTION_BACKEND=FLASH_ATTN: Triton 기반 백엔드 대신 컴파일이 필요 없는 표준 FlashAttention을 사용합니다.--dtype bfloat16: bfloat16 데이터 타입을 명시적으로 지정합니다.
실행 점검¶
API 테스트
Ollama 구동 방법¶
qwen3-vl:32b¶
왜 Ollama를 사용했나?
TensorRT, vLLM 모두 구동 실패하여 Ollama로 구성합니다.
Ollama가 사전에 구성되어 있어야 합니다. 상세 설정은 Ollama 구성을 참고하세요.
모델 다운로드¶
실행¶
별도 실행 불필요. 모델명을 지정하여 11434 포트로 API 요청하면 자동 실행됩니다.
실행 점검¶
API 테스트
미지원 모델¶
PaddlePaddle/PaddleOCR-VL¶
구동 불가
TensorRT, vLLM 모두 구동에 실패하였으며, Ollama는 Paddle 모델을 지원하지 않습니다.