背景
gpt-oss-20b号称可在大多数台式机,笔记本甚至手机上运行, 我想验证一下,是不是真的。因为之前我用ollama部署过千问6.7B大模型,笔记本电脑卡得不行。gpt-oss-20b真的这么轻便,对硬件要求这么低? 现在我们开始进入正题。
Hugging Face简介
下载大模型, 绕不开一个网站 huggingface.co/ , 它是干什么的? huggingface.co 是 Hugging Face 的官网,主要是一个 AI 模型与数据集的托管与分享平台,功能有点类似于 "GitHub for AI"。
可以简单理解成:
- GitHub → 代码仓库
- Hugging Face → 模型和数据集仓库
主要特点:
- 模型下载和托管 存放各种 AI 模型(文本、图像、语音等), 例如
gpt-oss-20b
就托管在 Hugging Face 上; 支持多种框架:PyTorch、TensorFlow、JAX 等 - 数据集共享 开源的 NLP、CV、音频等领域数据集, 可以直接用
datasets
库下载 - 推理 API(Inference API) 不想本地跑模型,可以直接用它的云端推理服务
- Spaces(应用托管) 类似小型 Web 应用(用 Gradio、Streamlit 等),直接在线演示 AI 模型效果
- 模型版本管理 像 Git 一样管理模型版本(支持
git lfs
处理大文件)
关于大模型托管网站,好消息是 huggingface.co/ 虽然国内无法访问,但国内有个hf-mirror.com 的镜像网站 , 完美的复刻了 huggingface.co/ 的内容。 坏消息是 gpt-oss-20b模型体积很大, 高达几十G, 下载时间都是以小时计,比较耗时。
要想在Hugging Face大模型托管平台下载使用大模型, 你得这样做:
1. 安装 Hugging Face CLI:
js
pip install -U huggingface_hub
安装完后,huggingface-cli
命令就能用了。
2. 登录(如果模型需要权限)
有些大模型(比如 LLaMA、Qwen-72B)需要先申请访问权限,然后用命令登录:
js
huggingface-cli login
然后输入你的 Hugging Face token (在 huggingface.co/settings/to... 生成)。
3. 下载模型
例如下载 gpt-oss-20b:
js
huggingface-cli download openai/gpt-oss-20b --include "original/*" --local-dir ./gpt-oss-20b
Hugging Face 在国内速度慢,可以设置加速镜像:
js
export HF_ENDPOINT=https://hf-mirror.com
然后再执行 huggingface-cli download
会走镜像站
4.下载后的用法
下载好后,可以直接用 transformers、vLLM、Ollama(要转换格式)加载,例如:
python
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "./gpt-oss-20b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")
inputs = tokenizer("Hello!", return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_length=50)
print(tokenizer.decode(outputs[0]))
大模型下载管理工具的选择
我所知道的下载管理大模型的方式至少有三种:
1. Ollama
定位 :偏向"开箱即用"的本地模型运行框架。
优点
- ✅ 安装简单 :一条命令即可安装,
ollama pull model
就能直接下载模型并运行。 - ✅ 模型格式统一 :支持多种模型(LLaMA、Mistral、GPT-OSS 等),封装成自己的
.ollama
格式,省去手动转换。 - ✅ 带 REST API :启动后默认监听
http://localhost:11434
,可以直接用 HTTP 调用。 - ✅ 跨平台:macOS、Linux、Windows(WSL)都能用。
- ✅ 自动量化支持:很多模型直接提供量化版本(如 Q4、Q8),省显存、可在消费级 GPU/CPU 跑。
缺点
- ❌ 可控性差:模型权重封装在 Ollama 的私有格式里,不像 Hugging Face 那样灵活。
- ❌ 依赖它的生态:模型更新要等它官方支持。
- ❌ 推理速度一般:优化没有 vLLM 那么激进,尤其在多并发场景。
2. vLLM
定位 :高性能推理引擎,专注于大模型的快速推理和高并发。
优点
- ✅ 推理速度极快:用了 PagedAttention 等技术,显著减少显存碎片,支持更长上下文。
- ✅ 高并发:适合部署成 API 服务,大量并发请求下也很稳。
- ✅ 兼容 Hugging Face :直接加载
.safetensors
或.bin
权重。 - ✅ 灵活部署:可配合 FastAPI、Gradio 等做定制 API 或 UI。
缺点
- ❌ 安装门槛高:需要自己准备模型文件和环境(CUDA、PyTorch 版本等)。
- ❌ 显存需求高:默认是全精度/半精度加载,没有内置量化,需要额外做量化。
- ❌ 纯推理引擎:不负责模型下载/管理,需要配合其他工具(如 huggingface-cli)。
3. huggingface-cli 直接下载
定位 :最原始、最灵活的获取模型方式。
优点
- ✅ 选择最自由:Hugging Face 上所有开源模型都能直接下,包括量化和原始版本。
- ✅ 可控性强:下载后可以随便用 transformers、vLLM、GGML、TGI 等框架加载。
- ✅ 支持断点续传:网络不好时配合镜像站能稳定下载。
- ✅ 透明:你拿到的就是原始权重,没有额外封装。
缺点
- ❌ 需要额外部署:下载完还要自己选推理框架(如 transformers、vLLM)。
- ❌ 文件很大:20B 级模型可能是几十 GB,存储和带宽要求高。
- ❌ 新手门槛高:不会配置环境的容易踩坑(CUDA、驱动、PyTorch 版本不匹配)。
追求开箱可用,用Ollama, 追求性能用vLLM, 追求灵活可控用huggingface-cli, 笔者追求的是开箱可用, 选择的是Ollama, 先快速验证一下gpt-oss:20b低配电脑上的性能
体积差异
从 Ollama 下载的 gpt-oss-20b
和 从Huggingface上下载的 openai/gpt-oss-20b
模型,体积相差好多。 体积差异主要源于以下几个方面:
1. 模型格式与存储方式不同
- Ollama 下载的模型(12.8G) Ollama 通常会对模型进行高度量化(int4 或更低精度),并采用专门的模型存储格式,体积更小且适合快速推理。 量化后,模型参数所占空间大幅缩减,因此体积较小。
- Huggingface 上的模型(40多G) Huggingface 官方仓库中一般存储的是原始的全精度(float32 或 float16)模型权重文件,文件通常比较大。 这些模型没有经过极限量化,所以文件体积更大。
2. 包内容的差异
- Huggingface 模型目录里,通常会包含除了权重文件之外的配置文件、tokenizer、训练检查点、优化器状态等额外文件,这会占用额外空间。
- Ollama 的模型包可能只保留了推理必需的精简文件。
3. 量化技术
- Ollama 和类似工具通常使用 int4 量化、权重剪枝和压缩技术,以达到在资源受限设备(比如本地桌面甚至手机)上运行的目的。
- Huggingface 默认权重是未经压缩的,主要用于训练和高精度推理。
带来的影响就是:
- Ollama 版本:更小、推理更快、适合部署和低资源使用
- Huggingface 版本:更大、精度更高、适合训练和研究
什么是模型量化
模型量化(Model Quantization)是一种压缩和加速神经网络模型的技术。它通过用更低位宽的数值类型来表示模型中的权重和激活值,从而减少模型的存储大小和计算资源需求。就像照片的色彩从"真彩色(24位色)"降低成"256色"或者"16色",画面质量会有所下降,但文件大小大大减小;模型量化也是类似的"降精度"过程。
量化过程:
- 传统神经网络模型权重通常是 32 位浮点数(float32) ,即每个参数占 4 字节。
- 量化就是将这些权重和计算中的数值转换成更低位数,比如 16 位浮点(float16)、8 位整数(int8)、甚至4位整数(int4)。
- 这样,模型文件大小大幅缩减,推理时计算速度也可以提升,尤其是在支持低精度计算的硬件(如部分GPU、手机芯片、专用加速器)上。
为什么要量化?
- 减少模型存储大小,方便在存储有限的设备上部署。
- 降低计算复杂度和功耗,提升推理速度,尤其在移动端和嵌入式设备。
- 加速模型推理,部分硬件有专门的低精度计算单元。
量化的主要类型
类型 | 说明 | 优点 | 缺点 |
---|---|---|---|
动态量化 (Dynamic Quantization) | 在推理时动态转换权重 | 实现简单,推理速度提升 | 量化误差较大,精度下降明显 |
静态量化 (Static Quantization) | 在部署前先对权重和激活都量化 | 精度更好,速度提升明显 | 需要校准数据,流程复杂 |
混合量化 (Mixed Precision) | 部分层使用高精度,部分层低精度 | 保持精度的同时节省资源 | 需要手动调优 |
极限量化(如 INT4 量化) | 使用极低位宽(4位)表示 | 最大程度减少模型大小和计算量 | 可能导致较大精度损失 |
量化会不会影响模型效果? 会有一定的精度损失,但好的量化算法和策略可以将精度下降控制在很小范围内,几乎不影响实际应用。
用Ollama下载运行大模型
下载Ollama
用Ollama下载gpt-oss:20b模型主要有两种方式:
- 方案一 在Docker容器内下载Ollama
bash
#拉取最新的 Ollama 镜像
docker pull ollama/ollama:latest
# 以后台方式启动容器并映射端口
docker run -d --name ollama -p 11434:11434 ollama/ollama:latest
#进入容器命令行
docker exec -it ollama bash
# 在容器内拉取模型
ollama pull gpt-oss:20b
exit
#先把修改后的容器做成镜像
docker commit ollama ollama/ollama-with-gpt-oss:latest
# 给镜像打上私有仓库的地址标签
docker tag ollama/ollama-with-gpt-oss:latest myregistry.example.com/myproject/ollama-with-gpt-oss:latest
#登录到私有仓库认证身份
docker login myregistry.example.com
#推送镜像到私有仓库
docker push myregistry.example.com/myproject/ollama-with-gpt-oss:latest
国内执行docker pull ollama/ollama:latest
时可能会网络超时,所以要添加Docker镜像源加速地址
js
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://registry.docker-cn.com"
]
为了方便移植, 本文采用的是Docker镜像方式, 下载gpt-oss:20b真是耗时呀,足足下载了两个多小时。
- 方案二 下载Ollama到宿主机
Linux系统下载方法:
js
curl -fsSL https://ollama.com/install.sh | sh
ollama pull gpt-oss:20b
Windows和Mac系统可访问 ollama.com/download 下载Ollama, 在软件界面操作下载运行gpt-oss:20b
运行测试 gpt-oss:20b
js
ollama serve --model gpt-oss:20b
测试gpt-oss:20b, 给大模型发送一个有重复功能的代码片段,看它能否检查出来
js
curl -X POST http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-oss:20b",
"messages": [
{"role": "system", "content": "你是一个资深的代码审查专家"},
{"role": "user", "content": "评审一下下这段js有无问题 const sum=(a,b)=>a+b; \n const sum1=(a,b)=>a+b;"}
],
"max_tokens": 512
}'
gpt-oss:20b回复内容中,冗余字段比较多,有效回复choices[0].message.content
内容如下:
代码审查结果
js
const sum = (a,b) => a + b;
const sum1 = (a,b) => a + b;
- 功能上没有错误
- 两个箭头函数都返回
a + b
,在 JavaScript 中对数值、字符串等类型都是合法的操作。 - 代码能直接运行,不会报语法错误。
- 风格与可维护性
方面 | 评估 | 建议 |
---|---|---|
变量重命名约定 | sum 和 sum1 仅区别一个数字后缀,命名不够具象。 |
若它们确实有不同的业务语义,给出更具描述性的名字(如 sumNumbers 、sumStrings 等)。若本来应该是同一个函数,避免重复定义。 |
代码重复 | 两个实现完全相同。 | 可以只保留一个 sum ,或者如果需要不同实现,应改写另一方。 |
类型安全 | 直接做 + 操作 |
能检查出代码重复,还不错。能达到生产可用水平。
最后
终于把大模型跑起来, 确实如官方所说,只要你的电脑有剩余16G的内存, CPU是8核的话, 跑起来都比较流畅。回顾这个过程, 感觉在大模型下载那里,走了很多弯路。工具没选对, 导致下载的模型体积很大, 好多次都因网络超时退出。真正运行大模型,看到大模型回复问题,仅需2分钟不到,真是充电2小时,装逼2分钟。如果你也想体验一下最新开源的gpt-oss大模型, 希望你看完我的文章后,能少踩点坑。这就是你阅读本文的价值。