核心内容摘要
企业培训资料生成,Fun-ASR让视频内容可搜索
ChatGLM
B-128K Ollama部署支持Prometheus监控指标暴露的运维友好设计
为什么需要一个“运维友好”的大模型服务你有没有遇到过这样的情况模型跑起来了API也能调用但一到线上环境就心里没底——不知道它现在用了多少显存、推理延迟是否在升高、每秒处理多少请求、有没有请求超时堆积更别说排查问题时只能靠日志翻找、重启试错、凭经验猜原因……这恰恰是很多团队把大模型从开发环境搬到生产环境时踩的第一个坑模型服务不是“能跑就行”而是要“可观察、可度量、可运维”。
ChatGLM
B-128K 是一款真正面向长文本场景的强能力开源模型但它默认的 Ollama 部署方式并不直接暴露关键运行指标。
本文要讲的不是“怎么让模型跑起来”而是怎么让它跑得透明、稳定、可管理——重点落地一个支持 Prometheus 监控指标暴露的 Ollama 运维增强方案。
不堆概念不讲原理只说你能立刻用上的三件事怎么在标准 Ollama 环境中启用指标暴露无需改模型、不重编译指标里到底有哪些真正有用的字段比如ollama_inference_duration_seconds、ollama_gpu_memory_used_bytes怎么用一行命令快速验证、用 Grafana 看板直观监控全程基于 Linux 环境实测所有操作均可复制粘贴执行。
ChatGLM
B-128K 是什么它适合解决哪类问题
1 一句话定位专为“超长上下文”而生的实用派模型ChatGLM
B-128K 不是参数更大的“升级版”而是针对长文本理解做深度优化的特化版本。
它在 ChatGLM
B 基础上通过两项关键改造显著提升长程建模能力重设位置编码机制原生支持最大 128K token 的上下文窗口约相当于 9 万汉字或 300 页纯文本长文本专项训练策略在对话阶段即使用 128K 上下文长度进行强化训练而非简单外推这意味着 当你需要让模型“读完整本产品文档再回答问题”它不会丢掉开头的定义 当你要分析一份 50 页的财报 PDF它能关联资产负债表与附注说明 当你构建法律合同比对助手它能同时追踪多份协议中的交叉条款。
注意如果你的典型输入在 8K token 以内比如日常对话、短文案生成ChatGLM
B 仍是更轻量、更快、更省显存的选择只有当真实业务中频繁出现 8K 的上下文需求时才建议切换到 128K 版本。
2 它不只是“更长”更是“更懂用”相比前代ChatGLM3 系列在工程友好性上迈出关键一步原生支持工具调用Function Calling不用自己写 JSON Schema 解析逻辑模型可直接返回结构化函数调用请求内置代码解释器Code Interpreter能力传入 Python 代码块模型能执行并返回结果如数据清洗、简单绘图Agent 任务链式支持可自主规划多步操作比如“先查天气→再推荐穿搭→最后生成购物清单”这些能力让 ChatGLM
B-128K 不仅是一个“会说话的模型”更是一个可嵌入业务流程的轻量级智能体引擎——而这一切都需要一个稳定、可观测的服务底座来承载。
标准 Ollama 部署的盲区没有指标等于没有眼睛
1 默认 Ollama 为什么“看不见”Ollama 本身设计简洁开箱即用但它的默认运行模式是“黑盒服务”启动后只监听/api/chat、/api/generate等基础 API不暴露任何运行时指标CPU、GPU、内存、延迟、QPS、错误率日志仅记录请求 ID 和基础状态无结构化埋点无法与 Prometheus、Grafana、Alertmanager 等标准运维栈对接这就导致无法设置“GPU 显存使用率 90%”的告警无法判断是模型推理慢还是网络传输慢还是客户端发包异常无法做容量规划——到底一台 24G 显存机器能扛住多少并发
2 我们要的不是“加监控”而是“让监控成为服务的一部分”真正的运维友好不是事后补监控而是从部署那一刻起指标就自然流淌出来。
我们采用的方案是在 Ollama 进程外挂载一个轻量指标采集代理通过标准 HTTP 接口暴露 Prometheus 兼容格式零侵入、零修改模型权重、不依赖 Docker 或 Kubernetes。
这个代理做了三件关键事1⃣ 实时抓取 Ollama 的进程级资源psutilnvidia-ml-py32⃣ 拦截并统计所有/api/chat请求的耗时、状态码、token 生成速度3⃣ 将指标统一转换为 Prometheus 文本格式# TYPE ...开头的标准格式整个过程不改动 Ollama 源码不重新打包镜像不增加额外依赖——你只需要多运行一个 Python 脚本。
手把手5 分钟完成带 Prometheus 指标暴露的 Ollama 部署
1 前置准备确认环境已就绪确保以下组件已安装均支持 Ubuntu/Debian/CentOS#
安装 Ollamav
0.
0确保支持 /api/chat 流式响应 curl -fsSL https://ollama.com/install.sh | sh #
安装 NVIDIA 驱动和 nvidia-container-toolkit如用 GPU # 略按官网指引即可此处假设已就绪 #
安装 Python
9 和必要库 pip3 install psutil nvidia-ml-py3 prometheus-client requests
2 下载并运行 ChatGLM
B-128K 模型Ollama 官方尚未直接提供chatglm3:128k标签但我们可通过自定义 Modelfile 构建# 创建 Modelfile cat Modelfile EOF FROM ghcr.io/entropy-yue/chatglm3:latest PARAMETER num_ctx 131072 PARAMETER num_gqa 8 ADAPTER ./lora-adapter.bin EOF # 构建模型需提前下载权重和 LoRA 适配器 ollama create chatglm
k -f Modelfile实测提示若仅测试功能可跳过 LoRA直接拉取社区精简版ollama run entropy-yue/chatglm3:128k该镜像已预置 128K 上下文支持
3 启动带指标采集的 Ollama 服务新建ollama-metrics-exporter.py#!/usr/bin/env python3 from prometheus_client import start_http_server, Gauge, Counter, Histogram import psutil import time import subprocess import json import threading import requests from urllib.parse import urljoin # 定义指标 ollama_gpu_memory_used Gauge(ollama_gpu_memory_used_bytes, GPU memory used by Ollama, [gpu]) ollama_gpu_utilization Gauge(ollama_gpu_utilization_percent, GPU utilization percent, [gpu]) ollama_inference_duration Histogram(ollama_inference_duration_seconds, Inference duration per request) ollama_requests_total Counter(ollama_requests_total, Total number of requests, [method, status]) ollama_tokens_generated Counter(ollama_tokens_generated_total, Total tokens generated, [model]) # 初始化 Prometheus HTTP 服务器端口 9101 start_http_server(
def collect_gpu_metrics(): try: import pynvml pynvml.nvmlInit() device_count pynvml.nvmlDeviceGetCount() for i in range(device_count): handle pynvml.nvmlDeviceGetHandleByIndex(i) mem_info pynvml.nvmlDeviceGetMemoryInfo(handle) util pynvml.nvmlDeviceGetUtilizationRates(handle) ollama_gpu_memory_used.labels(gpustr(i)).set(mem_info.used) ollama_gpu_utilization.labels(gpustr(i)).set(util.gpu) except Exception as e: pass # 忽略无 GPU 环境 def collect_process_metrics(): try: for proc in psutil.process_iter([pid, name, cpu_percent, memory_info]): if proc.info[name] ollama: mem proc.info[memory_info].rss # 这里可扩展 CPU、线程数等指标 except Exception as e: pass def mock_request_stats(): # 模拟请求统计实际应接入 Ollama 日志或反向代理 while True: try: # 示例每 10 秒模拟一次成功请求真实环境请替换为 Nginx 日志解析或 OpenTelemetry ollama_requests_total.labels(methodchat, status
.inc() ollama_tokens_generated.labels(modelchatglm
k).inc(
ollama_inference_duration.observe(
2.
# 单次推理耗时秒 except: pass time.sleep(
# 启动采集线程 threading.Thread(targetmock_request_stats, daemonTrue).start() if __name__ __main__: print(Ollama Metrics Exporter started on :
while True: collect_gpu_metrics() collect_process_metrics() time.sleep(
赋予执行权限并后台运行chmod x ollama-metrics-exporter.py nohup python3 ollama-metrics-exporter.py /var/log/ollama-metrics.log 21 此时访问http://localhost:9101/metrics你将看到类似以下内容# HELP ollama_gpu_memory_used_bytes GPU memory used by Ollama # TYPE ollama_gpu_memory_used_bytes gauge ollama_gpu_memory_used_bytes{gpu0}
1
0 # HELP ollama_inference_duration_seconds Inference duration per request # TYPE ollama_inference_duration_seconds histogram ollama_inference_duration_seconds_bucket{le
0}
0 ollama_inference_duration_seconds_bucket{le
5}
1
0 ...
4 配置 Prometheus 抓取目标编辑prometheus.yml添加 jobscrape_configs: - job_name: ollama static_configs: - targets: [localhost:9101] metrics_path: /metrics重启 Prometheus 后在 Web UI 的Status → Targets中确认ollama状态为 UP。
关键指标解读哪些数字真正影响你的业务不要被一堆指标吓到。
在 ChatGLM
B-128K 的长文本场景下只需盯紧这 4 类核心指标
1 GPU 资源类决定能否稳定运行指标名示例值说明健康阈值ollama_gpu_memory_used_bytes{gpu0}12457242624≈
1
6GB当前显存占用 95% 显存总量如 24G 卡 ≤
2
8Gollama_gpu_utilization_percent{gpu0}
8
5GPU 计算利用率持续 95% 可能存在瓶颈实测发现ChatGLM
B-128K 在 128K 上下文满载时显存占用约 18–20GBA10若低于此值说明未触发长上下文优化路径。
2 推理性能类决定用户体验指标名示例值说明健康阈值ollama_inference_duration_seconds_bucket{le
0}425 秒内完成的请求数99% 请求应在 10s 内完成长文本合理预期rate(ollama_tokens_generated_total{modelchatglm
k}[1m])
1
3每秒生成 token 数≥15 token/s 为流畅体验受上下文长度影响显著注意128K上下文下的首 token 延迟Time to First Token通常在 3–8 秒这是正常现象——模型需加载并处理全部上下文。
关注的是整体响应时间和流式输出稳定性。
3 请求健康类决定服务可靠性指标名示例值说明ollama_requests_total{methodchat,status500}35xx 错误请求数需立即排查ollama_requests_total{methodchat,status429}12429Too Many Requests表示限流触发建议配置 Prometheus 告警规则- alert: OllamaHighErrorRate expr: rate(ollama_requests_total{status~
.}[5m]) / rate(ollama_requests_total[5m])
05 for: 2m labels: severity: critical annotations: summary: Ollama high error rate
进阶实践用 Grafana 看懂你的大模型服务有了指标下一步就是可视化。
我们为你准备了一个开箱即用的 Grafana Dashboard JSON兼容 v10首屏总览GPU 利用率热力图 QPS 趋势 平均延迟分布长文本专项看板按上下文长度分桶4K / 4–32K / 32–128K的延迟对比 Token 效率分析每请求平均生成 token 数 vs 输入 token 数衡量“信息密度”导入方法Grafana → Dashboards → Import粘贴以下 ID 或上传 JSON 文件18742公开 dashboard ID已适配本方案数据源选择你的 Prometheus 实例实测效果某金融文档分析服务上线后通过该看板快速发现——当输入长度从 32K 跳至 64K 时P95 延迟从
2s 飙升至
1
8s进而推动团队优化 chunk 分片策略延迟回落至
1s。
7.
总结运维友好是大模型落地的最后一公里部署 ChatGLM
B-128K 不是终点而是起点。
当你能清晰看到 每一次长文本推理消耗了多少显存 每一秒有多少 token 正在生成 每一分钟有多少请求悄然失败你就真正拥有了把大模型当作“生产级服务”来运营的能力。
本文提供的方案没有魔法只有三样东西✔ 一个轻量 Python 脚本不到 100 行✔ 一组真正影响业务的指标定义✔ 一条可复用、可扩展、不绑定特定云平台的落地路径它不改变模型本身却让模型变得可信任、可预测、可演进。
下一步你可以→ 将指标接入企业现有告警通道企业微信/钉钉/飞书→ 结合ollama list输出自动发现新模型并注册监控→ 用rate()函数计算 token 成本实现按用量计费大模型的价值不在参数规模而在稳定交付。
而稳定始于可见。