上线优惠价:每个套餐的价格都比我们追踪的最便宜的离岸竞争对手低 30%。 查看价格对比所有套餐价格均比最便宜的离岸主机服务商低 30%

AI 与 GPU

如何在 GPU 服务器上自托管大语言模型(Ollama、vLLM)

从一台空白的 GPU 服务器到私有的、兼容 OpenAI 的端点:租用哪款显卡、Ollama 与 vLLM 的部署、TLS 与密钥、基准测试、隐私与成本。

阅读约 10 分钟OffshoreServ 团队撰写

要点

  • 按显存选型:权重,加上上下文所需的缓存,再留出 10 到 20% 的余量。4 位精度的 70B 模型大约需要 50 GB。
  • Ollama 只需两条命令即可运行模型;它在 127.0.0.1:11434 上的 API 没有任何身份验证。
  • vLLM 在 8000 端口上提供兼容 OpenAI 的 API,可以批量服务大量用户;其可选的密钥只保护部分路由。
  • 不要直接暴露任何服务:请使用 SSH 隧道,或使用会校验密钥、只放行 /v1 路径的 TLS 反向代理。
  • 在您自己的服务器上做基准测试,关闭遥测,并把月费与您的 API 账单进行比较。
本页内容
  1. 为什么要自托管大语言模型?
  2. 按显存选择 GPU
  3. 快速上手:用 Ollama 自托管大语言模型
  4. 用 vLLM 提供兼容 OpenAI 的 API
  5. 在前面加上 TLS 和身份验证
  6. 自己测量吞吐量
  7. 让提示词保持私密
  8. 成本:API、云 GPU 与自有服务器
  9. 常见问题

要自托管大语言模型,请租用一台显存足以容纳模型的 GPU 服务器,安装 Ollama 快速上手,或安装 vLLM 以提供兼容 OpenAI 的 API,并让两者都只绑定在 127.0.0.1 上。通过 SSH 隧道或会校验密钥的 TLS 反向代理访问它们。8B 模型可以在 24 GB 的 RTX 4090 上以全精度运行。

本指南将一台空的 GPU 服务器打造成私有端点:要租哪块显卡、Ollama 和 vLLM 的具体命令、TLS 与身份验证、基准测试和成本。命令默认使用已安装 NVIDIA 驱动和 CUDA 的 Ubuntu 24.04,与我们的 GPU 服务器一致。

为什么要自托管大语言模型?

您的提示词留在您的服务器上。使用托管 API 时,每条提示词和回答都要经过别人的基础设施,受对方的日志和留存规则约束。私有大模型服务器则在您自己的 GPU 上运行模型。Ollama 的常见问题说得很直白:在本地运行时,“我们看不到您的提示词或数据”。

成本可预测。按月计费的服务器无论处理十个请求还是一千万个请求,价格都一样:在持续使用时比按 token 计费便宜,在使用量低时则更贵。

模型由您掌控:包括版本、量化方式和上下文长度。它不会因为服务商更新模型目录而改变,您还可以用留在服务器上的数据对它进行微调。

需要权衡的是:更新、安全和监控都要由您负责,而且开放权重模型并不是最大型 API 背后的那些专有模型。如果您需要其中之一,只能通过它的 API 使用。

按显存选择 GPU

要在 GPU 服务器上运行大语言模型,先从内存算起:权重、上下文所需的 KV 缓存以及一些余量都必须放得进显存。以下数据来自我们的指南大语言模型需要多少显存,已包含单用户 8K token 上下文和 10% 的余量。

模型(示例)4 位精度8 位精度16 位精度合适的 GPU
7B 至 8B(Llama 3.1 8B)约 7 GB约 11 GB约 19 GBRTX 4090,即使是 16 位精度
13B 至 14B(Qwen3-14B)约 11 GB约 18 GB约 32 GBRTX 4090(8 位精度),长上下文用 RTX 5090
32B(Qwen3-32B)约 24 GB约 40 GB约 73 GBRTX 5090(4 位精度)
70B(Llama 3.3 70B)约 50 GB约 85 GB约 157 GBA100 或 H100(4 位精度),2 × H100(8 位精度)
gpt-oss-120b(混合专家模型)单块 80 GB GPU 即可容纳(原生 MXFP4)不适用不适用A100 或 H100

RTX 4090 服务器每月 $84.99,RTX 5090 服务器每月 $134.99,A100 80 GB 每月 $355.99,H100 服务器每月 $581.99。4 位精度的 32B 模型大约需要 24 GB,上下文一变长,24 GB 的显卡就没有余地了,因此请选择 RTX 5090。在两款 80 GB 显卡之间,H100 拥有 3.35 TB/s 的显存带宽,同一模型的生成速度比 A100 更快。

快速上手:用 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:8b 的下载大小为 4.9 GB。ollama run 会打开聊天(用 /bye 退出),ollama ps 应显示 100% GPU;如果出现 CPU 占比,说明模型放不进显存。它的 CONTEXT 列显示上下文长度,Ollama 会根据可用显存来设定(低于 24 GiB 为 4K token,24 GiB 起为 32K,48 GiB 起为 256K),可以用 OLLAMA_CONTEXT_LENGTH 覆盖。然后检查它监听的地址并调用其 API:

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:11434。保持这样即可。常见问题中介绍了如何用 OLLAMA_HOST=0.0.0.0 对外开放,但本地 API 没有身份验证:任何能访问该端口的人都可以运行、拉取和删除模型。

Ollama 还在 /v1 下提供 OpenAI 风格的路由。客户端需要填写基础 URL http://127.0.0.1:11434/v1 和任意 API 密钥,Ollama 会忽略这个密钥。设置项是该服务的环境变量:运行 sudo 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-key 参数的作用相同。快速入门给出的默认地址是 http://localhost:8000,但服务器代码在未指定主机时会绑定所有 IPv4 接口,所以务必传入 --host。--max-model-len 用于限制上下文及其缓存。vLLM 默认预留 92% 的 GPU 显存,因此 nvidia-smi 中显卡几乎占满是正常的。模型会在首次启动时从 Hugging Face 下载,权重约需 15 GB:请使用 24 GB 或更大的显卡。用官方 OpenAI 客户端测试:

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 连接 Ollama。使用 Docker 时,只在 127.0.0.1 上发布端口,因为 Docker 的端口规则会绕过 ufw;并保留 --ipc=host,以便 PyTorch 使用共享内存:

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 2 或 4 会把一个模型拆分到多块 GPU 上。我们的 GPU 镜像指南还介绍了 NVIDIA Container Toolkit,以及让 vLLM 持续运行的 systemd 单元。

Ollama 与 vLLM 一览

问题OllamavLLM
部署方式一个脚本,作为系统服务运行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/v1 或 http://127.0.0.1:8000/v1。SSH 会加密流量,并用您的密钥验证身份;服务器不需要开放新端口。该命令在 PowerShell 中同样适用。

供应用和团队使用:带 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/ 之下”和“携带密钥”这两个条件的请求会收到 403,因为 respond 在 reverse_proxy 之前执行。路径规则还能让 Ollama 原生的 /api 路由(可以拉取和删除模型)保持私有。改写 Host 很重要:监听 127.0.0.1 时,Ollama 会对其他主机名的请求返回 403,其常见问题中的 nginx 示例也以同样的方式改写该请求头。对于 vLLM,请代理到 127.0.0.1:8000,去掉 header_up 块,并使用服务器的密钥。

之后,客户端使用 https://llm.example.com/v1 和密钥,兼容 OpenAI 的客户端会把密钥作为 Bearer token 发送;Caddy 会立即推送流式回答。面向他人的服务还需要限流,而且我们的可接受使用政策同样适用于它生成的内容。

自己测量吞吐量

每秒 token 数取决于显卡、模型、量化方式、引擎版本、上下文长度和并发量,因此我们不发布未经实测的数据。对于单用户使用稠密模型的情况,上限是显存带宽除以权重大小:根据我们的显存指南,4 位精度的 8B 模型在 RTX 4090 上约为每秒 205 个 token。实际结果会低于这个值。

使用 Ollama

ollama run llama3.1:8b --verbose

--verbose 会在每次回答后输出耗时,其中包括 eval rate,即以每秒 token 数表示的生成速度。通过 API 时,响应中带有以纳秒为单位的 eval_count 和 eval_duration,Ollama 的 API 参考给出的速率计算方式是 eval_count / eval_duration × 10^9。

使用 vLLM

vLLM 自带负载生成器。以下命令向 127.0.0.1:8000 发送 200 个请求,每个请求包含 1,024 个随机输入 token 和 256 个输出 token,每次并发 16 个,并以 OPENAI_API_KEY 作为 Bearer token:

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,并使用与真实流量接近的提示词长度。

让提示词保持私密

只有在没有任何其他东西把提示词发送出去的情况下,自托管才能让提示词只留在您的服务器上:

  1. 不开放公网端口。sudo ss -tlnp 必须显示 11434 和 8000 只监听在 127.0.0.1 上。只放行 SSH,以及供 Caddy 使用的 80 和 443 端口,其他一律不开放,具体见我们的加固指南;Docker 端口请以 127.0.0.1:PORT:PORT 的形式发布。
  2. 避免误用云端模型。Ollama 也可以在自己的服务器上运行 gemma4:cloud 等云端模型,那样您的提示词就会由它们处理。OLLAMA_NO_CLOUD=1 可以禁用云端模型和网络搜索。
  3. 关闭遥测。vLLM 默认会收集关于您的硬件和配置的匿名使用统计;VLLM_NO_USAGE_STATS=1 或 DO_NOT_TRACK=1 可以停止收集。HF_HUB_DISABLE_TELEMETRY=1 会关闭 Hugging Face 的遥测,而模型下载完成后,HF_HUB_OFFLINE=1 会阻止所有对 Hub 的访问。
  4. 保持日志安静。vLLM 只有在使用 --enable-log-requests 时才记录请求,只有在 DEBUG 级别才记录提示词文本。请保持这样,并检查任何聊天前端会保存哪些内容。
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%,这样 RTX 4090 折合每月 $74.79。服务器在 1 到 24 小时内就绪;GPU 服务器一经交付不予退款,因此请在下单前确定好模型规模。

常见问题

我可以在自己的服务器上运行大语言模型吗?

可以。任何配备 NVIDIA GPU、且显存足以容纳模型的 Linux 服务器都可以:8B 模型大约需要 7 GB,70B 模型大约需要 50 GB,均按 4 位精度并包含上下文。安装 Ollama 或 vLLM,让它们保持在 127.0.0.1 上,并通过 SSH 隧道或会校验密钥的 TLS 反向代理连接。

Ollama 和 vLLM 哪个更好?

它们解决的问题不同。Ollama 部署更快,适合单个用户或小团队。vLLM 能批量处理大量并发请求,可以把模型拆分到多块 GPU 上,还会校验 API 密钥,更适合应用程序。两者都在 /v1 下响应 OpenAI 风格的请求,所以您可以先用 Ollama,之后再换成 vLLM,而无需重写客户端。

70B 模型需要多少显存?

4 位精度下权重约需 43 GB,加上 8K 上下文和余量约需 50 GB:一块 80 GB 的 A100 或 H100,或两块 32 GB 的 RTX 5090。8 位精度下约需 85 GB,也就是两块 H100;16 位精度下约需 157 GB,需要多 GPU 的 H100 服务器。更长的上下文和更多用户需要更多显存。

Ollama 有身份验证吗?

本地 API 没有。Ollama 的文档写明,localhost:11434 上的 API 不需要身份验证;API 密钥只适用于其云服务。请保持默认绑定到 127.0.0.1(只有服务器自身可以访问),在其他人连接之前加上 SSH 隧道或带 TLS 和密钥校验的反向代理。

自托管大语言模型比 API 便宜吗?

用量稳定时通常更便宜;用量低或不规律时通常不会。用服务器的月费除以“API 每百万 token 的价格 × 2.628”:结果就是服务器需要持续达到的平均每秒 token 数,才能收回成本。隐私可能比价格更重要:在您自己的服务器上,提示词始终在您的掌控之中。

选择法律站在您这边的地方托管

离岸 VPS、独立服务器、RDP 与 GPU 服务器,覆盖七个司法管辖区。无需 KYC,使用加密货币付款。

欢迎回来

登录以管理您的服务器和余额。

无需 KYC由 Cloudflare Turnstile 提供人机验证无跟踪