背景
最近大量用本地模型,我想知道我每天到底省了多少钱。
所以我就必须要知道我每天用了多少 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 自由。
搞起来啊~~
不说了,等我下一篇文章吧。