本地部署大模型,如何限制并发访问?
很多朋友在自己服务器上跑大模型,结果一个请求还没处理完,又涌进来几十个,直接导致显存爆满、服务崩溃。
今天我就以最常见的 Ollama 为例,教你从零开始限制并发访问,让模型平稳运行。
前置准备
你需要一台 Linux 服务器(我用的是 Ubuntu 22.04),并且已经安装好 Ollama 并拉取了模型(比如 llama3)。
确认服务正常运行:curl http://localhost:11434 返回 Ollama is running。
如果你用的是其他框架(如 vLLM),原理类似,替换对应参数即可。
方法一:通过 Ollama 环境变量限制并行数
Ollama 原生支持设置最大并行处理请求数,这是最简单、最直接的方式。
- 编辑 Ollama 服务配置文件:
sudo mkdir -p /etc/systemd/system/ollama.service.d
sudo nano /etc/systemd/system/ollama.service.d/override.conf
- 写入以下内容(限制最多同时处理 2 个请求):
[Service]
Environment="OLLAMA_NUM_PARALLEL=2"
- 重载并重启服务:
sudo systemctl daemon-reload
sudo systemctl restart ollama
- 验证生效:
systemctl show ollama | grep OLLAMA_NUM_PARALLEL输出应显示Environment=OLLAMA_NUM_PARALLEL=2。
注意:OLLAMA_NUM_PARALLEL 控制的是同时处理请求的数量,超过的请求会排队等待。
如果你的模型很小,可以适当调大(比如 4),否则建议 1~2。
方法二:使用 Nginx 反向代理限制并发连接
如果你希望从网络层做更精细的控制(比如限制某个 IP 的并发),Nginx 是通用方案。
- 安装 Nginx:
sudo apt install nginx。 - 创建反向代理配置(以限制同时最多 5 个连接为例):
limit_conn_zone $binary_remote_addr zone=ollama:10m;
server {
listen 80;
server_name your-domain-or-ip;
location / {
proxy_pass http://127.0.0.1:11434;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
limit_conn ollama 5;
limit_conn_status 503; # 超出时返回 503
}
}
- 检查语法并重启:
sudo nginx -t && sudo systemctl restart nginx。 - 现在通过 Nginx 端口(80)请求,同一 IP 同时超过 5 个连接就会收到 503 错误。
避坑:Nginx 的 limit_conn 是基于共享内存的,需确保 limit_conn_zone 定义在 http 块内,且 zone 名称一致。
如果你的模型还用了多路复用(如 HTTP/2),注意 limit_conn 是基于单个连接而非请求数,需要配合 limit_req 做速率限制,本文不展开。
方法三:结合两者做双重保险
推荐同时使用 Ollama 环境变量(限制并行处理数)和 Nginx(限制并发连接数)。
环境变量防止模型内部过载,Nginx 防止大量恶意连接打满端口。
配置时注意:环境变量中的数值应小于或等于 Nginx 的并发上限,比如 Ollama 设 2,Nginx 设 5,这样排队控制在 Nginx 层,公平且安全。
效果验证与高频问题
- 验证限制是否生效:用
ab工具测试并发请求(需先安装apache2-utils):
ab -n 20 -c 10 http://localhost:11434/api/generate -p prompt.json
其中 prompt.json 需包含合法请求体。
观察返回的状态码和耗时,如果出现大量 503(Nginx 限流)或请求明显排队,说明限制生效。
- 常见问题:
- 环境变量没生效?检查是否写对了配置文件,重启后
systemctl show ollama | grep OLLAMA_NUM_PARALLEL是否有输出。 - Nginx 返回 503 但我不想扔错误?可以自定义
error_page 503 /custom_503.html。 - 模型本身显存不够?先看
nvidia-smi,并发数 * 模型占用显存 < 总显存,否则模型会崩溃。
写在最后
限制本地部署大模型的并发访问,既能保护服务器稳定性,又能公平分配资源。
新手建议从方法一开始,熟练后再搭配 Nginx。
根据你的硬件配置(显存、内存)灵活调整数字,不要盲目贪大。
遇到问题先检查日志:journalctl -u ollama -f 会帮你快速定位。
希望这篇文章能帮到你。
如果你在配置过程中遇到其他报错,欢迎在评论区留言,我会尽力解答。