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類似。