在CentOS 7上部署vLLM + Qwen3-30B-A3B-Instruct-2507-GGUF是一个高难度但可行的任务。结合你无GPU(VMware虚拟机)的环境,这需要从源码编译,且需要处理Qwen3 MoE模型的特定兼容性问题。
🎯 vLLM 版本选择
推荐使用v0.28.0或更新版本。
核心原因:vLLM 对 Qwen3 MoE + GGUF 的支持是近期才完善的。关键修复(PR #22785)已于2025年8月合并,而另一个解决输出乱码问题的关键补丁(PR #30118)则在2025年12月才合并。选择 v0.28.0 能确保你获得这些必要的修复。
安装方式:由于 vLLM 官方未提供 CentOS 7 的预编译 CPU 包,必须从源码编译。你可以参考 vLLM 官方发布页获取指定版本的源码。
第一步:CentOS 7 系统环境准备
CentOS 7 默认的 GCC 版本(4.8.5)和 Python 版本(2.7)远低于 vLLM 的编译要求,必须先行升级。
1. 启用必要仓库并安装基础工具
# 覆盖 CentOS-SCLo-scl.repo sudo tee /etc/yum.repos.d/CentOS-SCLo-scl.repo > /dev/null <<'EOF' [centos-sclo-sclo] name=CentOS-7 - SCLo sclo baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/ gpgcheck=0 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo EOF # 覆盖 CentOS-SCLo-scl-rh.repo sudo tee /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo > /dev/null <<'EOF' [centos-sclo-rh] name=CentOS-7 - SCLo rh baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/ gpgcheck=0 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo EOF清理并重建缓存:
sudo yum clean all sudo yum makecache --disableplugin=fastestmirror sudo yum repolist# 1. 备份当前的基础源配置 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup # 2. 下载阿里云官方推荐的基础源配置 sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo sudo tee /etc/yum.repos.d/oracle-sclo.repo > /dev/null <<'EOF' [ol7_software_collections] name=Oracle Linux 7 Software Collections baseurl=https://yum.oracle.com/repo/OracleLinux/OL7/SoftwareCollections/$basearch/ gpgcheck=0 enabled=1 EOF # 3. 清理并重建缓存 sudo yum clean all sudo yum makecache --disableplugin=fastestmirror # 1. 安装 COPR 源所需的工具 sudo yum install -y epel-release yum-plugin-copr # 2. 添加包含 devtoolset-12 的 COPR 源 sudo yum copr enable -y mlampe/devtoolset-12 # 3. 清理缓存,然后安装 devtoolset-12 sudo yum clean all sudo yum makecache --disableplugin=fastestmirror sudo yum install -y devtoolset-12 --setopt=timeout=300 # 激活 GCC 环境(以 devtoolset-12 为例) scl enable devtoolset-12 bash # 验证版本 gcc --version g++ --versionGCC 12.2.1 已经就绪,这是编译 vLLM CPU 后端最关键的一步。接下来需要处理Python 3.10+,因为 vLLM 要求 Python 版本在3.10 到 3.13之间。
🐍 第一步:安装 Python 3.10+
CentOS 7 默认的 Python 2.7 无法使用,需要从源码编译安装 Python 3.10。这里有一个关键坑:CentOS 7 自带的 OpenSSL 版本过低,会导致 Python 的_ssl模块缺失,进而影响 pip 联网。建议先升级 OpenSSL。
1. 安装编译依赖
# 1. 标记要安装的组 sudo yum groups mark install "Development Tools" # 2. 转换组信息为对象格式 sudo yum groups mark convert "Development Tools" # 3. 再次尝试安装 sudo yum groupinstall -y "Development Tools"sudo yum install -y openssl-devel bzip2-devel libffi-devel zlib-devel readline-devel sqlite-devel gdbm-devel xz-devel2. 编译安装 Python 3.10.12
mkdir python
cd python/
wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz
openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
sudo yum install -y epel-release
sudo yum install -y openssl11 openssl11-devel openssl11-libs
vim ~/.bashrc
export LD_LIBRARY_PATH=/usr/lib64/openssl11/:$LD_LIBRARY_PATH export CFLAGS="-I/usr/include/openssl11" export LDFLAGS="-L/usr/lib64/openssl11"source ~/.bashrc
openssl11 version
OpenSSL 1.1.1k FIPS 25 Mar 2021
tar -xf Python-3.10.12.tgz
cd Python-3.10.12
cd /home/dockerinstall/python/Python-3.10.12
1. 创建openssl11.pc文件
sudo tee /usr/lib64/pkgconfig/openssl11.pc > /dev/null <<'EOF' prefix=/usr exec_prefix=${prefix} libdir=/usr/lib64/openssl11 includedir=/usr/include/openssl11 Name: OpenSSL Description: Secure Sockets Layer and cryptography libraries and tools Version: 1.1.1k Requires: Libs: -L${libdir} -lssl -lcrypto Cflags: -I${includedir} EOF2. 验证pkg-config能否识别
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$PKG_CONFIG_PATH pkg-config --modversion openssl11如果输出1.1.1k,说明文件创建成功。
make distclean
sed -i 's/PKG_CONFIG openssl /PKG_CONFIG openssl11 /g' configure
配置编译参数(关键)
# 确保环境变量正确(如果你已写入 ~/.bashrc 并 source 过,这步可跳过) export CFLAGS="-I/usr/include/openssl11" export LDFLAGS="-L/usr/lib64/openssl11" cd /home/dockerinstall/python/Python-3.10.12 # 确保环境变量正确(如果你已写入 ~/.bashrc 并 source 过,这步可跳过) export CFLAGS="-I/usr/include/openssl11" export LDFLAGS="-L/usr/lib64/openssl11" # 重新配置(可以不再需要 --with-openssl 参数) ./configure --prefix=/usr/local/python3.10 \ --with-openssl-rpath=auto \ --enable-optimizations \ --with-ensurepip=install make -j$(nproc) sudo make altinstall--with-openssl=/usr/include/openssl11:指定 OpenSSL 1.1.1 头文件路径。--with-openssl-rpath=auto:自动设置运行时库路径,避免_ssl模块找不到库。--enable-optimizations:开启优化,编译时间较长但性能更好。若报错可去掉此参数。
最终验证
/usr/local/python3.10/bin/python3.10 -c "import ssl; print(ssl.OPENSSL_VERSION)"把 Python 3.10 加入 PATH
echo 'export PATH="/usr/local/python3.10/bin:$PATH"' >> ~/.bashrc source ~/.bashrc python3.10 --version pip3.10 --version第四步:创建虚拟环境
cd /home/dockerinstall/vllm
/usr/local/python3.10/bin/python3.10 -m venv vllm-cpu-env
source vllm-cpu-env/bin/activate
激活后继续
# 升级 pip 并安装编译依赖 pip install --upgrade pip pip install "cmake>=3.26" wheel packaging ninja "setuptools-scm>=8" numpy-------------------------------------------------------------------------------------------------------------------
接下来编译 vLLM(无法安装)
确认当前 shell 已激活 GCC 12:
source /home/dockerinstall/vllm/vllm-cpu-env/bin/activate
(vllm-cpu-env) [root@bigData08 vllm]# scl enable devtoolset-12 bash
[root@bigData08 vllm]# source /home/dockerinstall/vllm/vllm-cpu-env/bin/activate
(vllm-cpu-env) [root@bigData08 vllm]#
(vllm-cpu-env) [root@bigData08 vllm]#
(vllm-cpu-env) [root@bigData08 vllm]# which python
/home/dockerinstall/vllm/vllm-cpu-env/bin/python
(vllm-cpu-env) [root@bigData08 vllm]# python --version
Python 3.10.12
(vllm-cpu-env) [root@bigData08 vllm]# gcc --version
gcc (GCC) 12.2.1 20221121 (Red Hat 12.2.1-4)
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
二步:克隆 vLLM 源码
cd /home/dockerinstall/vllm
git clone https://gitee.com/mirrors/vllm.git
cd /home/dockerinstall/vllm/vllm
git tag -l
结合你的场景(CentOS 7 + 纯 CPU + Qwen3 MoE GGUF),我建议选择v0.28.0版本。
🎯 为什么选择 v0.28.0?
这个版本是目前兼顾Qwen3 MoE GGUF 支持和稳定性的最佳选择:
Qwen3 MoE 支持完善:vLLM 对 Qwen3 MoE + GGUF 的关键修复(PR #30116、#30118)已在 v0.28.0 之前的版本中合并。其中 PR #30118 专门解决了
norm_topk_prob参数不一致的问题,不加这个修复模型输出会变成乱码。GGUF 插件架构成熟:v0.28.0 处于 GGUF 支持从内置迁移到独立插件(
vllm-gguf-plugin)的过渡期。该插件为 vLLM ≥0.25 设计,与 v0.28.0 兼容性良好。版本足够新且稳定:v0.28.0 是 2026 年 8 月发布的稳定版本,包含 584 个提交,相比更新的
rc版本更适合生产环境。CPU 后端支持:vLLM 的 CPU 后端需要从源码编译,v0.28.0 满足 GCC 12+ 的编译要求
# 确保在 vllm 仓库目录下 cd /home/dockerinstall/vllm/vllm # 查看当前分支 git status # 切换到 v0.28.0 标签 git checkout v0.28.0 # 确认切换成功 git describe --tags后续编译安装流程
切换版本后,继续执行以下步骤:
1. 安装 CPU 版 PyTorch 和依赖
export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup mkdir -p ~/.cargo ##用下面的内容覆盖 ~/.cargo/config.toml [source.crates-io] replace-with = 'ustc' [source.ustc] registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/" [net] retry = 2 git-fetch-with-cli = true cargo clean 2>/dev/null || true pip install -v -r requirements/cpu.txt \ --extra-index-url https://mirrors.aliyun.com/pytorch-wheels/cpu \ -i https://pypi.tuna.tsinghua.edu.cn/simple2. 编译 vLLM CPU 后端(确保 GCC 12 环境已激活)
vllm各种报错 已放弃
-----------------------------------------------------------------------------------------------------
改为使用ik_llama.cpp
# 1. 新开一个终端,激活 GCC 12(关键) scl enable devtoolset-12 bash # 2. 进入你创建的目录 cd /home/dockerinstall/llama_cpp # 3. 克隆 ik_llama.cpp git clone https://gitcode.com/GitHub_Trending/ik/ik_llama.cpp.git cd ik_llama.cpp # 4. 检查 CMake 版本,需要 >= 3.14 cmake --version# 5. 配置并编译(纯 CPU 优化) cmake -B build -DGGML_NATIVE=ON cmake --build build --config Release -j$(nproc)
编译完成后,可执行文件在: /home/dockerinstall/llama_cpp/ik_llama.cpp/build/bin/llama-server
运行模型
/home/dockerinstall/llama_cpp/ik_llama.cpp/build/bin/llama-server \ -m /home/dockerinstall/models/Qwen3-30B-A3B-Instruct-2507-Q4_K_M.gguf \ --host 0.0.0.0 --port 11434 \ -c 4096 --threads 6 \ -b 1024 --ubatch-size 512 \ --jinja #成功 /home/dockerinstall/llama_cpp/ik_llama.cpp/build/bin/llama-server \ -m /home/dockerinstall/models/Qwen3-30B-A3B-Instruct-2507-Q4_K_M.gguf \ --host 0.0.0.0 --port 11434 \ -c 2048 --threads 8 \ -b 512 --ubatch-size 256 \ --jinja #final /home/dockerinstall/llama_cpp/ik_llama.cpp/build/bin/llama-server \ -m /home/dockerinstall/models/Qwen3-30B-A3B-Instruct-2507-Q4_K_M.gguf \ --host 0.0.0.0 --port 11434 \ -c 16384 --threads 8 \ -b 1024 --ubatch-size 512 \ --jinjawatch -n 1 'free -g; echo "---"; ps -o pid,%cpu,%mem,rss,cmd -C llama-server'
启动脚本:
/home/dockerinstall/llama_cpp/llama.sh
#!/bin/bash BIN=/home/dockerinstall/llama_cpp/ik_llama.cpp/build/bin/llama-server MODEL=/home/dockerinstall/models/Qwen3-30B-A3B-Instruct-2507-Q4_K_M.gguf LOG=/home/dockerinstall/llama_cpp/llama-server.log case "$1" in start) if pgrep -f 'llama-server.*11434' >/dev/null; then echo "已在运行: $(pgrep -f 'llama-server.*11434')"; exit 0 fi nohup "$BIN" \ -m "$MODEL" \ --host 0.0.0.0 --port 11434 \ -c 16384 --threads 8 \ -b 1024 --ubatch-size 512 \ --jinja >> "$LOG" 2>&1 & echo "已启动 PID: $!" ;; stop) pkill -f 'llama-server.*11434' && echo "已停止" || echo "没在运行" ;; status) pgrep -af 'llama-server.*11434' || echo "没在运行" ;; log) tail -f "$LOG" ;; *) echo "用法: $0 {start|stop|status|log}" ;; esacchmod +x /home/dockerinstall/llama_cpp/llama.sh
/home/dockerinstall/llama_cpp/llama.sh start
------------------------------------------------------------------------------------------------------------------
你提供的这个 ModelScope 链接是有效的,文件来自unsloth仓库,Q4_K_M 量化版大小约17.3 GB,很适合你 32GB 内存的 CPU 环境。
1. 安装 ModelScope
source /home/dockerinstall/vllm/vllm-cpu-env/bin/activate
(vllm-cpu-env) [root@bigData08 models]# which pip
/home/dockerinstall/vllm/vllm-cpu-env/bin/pip
然后安装 modelscope 并下载:
pip install modelscope cd /home/dockerinstall/models modelscope download \ --model unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF \ Qwen3-30B-A3B-Instruct-2507-Q4_K_M.gguf \ --local_dir /home/dockerinstall/modelsscreen是一个终端复用工具,核心作用是:在后台保持一个会话,SSH 断开后里面的任务继续跑。对你的 17GB 下载场景非常合适。
sudo yum install -y screen screen --version screen -S download
第三步:在会话里执行下载命令
source /home/dockerinstall/vllm/vllm-cpu-env/bin/activate modelscope download \ --model unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF \ Qwen3-30B-A3B-Instruct-2507-Q4_K_M.gguf \ --local_dir /home/dockerinstall/models按
Ctrl+A D脱离,然后这个 SSH 终端就可以关掉了。
screen -ls
screen -r download 或者
screen -r 12345
退出会话
exit