news 2026/5/10 15:05:37

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/6 17:57:38

能源行业Oracle替换优选方案:金仓数据库混合负载实战解析

能源行业Oracle替换优选方案&#xff1a;金仓数据库混合负载实战解析 在“双碳”目标和新型电力系统建设的推动下&#xff0c;能源行业正加速迈向数字化、智能化转型。作为国家关键信息基础设施的重要组成部分&#xff0c;电网调度、新能源集控、油气监控等核心业务对数据系统…

作者头像 李华
网站建设 2026/5/9 20:23:12

Python与Open-AutoGLM深度集成(工业级应用中的性能优化实践)

第一章&#xff1a;Python与Open-AutoGLM集成概述Open-AutoGLM 是一个面向自动化生成语言模型任务的开源框架&#xff0c;旨在简化从数据预处理到模型推理的全流程开发。通过与 Python 生态深度集成&#xff0c;开发者能够利用丰富的科学计算库&#xff08;如 NumPy、Pandas&am…

作者头像 李华
网站建设 2026/5/10 7:59:49

API对接效率提升80%?深度解析AutoGLM沉思模式的正确打开方式

第一章&#xff1a;API对接效率提升的行业痛点与AutoGLM沉思模式的崛起在现代软件开发中&#xff0c;API对接已成为系统集成的核心环节。然而&#xff0c;频繁的协议差异、文档不规范、接口变更缺乏通知机制等问题&#xff0c;严重拖慢了开发进度。开发团队常需耗费大量时间进行…

作者头像 李华
网站建设 2026/5/5 17:42:10

JS高效解析XML字符串生成树结构

JS高效解析XML字符串生成树结构 在构建大模型系统后台时&#xff0c;一个看似不起眼但极其关键的需求浮出水面&#xff1a;如何快速、流畅地展示成千上万条层级数据&#xff1f;比如你在 ms-swift 平台上管理数百个Qwen、Llama或Ovis系列模型的训练流程&#xff0c;每个模块都有…

作者头像 李华
网站建设 2026/5/8 19:05:25

揭秘Open-AutoGLM部署难题:如何在普通手机上流畅运行大模型

第一章&#xff1a;Open-AutoGLM在移动端的应用前景随着边缘计算与终端智能的快速发展&#xff0c;大型语言模型&#xff08;LLM&#xff09;正逐步向移动设备迁移。Open-AutoGLM作为一款支持自动化推理与轻量化部署的开源语言模型框架&#xff0c;在移动端展现出广阔的应用潜力…

作者头像 李华