도커에서 vllm 사용 설정 가이드

도커에서 vllm 사용 설정 가이드 # 도커에서 gpu를 사용하기 위한 기본설정 호스트 쪽 ✅ NVIDIA 드라이버 ✅ Docker ✅ NVIDIA Container Toolkit (nvidia-container-toolkit) 이미지/컨테이너 쪽 ✅ CUDA / cuDNN 라이브러리 포함된 베이스 이미지 (또는 vLLM/Qwen 공식 이미지) 1. 호스트(서버)에 필요한 것 (1) NVIDIA 드라이버 (반드시 호스트에만 설치) nvidia-smi 잘 나오면 OK  컨테이너 안에는 드라이버 설치하면 안 됨 → 드라이버는 “호스트 전용”, 컨테이너는 라이브러리(CUDA, cuDNN)만 있으면 됨. (2) Docker + NVIDIA Container Toolkit GPU를 Docker에 연결해주는 게 NVIDIA Container Toolkit 이라서 필요. NVIDIA Container Toolkit (nvidia-container-toolkit) 툴킷은 도커 내부에 gpu를 사용할수 있게 해주는 브릿지 역할 # 패키지 저장소 추가 (OS별로 다름, 예시는 Ubuntu) # sudo distribution=$(. /etc/os-release;echo $ID$VERSION_ID) # curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit.gpg # curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \ #   sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit.gpg] https://#g' | \ #   sudo tee /et...

Qwen/Qwen3-VL-32B-Instruct 리눅스 셋팅하기

Qwen/Qwen3-VL-32B-Instruct


/* gpu 서버 가상환경 생성 */
1) 가상환경
python3 -m venv /data/cbw/venvs/qwen3

source /data/cbw/venvs/qwen3/bin/activate

# 최신 pip로 업데이트
python -m pip install -U pip

2) Hugging Face CLI & 라이브러리 설치
pip install --upgrade pip setuptools wheel && pip cache purge && pip install -U "transformers>=4.45.0" "tokenizers>=0.19.1" "huggingface_hub[cli]" "accelerate"
-- pip install -U "huggingface_hub[cli]" transformers accelerate

(선택) 로그인 – Private 모델 쓸 때
huggingface-cli login

# 3-1) 디렉터리 준비
mkdir -p /data/cbw/huggingface/hf_cache

# 3-2) 현재 쉘 세션에 적용
export HF_HOME=/data/cbw/huggingface/hf_cache

# 3-3) 영구 반영 (zsh 예시: ~/.zshrc / bash면 ~/.bashrc)
echo 'export HF_HOME=/data/cbw/huggingface/hf_cache' >> ~/.bashrc
# 새 터미널에서 자동 적용되며, 현 세션엔 아래로 즉시 적용:
source ~/.bashrc

(빠른 확인)
python - << 'PY'
import os; print("HF_HOME =", os.environ.get("HF_HOME"))
PY

4) (선택) 모델을 미리 내려받아 캐시 확인
huggingface-cli download Qwen/Qwen3-VL-32B-Instruct

다운로드 후 캐시 위치가 바뀌었는지 확인:
du -sh /data/cbw/huggingface/hf_cache/hub

이미지 입력을 쓰실 계획이라면 qwen-vl-utils 패키지를 함께 설치하세요:
pip install qwen-vl-utils

5) vLLM 설치
pip install -U vllm

6) 기동
-- Qwen3-VL-32B-Instruct 기동 명령어
CC=/usr/bin/gcc-11 CXX=/usr/bin/g++-11 \
CUDA_VISIBLE_DEVICES=0,1 \
TRITON_CACHE_DIR=/data/cbw/triton_cache/qwen3 \
nohup vllm serve Qwen/Qwen3-VL-32B-Instruct \
  --tensor-parallel-size 2 \
  --dtype bfloat16 \
  --max-model-len 32768 \
  --gpu-memory-utilization 0.72 \
  --limit-mm-per-prompt.video 0 \
  --mm-encoder-tp-mode data \
  --max-num-seqs 8 \
  --disable-log-stats \
  --async-scheduling \
  --port 8001 \
  > >(cronolog /data/cbw/logs/qwen3_vl_%Y-%m-%d.log) 2>&1 &


/* 에러발생 해결절차 */
CUDA Toolkit 설치 (nvcc 포함)

sudo apt update
sudo apt install -y nvidia-cuda-toolkit

/* 설치후 확인 */
nvcc --version

(qwen3) cbw@userver91-41:/data/cbw$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Jan__6_16:45:21_PST_2023
Cuda compilation tools, release 12.0, V12.0.140
Build cuda_12.0.r12.0/compiler.32267302_0

Cuda compilation tools, release 12.x, V12.x.xxx 형태가 나오면 정상입니다.

CUDA 환경 변수 등록
echo 'export CUDA_HOME=/usr/local/cuda' >> ~/.bashrc
echo 'export PATH=$CUDA_HOME/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

/* 호환성 있는 gcc11 버전 설치 기존버전은 gcc13.3.0 임 */
/* 설치후 update-alternatives 버전을 체인지 하던가 시스템에서 gcc13.3을 디폴트로 사용할수 있으니까 CUDA 빌드용으로만 gcc-11 사용 */

gcc 11 설치

sudo apt install -y gcc-11 g++-11

/* 여러 버전 등록 */
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 120
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 120
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 110

이렇게 하면 gcc 13이 기본이지만, 필요 시 gcc 11로 쉽게 바꿀 수 있습니다.

다시 gcc 13으로 되돌리려면
sudo update-alternatives --config gcc
sudo update-alternatives --config g++

위 명령으로 13.x 버전을 다시 선택하면 즉시 복구됩니다.

CUDA 빌드용으로만 gcc-11 사용

vLLM이나 PyTorch/Triton이 CUDA 커널을 빌드할 때만 gcc 11을 사용하게 할 수도 있습니다.
다음처럼 CC 환경변수를 일시적으로 지정하면 됩니다:

CC=/usr/bin/gcc-11 CXX=/usr/bin/g++-11 \
CUDA_VISIBLE_DEVICES=0,1 \
vllm serve Qwen/Qwen3-VL-32B-Instruct \
  --tensor-parallel-size 2 \
  --dtype bfloat16 \
  --max-model-len 32768 \
  --gpu-memory-utilization 0.82 \
  --limit-mm-per-prompt.video 0 \
  --mm-encoder-tp-mode data \
  --max-num-seqs 8 \
  --disable-log-stats \
  --async-scheduling \
  --port 8001 


/* 기동중 아래와 같은 오류 발생시 */
fatal error: Python.h: 그런 파일이나 디렉터리가 없습니다

원인 요약

이건 Python C 확장 빌드 시, Python 헤더(Python.h)가 없어서 생긴 오류입니다.
즉, 시스템에 Python 해더 파일 (python3.12-dev) 이 설치되어 있지 않아서 생긴 겁니다.

Triton이 내부적으로 C 확장(.so)을 빌드할 때,
Python.h를 포함해야 하는데 이게 /usr/include/python3.12/ 안에 없어서 죽은 겁니다.

/* Python 개발 헤더 설치 */
sudo apt install -y python3.12-dev

설치 후 확인:

ls /usr/include/python3.12/Python.h
파일이 존재하면 정상입니다.

/* vllm 기동시 속도 개선 */
1️⃣ Triton이 뭐냐면?
TRITON_CACHE_DIR는 vLLM이 내부적으로 GPU 커널을 컴파일할 때 사용하는 캐시 경로를 지정하는 환경변수입니다.
조금 풀어서 설명드리면 아래와 같습니다

vLLM은 PyTorch + Triton 커널을 사용해서, 모델 연산을 GPU에서 최적화합니다.

Triton은 CUDA 커널을 “실시간으로 컴파일(JIT)”해서 성능을 높이는데,
처음 실행 시에는 CUDA 코드를 컴파일해야 하기 때문에 느리고,
두 번째부터는 캐시된 결과를 재사용합니다.

2️⃣ TRITON_CACHE_DIR의 역할

Triton은 기본적으로 /tmp/ 밑에 임시 캐시를 저장하지만,
이건 리부팅하거나 임시폴더 청소 시 전부 사라집니다.

그래서 아래처럼 지정해주면:

TRITON_CACHE_DIR=/data/cbw/triton_cache

이 의미는 곧

“CUDA 커널을 한 번만 컴파일하고,
결과를 /data/cbw/triton_cache 폴더에 저장해서
다음 실행부터는 즉시 불러와라.”

라는 뜻이에요.

4️⃣ 폴더 준비

최초 한 번은 폴더를 직접 만들어줘야 합니다:
mkdir -p /data/cbw/triton_cache
chmod 777 /data/cbw/triton_cache

/* 캐시폴더 지정후 실행 */
CC=/usr/bin/gcc-11 CXX=/usr/bin/g++-11 \
CUDA_VISIBLE_DEVICES=0,1 \
TRITON_CACHE_DIR=/data/cbw/triton_cache \
vllm serve Qwen/Qwen3-VL-32B-Instruct \
  --tensor-parallel-size 2 \
  --dtype bfloat16 \
  --max-model-len 32768 \
  --gpu-memory-utilization 0.82 \
  --limit-mm-per-prompt.video 0 \
  --mm-encoder-tp-mode data \
  --max-num-seqs 8 \
  --disable-log-stats \
  --async-scheduling \
  --port 8001 

/* 테스트 */
curl http://182.162.91.41:8001/v1/chat/completions   -H "Content-Type: application/json"   -d '{
    "model": "Qwen/Qwen3-VL-32B-Instruct",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "안녕하세요, 자기소개 해주세요."}
    ],
    "max_tokens": 128,
    "temperature": 0.7
  }'


/* 백그라운 기동 */
- 날짜별로 로그파일 생성하기 위해서 cronolog 설치
sudo apt-get update
sudo apt-get install cronolog -y

/* 백그라운드 명령어 */
CC=/usr/bin/gcc-11 CXX=/usr/bin/g++-11 \
CUDA_VISIBLE_DEVICES=0,1 \
TRITON_CACHE_DIR=/data/cbw/triton_cache \
nohup vllm serve Qwen/Qwen3-VL-32B-Instruct \
  --tensor-parallel-size 2 \
  --dtype bfloat16 \
  --max-model-len 32768 \
  --gpu-memory-utilization 0.82 \
  --limit-mm-per-prompt.video 0 \
  --mm-encoder-tp-mode data \
  --max-num-seqs 8 \
  --disable-log-stats \
  --async-scheduling \
  --port 8001 \
  > >(cronolog vllm_%Y-%m-%d.log) 2>&1 &



/* 프로세스 확인 */
ps aux | grep vllm

/* 종료 */
pkill -f "vllm serve"







댓글

이 블로그의 인기 게시물

아파치 보안관련 기본설정

티베로 이관 작업 절차

윈도우 네트워크 리소스 사용권한 오류