A100本地vLLM部署gpt-oss,并启动远程可访问api
GPT-oss试用
gpt-oss有两个原生配置是目前(2025-8-8)Ampere系列显卡不支持的,分别是默认的MXFP4量化,以及Flash-attn V3。官方给出的vllm教程也是默认使用的是H系列显卡。因此,A100部署可能会遇到类似Sinks are only supported in FlashAttention 3
的报错。
下载模型参数到本地
国内用魔塔更快,下载到本地xxxx目录下:
pip install modelscope
modelscope download --model openai-mirror/gpt-oss-120b --local_dir xxxxxx
新建conda环境
conda create -n vllm python=3.12 -yconda activate vllmpip install --upgrade uvexport TORCH_CUDA_ARCH_LIST="8.0"uv 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 \--index-strategy unsafe-best-match --force-reinstall --no-cache
这里官方给的pytorch是cu128,如果a100当前驱动低于12.8不确定会不会报错,我这里提前将GPU驱动(nvidia-smi)以及工具链(nvcc -V)都升级到了12.8,老一点的驱动可能也行。
启动vllm服务
分两种场景,看你是只需要本机访问api,还是需要可远程访问api。远程api:
export TORCH_CUDA_ARCH_LIST="8.0"
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6
VLLM_ATTENTION_BACKEND=TRITON_ATTN_VLLM_V1 vllm serve \/mnt/models/gpt-oss-120b \-tp 2 \--served-model-name gpt-oss-120b \--host 0.0.0.0 \--port 8005 \--api-key 12345
最关键的是VLLM_ATTENTION_BACKEND=TRITON_ATTN_VLLM_V1
,不使用Flash-attn,因为gpt-oss默认使用V3,这在A100不受支持。其他设置为FLASHINFER
,default
,triton
我这里测试都不行。这里--host 0.0.0.0
是让该服务监听所有,远程可访问。如果只想本机可访问,改成--host 127.0.0.1
即可。/mnt/models/gpt-oss-120b
是你下载模型参数的目录,--port 8005
这是服务的端口,不设置默认是8000,--api-key 12345
设置访问该API服务需要用这个key验证,--served-model-name gpt-oss-120b
这里是设置当使用API访问时,用什么model_name来识别该服务。-tp 2
表示用两张卡。
API访问
这里给一个python脚本访问api的示例:
from openai import OpenAI
import jsonclient = OpenAI(base_url="http://localhost:8005/v1",api_key="12345"
)result = client.chat.completions.create(model="gpt-oss-120b",messages=[{"role": "system", "content": "Reasoning: high"},{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Explain what MXFP4 quantization is."}],max_tokens=2048
)print(result.choices[0].message.content)with open('./model_response.json', "w") as f:json.dump(result.model_dump(), f, indent=4, ensure_ascii=False)
这是本地访问。如果是远程访问,将localhost
替换成你启动服务的服务器的IP即可。将模型输出保存为json,方便查看分析模型输出的组成部分。messages
的第一行{"role": "system", "content": "Reasoning: high"}
是用来指示思考深度的,共三个选择high
,medium
,low
。
启动的服务默认是支持流式输出的,这里给个流式返回的python示例:
from openai import OpenAIclient = OpenAI(base_url="http://localhost:8005/v1",api_key="12345"
)response = client.chat.completions.create(model="gpt-oss-120b",messages=[{"role": "system", "content": "Reasoning: high"},{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Explain what MXFP4 quantization is."}],max_tokens=2048,stream=True
)for chunk in response:# 有的 SDK 版本 chunk 可能是对象,也可能是字典# 尝试用 dict 访问if isinstance(chunk, dict):choices = chunk.get("choices", [])if choices:delta = choices[0].get("delta", {})content = delta.get("content")if content:print(content, end="", flush=True)else:# 如果是对象,尝试用属性访问try:delta = chunk.choices[0].deltacontent = getattr(delta, "content", None)if content:print(content, end="", flush=True)except Exception:passprint("\n--- done ---")
其中stream=True
就标识了流式输出,跟openai的普通API类似。