Hướng dẫn triển khai Qwen3.5 với vLLM

Triển khai Qwen3.5 với vLLM (2026 mới nhất)

Bài hướng dẫn này bao gồm các bước **tải mô hình Qwen3.5, cài đặt vLLM, khởi động dịch vụ, cấu hình tham số chính, gọi API, tối ưu hóa lượng tử, và triển khai đa GPU**. Hướng dẫn này áp dụng cho môi trường Linux/WSL2.

I. Yêu cầu phần cứng và môi trường

1.1 Đề xuất cấu hình phần cứng

Quy mô mô hình Dung lượng VRAM tối thiểu Cấu hình đề xuất Dung lượng VRAM sau khi lượng tử hóa (4bit AWQ)
Qwen3.5-0.8B/2B 6GB RTX 3060/4060 (12GB) ~3GB
Qwen3.5-4B/7B 10GB RTX 3090/4080 (16GB+) ~5GB
Qwen3.5-9B/14B 16GB RTX 4090/A10 (24GB) ~8GB
Qwen3.5-27B/35B 24GB×2 A100 (40GB/80GB)×2 ~15GB
- Hệ điều hành: Linux / WSL2 (Ubuntu 20.04+) - CUDA: **11.8+ / 12.1+** (cần cài đặt NVIDIA driver + CUDA Toolkit) - RAM: ≥32GB (càng nhiều càng tốt) - Lưu trữ: ≥50GB SSD (dung lượng tệp mô hình lớn)
Loại Tên Mục đích Hỗ trợ vLLM
Mô hình cơ bản Qwen3.5-7B Viết tiếp, hoàn thiện, vi điều chỉnh thứ cấp Hoàn toàn hỗ trợ
Vi điều chỉnh chỉ thị Qwen3.5-7B-Instruct Đối thoại, hỏi đáp, tuân theo chỉ thị Hoàn toàn hỗ trợ (thường dùng nhất)
Phiên bản đối thoại Qwen3.5-7B-Chat Đối thoại nhiều vòng, nhớ lịch sử Hoàn toàn hỗ trợ

1.2 Cài đặt phụ thuộc phần mềm

# 1. Cài đặt công cụ cơ bản
sudo apt update && sudo apt install -y python3-pip python3.10-venv git git-lfs

# 2. Tạo môi trường ảo (khuyến nghị)
python3 -m venv vllm-qwen
source vllm-qwen/bin/activate  # Kích hoạt môi trường

# 3. Cài đặt vLLM (phù hợp với Qwen3.5, khuyến nghị ≥0.17.0)
pip install vllm>=0.17.0 transformers>=4.41.0 accelerate sentencepiece protobuf

# 4. Nâng tốc độ trong nước (tùy chọn)
pip config set global.index-url https://mirror.baidu.com/pypi/simple

II. Tải mô hình Qwen3.5 (3 cách)

Kho lưu trữ chính thức của Qwen3.5: - Hugging Face: https://huggingface.co/Qwen - ModelScope (nâng tốc độ trong nước): https://modelscope.cn/models/Qwen

2.1 Cách 1: Tải từ ModelScope (khuyến nghị trong nước)

# Cài đặt ModelScope
pip install modelscope

# Tải Qwen3.5-9B-Instruct (ví dụ, có thể thay đổi kích thước khác)
modelscope download \
  --model Qwen/Qwen3.5-9B-Instruct \
  --local_dir ./models/Qwen3.5-9B-Instruct \
  --exclude "*.bin"  # Chỉ tải safetensors

2.2 Cách 2: Clone bằng Git LFS (cân nặng đầy đủ)

git lfs install
git clone https://www.modelscope.cn/Qwen/Qwen3.5-9B-Instruct.git ./models/Qwen3.5-9B-Instruct

2.3 Cách 3: Tải từ Hugging Face Hub (ngoài nước)

pip install huggingface-hub
huggingface-cli download \
  Qwen/Qwen3.5-9B-Instruct \
  --local-dir ./models/Qwen3.5-9B-Instruct \
  --exclude "*.bin"

2.4 Tải mô hình lượng tử (tiết kiệm VRAM)

AWQ 4bit lượng tử (hỗ trợ tốt nhất bởi vLLM)
# Ví dụ: Qwen3.5-9B-Instruct-AWQ-4bit
modelscope download --model Qwen/Qwen3.5-9B-Instruct-AWQ-4bit --local_dir ./models/Qwen3.5-9B-AWQ

III. Khởi động Qwen3.5 với vLLM (lệnh chính)

3.1 Khởi động đơn GPU (phiên bản cơ bản)

python -m vllm.entrypoints.openai.api_server \
  --model ./models/Qwen3.5-9B-Instruct \  # Đường dẫn mô hình
  --host 0.0.0.0 \                         # Cho phép truy cập từ bên ngoài
  --port 8000 \                            # Cổng
  --dtype auto \                           # Độ chính xác tự động (bf16/fp16)
  --trust-remote-code \                    # Phải thêm (đối với mã tùy chỉnh Qwen)
  --max-model-len 32768 \                  # Chiều dài ngữ cảnh (Qwen3.5 hỗ trợ 32k/128k)
  --gpu-memory-utilization 0.9 \           # Tỷ lệ sử dụng VRAM (0.8–0.95)
  --max-num-seqs 64                        # Số chuỗi đồng thời tối đa

3.2 Khởi động đa GPU (tương tác song song) (bắt buộc cho 27B/35B)

# Chạy 27B trên 2 GPU
python -m vllm.entrypoints.openai.api_server \
  --model ./models/Qwen3.5-27B-Instruct \
  --host 0.0.0.0 --port 8000 \
  --trust-remote-code \
  --tensor-parallel-size 2 \  # Số GPU
  --dtype bfloat16 \
  --kv-cache-dtype fp8 \      # KV cache lượng tử (tiết kiệm 50% VRAM)
  --max-model-len 32768 \
  --gpu-memory-utilization 0.85

3.3 Khởi động mô hình lượng tử (AWQ 4bit)

python -m vllm.entrypoints.openai.api_server \
  --model ./models/Qwen3.5-9B-AWQ \
  --quantization awq \        # Bật lượng tử AWQ
  --host 0.0.0.0 --port 8000 \
  --trust-remote-code \
  --tensor-parallel-size 1 \
  --max-model-len 32768

3.4 Triển khai bằng Docker (khuyến nghị)

# 1. Pull image vLLM (hỗ trợ Qwen3.5)
docker pull vllm/vllm-openai:v0.17.0

# 2. Khởi động container
docker run -d --name qwen3.5 \
  --gpus all \
  -p 8000:8000 \
  -v ./models:/models \       # Mount thư mục mô hình
  --ipc=host \
  vllm/vllm-openai:v0.17.0 \
  --model /models/Qwen3.5-9B-Instruct \
  --host 0.0.0.0 --port 8000 \
  --trust-remote-code \
  --max-model-len 32768

IV. Giải thích tham số chính của vLLM (chuyên dùng cho Qwen3.5)

Tham số Vai trò Giá trị khuyến nghị cho Qwen3.5
`--trust-remote-code` **Phải**, để tải cấu trúc mô hình tùy chỉnh Qwen `true`
`--tensor-parallel-size`/`-tp` Chia mô hình ra N GPU 27B→2, 35B→4
`--dtype` Độ chính xác trọng số A100/40 series: `bf16`; 30 series: `fp16`
`--kv-cache-dtype` Độ chính xác bộ đệm KV `fp8` (tiết kiệm VRAM, tăng tốc)
`--quantization` Phương pháp lượng tử `awq` (4bit), `fp8`
`--max-model-len` Chiều dài ngữ cảnh 7B/9B: `32768`; 27B/35B: `16384`
`--gpu-memory-utilization` Tỷ lệ sử dụng VRAM `0.8–0.9` (để tránh OOM)
`--max-num-seqs` Số yêu cầu đồng thời tối đa 9B: `64`; 27B: `32`
`--enable-chunked-prefill` Xử lý trước văn bản dài thành các khối `true`
`--served-model-name` Tên mô hình API `qwen3.5`

V. Xác minh dịch vụ và gọi API tương thích OpenAI

5.1 Xác minh dịch vụ

# Xem danh sách mô hình
curl http://localhost:8000/v1/models

# Kết quả mong đợi
{
  "data": [
    {
      "id": "qwen3.5-9b-instruct",
      "object": "model",
      "created": 1743998800,
      "owned_by": "vllm"
    }
  ]
}

5.2 Gọi API đối thoại

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3.5-9b-instruct",
    "messages": [
      {"role": "user", "content": "Giới thiệu về Qwen3.5"}
    ],
    "temperature": 0.7,
    "max_tokens": 1024,
    "stream": false
  }'

5.3 Gọi API bằng Python

from openai import OpenAI

client = OpenAI(
  api_key="dummy",
  base_url="http://localhost:8000/v1"
)

response = client.chat.completions.create(
  model="qwen3.5-9b-instruct",
  messages=[{"role": "user", "content": "Viết một bài thơ về mùa xuân"}]
)
print(response.choices[0].message.content)

VI. Các vấn đề thường gặp và tối ưu hóa

6.1 Lỗi: `KeyError: 'qwen3_5'`

- Giải quyết: **Cập nhật transformers ≥4.41.0** + **Phải thêm `--trust-remote-code`**
pip install -U transformers

6.2 Thiếu VRAM (OOM)

- Phương án 1: Sử dụng **mô hình lượng tử 4bit AWQ** - Phương án 2: Thêm `--kv-cache-dtype fp8` - Phương án 3: Giảm `--max-model-len`, `--gpu-memory-utilization 0.8` - Phương án 4: Sử dụng đa GPU `--tensor-parallel-size N`

6.3 Tối ưu hóa tốc độ

- Kích hoạt `--enable-prefix-caching` (bộ đệm tiền tố) - Tăng `--max-num-seqs` - Sử dụng `--dtype bfloat16` (A100/4090)

VII. Danh sách phiên bản mô hình (có thể sao chép trực tiếp)

Qwen/Qwen3.5-0.8B-Instruct
Qwen/Qwen3.5-2B-Instruct
Qwen/Qwen3.5-4B-Instruct
Qwen/Qwen3.5-7B-Instruct
Qwen/Qwen3.5-9B-Instruct
Qwen/Qwen3.5-14B-Instruct
Qwen/Qwen3.5-27B-Instruct
Qwen/Qwen3.5-35B-A3B-Instruct

# Phiên bản lượng tử
Qwen/Qwen3.5-9B-Instruct-AWQ-4bit
Qwen/Qwen3.5-27B-Instruct-AWQ-4bit

Thẻ: vLLM qwen deep-learning NLP GPU

Đăng vào ngày 28 tháng 5 lúc 08:52