本页内容

要自托管大语言模型,请租用一台显存足以容纳模型的 GPU 服务器,安装 Ollama 快速上手,或安装 vLLM 以提供兼容 OpenAI 的 API,并让两者都只绑定在 127.0.0.1 上。通过 SSH 隧道或会校验密钥的 TLS 反向代理访问它们。8B 模型可以在
本指南将一台空的 GPU 服务器打造成私有端点:要租哪块显卡、Ollama 和 vLLM 的具体命令、TLS 与身份验证、基准测试和成本。命令默认使用已安装 NVIDIA 驱动和 CUDA 的
为什么要自托管大语言模型?
您的提示词留在您的服务器上。使用托管 API 时,每条提示词和回答都要经过别人的基础设施,受对方的日志和留存规则约束。私有大模型服务器则在您自己的 GPU 上运行模型。Ollama 的常见问题说得很直白:在本地运行时,“我们看不到您的提示词或数据”。
成本可预测。按月计费的服务器无论处理十个请求还是一千万个请求,价格都一样:在持续使用时比按 token 计费便宜,在使用量低时则更贵。
模型由您掌控:包括版本、量化方式和上下文长度。它不会因为服务商更新模型目录而改变,您还可以用留在服务器上的数据对它进行微调。
需要权衡的是:更新、安全和监控都要由您负责,而且开放权重模型并不是最大型 API 背后的那些专有模型。如果您需要其中之一,只能通过它的 API 使用。
按显存选择 GPU
要在 GPU 服务器上运行大语言模型,先从内存算起:权重、上下文所需的 KV 缓存以及一些余量都必须放得进显存。以下数据来自我们的指南大语言模型需要多少显存,已包含单用户 8K token 上下文和 10% 的余量。
| 模型(示例) | 4 位精度 | 8 位精度 | 16 位精度 | 合适的 GPU |
|---|---|---|---|---|
| 7B 至 8B( | 约 | 约 | 约 | |
| 13B 至 14B( | 约 | 约 | 约 | |
| 32B( | 约 | 约 | 约 | |
| 70B( | 约 | 约 | 约 | A100 或 H100(4 位精度), |
| 单块 | 不适用 | 不适用 | A100 或 H100 |
快速上手:用 Ollama 自托管大语言模型
Ollama 的 Linux 安装脚本会设置系统服务并检测 NVIDIA GPU。您可以在运行前先阅读它:
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3.1:8b
ollama run llama3.1:8b
ollama ps
llama3.1:8bollama run/byeollama psOLLAMA_CONTEXT_LENGTH
ss -tln | grep 11434
curl http://127.0.0.1:11434/api/generate -d '{"model": "llama3.1:8b", "prompt": "Why is the sky blue?", "stream": false}'
Ollama 默认绑定 127.0.0.1 的 11434 端口,所以第一行应显示 127.0.0.1:11434OLLAMA_HOST=0.0.0.0
Ollama 还在 /v1http://127.0.0.1:11434/v1sudo systemctl edit ollama.service
[Service]
Environment="OLLAMA_NO_CLOUD=1"
Environment="OLLAMA_CONTEXT_LENGTH=16384"
sudo systemctl daemon-reload
sudo systemctl restart ollama
用 vLLM 提供兼容 OpenAI 的 API
vLLM 为吞吐量而生:它在 GPU 上同时批量处理大量请求,并使用 OpenAI 协议,因此现有的客户端代码无需修改即可使用。按照 vLLM 安装指南把它安装在独立的虚拟环境中,然后创建密钥并启动服务器:
python3 -m venv ~/venvs/vllm
source ~/venvs/vllm/bin/activate
pip install --upgrade pip
pip install vllm --extra-index-url https://download.pytorch.org/whl/cu129
export VLLM_API_KEY=$(openssl rand -hex 32)
echo "$VLLM_API_KEY"
vllm serve Qwen/Qwen2.5-7B-Instruct --host 127.0.0.1 --port 8000 --max-model-len 8192
由于设置了 VLLM_API_KEY--api-keyhttp://localhost:8000--host--max-model-lennvidia-smi
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8000/v1", api_key="YOUR_KEY")
reply = client.chat.completions.create(
model="Qwen/Qwen2.5-7B-Instruct",
messages=[{"role": "user", "content": "Explain RAID 1 in one sentence."}],
)
print(reply.choices[0].message.content)
同样的代码也可以通过 http://127.0.0.1:11434/v1--ipc=host
sudo docker run --rm --gpus all --ipc=host -p 127.0.0.1:8000:8000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
vllm/vllm-openai:latest --model Qwen/Qwen2.5-7B-Instruct --api-key "$VLLM_API_KEY"
在两块或四块 GPU 上,--tensor-parallel-size 24
Ollama 与 vLLM 一览
| 问题 | Ollama | vLLM |
|---|---|---|
| 部署方式 | 一个脚本,作为系统服务运行 | Python 包或 Docker 镜像 |
| 模型 | Ollama 模型库,按名称 | Hugging Face,按仓库 |
| 默认地址 | 127.0.0.1:11434 | 所有接口上的 8000 端口,除非设置了 --host |
| 身份验证 | 本地 API 没有 | 可选密钥,只保护部分路由 |
| 适用场景 | 单个用户或小团队,快速测试 | 大量并发请求,多 GPU 部署 |
在前面加上 TLS 和身份验证
这两种服务器都不应原样暴露在互联网上。Ollama 的文档写明,本地 API 不需要身份验证。vLLM 的安全指南指出,--api-key/v1/v2/inference/cohere/pause/tokenize
自己使用:SSH 隧道
ssh -N -L 11434:127.0.0.1:11434 -L 8000:127.0.0.1:8000 YOUR_USER@SERVER_IP
隧道运行期间,您电脑上的客户端使用 http://127.0.0.1:11434/v1http://127.0.0.1:8000/v1
供应用和团队使用:带 TLS 和密钥的 Caddy
Caddy 会自动获取并续期证书,并把 HTTP 重定向到 HTTPS。把域名的 A 记录指向服务器,在防火墙中开放 80 和 443 端口,从官方仓库安装 Caddy,用 openssl rand -hex 32/etc/caddy/Caddyfile
llm.example.com {
@denied {
not {
path /v1/*
header Authorization "Bearer YOUR_LONG_RANDOM_KEY"
}
}
respond @denied 403
reverse_proxy 127.0.0.1:11434 {
header_up Host localhost:11434
}
}
然后运行 sudo systemctl reload caddy/v1/respondreverse_proxy/api127.0.0.1:8000header_up
之后,客户端使用 https://llm.example.com/v1
自己测量吞吐量
每秒 token 数取决于显卡、模型、量化方式、引擎版本、上下文长度和并发量,因此我们不发布未经实测的数据。对于单用户使用稠密模型的情况,上限是显存带宽除以权重大小:根据我们的显存指南,4 位精度的 8B 模型在
使用 Ollama
ollama run llama3.1:8b --verbose
--verboseeval_counteval_durationeval_count / eval_duration × 10^9
使用 vLLM
vLLM 自带负载生成器。以下命令向 127.0.0.1:8000 发送 200 个请求,每个请求包含 1,024 个随机输入 token 和 256 个输出 token,每次并发 16 个,并以 OPENAI_API_KEY
export OPENAI_API_KEY="$VLLM_API_KEY"
vllm bench serve --model Qwen/Qwen2.5-7B-Instruct --dataset-name random --random-input-len 1024 --random-output-len 256 --num-prompts 200 --max-concurrency 16
请看报告中的三行:output token throughput(整个服务器的输出吞吐量)、衡量响应速度的 mean TTFT(首 token 时间),以及反映每个用户实际体验的 mean TPOT(每个输出 token 的时间)。分别在并发 1、8 和 32 下重复测试,同时观察 nvidia-smi dmon -s pucm
让提示词保持私密
只有在没有任何其他东西把提示词发送出去的情况下,自托管才能让提示词只留在您的服务器上:
- 不开放公网端口。
必须显示 11434 和 8000 只监听在 127.0.0.1 上。只放行 SSH,以及供 Caddy 使用的 80 和 443 端口,其他一律不开放,具体见我们的加固指南;Docker 端口请以sudo ss -tlnp 的形式发布。127.0.0.1:PORT:PORT - 避免误用云端模型。Ollama 也可以在自己的服务器上运行
等云端模型,那样您的提示词就会由它们处理。gemma4:cloud 可以禁用云端模型和网络搜索。OLLAMA_NO_CLOUD=1 - 关闭遥测。vLLM 默认会收集关于您的硬件和配置的匿名使用统计;
或VLLM_NO_USAGE_STATS=1 可以停止收集。DO_NOT_TRACK=1 会关闭 Hugging Face 的遥测,而模型下载完成后,HF_HUB_DISABLE_TELEMETRY=1 会阻止所有对 Hub 的访问。HF_HUB_OFFLINE=1 - 保持日志安静。vLLM 只有在使用
时才记录请求,只有在 DEBUG 级别才记录提示词文本。请保持这样,并检查任何聊天前端会保存哪些内容。--enable-log-requests
export VLLM_NO_USAGE_STATS=1
export HF_HUB_DISABLE_TELEMETRY=1
export HF_HUB_OFFLINE=1
如果以服务方式运行,请把这些设置写入它的环境变量文件。在我们这边,我们不记录也不检查客户服务器的流量:不做深度包检测,不扫描内容,也从不查看服务器内部运行的内容。
成本:API、云 GPU 与自有服务器
- API 按 token 计费:无需自己运维,也没有闲置成本,但每条提示词都会发送给服务商,账单随用量增长。
- 云 GPU 按小时计费。与按月计费的服务器相比,盈亏平衡点是月费除以小时费率:我们 $84.99 的
RTX 4090 相当于按每小时 $1.00 的示例价格使用 85 小时。 - 自有服务器无论忙闲费用都一样,因此使用量越大,每个 token 的成本越低。全天候运行时,我们的
RTX 4090 折合每小时约 $0.116,H100 约 $0.797。
与 API 相比,当平均吞吐量高于以下数值时,服务器就能收回成本:
break-even tokens per second = monthly price ÷ (API price per million tokens × 2.628)
2.628 是一个按 730 小时计的月份所包含的秒数(以百万计)。以每百万 token $1 的示例 API 价格计算,$84.99 的服务器在平均约每秒 32 个 token(含闲置时间)时达到盈亏平衡,$581.99 的 H100 则约为每秒 221 个。以上均为示例价格,并非报价,而且 API 也对输入 token 计费。我们对独立 GPU 服务器与云 GPU 的比较介绍了按小时计费的一面。
季付可省 5%,年付可省 12%,这样
常见问题
我可以在自己的服务器上运行大语言模型吗?
可以。任何配备 NVIDIA GPU、且显存足以容纳模型的 Linux 服务器都可以:8B 模型大约需要
Ollama 和 vLLM 哪个更好?
它们解决的问题不同。Ollama 部署更快,适合单个用户或小团队。vLLM 能批量处理大量并发请求,可以把模型拆分到多块 GPU 上,还会校验 API 密钥,更适合应用程序。两者都在 /v1 下响应 OpenAI 风格的请求,所以您可以先用 Ollama,之后再换成 vLLM,而无需重写客户端。
70B 模型需要多少显存?
4 位精度下权重约需
Ollama 有身份验证吗?
本地 API 没有。Ollama 的文档写明,localhost:11434 上的 API 不需要身份验证;API 密钥只适用于其云服务。请保持默认绑定到 127.0.0.1(只有服务器自身可以访问),在其他人连接之前加上 SSH 隧道或带 TLS 和密钥校验的反向代理。
自托管大语言模型比 API 便宜吗?
用量稳定时通常更便宜;用量低或不规律时通常不会。用服务器的月费除以“API 每百万 token 的价格 × 2.628”:结果就是服务器需要持续达到的平均每秒 token 数,才能收回成本。隐私可能比价格更重要:在您自己的服务器上,提示词始终在您的掌控之中。


