当前位置: 首页 > ai >正文

A100用transformers推理gpt-oss

A100本地用transformers推理gpt-oss

GPT-oss试用
gpt-oss有两个原生配置是目前(2025-8-8)Ampere系列显卡不支持的,分别是默认的MXFP4量化,以及Flash-attn V3。tranformers推理是比较慢的,可以用于研究模型本身,如果是本地部署,最好用vllm,见三步完成,A100本地vLLM部署gpt-oss,并启动远程可访问api。

下载模型参数到本地

国内用魔塔更快,下载到本地xxxx目录下:

pip install modelscope
modelscope download --model openai-mirror/gpt-oss-120b --local_dir xxxxxx

创建conda环境

conda create -n vllm python=3.12 -ypip install -U transformers 
pip install -U accelerate 
pip install -U torch 
pip install -U kernels

注意到,这里跟官方给的安装步骤不太一样。官方安装多一个triton,里面包含了Triton kernels for MXFP4 compatibility,也就是gpt-oss专用的一个量化技术 MXFP4,这个量化在A100 GPU上是不被支持的。因此不能安装,安装反而会报错。

模型generate推理

相信大家一般用的最多的还是generate推理,这里给个python示例:

from transformers import AutoModelForCausalLM, AutoTokenizermodel_name = "/mnt/models/gpt-oss-120b" # /mnt/models/gpt-oss-20btokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name,torch_dtype="auto", # autodevice_map="auto",attn_implementation="sdpa", # flash_attention_2 sdpa
)messages = [{"role": "system", "content": "Reasoning: low"},{"role": "user", "content": "Explain what MXFP4 quantization is."},
]inputs = tokenizer.apply_chat_template(messages,add_generation_prompt=True,return_tensors="pt",return_dict=True,
).to(model.device)outputs = model.generate(**inputs,max_new_tokens=1024,temperature=0.7
)print(tokenizer.decode(outputs[0]))

其中model_name就是下载的模型参数目录,attn_implementation这里,不能选择flash-attn。因为默认使用flash-attn V3,这不被a100支持,会报错Sinks are only supported in FlashAttention 3,用flash-attn 2也不行,即使是最新release的2.8.2(2025-8-8),也会报错一些参数无法识别。messages的第一行{"role": "system", "content": "Reasoning: low"}用来指定模型思考深度,gpt-oss有三个可选思考深度,但不能关闭。

最后,可以用transformers启动服务,进行终端命令行对话:

transformers serve 
transformers chat localhost:8000 --model-name-or-path /mnt/models/gpt-oss-120b
http://www.xdnf.cn/news/17213.html

相关文章:

  • Dijkstra?spfa?SPstra?
  • 【Rust】多级目录模块化集成测试——以Cucumber为例
  • 深入探索 PDF 数据提取:PyMuPDF 与 pdfplumber 的对比与实战
  • PCB焊盘脱落的补救办法与猎板制造优势解析
  • 五种IO模型 阻塞IO 多路转接之select 多路转接之poll
  • AI学习笔记三十五:实时传输视频
  • python应用GRPC || consul 服务注册发现
  • GraphRAG 入门教程:从原理到实战
  • 碰一碰NFC开发写好评php语言源码
  • day21|学习前端vue3框架和ts语言
  • 什么是SpringBoot
  • Spring事务失效场景?
  • TCP粘包问题详解与解决方案
  • 使用SETNX实现分布式锁
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘spacy’问题
  • 【C#补全计划:类和对象(九)】接口
  • 嵌入式开发硬件——单片机
  • QtC++ 中使用 qtwebsocket 开源库实现基于websocket的本地服务开发详解
  • Java中接口与抽象类
  • 【MATLAB】(十)符号运算
  • idea开发工具中git如何忽略编译文件build、gradle的文件?
  • 为什么 `source ~/.bashrc` 在 systemd 或 crontab 中不生效
  • 安卓开发:网络状态监听封装的奥秘
  • vLLM:彻底改变大型语言模型推理延迟和吞吐量
  • 【Apache Olingo】全面深入分析报告-OData
  • count(0),count(*),count(1),count(列)有什么区别?
  • Caffeine 三种过期策略详解
  • java - 深拷贝 浅拷贝
  • 大模型2位量化原理解析
  • 【线性代数】5特征值和特征向量