news 2026/5/1 11:37:34

Ollama本地部署大模型实战:企业私有化LLM方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ollama本地部署大模型实战:企业私有化LLM方案

前言

2024年大模型火得一塌糊涂,但很多公司不敢把业务数据往OpenAI、文心一言这些公网API传——合规问题、数据安全、成本控制,哪个都是痛点。

我们公司从年中开始搞私有化部署,踩了不少坑,也积累了一些经验。Ollama是我们最终选定的方案,原因很简单:部署简单、模型生态好、资源占用可控。

这篇文章把整个过程记录下来,从单机部署到多节点调度,希望对有同样需求的朋友有帮助。

为什么选Ollama

市面上本地部署LLM的方案不少:

方案优点缺点
Ollama部署简单,模型库丰富功能相对基础
vLLM推理性能强,支持并发部署复杂,硬件要求高
llama.cpp资源占用小,CPU可跑需要手动编译,维护成本高
LocalAI兼容OpenAI API社区相对小
Text Generation WebUI界面友好性能一般

我们的场景是内部知识库问答和代码辅助,QPS不高但要稳定。Ollama的部署成本和维护成本都最低,最终选了它。

环境准备

硬件要求

跑大模型最重要的是显存。参考配置:

  • 7B模型(如Qwen2-7B):8GB显存起步,16GB流畅
  • 13B模型:16GB显存起步,24GB流畅
  • 70B模型:至少48GB显存,或者用多卡

我们用的是RTX 4090(24GB),跑Qwen2-7B绰绰有余,13B也能跑。

安装Ollama

Linux一行命令:

curl-fsSL https://ollama.com/install.sh|sh

验证安装:

ollama --version# ollama version is 0.5.4

启动服务:

# 默认监听127.0.0.1:11434ollama serve# 如果需要远程访问,设置环境变量OLLAMA_HOST=0.0.0.0:11434 ollama serve

设为systemd服务:

cat>/etc/systemd/system/ollama.service<<'EOF' [Unit] Description=Ollama Service After=network-online.target [Service] ExecStart=/usr/local/bin/ollama serve User=root Restart=always RestartSec=3 Environment="OLLAMA_HOST=0.0.0.0:11434" Environment="OLLAMA_MODELS=/data/ollama/models" [Install] WantedBy=default.target EOFsystemctl daemon-reload systemctlenableollama systemctl start ollama

模型选择与下载

常用模型推荐

国内场景,中文能力是刚需。实测下来这几个模型效果不错:

# 通义千问2(推荐,中文效果好)ollama pull qwen2:7b ollama pull qwen2:72b# 大杯,需要大显存# Llama3(英文强,中文一般)ollama pull llama3.1:8b# 代码模型ollama pull codellama:7b ollama pull deepseek-coder:6.7b# 国产代码模型,效果不错# 小模型(CPU也能跑)ollama pull phi3:mini# 3.8B参数,轻量ollama pull gemma2:2b

查看已下载模型

ollama list
NAME ID SIZE MODIFIED qwen2:7b xxx 4.4 GB 2 days ago deepseek-coder xxx 3.8 GB 1 week ago

模型存储位置

默认在~/.ollama/models,可以通过环境变量改:

exportOLLAMA_MODELS=/data/ollama/models

模型文件很大,建议放在SSD上,加载速度快很多。

基础使用

命令行交互

ollama run qwen2:7b
>>> 用Python写一个快速排序 def quicksort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quicksort(left) + middle + quicksort(right) # 测试 print(quicksort([3,6,8,10,1,2,1])) >>>

REST API调用

Ollama默认提供HTTP API,兼容OpenAI格式:

# 简单对话curlhttp://localhost:11434/api/generate -d'{ "model": "qwen2:7b", "prompt": "天空为什么是蓝色的?", "stream": false }'# 流式输出curlhttp://localhost:11434/api/generate -d'{ "model": "qwen2:7b", "prompt": "写一首关于程序员的诗", "stream": true }'

Python SDK

importollama# 简单对话response=ollama.chat(model='qwen2:7b',messages=[{'role':'user','content':'解释一下什么是微服务架构'}])print(response['message']['content'])# 流式输出forchunkinollama.chat(model='qwen2:7b',messages=[{'role':'user','content':'写一个Python装饰器的例子'}],stream=True):print(chunk['message']['content'],end='',flush=True)

兼容OpenAI SDK

Ollama支持OpenAI格式的API,现有代码改改endpoint就能用:

fromopenaiimportOpenAI client=OpenAI(base_url='http://localhost:11434/v1',api_key='ollama'# 随便填,Ollama不校验)response=client.chat.completions.create(model='qwen2:7b',messages=[{'role':'system','content':'你是一个专业的技术顾问'},{'role':'user','content':'Kubernetes和Docker的区别是什么?'}])print(response.choices[0].message.content)

进阶配置

自定义模型参数

创建Modelfile定制模型行为:

cat>Modelfile<<'EOF' FROM qwen2:7b # 系统提示词 SYSTEM """ 你是一个专业的代码审查助手。你的职责是: 1. 分析代码中的潜在问题 2. 提出优化建议 3. 指出安全隐患 回答要简洁专业,用中文。 """ # 调整参数 PARAMETER temperature 0.7 PARAMETER top_p 0.9 PARAMETER num_ctx 4096 EOF# 创建自定义模型ollama create code-reviewer -f Modelfile

显存优化

显存不够时的几个优化方向:

# 1. 减小上下文长度(默认2048)PARAMETER num_ctx1024# 2. 使用量化版本ollama pull qwen2:7b-q4_0# 4bit量化,显存占用减半# 3. 关闭KV缓存复用PARAMETER num_keep0

GPU选择

多卡环境指定GPU:

# 只用第一张卡CUDA_VISIBLE_DEVICES=0ollama serve# 用第2、3张卡CUDA_VISIBLE_DEVICES=1,2ollama serve

生产环境部署

Nginx反向代理

upstream ollama { server 127.0.0.1:11434; keepalive 32; } server { listen 443 ssl; server_name llm.internal.com; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; # 简单的Token认证 location /api/ { if ($http_authorization != "Bearer your-secret-token") { return 401; } proxy_pass http://ollama; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_read_timeout 300s; # 大模型响应慢,超时要设长 } }

Docker部署

# docker-compose.ymlversion:'3.8'services:ollama:image:ollama/ollama:latestcontainer_name:ollamaports:-"11434:11434"volumes:-./models:/root/.ollamadeploy:resources:reservations:devices:-driver:nvidiacount:allcapabilities:[gpu]restart:unless-stopped
docker-composeup -d# 进容器下载模型dockerexec-it ollama ollama pull qwen2:7b

多节点负载均衡

我们有三台GPU服务器,用Nginx做负载均衡:

upstream ollama_cluster { least_conn; # 最少连接数 server 10.0.1.10:11434 weight=2; # 4090,权重高 server 10.0.1.11:11434 weight=2; server 10.0.1.12:11434 weight=1; # 3090,权重低 keepalive 64; }

三台机器分布在不同网段,我用星空组网把它们串到一起,统一管理。部署新模型或者更新配置时,Ansible一条命令就能批量搞定。

监控告警

用Prometheus采集指标:

# 简单的健康检查脚本importrequestsimporttimedefcheck_ollama(host):try:start=time.time()resp=requests.get(f'http://{host}:11434/api/tags',timeout=5)latency=time.time()-startreturnresp.status_code==200,latencyexcept:returnFalse,0# 配合Prometheus的Pushgateway上报

踩过的坑

坑1:首次加载慢

第一次调用模型会很慢(10-30秒),因为要把模型加载到显存。

解决:服务启动后主动预热

# 启动脚本里加预热curlhttp://localhost:11434/api/generate -d'{ "model": "qwen2:7b", "prompt": "hello", "stream": false }'

坑2:长文本OOM

上下文太长会显存溢出。

解决:限制num_ctx,或者做文本分片

defchunk_text(text,max_length=2000):"""长文本分片"""chunks=[]foriinrange(0,len(text),max_length):chunks.append(text[i:i+max_length])returnchunks

坑3:并发性能差

Ollama单实例并发能力有限,高并发会排队。

解决:多实例 + 负载均衡,或者换vLLM(专门优化过并发)

坑4:中文分词问题

有些模型对中文支持不好,输出会有乱码。

解决:优先用Qwen2、GLM等国产模型,中文效果明显好很多

实际效果

分享一下我们的使用数据:

  • 模型:Qwen2-7B
  • 硬件:RTX 4090 24GB
  • 平均响应时间:2-5秒(视问题复杂度)
  • 每天调用量:约2000次
  • 月成本:电费约200元

对比之前用OpenAI API,每月几千块的API费用省下来了,数据也不用出内网。

总结

Ollama确实降低了大模型私有化部署的门槛:

  1. 部署简单:一行命令安装,模型即拉即用
  2. 生态丰富:主流开源模型基本都有
  3. 兼容性好:OpenAI格式API,迁移成本低
  4. 资源可控:7B模型消费级显卡就能跑

当然它也有局限:不适合高并发场景,功能相对基础。如果需要更强的推理性能,可以看看vLLM或TensorRT-LLM。

对于大多数企业内部应用场景,Ollama是一个性价比很高的选择。先跑起来,后面再根据实际需求优化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:43:49

【独家解析】Open-AutoGLM接口调用秘籍:仅限内部流传的调试技巧曝光

第一章&#xff1a;Open-AutoGLM接口调用概述Open-AutoGLM 是一款面向自动化任务生成与执行的开源大语言模型接口系统&#xff0c;支持通过标准化 API 调用实现自然语言到结构化指令的转换。该接口广泛应用于智能运维、低代码平台和自动化测试等领域&#xff0c;具备高可用性与…

作者头像 李华
网站建设 2026/5/1 7:00:03

【性能突破极限】:实测千元机运行Open-AutoGLM的惊人表现

第一章&#xff1a;千元机也能跑大模型&#xff1f;Open-AutoGLM的逆袭之路在AI大模型动辄需要高端GPU支撑的当下&#xff0c;Open-AutoGLM的出现打破了算力壁垒。这款轻量化推理框架专为低配置设备优化&#xff0c;让搭载联发科Helio G85的千元级安卓手机也能本地运行70亿参数…

作者头像 李华
网站建设 2026/5/1 7:00:20

Open-AutoGLM手机运行教程:无需Root,3分钟实现AI自动操作

第一章&#xff1a;Open-AutoGLM项目背景与技术原理Open-AutoGLM 是一个开源的自动化通用语言模型&#xff08;General Language Model, GLM&#xff09;构建框架&#xff0c;旨在降低大语言模型定制与部署的技术门槛。该项目融合了模型微调、提示工程、自动评估与推理优化等核…

作者头像 李华
网站建设 2026/5/1 7:00:34

为什么你的AutoGLM API响应延迟超高?3分钟定位性能瓶颈

第一章&#xff1a;为什么你的AutoGLM API响应延迟超高&#xff1f;3分钟定位性能瓶颈检查网络链路与DNS解析耗时 高延迟的首要排查点是客户端到API网关之间的网络质量。使用 curl 的详细模式可快速识别各阶段耗时&#xff1a;curl -w "连接时间: %{time_connect}\nDNS解析…

作者头像 李华