
在CentOS 7上部署vLLM Qwen3-30B-A3B-Instruct-2507-GGUF是一个高难度但可行的任务。结合你无GPUVMware虚拟机的环境这需要从源码编译且需要处理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] nameCentOS-7 - SCLo sclo baseurlhttps://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/ gpgcheck0 enabled1 gpgkeyfile:///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] nameCentOS-7 - SCLo rh baseurlhttps://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/ gpgcheck0 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo EOF清理并重建缓存sudo yum clean all sudo yum makecache --disablepluginfastestmirror 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] nameOracle Linux 7 Software Collections baseurlhttps://yum.oracle.com/repo/OracleLinux/OL7/SoftwareCollections/$basearch/ gpgcheck0 enabled1 EOF # 3. 清理并重建缓存 sudo yum clean all sudo yum makecache --disablepluginfastestmirror # 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 --disablepluginfastestmirror sudo yum install -y devtoolset-12 --setopttimeout300 # 激活 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.10CentOS 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 Toolssudo yum install -y openssl-devel bzip2-devel libffi-devel zlib-devel readline-devel sqlite-devel gdbm-devel xz-devel2. 编译安装 Python 3.10.12mkdir pythoncd python/wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgzopenssl versionOpenSSL 1.0.2k-fips 26 Jan 2017sudo yum install -y epel-releasesudo yum install -y openssl11 openssl11-devel openssl11-libsvim ~/.bashrcexport LD_LIBRARY_PATH/usr/lib64/openssl11/:$LD_LIBRARY_PATH export CFLAGS-I/usr/include/openssl11 export LDFLAGS-L/usr/lib64/openssl11source ~/.bashrcopenssl11 versionOpenSSL 1.1.1k FIPS 25 Mar 2021tar -xf Python-3.10.12.tgzcd Python-3.10.12cd /home/dockerinstall/python/Python-3.10.121. 创建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 distcleansed -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-rpathauto \ --enable-optimizations \ --with-ensurepipinstall make -j$(nproc) sudo make altinstall--with-openssl/usr/include/openssl11指定 OpenSSL 1.1.1 头文件路径。--with-openssl-rpathauto自动设置运行时库路径避免_ssl模块找不到库。--enable-optimizations开启优化编译时间较长但性能更好。若报错可去掉此参数。最终验证/usr/local/python3.10/bin/python3.10 -c import ssl; print(ssl.OPENSSL_VERSION)把 Python 3.10 加入 PATHecho 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-envsource vllm-cpu-env/bin/activate激活后继续# 升级 pip 并安装编译依赖 pip install --upgrade pip pip install cmake3.26 wheel packaging ninja setuptools-scm8 numpy-------------------------------------------------------------------------------------------------------------------接下来编译 vLLM无法安装确认当前 shell 已激活 GCC 12source /home/dockerinstall/vllm/vllm-cpu-env/bin/activate(vllm-cpu-env) [rootbigData08 vllm]# scl enable devtoolset-12 bash[rootbigData08 vllm]# source /home/dockerinstall/vllm/vllm-cpu-env/bin/activate(vllm-cpu-env) [rootbigData08 vllm]#(vllm-cpu-env) [rootbigData08 vllm]#(vllm-cpu-env) [rootbigData08 vllm]# which python/home/dockerinstall/vllm/vllm-cpu-env/bin/python(vllm-cpu-env) [rootbigData08 vllm]# python --versionPython 3.10.12(vllm-cpu-env) [rootbigData08 vllm]# gcc --versiongcc (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 NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.二步克隆 vLLM 源码cd /home/dockerinstall/vllmgit clone https://gitee.com/mirrors/vllm.gitcd /home/dockerinstall/vllm/vllmgit 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_SERVERhttps://mirrors.ustc.edu.cn/rust-static export RUSTUP_UPDATE_ROOThttps://mirrors.ustc.edu.cn/rust-static/rustup mkdir -p ~/.cargo ##用下面的内容覆盖 ~/.cargo/config.toml [source.crates-io] replace-with ustc [source.ustc] registry sparsehttps://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_NATIVEON 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 21 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. 安装 ModelScopesource /home/dockerinstall/vllm/vllm-cpu-env/bin/activate(vllm-cpu-env) [rootbigData08 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按CtrlA D脱离然后这个 SSH 终端就可以关掉了。screen -lsscreen -r download 或者screen -r 12345退出会话exit