Chutes-Audit 新版本发布通知

Chutes-Audit 新版本发布通知
Weekend📢 Chutes-Audit 新版本发布通知
一个包含重要性能优化与修复的新版本已发布:
🔗 PR 链接:https://github.com/rayonlabs/chutes-audit/pull/8
🔗 推荐机器规格:README - Recommended Machine Specs
🚀 主要更新内容
数据库优化
invocations表改为 分区表:
每小时的审计数据独立存储为一个分表 → 新数据写入和查询性能稳定,不会因历史数据增长而下降。- 旧数据清理更高效:直接删除过期分表,避免昂贵的
DELETE + VACUUM ANALYZE操作。
查询优化
- 重写查询逻辑,支持分区表的 并行顺序扫描。
- 大部分场景下无需索引 → 写入性能显著提升。
计算修复
- 修复了之前计算中的错误:私有调用 / 计算单元错误地被计入分数,现在已排除。
多进程并行处理
- 数据转换任务支持 多核并行,充分利用 CPU 资源。
Postgres 参数优化
- 调整 Postgres 启动参数,允许更多 worker 并更好利用内存,进一步提升性能。
⚠️ 注意事项
需要完全重置审计系统。
两种升级策略:
- 直接升级 → 等待系统追上数据再重新设置权重;
- 新机器并行跑 → 在新机器上跑新版,
config/config.yml中设置set_weights: false,待数据追上后关闭旧版,更新新机器配置set_weights: true并重启。
🛠️ 升级步骤
1 | docker compose down |
⏱️ 性能实测
两台不同的节点测试:
- 节点一:7小时32分钟 完成初始数据加载
- 节点二:6小时46分钟 完成初始数据加载
这是一个关于 Chutes 审计系统的详细文档,我已经为你翻译好了。
Chutes Audit 审计系统
该系统旨在通过多种机制帮助验证者向矿工分发请求的公平性。尽管未来还会增加更多功能,但目前的实现已在很大程度上达到了这一目标,并且可以由任何感兴趣的人运行,而不仅仅是拥有大量权益的验证者。
为了完整验证7天审计窗口内的所有区块,你必须使用归档(archive)子张量节点,或使用带有 --state-pruning 60000 参数的本地子张量节点,以确保你保留了足够的区块来验证 set_commitment 调用。
推荐机器配置
- 16个或更多 CPU 核心
- 请注意,单核性能也至关重要,请选择一个快速的 CPU(例如 3+ GHz)。
- 如果你必须在更多核心和更少但更快的核心之间做出权衡,选择更快的核心可能会更有益(但相应地调整
docker-compose.yaml中的 worker 数量等,以匹配你的配置)。
- 理想情况下 64GB+ 内存,但也可以在更少的内存下运行。
- 相应地调整
docker-compose.yaml文件,例如共享内存大小(shm size)、Postgres 缓存大小等。
- 相应地调整
- 1TB+(快速)硬盘
- 这应该是一个本地连接的 NVMe/SSD,最好是 RAID 1 或 RAID 10,以提供一定的冗余和弹性。
- 尽量避免网络附加存储或共享驱动器,这些可能会遇到高延迟、低 IOPS 等问题。
- 磁盘性能在这里非常重要,因为大部分计算都在 Postgres 中进行。
你可以使用配置较低的机器,但性能当然会是次优的,并且可能需要根据下面的说明调整设置。
Postgres 配置
根据核心数量、内存等,你可能希望更改 docker-compose.yml 文件中的 Postgres 命令,相应地增加或减少各项值。
首次同步
第一次运行该系统时,同步会花费非常长的时间,可能超过8个小时。使用更快的磁盘/CPU 和更多的内存会有帮助。在首次同步完成之前,你将无法设置权重。
合成数据(Synthetics)以确保审计导出/权重的完整性
如果配置了 synthetics.enabled 和一个有效的 API 密钥,审计系统将持续为所有标准模板生成合成数据。对于每个请求,它将使用 chutes 调用跟踪系统来准确获取请求被路由到哪个矿工、任何触发重试到另一个矿工的错误等,并验证每个合成数据是否都出现在验证者的审计导出文件中。调用数据应该总是出现在审计系统提取的调用导出文件中。
跟踪示例:
1 | Attempting to perform synthetic task: task_type='image' |
所有输出默认都会被渲染(包括播放音频和渲染图像!),但你可以为每种合成类型关闭渲染。
有关额外的合成配置选项,请参阅 config/config.yml。
比较验证者指标与矿工自报指标
审计脚本的一个功能是比较矿工从其 Prometheus 报告的指标与验证者的调用计数。Prometheus 指标与验证者的 Postgres 数据库相比总会有些不准确,原因很简单,因为在 extras 剧本中配置的 Prometheus 服务器只是一个无状态的 Pod,没有状态存储(所以如果它重启,数据就会重新开始)。此外,可能还存在由 wireguard / calico 等引起的抓取指标时的潜在问题。尽管有这些问题,你仍然可以看到审计系统显示,矿工报告的摘要指标与调用导出文件中的数据有大约 90% 的一致性(且差异通常是 Prometheus 统计数据的报告不足,这在某种程度上是预期中的)。
1 | Miner 5FhMaRd59y5nyDEtCz1JMMEMZzAGimtmC8m5AfCeXVE3vzCx has full audit report coverage [601200 seconds] |
重现激励计算
每当有新的审计数据可用时,系统将下载包含每个调用(以及计算乘数、赏金、错误消息等)的 CSV 导出文件,这些文件对应于该审计条目所代表的那一小时。一旦加载了整个7天历史的审计导出文件,审计系统就可以在本地计算和重现权重,并将其与当前的元图(metagraph)权重进行比较。由于权重复制器以及 Chutes 验证器和审计导出文件之间可能存在的几秒到几分钟的潜在差距,总会有一些微小的差异,但结果应该非常接近。
输出示例:
1 | Calculated incentive locally for 5F22KgAv4kvJEMcmPoWLLMkAysFUALH9JLJh9exg7QFv6s5H [ 2]: 0.08938 vs actual 0.08960, delta 0.00021 |
如你所见,这里的差异非常小,小于 0.2%。
作为验证者独立设置权重
如果你愿意,除了使用子热键(child hotkey)或运行一个包含所有昂贵功能的完整验证者之外,你还可以使用该系统根据审计导出数据独立设置权重。要做到这一点,请更新 config/config.yml 文件,例如:
1 | set_weights: |
运行审计器
在尝试运行审计器之前,请务必仔细检查 config/config.yml 文件并进行任何你希望的更改。最重要的更改包括:
- 用一个有效的 Chutes API 密钥配置
api_key。你可以通过 CLI 或 chutes.ai 网站注册,然后获取一个 API 密钥(同样,可以使用chutes keys create --name foo ...命令或从网站获取)。 - 如果你是验证者,已在
64子网上注册,并且希望设置权重,请确保配置set_weights部分,填入你的 SS58 地址和热键种子。
注意:你需要给账户充值,或者通知 Chutes 团队你的用户名以启用免费访问,或者如果你是验证者/子网所有者,使用 chutes link ... 命令来启用免费访问:https://github.com/rayonlabs/chutes?tab=readme-ov-file#-validators-and-subnet-owners
更新配置后,有两种运行方式:
选项 1:运行自动更新器(确保你已安装 Python)
如果需要,安装 pm2
1 | apt-get install -y -qq nodejs npm |
运行自动更新器
1 | pm2 delete autoupdates || true && pm2 start --name "autoupdates" "python utils/autoupdater.py" |
选项 2:只使用 docker-compose
1 | docker compose up --build auditor |
选项 3:安装 Python、Poetry 等,并在不使用 Docker 的情况下运行
你需要安装 portaudio2 或禁用音频渲染,例如 sudo apt-get -y install libportaudio2。
你还需要 Poetry 来管理依赖项(或者你可以从 pyproject.toml 中解析出依赖要求),例如 curl -sSL https://install.python-poetry.org | python3 -。
确保你本地运行了 Postgres(如果愿意,可以使用提供的 docker-compose 文件来运行),并设置 POSTGRESQL 环境变量,例如:export POSTGRESQL='postgresql+asyncpg://user:password@127.0.0.1:5432/chutes_audit'






