출처
CUDA 버전 확인
bluesanta@localhost:~$ uname -a
Linux localhost.localdomain 6.8.12-1021-tegra #1 SMP PREEMPT Mon Jun 1 13:25:46 PDT 2026 aarch64 aarch64 aarch64 GNU/Linux
bluesanta@localhost:~$ cat /etc/nv_tegra_release
## R39 (release), REVISION: 2.0, GCID: 45755727, BOARD: generic, EABI: aarch64, DATE: Mon Jun 1 09:28:48 PM UTC 2026
## KERNEL_VARIANT: oot
TARGET_USERSPACE_LIB_DIR=nvidia
TARGET_USERSPACE_LIB_DIR_PATH=usr/lib/aarch64-linux-gnu/nvidia
bluesanta@localhost:~$ nvidia-smi --query-gpu=name,compute_cap,driver_version --format=csv
name, compute_cap, driver_version
Orin (nvgpu), 8.7, 595.78
bluesanta@localhost:~$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2026 NVIDIA Corporation
Built on Thu_Mar_19_11:11:41_PM_PDT_2026
Cuda compilation tools, release 13.2, V13.2.78
Build cuda_13.2.r13.2/compiler.37668154_0
빌드 도구 설치
bluesanta@localhost:~$ sudo apt update
bluesanta@localhost:~$ sudo apt install -y cmake ninja-build gcc g++ git build-essential git cmake ninja-build libopenblas-dev libopenmpi-dev openmpi-bin libatlas-base-dev libprotobuf-dev protobuf-compiler libssl-dev zlib1g-dev libffi-dev python3-pip libopenblas-dev ccache git-lfs libjpeg-dev libpng-dev libtiff-dev
NCCL 설치
bluesanta@localhost:~$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/sbsa/cuda-keyring_1.1-1_all.deb
bluesanta@localhost:~$ sudo dpkg -i cuda-keyring_1.1-1_all.deb
bluesanta@localhost:~$ sudo apt update
bluesanta@localhost:~$ sudo apt install libnccl2 libnccl-dev
Python 가상 환경 생성 및 활성화
bluesanta@localhost:~$ cd llm
bluesanta@localhost:~/llm$ python -m venv .venv
bluesanta@localhost:~/llm$ source .venv/bin/activate
(.venv) bluesanta@localhost:~/llm$ python --version
Python 3.12.3
(.venv) bluesanta@localhost:~/llm$ pip install --upgrade pip
PyTorch, Torchvision 설치
(.venv) bluesanta@localhost:~/llm$ pip install torch-2.12.0a0+git0d62256-cp312-cp312-linux_aarch64.whl
(.venv) bluesanta@localhost:~/llm$ pip install torchvision-0.27.1+df56172-cp312-cp312-linux_aarch64.whl
(.venv) bluesanta@localhost:~/llm$ pip install torchaudio-2.11.0a0+c0cbdb9-cp312-cp312-linux_aarch64.whl
(.venv) bluesanta@localhost:~/llm$ pip install flash_attn-2.8.3-cp312-cp312-linux_aarch64.whl
vLLM 설치
vLLM 소스 다운로드
(.venv) bluesanta@localhost:~/llm$ git clone https://github.com/vllm-project/vllm.git
(.venv) bluesanta@localhost:~/llm$ cd vllm
(.venv) bluesanta@localhost:~/llm/vllm$ git checkout v0.24.0
(.venv) bluesanta@localhost:~/llm/vllm$ git submodule update --init --recursive
빌드 환경 설정
(.venv) bluesanta@localhost:~/llm/vllm$ export CUDA_HOME=/usr/local/cuda
(.venv) bluesanta@localhost:~/llm/vllm$ export MAX_JOBS=$(nproc)
(.venv) bluesanta@localhost:~/llm/vllm$ export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc)
(.venv) bluesanta@localhost:~/llm/vllm$ export VLLM_TARGET_DEVICE=cuda
(.venv) bluesanta@localhost:~/llm/vllm$ export TORCH_CUDA_ARCH_LIST="8.7"
(.venv) bluesanta@localhost:~/llm/vllm$ export VLLM_USE_FLASH_ATTN=1
(.venv) bluesanta@localhost:~/llm/vllm$ export VLLM_ATTENTION_BACKEND=FLASH_ATTN
vLLM 빌드
(.venv) bluesanta@localhost:~/llm$ python setup.py bdist_wheel
vLLM 설치
(.venv) bluesanta@localhost:~/llm/vllm$ cd ..
(.venv) bluesanta@localhost:~/llm$ cp vllm/dist/vllm-0.24.1.dev0+gee0da84ab.d20260708.cu132-cp312-cp312-linux_aarch64.whl .
(.venv) bluesanta@localhost:~/llm$ pip install vllm/dist/vllm-0.24.1.dev0+gee0da84ab.d20260708.cu132-cp312-cp312-linux_aarch64.whl
모델 다운로드
(.venv) bluesanta@localhost:~/llm$ hf download Qwen/Qwen2.5-32B-Instruct-AWQ --local-dir ~/llm/models/Qwen2.5-32B-Instruct-AWQ
(.venv) bluesanta@localhost:~/llm$ hf download QuantTrio/Qwen3.6-27B-AWQ --local-dir ~/llm/models/Qwen3.6-27B-AWQ
(.venv) bluesanta@localhost:~/llm$ hf download QuantTrio/Qwen3.6-35B-A3B-AWQ --local-dir ~/llm/models/Qwen3.6-35B-A3B-AWQ
vLLM 실행
vLLM 환경설정
(.venv) bluesanta@localhost:~/llm$ export VLLM_SLEEP_WHEN_IDLE=1
(.venv) bluesanta@localhost:~/llm$ export VLLM_USE_DEEP_GEMM=0
(.venv) bluesanta@localhost:~/llm$ export VLLM_USE_FLASHINFER_MOE_FP16=1
(.venv) bluesanta@localhost:~/llm$ export VLLM_USE_FLASHINFER_SAMPLER=0
(.venv) bluesanta@localhost:~/llm$ export OMP_NUM_THREADS=4
vLLM 실행
(.venv) bluesanta@localhost:~/llm$ vllm serve \
> ~/llm/models/Qwen3.6-27B-AWQ \
> --served-model-name Qwen3.6-27B \
> --host 0.0.0.0 \
> --port 8000 \
> --gpu-memory-utilization 0.75 \
> --max-model-len 32768 \
> --max-num-seqs 1 \
> --enable-auto-tool-choice \
> --tool-call-parser qwen3_coder \
> --reasoning-parser qwen3 \
> --trust-remote-code \
> --enable-prefix-caching
WARNING 07-08 20:10:48 [cuda.py:45] Failed to import from vllm._qutlass_C: ModuleNotFoundError("No module named 'vllm._qutlass_C'")
(APIServer pid=818732) INFO 07-08 20:10:59 [api_utils.py:339]
(APIServer pid=818732) INFO 07-08 20:10:59 [api_utils.py:339] █ █ █▄ ▄█
(APIServer pid=818732) INFO 07-08 20:10:59 [api_utils.py:339] ▄▄ ▄█ █ █ █ ▀▄▀ █ version 0.24.1.dev0+gee0da84ab.d20260708
(APIServer pid=818732) INFO 07-08 20:10:59 [api_utils.py:339] █▄█▀ █ █ █ █ model /home/bluesanta/llm/models/Qwen3.6-27B-AWQ
(APIServer pid=818732) INFO 07-08 20:10:59 [api_utils.py:339] ▀▀ ▀▀▀▀▀ ▀▀▀▀▀ ▀ ▀
(APIServer pid=818732) INFO 07-08 20:10:59 [api_utils.py:339]
(APIServer pid=818732) INFO 07-08 20:10:59 [api_utils.py:273] non-default args: {'model_tag': '/home/bluesanta/llm/models/Qwen3.6-27B-AWQ', 'enable_auto_tool_choice': True, 'tool_call_parser': 'qwen3_coder', 'host': '0.0.0.0', 'model': '/home/bluesanta/llm/models/Qwen3.6-27B-AWQ', 'trust_remote_code': True, 'max_model_len': 32768, 'served_model_name': ['Qwen3.6-27B'], 'reasoning_parser': 'qwen3', 'gpu_memory_utilization': 0.75, 'enable_prefix_caching': True, 'max_num_seqs': 1}
(APIServer pid=818732) INFO 07-08 20:10:59 [model.py:598] Resolved architecture: Qwen3_5ForConditionalGeneration
(APIServer pid=818732) INFO 07-08 20:10:59 [model.py:1725] Using max model len 32768
(APIServer pid=818732) WARNING 07-08 20:10:59 [cuda.py:230] Failed to import from vllm._qutlass_C: ModuleNotFoundError("No module named 'vllm._qutlass_C'")
(APIServer pid=818732) WARNING 07-08 20:11:00 [cuda.py:230] Failed to import from vllm._qutlass_C: ModuleNotFoundError("No module named 'vllm._qutlass_C'")
(APIServer pid=818732) WARNING 07-08 20:11:00 [cuda.py:230] Failed to import from vllm._qutlass_C: ModuleNotFoundError("No module named 'vllm._qutlass_C'")
(APIServer pid=818732) WARNING 07-08 20:11:00 [cuda.py:230] Failed to import from vllm._qutlass_C: ModuleNotFoundError("No module named 'vllm._qutlass_C'")
(APIServer pid=818732) WARNING 07-08 20:11:00 [config.py:422] Mamba cache mode is set to 'align' for Qwen3_5ForConditionalGeneration by default when prefix caching is enabled
(APIServer pid=818732) INFO 07-08 20:11:00 [config.py:442] Warning: Prefix caching in Mamba cache 'align' mode is currently enabled. Its support for Mamba layers is experimental. Please report any issues you may observe.
(APIServer pid=818732) INFO 07-08 20:11:00 [vllm.py:1006] Asynchronous scheduling is enabled.
(APIServer pid=818732) INFO 07-08 20:11:00 [kernel.py:276] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native'])
(APIServer pid=818732) [transformers] The `use_fast` parameter is deprecated and will be removed in a future version. Use `backend="torchvision"` instead of `use_fast=True`, or `backend="pil"` instead of `use_fast=False`.
WARNING 07-08 20:11:19 [cuda.py:45] Failed to import from vllm._qutlass_C: ModuleNotFoundError("No module named 'vllm._qutlass_C'")
WARNING 07-08 20:11:27 [cuda.py:230] Failed to import from vllm._qutlass_C: ModuleNotFoundError("No module named 'vllm._qutlass_C'")
(EngineCore pid=818772) INFO 07-08 20:11:28 [core.py:114] Initializing a V1 LLM engine (v0.24.1.dev0+gee0da84ab.d20260708) with config: model='/home/bluesanta/llm/models/Qwen3.6-27B-AWQ', speculative_config=None, tokenizer='/home/bluesanta/llm/models/Qwen3.6-27B-AWQ', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.float16, max_seq_len=32768, download_dir=None, load_format=auto, tensor_parallel_size=1, pipeline_parallel_size=1, data_parallel_size=1, decode_context_parallel_size=1, dcp_comm_backend=ag_rs, disable_custom_all_reduce=False, quantization=auto_awq, quantization_config=None, enforce_eager=False, enable_return_routed_experts=False, kv_cache_dtype=auto, device_config=cuda, structured_outputs_config=StructuredOutputsConfig(backend='auto', disable_any_whitespace=False, disable_additional_properties=False, reasoning_parser='qwen3', reasoning_parser_plugin='', enable_in_reasoning=False), observability_config=ObservabilityConfig(show_hidden_metrics_for_version=None, otlp_traces_endpoint=None, collect_detailed_traces=None, kv_cache_metrics=False, kv_cache_metrics_sample=0.01, cudagraph_metrics=False, enable_layerwise_nvtx_tracing=False, enable_mfu_metrics=False, enable_mm_processor_stats=False, enable_logging_iteration_details=False, jit_monitor_verbose=False), seed=0, served_model_name=Qwen3.6-27B, enable_prefix_caching=True, enable_chunked_prefill=True, pooler_config=None, compilation_config={'mode': , 'debug_dump_path': None, 'cache_dir': '', 'compile_cache_save_format': 'binary', 'backend': 'inductor', 'custom_ops': ['none'], 'ir_enable_torch_wrap': True, 'splitting_ops': ['vllm::unified_attention_with_output', 'vllm::unified_mla_attention_with_output', 'vllm::mamba_mixer2', 'vllm::mamba_mixer', 'vllm::short_conv', 'vllm::linear_attention', 'vllm::plamo2_mamba_mixer', 'vllm::qwen_gdn_attention_core', 'vllm::gdn_attention_core_xpu', 'vllm::olmo_hybrid_gdn_full_forward', 'vllm::kda_attention', 'vllm::sparse_attn_indexer', 'vllm::rocm_aiter_sparse_attn_indexer', 'vllm::deepseek_v4_attention', 'vllm::unified_kv_cache_update', 'vllm::unified_mla_kv_cache_update'], 'compile_mm_encoder': False, 'cudagraph_mm_encoder': False, 'encoder_cudagraph_token_budgets': [], 'encoder_cudagraph_max_vision_items_per_batch': 0, 'encoder_cudagraph_max_frames_per_batch': None, 'compile_sizes': [], 'compile_ranges_endpoints': [2048], 'inductor_compile_config': {'enable_auto_functionalized_v2': False, 'combo_kernels': True, 'benchmark_combo_kernel': True}, 'inductor_passes': {}, 'cudagraph_mode': , 'cudagraph_num_of_warmups': 1, 'cudagraph_capture_sizes': [1, 2], 'cudagraph_copy_inputs': False, 'cudagraph_specialize_lora': True, 'use_inductor_graph_partition': False, 'pass_config': {'fuse_norm_quant': False, 'fuse_act_quant': False, 'fuse_attn_quant': False, 'enable_sp': False, 'fuse_gemm_comms': False, 'fuse_allreduce_rms': False, 'fuse_rope_kvcache_cat_mla': False, 'fuse_act_padding': False}, 'max_cudagraph_capture_size': 2, 'dynamic_shapes_config': {'type': <DynamicShapesType.BACKED: 'backed'>, 'evaluate_guards': False, 'assume_32_bit_indexing': False}, 'local_cache_dir': None, 'fast_moe_cold_start': False, 'static_all_moe_layers': []}, kernel_config=KernelConfig(ir_op_priority=IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native']), enable_flashinfer_autotune=True, moe_backend='auto', linear_backend='auto')
(EngineCore pid=818772) WARNING 07-08 20:11:28 [cuda.py:230] Failed to import from vllm._qutlass_C: ModuleNotFoundError("No module named 'vllm._qutlass_C'")
(EngineCore pid=818772) WARNING 07-08 20:11:28 [cuda.py:230] Failed to import from vllm._qutlass_C: ModuleNotFoundError("No module named 'vllm._qutlass_C'")
(EngineCore pid=818772) WARNING 07-08 20:11:28 [cuda.py:230] Failed to import from vllm._qutlass_C: ModuleNotFoundError("No module named 'vllm._qutlass_C'")
(EngineCore pid=818772) INFO 07-08 20:11:30 [parallel_state.py:1588] world_size=1 rank=0 local_rank=0 distributed_init_method=tcp://192.168.1.47:54489 backend=nccl
(EngineCore pid=818772) INFO 07-08 20:11:30 [parallel_state.py:1923] rank 0 in world size 1 is assigned as DP rank 0, PP rank 0, PCP rank 0, TP rank 0, EP rank N/A, EPLB rank N/A
(EngineCore pid=818772) INFO 07-08 20:11:31 [topk_topp_sampler.py:39] FlashInfer top-p/top-k sampling disabled via VLLM_USE_FLASHINFER_SAMPLER=0.
(EngineCore pid=818772) [transformers] The `use_fast` parameter is deprecated and will be removed in a future version. Use `backend="torchvision"` instead of `use_fast=True`, or `backend="pil"` instead of `use_fast=False`.
(EngineCore pid=818772) INFO 07-08 20:11:40 [gpu_model_runner.py:5160] Starting to load model /home/bluesanta/llm/models/Qwen3.6-27B-AWQ...
(EngineCore pid=818772) INFO 07-08 20:11:41 [cuda.py:539] Using backend AttentionBackendEnum.FLASH_ATTN for vit attention
(EngineCore pid=818772) INFO 07-08 20:11:41 [mm_encoder_attention.py:373] Using AttentionBackendEnum.FLASH_ATTN for MMEncoderAttention.
(EngineCore pid=818772) INFO 07-08 20:11:41 [qwen_gdn_linear_attn.py:228] Using Triton/FLA GDN prefill kernel (requested=auto, head_k_dim=128).
(EngineCore pid=818772) INFO 07-08 20:11:41 [auto_awq.py:470] Using MarlinLinearKernel for AutoAWQMarlinLinearMethod
(EngineCore pid=818772) INFO 07-08 20:11:41 [cuda.py:480] Using FLASH_ATTN attention backend out of potential backends: ['FLASH_ATTN', 'FLASHINFER', 'TRITON_ATTN', 'FLEX_ATTENTION'].
(EngineCore pid=818772) INFO 07-08 20:11:41 [flash_attn.py:670] Using FlashAttention version 2
(EngineCore pid=818772) INFO 07-08 20:11:44 [weight_utils.py:849] Filesystem type for checkpoints: EXT4. Checkpoint size: 20.35 GiB. Available RAM: 35.40 GiB.
(EngineCore pid=818772) INFO 07-08 20:11:44 [weight_utils.py:872] Auto-prefetch is disabled because the filesystem (EXT4) is not a recognized network FS (NFS/Lustre). If you want to force prefetching, start vLLM with --safetensors-load-strategy=prefetch.
Loading safetensors checkpoint shards: 0% Completed | 0/8 [00:00<?, ?it/s]
Loading safetensors checkpoint shards: 12% Completed | 1/8 [00:04<00:30, 4.35s/it]
Loading safetensors checkpoint shards: 25% Completed | 2/8 [00:11<00:34, 5.73s/it]
Loading safetensors checkpoint shards: 38% Completed | 3/8 [00:13<00:20, 4.01s/it]
Loading safetensors checkpoint shards: 50% Completed | 4/8 [00:16<00:15, 3.89s/it]
Loading safetensors checkpoint shards: 62% Completed | 5/8 [00:24<00:15, 5.19s/it]
Loading safetensors checkpoint shards: 75% Completed | 6/8 [00:27<00:08, 4.39s/it]
Loading safetensors checkpoint shards: 88% Completed | 7/8 [00:33<00:05, 5.00s/it]
Loading safetensors checkpoint shards: 100% Completed | 8/8 [00:33<00:00, 3.48s/it]
Loading safetensors checkpoint shards: 100% Completed | 8/8 [00:33<00:00, 4.19s/it]
(EngineCore pid=818772)
(EngineCore pid=818772) INFO 07-08 20:12:18 [default_loader.py:430] Loading weights took 33.55 seconds
(EngineCore pid=818772) INFO 07-08 20:12:28 [gpu_model_runner.py:5255] Model loading took 19.92 GiB memory and 45.943815 seconds
(EngineCore pid=818772) INFO 07-08 20:12:28 [interface.py:773] Setting attention block size to 784 tokens to ensure that attention page size is >= mamba page size.
(EngineCore pid=818772) INFO 07-08 20:12:28 [interface.py:797] Padding mamba page size by 0.13% to ensure that mamba page size and attention page size are exactly equal.
(EngineCore pid=818772) INFO 07-08 20:12:28 [gpu_model_runner.py:6271] Encoder cache will be initialized with a budget of 16384 tokens, and profiled with 1 image items of the maximum feature size.
(EngineCore pid=818772) INFO 07-08 20:12:58 [backends.py:1089] Using cache directory: /home/bluesanta/.cache/vllm/torch_compile_cache/72b8a52e9d/rank_0_0/backbone for vLLM's torch.compile
(EngineCore pid=818772) INFO 07-08 20:12:58 [backends.py:1148] Dynamo bytecode transform time: 26.18 s
(EngineCore pid=818772) [rank0]:W0708 20:13:08.637000 818772 torch/_inductor/utils.py:1717] Not enough SMs to use max_autotune_gemm mode
(EngineCore pid=818772) INFO 07-08 20:14:51 [backends.py:393] Compiling a graph for compile range (1, 2048) takes 111.83 s
(EngineCore pid=818772) INFO 07-08 20:15:06 [backends.py:915] collected artifacts: 65 entries, 21 artifacts, 76994753 bytes total
(EngineCore pid=818772) INFO 07-08 20:15:06 [decorators.py:708] saved AOT compiled function to /home/bluesanta/.cache/vllm/torch_compile_cache/torch_aot_compile/8cdbe84fd3ef2c18757b6ce102849302b9bb93d69310d943d1b0eb09c7b7cd88/rank_0_0/model
(EngineCore pid=818772) INFO 07-08 20:15:06 [monitor.py:53] torch.compile took 154.53 s in total
(EngineCore pid=818772) INFO 07-08 20:17:01 [monitor.py:81] Initial profiling/warmup run took 114.94 s
(EngineCore pid=818772) INFO 07-08 20:17:02 [gpu_model_runner.py:6483] Profiling CUDA graph memory: PIECEWISE=2 (largest=2), FULL=1 (largest=1)
(EngineCore pid=818772) INFO 07-08 20:17:09 [gpu_model_runner.py:6588] Estimated CUDA graph memory: 0.04 GiB total
(EngineCore pid=818772) INFO 07-08 20:17:10 [gpu_worker.py:508] Available KV cache memory: 26.01 GiB
(EngineCore pid=818772) INFO 07-08 20:17:10 [gpu_worker.py:523] CUDA graph memory profiling is enabled (default since v0.21.0). The current --gpu-memory-utilization=0.7500 is equivalent to --gpu-memory-utilization=0.7493 without CUDA graph memory profiling. To maintain the same effective KV cache size as before, increase --gpu-memory-utilization to 0.7507. To disable, set VLLM_MEMORY_PROFILER_ESTIMATE_CUDAGRAPHS=0.
(EngineCore pid=818772) INFO 07-08 20:17:10 [kv_cache_utils.py:2146] GPU KV cache size: 370,688 tokens
(EngineCore pid=818772) INFO 07-08 20:17:10 [kv_cache_utils.py:2147] Maximum concurrency for 32,768 tokens per request: 11.31x
Capturing CUDA graphs (mixed prefill-decode, PIECEWISE): 100%|█████████████████████████████████████████████████████| 2/2 [00:00<00:00, 4.72it/s]
Capturing CUDA graphs (decode, FULL): 100%|████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 2.04it/s]
(EngineCore pid=818772) INFO 07-08 20:17:20 [gpu_model_runner.py:6656] Graph capturing finished in 3 secs, took 0.04 GiB
(EngineCore pid=818772) INFO 07-08 20:17:20 [gpu_worker.py:667] CUDA graph pool memory: 0.04 GiB (actual), 0.04 GiB (estimated), difference: 0.0 GiB (11.2%).
(EngineCore pid=818772) INFO 07-08 20:17:20 [jit_monitor.py:60] Kernel JIT monitor activated — Triton JIT compilations during inference will be logged as warnings.
(EngineCore pid=818772) INFO 07-08 20:17:21 [core.py:337] init engine (profile, create kv cache, warmup model) took 293.19 s (compilation: 154.53 s)
(EngineCore pid=818772) INFO 07-08 20:17:21 [vllm.py:1006] Asynchronous scheduling is enabled.
(EngineCore pid=818772) INFO 07-08 20:17:21 [kernel.py:276] Final IR op priority after setting platform defaults: IrOpPriorityConfig(rms_norm=['native'], fused_add_rms_norm=['native'])
(APIServer pid=818732) INFO 07-08 20:17:21 [api_server.py:577] Supported tasks: ['generate']
(APIServer pid=818732) INFO 07-08 20:17:22 [parser_manager.py:37] "auto" tool choice has been enabled.
(APIServer pid=818732) WARNING 07-08 20:17:22 [model.py:1477] Default vLLM sampling parameters have been overridden by the model's `generation_config.json`: `{'temperature': 1.0, 'top_k': 20, 'top_p': 0.95}`. If this is not intended, please relaunch vLLM instance with `--generation-config vllm`.
(APIServer pid=818732) INFO 07-08 20:17:23 [hf.py:548] Detected the chat template content format to be 'openai'. You can set `--chat-template-content-format` to override this.
(APIServer pid=818732) INFO 07-08 20:17:52 [base.py:223] Multi-modal warmup completed in 29.005s
(APIServer pid=818732) INFO 07-08 20:17:53 [base.py:223] Readonly multi-modal warmup completed in 1.500s
(APIServer pid=818732) INFO 07-08 20:17:53 [api_server.py:581] Starting vLLM server on http://0.0.0.0:8000
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:37] Available routes are:
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /openapi.json, Methods: GET, HEAD
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /docs, Methods: GET, HEAD
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /docs/oauth2-redirect, Methods: GET, HEAD
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /redoc, Methods: GET, HEAD
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /load, Methods: GET
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /version, Methods: GET
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /health, Methods: GET
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /metrics, Methods: GET
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /tokenize, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /detokenize, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /v1/models, Methods: GET
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /ping, Methods: GET
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /ping, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /invocations, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /v1/chat/completions, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /v1/chat/completions/batch, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /v1/responses, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /v1/responses/{response_id}, Methods: GET
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /v1/responses/{response_id}/cancel, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /v1/completions, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /v1/messages, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /v1/messages/count_tokens, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /generative_scoring, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /inference/v1/generate, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /scale_elastic_ep, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /is_scaling_elastic_ep, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /v1/chat/completions/render, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /v1/completions/render, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /v1/chat/completions/derender, Methods: POST
(APIServer pid=818732) INFO 07-08 20:17:53 [launcher.py:46] Route: /v1/completions/derender, Methods: POST
(APIServer pid=818732) INFO: Started server process [818732]
(APIServer pid=818732) INFO: Waiting for application startup.
(APIServer pid=818732) INFO: Application startup complete.
vLLM 실행(Qwen3.6-35B-A3B-AWQ)
vllm serve \
~/llm/models/Qwen3.6-35B-A3B-AWQ \
--served-model-name Qwen3.6-35B-A3B-AWQ \
--host 0.0.0.0 \
--port 8000 \
--gpu-memory-utilization 0.75 \
--max-model-len 32768 \
--max-num-seqs 1 \
--enable-auto-tool-choice \
--tool-call-parser qwen3_coder \
--reasoning-parser qwen3 \
--trust-remote-code \
--enable-prefix-caching
vLLM 테스트1
(.venv) bluesanta@localhost:~/llm$ curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "Qwen3.6-27B",
"messages": [
{"role": "system", "content": "너는 똑똑하고 친절한 AI 어시스턴트야."},
{"role": "user", "content": "안녕! 젯슨 서버에서 잘 돌아가고 있니? 자기소개를 해봐."}
],
"temperature": 0.7,
"max_tokens": 512
}'
{"id":"chatcmpl-8a4eb7874a6c38a1","object":"chat.completion","created":1783512634,"model":"Qwen3.6-27B","choices":[{"index":0,"message":{"role":"assistant","content":"\n\n안녕하세요! 👋 네, 젯슨(Jetson) 서버 환경에서도 안정적으로 잘 작동하고 있습니다. \n\n저는 **AI 어시스턴트**로, 자연어 이해와 생성, 코드 작성 및 디버깅, 데이터 분석, 문제 해결, 창의적 브레인스토밍 등 다양한 분야에서 도움을 드리기 위해 설계되었습니다. NVIDIA Jetson 플랫폼의 에지 AI 추론 최적화나 관련 기술 질문이 있으신 경우에도 최선을 다해 지원해 드릴 수 있습니다. \n\n궁금한 점이 있거나 특정 작업이 필요하시면 언제든지 말씀해 주세요. 빠르게 정확하게 도와드리겠습니다! 🚀✨","refusal":null,"annotations":null,"audio":null,"function_call":null,"reasoning":"We need to respond in Korean as the user asked in Korean. The user says: \"안녕! 젯슨 서버에서 잘 돌아가고 있니? 자기소개를 해봐.\" which translates to \"Hello! Are you running well on the Jetson server? Introduce yourself.\"\n\nWe need to respond as an AI assistant. We should acknowledge the greeting, confirm that we're running well (assuming we are), and give a self-introduction. Since it's in Korean, we should respond in Korean.\n\nWe should also note that \"젯슨 서버\" likely refers to NVIDIA Jetson, which is a series of single-board computers for AI at the edge. So we can mention that we're running on a Jetson server if applicable, but as an AI model, we might not be specifically tied to hardware. However, we can acknowledge that.\n\nWe should keep the response friendly, informative, and in Korean.\n\nLet's draft:\n\n안녕하세요! 네, 젯슨 서버에서 잘 작동하고 있습니다. 저는 인공지능 어시스턴트 모델로, 다양한 질문에 답변하고 도움을 드리도록 설계되었습니다. 자연어 처리, 코드 작성, 문제 해결, 창의적 작업 등 여러 분야에서 도움을 드릴 수 있습니다. 궁금한 점이 있거나 필요하신 작업이 있다면 언제든지 말씀해 주세요. 최선을 다해 도와드리겠습니다! 😊\n\nThis seems appropriate. We should ensure it's accurate: we are an AI assistant, running on servers (possibly including Jetson if deployed there). We can mention that we're designed to assist with various tasks.\n\nWe'll output this in Korean.\n"},"logprobs":null,"finish_reason":"stop","stop_reason":null,"token_ids":null,"routed_experts":null}],"service_tier":null,"system_fingerprint":"vllm-0.24.1.dev0+gee0da84ab.d20260708-bcc32eca","usage":{"prompt_tokens":49,"total_tokens":509,"completion_tokens":460,"prompt_tokens_details":null},"prompt_logprobs":null,"prompt_token_ids":null,"prompt_text":null,"kv_transfer_params":null}
vLLM 테스트2
test_chat.py
from openai import OpenAI
# OpenAI 클라이언트 생성 (기본 주소를 로컬 vLLM 서버로 변경)
client = OpenAI(
api_key="EMPTY", # 로컬 서버는 API 키가 필요 없습니다
base_url="http://localhost:8000/v1"
)
response = client.chat.completions.create(
model="Qwen3.6-27B",
messages=[
{"role": "system", "content": "너는 최고의 파이썬 개발자야."},
{"role": "user", "content": "1부터 10까지 더하는 파이썬 코드를 한 줄로 짜줘."}
]
)
print(response.choices[0].message.content)
실행
(.venv) bluesanta@localhost:~/llm$ python test_chat.py
```python
print(sum(range(1, 11)))
```