忘掉Ollama! 将GPT OSS私有部署推理性能提升100倍的部署教程

久等多时,本周 OpenAI 终于发布了两款开源模型:GPT OSS 120BGPT OSS 20B ,官方提供的 vLLM 推理需要一系列安装配置步骤才可正常运行,以下基于开源大模型服务平台 GPUStack ,结合自定义安装的 vLLM 版本,完成 GPT OSS 系列模型的生产部署推理。同时,我们还选择了 Ollama 作为对比,基于 EvalScope 进行压测,对比两种引擎在生产并发场景下的吞吐性能差异。

测试结果显示,vLLM 在资源利用率、并发能力和扩展效率方面均大幅领先。尤其在企业级部署场景中,Ollama 的多实例架构容易造成显存浪费,而 vLLM 则能以更小的显存占用支撑更多并发连接,投资回报率(ROI)远高于前者。

以下为具体的安装部署教程和测试过程:

安装 GPUStack

首先,参考 GPUStack 官方文档完成安装(docs.gpustack.ai/latest/inst... )。推荐容器化部署方式,在 NVIDIA GPU 服务器上,根据文档要求完成对应版本的 NVIDIA 驱动、Docker 和 NVIDIA Container Toolkit 安装后,通过 Docker 启动 GPUStack 服务

以下测试在 NVIDIA H20 GPU 上进行:

ini 复制代码
docker run -d --name gpustack \
    --restart=unless-stopped \
    --gpus all \
    --network=host \
    --ipc=host \
    -e HF_ENDPOINT="https://hf-mirror.com" \
    -v gpustack-data:/var/lib/gpustack \
    gpustack/gpustack \
    --port 9090

查看容器日志确认 GPUStack 是否已正常运行:

复制代码
docker logs -f gpustack

若容器日志显示服务启动正常,使用以下命令获取 GPUStack 控制台的初始登录密码:

bash 复制代码
docker exec -it gpustack cat /var/lib/gpustack/initial_admin_password

在浏览器中通过服务器 IP 和自定义的 9090 端口访问 GPUStack 控制台(http://YOUR_HOST_IP:9090),使用默认用户名 admin 和上一步获取的初始密码登录。登录 GPUStack 后,在资源菜单即可查看识别到的 GPU 资源:

安装自定义 vLLM 版本

目前,GPUStack 0.7.0 版本集成的 vLLM 版本为 0.9.2,vLLM 的最新版本为 0.10.0但 0.10.0 版本仍不支持 openai/gpt-oss-120b 和 openai/gpt-oss-20b 模型的推理运行

查看模型介绍:huggingface.co/openai/gpt-... ,模型的 README 中已说明需要安装 vLLM 0.10.1 gptoss 分支版本才能运行:

为了提前体验 gpt-oss-120bgpt-oss-20b 模型,我们需要手动安装该开发分支。

GPUStack 支持推理引擎多版本并行使用,用户可以在保留默认稳定版本的同时,灵活安装并使用自定义的 vLLM 版本,实现对新发布模型的推理。

进入 GPUStack 容器,创建一个独立的 Python 虚拟环境来安装 vllm 0.10.1+gptoss 版本:

bash 复制代码
docker exec -it gpustack bash

由于 vllm_0.10.1+gptoss 依赖 Python 3.12,而 GPUStack 镜像内置版本为 3.11,安装 Miniconda 用于提供 Python 3.12。到持久化目录下创建 Python 虚拟环境,这样在容器重建后仍然可以使用该环境:

bash 复制代码
# 在持久化路径下创建目录
mkdir -p /var/lib/gpustack/miniconda3
# 下载 Miniconda Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /var/lib/gpustack/miniconda3/miniconda.sh
# 安装 Miniconda 到持久化目录
bash /var/lib/gpustack/miniconda3/miniconda.sh -b -u -p /var/lib/gpustack/miniconda3
# 删除 Miniconda 安装包
rm /var/lib/gpustack/miniconda3/miniconda.sh
# 激活 base 环境
source /var/lib/gpustack/miniconda3/bin/activate
# 接受使用协议
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r

创建 Python 3.12 虚拟环境:

ini 复制代码
# 创建环境
conda create -n vllm_0.10.1+gptoss python=3.12 -y
# 激活环境
conda activate vllm_0.10.1+gptoss
# 检查 Python 版本
python -V

安装 vllm_0.10.1+gptoss

bash 复制代码
# 设置清华 PyPI 源
pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
# 安装 vLLM 0.10.1+gptoss
pip install --pre vllm==0.10.1+gptoss \
  --extra-index-url https://wheels.vllm.ai/gpt-oss/ \
  --extra-index-url https://download.pytorch.org/whl/nightly/cu128
# 将 vllm_0.10.1+gptoss 虚拟环境的 vllm 可执行文件链接到 /var/lib/gpustack/bin/ 下用于 GPUStack 调用
ln -sf /var/lib/gpustack/miniconda3/envs/vllm_0.10.1+gptoss/bin/vllm /var/lib/gpustack/bin/vllm_0.10.1+gptoss

离线环境可以参考以下命令,打包 wheel 包到离线环境安装(注意安装时如果有 wheel 包损坏,重新下载该 wheel 包到内网替换并安装):

arduino 复制代码
pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
​
pip download --pre vllm==0.10.1+gptoss  \
  --extra-index-url https://wheels.vllm.ai/gpt-oss/  \
  --extra-index-url https://download.pytorch.org/whl/nightly/cu128 \
  --dest ./vllm_0.10.1_gptoss
​
tar -zcvf vllm_0.10.1_gptoss.tar vllm_0.10.1_gptoss/

下载 GPT OSS 模型

在 GPUStack UI 点击模型文件菜单,选择添加模型文件,可以从 Hugging Face 或 ModelScope 联网下载模型文件。国内网络建议从 ModelScope 搜索并下载 gpt-oss-120bgpt-oss-20b 模型。

部署 GPT OSS 模型

确认模型下载完成后,点击已下载模型右侧的部署按钮,部署模型。

在部署页面,展开高级配置,设置模型类别为 LLM。并在后端版本中,填写自定义后端版本为 0.10.1+gptossGPUStack 会自动调用 /var/lib/gpustack/bin/vllm_0.10.1+gptoss 来运行模型:

并设置以下后端参数和环境变量:

后端参数:

--max-model-len=32768

环境变量:

VLLM_ATTENTION_BACKEND=FLASH_ATTN

VLLM_USE_FLASHINFER_SAMPLER=0

保存部署,等待模型启动完成,确认模型正常运行(Running):

然后可以在试验场测试模型:

GPT OSS 20B

GPT OSS 120B

EvalScope 压测对比 Ollama

EvalScope 是魔搭社区推出的模型评测与性能基准测试框架 ,简单易上手,此处使用 EvalScope 来对比 Ollama 和 GPUStack vLLM 后端运行的 GPT OSS 20B 与 GPT OSS 120B 的吞吐性能表现

使用 Conda 安装 EvalScope:

ini 复制代码
# 创建虚拟环境
conda create -n evalscope python=3.10 -y
# 激活虚拟环境
conda activate evalscope
# 安装 EvalScope
pip install -U 'evalscope[perf]' plotly gradio wandb

以下为压测记录,可以直接跳过到最后查看压测结果汇总分析。

GPT OSS 20B 单卡运行

10 请求 1并发

  • GPUStack vLLM
lua 复制代码
evalscope perf \
    --url "https://gpustack.xxx.xx/v1/chat/completions" \
    --api-key "gpustack_c07786062fb72316_ce5da3294ec87a708b25bda4082d894b" \
    --model gpt-oss-20b \
    --number 10 \
    --parallel 1 \
    --api openai \
    --dataset openqa \
    --stream
  • Ollama
lua 复制代码
evalscope perf \
    --url "http://192.168.0.1:11434/v1/chat/completions" \
    --model gpt-oss:20b \
    --number 10 \
    --parallel 1 \
    --api openai \
    --dataset openqa \
    --stream

100 请求 10并发

  • GPUStack vLLM
lua 复制代码
evalscope perf \
    --url "https://gpustack.xxx.xx/v1/chat/completions" \
    --api-key "gpustack_c07786062fb72316_ce5da3294ec87a708b25bda4082d894b" \
    --model gpt-oss-20b \
    --number 100 \
    --parallel 10 \
    --api openai \
    --dataset openqa \
    --stream
  • Ollama
lua 复制代码
evalscope perf \
    --url "http://192.168.0.1:11434/v1/chat/completions" \
    --model gpt-oss:20b \
    --number 100 \
    --parallel 10 \
    --api openai \
    --dataset openqa \
    --stream

500 请求 50并发

  • GPUStack vLLM
lua 复制代码
evalscope perf \
    --url "https://gpustack.xxx.xx/v1/chat/completions" \
    --api-key "gpustack_c07786062fb72316_ce5da3294ec87a708b25bda4082d894b" \
    --model gpt-oss-20b \
    --number 500 \
    --parallel 50 \
    --api openai \
    --dataset openqa \
    --stream
  • Ollama

由于 Ollama 单请求处理效率过低,为节约时间,减少请求数,并发保持不变

lua 复制代码
evalscope perf \
    --url "http://192.168.0.1:11434/v1/chat/completions" \
    --model gpt-oss:20b \
    --number 100 \
    --parallel 50 \
    --api openai \
    --dataset openqa \
    --stream

在 50 并发下,Ollama 出现 41% 的错误请求。

1000 请求 100并发

  • GPUStack vLLM
lua 复制代码
evalscope perf \
    --url "https://gpustack.xxx.xx/v1/chat/completions" \
    --api-key "gpustack_c07786062fb72316_ce5da3294ec87a708b25bda4082d894b" \
    --model gpt-oss-20b \
    --number 1000 \
    --parallel 100 \
    --api openai \
    --dataset openqa \
    --stream
  • Ollama

由于 Ollama 单请求处理效率过低,为节约时间,减少请求数,并发保持不变

lua 复制代码
evalscope perf \
    --url "http://192.168.0.1:11434/v1/chat/completions" \
    --model gpt-oss:20b \
    --number 100 \
    --parallel 100 \
    --api openai \
    --dataset openqa \
    --stream

在 100 并发下,Ollama 出现 71% 的错误请求。

GPT OSS 120B 4卡运行

10 请求 1并发

  • GPUStack vLLM
lua 复制代码
evalscope perf \
    --url "https://gpustack.xxx.xx/v1/chat/completions" \
    --api-key "gpustack_c07786062fb72316_ce5da3294ec87a708b25bda4082d894b" \
    --model gpt-oss-120b \
    --number 10 \
    --parallel 1 \
    --api openai \
    --dataset openqa \
    --stream
  • Ollama
lua 复制代码
evalscope perf \
    --url "https://gpustack.xxx.xx/v1/chat/completions" \
    --api-key "gpustack_c07786062fb72316_ce5da3294ec87a708b25bda4082d894b" \
    --model gpt-oss-120b \
    --number 10 \
    --parallel 1 \
    --api openai \
    --dataset openqa \
    --stream

100 请求 10并发

  • GPUStack vLLM
lua 复制代码
evalscope perf \
    --url "https://gpustack.xxx.xx/v1/chat/completions" \
    --api-key "gpustack_c07786062fb72316_ce5da3294ec87a708b25bda4082d894b" \
    --model gpt-oss-120b \
    --number 100 \
    --parallel 10 \
    --api openai \
    --dataset openqa \
    --stream
  • Ollama

由于 Ollama 单请求处理效率过低,为节约时间,减少请求数,并发不变。

lua 复制代码
evalscope perf \
    --url "https://gpustack.xxx.xx/v1/chat/completions" \
    --api-key "gpustack_c07786062fb72316_ce5da3294ec87a708b25bda4082d894b" \
    --model gpt-oss-120b \
    --number 10 \
    --parallel 10 \
    --api openai \
    --dataset openqa \
    --stream

500 请求 50并发

  • GPUStack vLLM
lua 复制代码
evalscope perf \
    --url "https://gpustack.xxx.xx/v1/chat/completions" \
    --api-key "gpustack_c07786062fb72316_ce5da3294ec87a708b25bda4082d894b" \
    --model gpt-oss-120b \
    --number 500 \
    --parallel 50 \
    --api openai \
    --dataset openqa \
    --stream
  • Ollama

由于 Ollama 单请求处理效率过低,为节约时间,减少请求数,并发不变。

lua 复制代码
evalscope perf \
    --url "https://gpustack.xxx.xx/v1/chat/completions" \
    --api-key "gpustack_c07786062fb72316_ce5da3294ec87a708b25bda4082d894b" \
    --model gpt-oss-120b \
    --number 50 \
    --parallel 50 \
    --api openai \
    --dataset openqa \
    --stream

在 50 并发下,Ollama 出现 58% 的错误请求。

1000 请求 100并发

  • GPUStack vLLM
lua 复制代码
evalscope perf \
    --url "https://gpustack.xxx.xx/v1/chat/completions" \
    --api-key "gpustack_c07786062fb72316_ce5da3294ec87a708b25bda4082d894b" \
    --model gpt-oss-120b \
    --number 1000 \
    --parallel 100 \
    --api openai \
    --dataset openqa \
    --stream
  • Ollama

由于 Ollama 单请求处理效率过低,为节约时间,减少请求数,并发不变。

lua 复制代码
evalscope perf \
    --url "https://gpustack.xxx.xx/v1/chat/completions" \
    --api-key "gpustack_c07786062fb72316_ce5da3294ec87a708b25bda4082d894b" \
    --model gpt-oss-120b \
    --number 100 \
    --parallel 100 \
    --api openai \
    --dataset openqa \
    --stream

在 100 并发下,Ollama 出现 78% 的错误请求。

将以上压测结果的吞吐表现汇总如下表:

模型 并发数 请求数 Ollama vLLM 提升百分比
GPT OSS 20B(单卡 H20) 1 10 82.9502 237.782 +186.67%
10 100 84.4222 1061.25 +1157.18%
50 500 85.0931 3373.54 +3863.93%
100 1000 84.0748 4620.06 +5393.28%
GPT OSS 120B(四卡 H20) 1 10 57.6082 224.418 +289.57%
10 100 57.8163 1266.32 +2089.10%
50 500 58.3971 3854.29 +6499.79%
100 1000 58.5685 5902.41 +9980.78%

以上测试结果表明,在大模型推理的场景下,硬件投入越高,选择像 vLLM 这样的高效推理引擎,其投资回报率(ROI)也就越高。 举个形象的例子:如果企业采购了价值 1000 万元的 GPU 硬件,假设使用 vLLM 可以将 GPU 使用效率提升到约 80%,相当于真正发挥出 800 万元的硬件价值。而若选择如 Ollama 这类桌面型工具,相同资源条件下,实际吞吐能力仅为 vLLM 的几分之一,能够释放的计算能力远低于 vLLM。对于重视成本效益与性能表现的企业来说,如何选型,自然不言而喻。

以上测试数据基于单实例运行环境。尽管 Ollama 单实例的资源占用看似远低于 vLLM,但由于其技术架构的限制,单实例一般也仅能支持个位数的并发连接。要想支撑更高的并发,必须通过部署多个实例来扩展能力。然而,多实例部署带来的最大问题就是显存资源的严重浪费。以部署 GPT OSS 20B 模型为例,单个 Ollama 实例加载约 14GB 的模型权重,假设每个实例支持 4 路并发,实现 100 路并发需部署 25 个实例,显存总占用超过 350GB。而采用 vLLM,仅需约 130GB 显存即可支撑相同并发,且具备更强的扩展能力。

综上,从资源利用率、扩展能力到总体成本控制,vLLM 在实际生产环境中均展现出显著优势,是面向企业级大模型推理部署的更优解。

加入社区

想要了解更多关于 GPUStack 的信息,可以访问我们的仓库地址:https://github.com/gpustack/gpustack。如果你对 GPUStack 有任何建议,欢迎提交 GitHub issue 。在体验 GPUStack 或提交 issue 之前,请在我们的 GitHub 仓库上点亮 Star ⭐️关注我们,也非常欢迎大家一起参与到这个开源项目中!

如果在使用过程中遇到任何问题,欢迎随时加入我们的 Discord 社区 :[ discord.gg/VXYJzuaqwD ],也可以扫码添加 GPUStack 小助手 联系加入 GPUStack 微信交流群,获得 GPUStack 团队的技术支持,或与社区爱好者共同探讨交流。

如果觉得对你有帮助,欢迎点赞转发关注

相关推荐
楚莫识18 小时前
Comet AI 浏览器免费开放了,还送 Perplexity Pro 会员!
openai·ai编程·cursor
机器之心18 小时前
刚刚,Thinking Machines Lab博客提出在策略蒸馏,Qwen被cue 38次
人工智能·openai
Lethehong20 小时前
搭建AI智能翻译器:快速部署Dify,接入AiOnly平台GPT-5模型
人工智能·gpt·dify·maas·aionly
量子位2 天前
OpenAI IPO计划第一步曝光,奥特曼骚操作看傻华尔街
openai
新智元2 天前
马斯克「世界模拟器」首曝,1 天蒸馏人类 500 年驾驶经验!擎天柱同脑进化
人工智能·openai
新智元2 天前
LeCun 怒揭机器人最大骗局,坦白 Llama 与我无瓜!
人工智能·openai
机器之心2 天前
三百年几何猜想被推翻,数学家首次发现「穿不过去」的多面体
人工智能·openai
机器之心2 天前
打造图像编辑领域的ImageNet?苹果用Nano Banana开源了一个超大数据集
人工智能·openai
AAA阿giao3 天前
深入理解 OpenAI AIGC 模型与 Node.js 实战:从零构建歌词生成应用
aigc·openai
CaracalTiger3 天前
告别云端依赖!ComfyUI本地化视频生成实战教程+cpolar实战
python·gpt·开源·aigc·ai编程·1024程序员节·ai-native