【教程】在学校、公司无外网无sudo权限的服务器上部署 gpt-oss-20b + vLLM 全流程(备份)
在学校、公司无外网无sudo的服务器上部署 gpt-oss-20b + vLLM 全流程备份(A100 示例)
适用场景:
服务器 无法访问 GitHub / HuggingFace / PyPI 官方,没有 sudo管理员权限,但可以访问 国内网站(如清华镜像、阿里云镜像、ModelScope 等)。目标是在一台有 NVIDIA A100 80G 的 Linux 机器上,使用 vLLM 部署gpt-oss-20b,并通过 OpenAI 兼容接口对内提供服务。

一、环境说明
本文以如下环境为例:
-
操作系统:Linux(Ubuntu/CentOS 类皆可)
-
GPU:NVIDIA A100 80GB
-
驱动 / CUDA:驱动已安装,
nvidia-smi显示 CUDA 12.8 -
网络:
- 无法访问
github.com、huggingface.co、download.pytorch.org等国外站点 - 可以访问国内镜像站:清华 TUNA、阿里云镜像、ModelScope 等
- 无法访问
我们会利用:
- Miniconda(通过清华镜像下载)
- PyTorch cu128(通过阿里云 pytorch-wheels 镜像)
- vLLM 0.10.2(支持 GPT-OSS 的官方版本)
- ModelScope 国内镜像
openai-mirror/gpt-oss-20b
二、安装 Miniconda(提供环境基础)
Miniconda 是一个轻量级 Anaconda,只包含 Python + conda,本身非常适合作为独立环境管理工具。清华镜像站提供了 Miniconda 完整镜像下载链接。
2.1 下载 Miniconda 安装脚本
cd ~
mkdir -p ~/miniconda-download
cd ~/miniconda-download
# 从清华镜像站下载 Linux x86_64 版本 Miniconda
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
2.2 静默安装到用户目录(无须 root)
bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3
-b:batch 模式,不交互-p:指定安装路径,这里用$HOME/miniconda3,不污染系统
2.3 初始化 conda
source ~/miniconda3/etc/profile.d/conda.sh
conda init # 可选,写入 ~/.bashrc,重登后自动生效
# 当前会话先激活 base 看看
conda activate base
此时终端前面应该出现 (base),说明 conda 安装成功。
三、创建 gptoss 环境并解决 ToS 报错
新版本 conda 使用 Anaconda 官方仓库时,需要先接受一次 Terms of Service,否则会出现 CondaToSNonInteractiveError。
3.1 接受官方仓库 ToS
在 (base) 环境中执行:
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
3.2 创建独立环境 gptoss(Python 3.10)
conda create -n gptoss python=3.10 -y
conda activate gptoss
成功后命令行前缀应变为 (gptoss)。
四、配置国内 conda / pip 镜像源
4.1 配置 conda 使用清华镜像(推荐)
参考清华官方 Anaconda 镜像配置,编辑 ~/.condarc:
vim ~/.condarc,然后:set paste进入粘贴模式, 粘贴后退出 `:set nopaste:
cat > ~/.condarc << 'EOF'
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
EOF
然后可以清一下缓存:
conda clean -i
4.2 配置 pip 使用清华 PyPI 镜像
# 在 gptoss 环境内
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
也可以每次安装时临时加 -i,但全局配置一次更方便。
五、安装 GPU 版 PyTorch(CUDA 12.8 / cu128)
服务器 nvidia-smi 显示 CUDA 12.8,对应的 PyTorch 预编译包一般是 cu128 版本。阿里云提供了专门的 pytorch-wheels/cu128 镜像索引,可通过 -f 参数从该页面拉取 whl 包。
5.1 使用阿里云 cu128 镜像安装
# 仍然在 (gptoss) 环境中
pip install torch==2.4.1 torchvision torchaudio
-f https://mirrors.aliyun.com/pytorch-wheels/cu128/
版本号可以根据阿里云索引页面上实际提供的版本来选,示例为近期常见版本。
5.2 验证 PyTorch GPU 是否可用
python - << 'PY'
import torch
print("torch version:", torch.__version__)
print("cuda available:", torch.cuda.is_available())
print("torch cuda version:", torch.version.cuda)
print("device count:", torch.cuda.device_count())
PY
只要 cuda available: True,且 device count > 0,就说明 GPU 版装成功了。
六、安装 vLLM 0.10.2(官方推荐版本)
vLLM 官方 GPT-OSS 指南建议使用 vLLM 0.10.2 正式版作为起步版本,并说明 vLLM >= 0.10.2 才支持 --tool-call-parser openai 等 GPT-OSS 相关特性。
在 (gptoss) 环境中直接:
pip install "vllm==0.10.2"
安装完成后测试一下:
vllm --help
能看到帮助信息就代表安装成功。
七、安装 ModelScope CLI 并下载 gpt-oss-20b(国内)
OpenAI 的 GPT-OSS 系列在 ModelScope 上有官方镜像仓库,比如 openai-mirror/gpt-oss-20b。
ModelScope 提供 Python SDK 和命令行工具两种下载方式,CLI 用起来更像 HuggingFace Hub 的体验。
7.1 安装 ModelScope 命令行工具
pip install "modelscope>=1.14.0"
安装完成后,使用前建议先登录(如果模型需要登陆 token 才能下;GPT-OSS 镜像目前多数是公开的,可视情况略过)。
7.2 使用命令行下载 gpt-oss-20b
我们统一把模型放到 ~/model 目录:
mkdir -p ~/model
cd ~/model
# 使用 CLI 下载模型到指定目录
modelscope download
--model openai-mirror/gpt-oss-20b
--local_dir ./gpt-oss-20b
- 默认情况下,ModelScope 会用
~/.cache/modelscope/hub作为缓存目录,你也可以通过设置MODELSCOPE_CACHE环境变量修改。 - 指定
--local_dir后,会在当前目录下生成完整的模型目录,包含config.json、tokenizer.json、*.safetensors等 HF 兼容结构,对 vLLM 来说就是一个“本地模型仓库”。
下载完成确认一下目录:
ls ~/model/gpt-oss-20b
# 应该能看到 config.json, tokenizer.model/json, model-*.safetensors 等文件
八、在单张 A100 上用 vLLM 启动 gpt-oss-20b 服务
根据 vLLM 官方 GPT-OSS Recipe,gpt-oss-20b 可以在单张 A100 上运行,推荐开启 --async-scheduling 提升吞吐。
假设你想让模型只跑在物理 GPU 5 上(可以用 nvidia-smi 查看哪个最空闲):
8.1 绑定指定 GPU
conda activate gptoss
cd ~/model
# 只让当前进程看到 GPU 5
export CUDA_VISIBLE_DEVICES=5
# 可选:指定注意力后端/多进程方式(Ampere + TRITON_ATTN 通常效果不错)
export VLLM_ATTENTION_BACKEND=TRITON_ATTN
export VLLM_WORKER_MULTIPROC_METHOD=spawn
8.2 启动 vLLM OpenAI 兼容服务
使用 本地模型路径 启动(重点:不写 openai/gpt-oss-20b,避免访问 HuggingFace):
vllm serve ./gpt-oss-20b
--async-scheduling
--max-model-len 8192
--gpu-memory-utilization 0.9
参数说明:
./gpt-oss-20b:本地模型目录(ModelScope 下载结果)--async-scheduling:启用 vLLM 异步调度,提高 QPS,GPT-OSS 官方推荐--max-model-len 8192:先用 8K 上下文起步,A100 80G 显存足够,后续可根据实际负载调整--gpu-memory-utilization 0.9:最多利用 90% 显存,避免挤占系统和其他服务空间
正常情况下,最后会看到类似日志:
INFO: Uvicorn running on http://0.0.0.0:8000
INFO: Application startup complete.
至此,gpt-oss-20b 已经通过 vLLM 跑在指定 GPU 上,并以 OpenAI 风格的 API 对外提供服务。
九、使用 curl / Python 测试 OpenAI 兼容接口
9.1 curl 调用 /v1/chat/completions
在同一台服务器上新开一个终端,执行:
curl http://127.0.0.1:8000/v1/chat/completions
-H "Content-Type: application/json"
-H "Authorization: Bearer local-key"
-d '{
"model": "gpt-oss-20b",
"messages": [
{"role": "user", "content": "用中文简单介绍一下你是谁"}
],
"max_tokens": 128
}'
说明:
Authorization的Bearer值只要是非空字符串即可,除非你在 vLLM 启动时配置了--api-key校验;model字段可以写逻辑名称,如"gpt-oss-20b",真正加载的是你启动命令里指定的本地路径模型。
如果返回 JSON,且能在 choices[0].message.content 中看到一段正常中文回复,则说明:
- 模型权重加载成功
- vLLM 调用 GPU 正常
- OpenAI 兼容接口工作正常
9.2 Python(OpenAI SDK)示例
在 (gptoss) 环境中安装 openai:
pip install openai
测试脚本 test_gpt_oss_20b.py:
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:8000/v1",
api_key="local-key",
)
resp = client.chat.completions.create(
model="gpt-oss-20b",
messages=[
{"role": "user", "content": "你好,简单说说量子力学是什么?"},
],
max_tokens=256,
)
print(resp.choices[0].message.content)
运行:
python test_gpt_oss_20b.py
能正常输出中文解释,就大功告成。
十、常见问题与踩坑记录
1. CondaToSNonInteractiveError
问题:
CondaToSNonInteractiveError: Terms of Service have not been accepted...
解决:按提示执行conda tos accept --override-channels ...,分别对pkgs/main和pkgs/r接受 ToS,然后再conda create -n gptoss ...即可。
2. PyTorch 安装太慢或失败
- 确认使用了
-f https://mirrors.aliyun.com/pytorch-wheels/cu128/而不是把它当 index-url; - 可以参考一篇专门讲“正确使用国内 PyTorch 镜像”和
-f参数用法的文章。
3. ModelScope 下载目录找不到
- 默认缓存目录:
~/.cache/modelscope/hub; - 可以通过
MODELSCOPE_CACHE环境变量修改; - 使用
modelscope download --local_dir ./gpt-oss-20b明确指定输出路径最省心。
4. vLLM 启动报 MXFP4 / attention backend 相关错误
- 确认 vLLM 版本 ≥ 0.10.2,官方 GPT-OSS Recipe 明确要求;
- 确认 PyTorch 是 GPU + cu128 版本,且 CUDA >= 12.8;
- 可以显式指定注意力后端:
export VLLM_ATTENTION_BACKEND=TRITON_ATTN,很多社区踩坑文章也是这么处理的。
5. GPU 显存不够 / OOM
- 优先减小
--max-model-len; - 然后适当调低
--gpu-memory-utilization; - 或减少并发(如
--max-num-seqs)——这些参数都会影响 KV Cache 大小,从而影响显存占用。
总结
在“无法访问外网”的环境里部署 gpt-oss-20b + vLLM,关键在于:
- 用 Miniconda + 清华镜像 搭建独立 Python 环境;
- 用 阿里云 PyTorch wheels(cu128) 安装 GPU 版 PyTorch;
- 使用 vLLM 0.10.2 正式版,配合 A100 的 TRITON attention;
- 借助 ModelScope 的
openai-mirror/gpt-oss-20b模型镜像 下载本地权重; - 最终通过
vllm serve ./gpt-oss-20b把模型以 OpenAI 协议暴露出来。
本文地址:https://www.yitenyun.com/4530.html









