我想看看本地 LLM 给我省了多少钱,于是我监控了它

背景

最近大量用本地模型,我想知道我每天到底省了多少钱。

所以我就必须要知道我每天用了多少 tokens。

于是我就问 AI,怎么才能监听本地大模型的用量?

经过一番折腾之后,我选择了 Prometheus + Grafana 的方式。

现在把过程记录在这里,供大家参考。

我是 Ubuntu x86_64 系统,双 16G V100 显卡。

用 llama.cpp 交替运行的 Qwen3.8-27B-Q4_K_M.gguf 和 Qwen3.6-35B-A3B-Q4_K_M.gguf。

步骤

零、先踩了个坑

我上来就踩了个坑,AI 推荐了 llama.cpp-token-tracker。

我一看,连个星都没有,但是毕竟是 AI 推荐的,也许呢,是吧~

于是我就试了一下,不出所料的,踩坑了,根本就没用,浪费了我几个小时的时间。

所以,事实证明,AI 推荐的,该不靠谱还是不靠谱。

一、安装 Prometheus

于是我就用了 AI 又推荐的 Prometheus。不管怎样,成功安装了,也运行起来了。

关键是,AI 给的版本是最新的,而且给的安装流程,也是没有任何问题的,这个倒是很少见。

具体步骤如下:

1. 下载 Prometheus

我是 Ubuntu x86_64 系统:

sh 复制代码
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v3.14.0/prometheus-3.14.0.linux-amd64.tar.gz
tar -xzf prometheus-3.14.0.linux-amd64.tar.gz
sudo mv prometheus-3.14.0.linux-amd64 /opt/prometheus

# 确认:
# /opt/prometheus/prometheus --version

2. 创建数据目录

sh 复制代码
sudo mkdir -p /var/lib/prometheus
sudo mkdir -p /etc/prometheus

3. 配置 Prometheus

sh 复制代码
sudo nano /etc/prometheus/prometheus.yml

填:

plain 复制代码
global:
  scrape_interval: 30s

scrape_configs:
  - job_name: llama
    scrape_interval: 30s
    static_configs:
      - targets:
          - 127.0.0.1:8080

4. 先手动启动测试

sh 复制代码
/opt/prometheus/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus
  
# 访问 http://你的IP:9090

5. 确认 llama.cpp 被采集

在 Prometheus 页面进入 Graph,分别输入:

plain 复制代码
llamacpp:prompt_tokens_total
llamacpp:tokens_predicted_total
llamacpp:prompt_tokens_cached_total

应该能看到类似:

plain 复制代码
llamacpp:prompt_tokens_total  123456

6. 最后做成 systemd 服务

sh 复制代码
sudo nano /etc/systemd/system/prometheus.service

写:

plain 复制代码
[Unit]
Description=Prometheus
After=network.target

[Service]
Type=simple
User=root
ExecStart=/opt/prometheus/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus \
  --storage.tsdb.retention.time=1y

Restart=always

[Install]
WantedBy=multi-user.target

然后:

sh 复制代码
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus

# 检查
# systemctl status prometheus

安装完之后,它就能够自动去收集 llama.cpp 的运行数据了。

我要是不嫌麻烦,每天自己看他的数据算一下就可以了~~

但是我嫌麻烦......

于是我就问他有没有现成的看板之类的,不用每次都自己输入公式计算。

然后它就推荐了 Grafana。

二、安装 Grafana

1. 安装 Grafana OSS

sh 复制代码
sudo apt-get update
sudo apt-get install -y apt-transport-https wget gnupg

# 添加 Grafana 官方 GPG key:
sudo mkdir -p /etc/apt/keyrings
wget -q -O - https://apt.grafana.com/gpg.key \
  | gpg --dearmor \
  | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/grafana.gpg

# 添加官方仓库:
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" \
  | sudo tee /etc/apt/sources.list.d/grafana.lis
  
sudo apt-get update
sudo apt-get install -y grafana

2. 启动 Grafana

安装完成后:

sh 复制代码
sudo systemctl enable --now grafana-server

# 检查服务:
# sudo systemctl status grafana-server
# 再检查端口:
# sudo ss -lntp | grep 3000

3. 访问 Grafana 添加 Prometheus

  • Prometheus URL 是 127.0.0.1:9090;
  • Grafana 默认地址是 127.0.0.1:3000;
  • 默认用户名密码都是 admin。

登录 Grafana 后: Connections -> Data sources -> Add data source -> Prometheus,填入 URL。

三、配置 Grafana 看板

安装完了之后才知道 Grafana 就是个 BI 工具,虽然 AI 告诉了我操作步骤,但是没有图片,着实费了一番功夫。

怎么操作有点零碎,这里就不细说了,大家可以自己找视频学一下。

记录一下我用到的统计数据:

sh 复制代码
# 今日总 Token - Total Tokens (24h)
sum(
  increase(llamacpp:prompt_tokens_total{model=~"$model"}[24h])
  +
  increase(llamacpp:prompt_tokens_cached_total{model=~"$model"}[24h])
  +
  increase(llamacpp:tokens_predicted_total{model=~"$model"}[24h])
)

# 今日 Input - Input Tokens (24h)
sum(
  increase(llamacpp:prompt_tokens_total{model=~"$model"}[24h])
)

# 今日 Cached - Cached Tokens (24h)
sum(
  increase(llamacpp:prompt_tokens_cached_total{model=~"$model"}[24h])
)

# 今日 Output - Output Tokens (24h)
sum(
  increase(llamacpp:tokens_predicted_total{model=~"$model"}[24h])
)

# 每日 Token 趋势 - Token Usage
sum(
  increase(llamacpp:prompt_tokens_total[1d])
  +
  increase(llamacpp:prompt_tokens_cached_total[1d])
  +
  increase(llamacpp:tokens_predicted_total[1d])
)

# 按模型统计 - Token Usage by Model
sum by (model) (
  increase(llamacpp:prompt_tokens_total[24h])
  +
  increase(llamacpp:prompt_tokens_cached_total[24h])
  +
  increase(llamacpp:tokens_predicted_total[24h])
)

# 当前生成速度 - Generation Speed
sum(llamacpp:predicted_tokens_seconds{model=~"$model"})

# Prompt 处理速度 - Prompt Processing Speed
sum(llamacpp:prompt_tokens_seconds{model=~"$model"})

# 当前正在处理的请求 - Requests Processing
sum(llamacpp:requests_processing{model=~"$model"})

# 当前排队请求 - Requests Deferred
sum(llamacpp:requests_deferred{model=~"$model"})

整个看板大概长这样(别说,AI 这种图看起来还挺高级的):

sh 复制代码
┌─────────────────────────────────────────────────────────────┐
│ llama.cpp Token Usage                                       │
│                                                             │
│ Model: [ All ▼ ]        Time: [ Last 7 days ▼ ]             │
├────────────────┬────────────────┬────────────────┬─────────┤
│ Total Tokens   │ Input Tokens   │ Cached Tokens  │ Output  │
│     1234567    │      900000    │      250000    │  84567  │
├────────────────┴────────────────┴────────────────┴─────────┤
│                                                             │
│                 Daily Token Usage                           │
│                                                             │
│   ╭────╮                                                    │
│   │    ╰──╮       ╭────╮                                   │
│ ──╯       ╰───────╯    ╰────                               │
│                                                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│                 Token Usage by Model                       │
│                                                             │
├─────────────────────┬───────────────────┬───────────────────┤
│ Generation Speed    │ Prompt Speed      │ Processing        │
│  xxx tok/s          │ xxx tok/s         │ 0                 │
├─────────────────────┴───────────────────┼───────────────────┤
│ Deferred Requests                        │ 0                 │
└─────────────────────────────────────────┴───────────────────┘

总结

折腾了一下午,终于算是完成了。

估计有人会说,你这么费劲干嘛,直接让 AI 帮你弄不就好了。

我觉得你说的对,我竟无力反驳......

但是有的时候,程序员就是会犯这种职业病,或者叫犯贱,得治。

其实更核心的原因是,我觉得 AI 搞不定这么长的任务,而且我不想让他在我的电脑上瞎搞。

都说现在 AI 可以做长任务了,其实我一直想试一下,但是我实在是对自己的电脑有洁癖。

这不,前两天安装了一个虚拟机,详见《为了教 AI 课,我在 Ubuntu 上装了 win10 虚拟机》。

我突然反应过来,完全可以在虚拟机里面尝试各种任务啊,又是本地大模型,约等于 token 自由。

搞起来啊~~

不说了,等我下一篇文章吧。

相关推荐
草上飞95272 小时前
把前沿能力装进便宜产物,本身是多数模型还不会的能力
人工智能·深度学习·llm
山顶夕景3 小时前
【OPD】Rethinking On-Policy Distillation: Phenomenology, Mechanism, and Recipe
llm·蒸馏·rlvr·opd
goehou3 小时前
LLM 结构化输出全解:从 Prompt 约束到 Schema 硬保证,三层实现怎么选
ai·llm·json·agent·教程·结构化输出
AI技术新视界4 小时前
微软确认 GPT‑6 使用 Looped Transformers
人工智能·llm
桃西西呀6 小时前
Spring AI Alibaba 之二:Spring AI 底座与原子抽象一笔带过,看清 SAA 在之上加了什么编排
人工智能·spring·llm
桃西西呀8 小时前
Spring AI Alibaba 之一:整体概览与分层架构,看清它在 Spring AI 之上到底加了什么
人工智能·spring·llm
做cv的小昊8 小时前
【大模型算法自学笔记01】NLP基础知识(1.1 自注意力)
人工智能·笔记·算法·自然语言处理·大模型·llm
Together_CZ9 小时前
UFO²: The Desktop AgentOS——桌面代理操作系统
大模型·llm·gui agent·智能体系统·agentos·ufo²·桌面代理操作系统
Alice-YUE9 小时前
从「能用」到「可控」:Prompt 工程与日常写 Prompt 的本质区别
人工智能·大模型·llm·prompt·prompt工程·提示词·ai应用
互联网叫兽1 天前
RAG 知识库-基于元数据的细粒度权限控制
ai·llm·rag