全最首发最详细 Chutes miner 挖矿教程 (支持定制开发)

全最首发最详细 Chutes miner 挖矿教程 (支持定制开发)
Weekend全最首发最详细 Chutes miner 挖矿教程 (支持定制开发)
Chutes miner 是一个区块链开源项目,旨在通过提供计算资源来参与 Chutes.ai 平台的挖矿活动。该项目利用 Kubernetes 和 Ansible 来自动化部署和管理节点,使其能够轻松地加入到 Chutes 网络中。
Chutes Subnet 64 矿工部署教程
本教程将指导你如何部署 Chutes Subnet 64 矿工,以提供计算资源并参与 Chutes.ai 平台。整个过程将尽可能自动化,主要通过 Ansible 和 Kubernetes 进行协调。
官方github Chutes miner
官方chutes Chutes.ai
官方bittensor bittensor.org
官方taostats taostats.io
注意:部署前需准备两台机器(CPU 节点 192.168.31.100、GPU 节点 192.168.31.200)来示范。所有关键注意事项(RAM/VRAM、存储、网络/WireGuard 网段、NodePort、防火墙、一次性密码生成、注册/加节点等)都已覆盖,并在对应处标注官方出处,方便你对照核验。
一、部署前的重要要求(必读)
- 服务器与系统
- 推荐 Ubuntu 22.04,尽量是“干净系统”(最好不要预装 NVIDIA 驱动,由 Ansible 统一安装)。
- CPU 主节点(运行 Postgres、Redis、API、Gepetto):≥ 8 核 + 64GB 内存。
- GPU 节点:物理/独享 GPU(非 Runpod/Vast 之类);必须有公网 IPv4 且不是共享/NAT,入站和出站看到的 IP 必须一致(专用固定 IP)。
- 内存与显存(强制要求)
- 每块 GPU 的 VRAM 总量 ≈ 主机 RAM 配比:例如 4×A40(48GB VRAM) ⇒ 服务器 RAM ≥ 48×4=192GB;否则部署易失败/利用率低。
- 存储(Hugging Face 缓存、镜像)
- 若厂商把主盘挂到奇怪目录(如
/home//ephemeral),建议把空间绑定到/var/snap(Helm/微K8s依赖此处),绑定示例见下(rsync+fstab)。
- 网络与防火墙
- 所有节点之间开放所有端口/协议(含 UDP);
- 对GPU 节点开放 Kubernetes NodePort 范围 30000–32767(Chute 实例会占用随机端口);
- 确保从你的管理机可访问 Miner API NodePort(默认 32000);
- CPU 主节点需开启 IP 转发(云商如 GCP 要勾选转发)。
- WireGuard 私网网段选择(极重要)
- 官方默认
192.168.0.0/20;如果与你的供应商/现网冲突(如 Nebius 有时用 192.168.x.x),会导致路由冲突甚至“半砖”。 - 在开始前就改好网段(如
10.99.0.0/23或192.168.254.0/24),需要同步改这 4 个文件:join-cluster.yml的正则、templates/wg0-worker.conf.j2、templates/wg0-primary.conf.j2、inventory.yml的wireguard_ip。后期迁移需要重装 microk8s/重拉集群,非常折腾。 - 你的内网是 192.168.31.0/24,与默认
192.168.0.0/20不重叠,可以继续用默认,或自定义更干净的网段。
二、准备 Ansible 控制端
可以在本地电脑或CPU 主节点装 Ansible(官方建议在控制端运行 Playbook)。
国内用户建议更新阿里云源
1 | sudo sed -i 's|http://.*archive.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list |
- Ubuntu/Debian:
1 | sudo apt -y update && sudo apt -y install ansible python3-pip |
- macOS:
1 | # Homebrew |
(可选性能优化:Mitogen 策略见官方示例配置)
三、克隆仓库并准备目录
官方工具与 Helm Chart 在同一仓库:
1 | git clone https://github.com/rayonlabs/chutes-miner.git |
(后续 Helm 操作在 chutes-miner/charts 目录进行。)
四、编写 inventory.yml(按你的两台机器示例)
说明:
ansible_host是你SSH能连到的地址(你给的是局域网 IP);
external_ip必须是每台机器的公网独享 IPv4(务必填真实公网 IP,否则GPU 节点无法通过验证/对外暴露 NodePort)。
1 | all: |
(字段说明/样例来自官方 inventory.yml 模板)
五、先处理存储(如需)
如果你的系统把主盘挂在 /home 等目录,建议把 /var/snap 绑定到大盘目录(用于 Hugging Face 缓存、镜像等):
1 | sudo rsync -azv /var/snap/ /home/snap/ |
(在每台节点上执行)
六、用 Ansible 自动化:WireGuard → 基础环境 → 入群 → 扩展
在 chutes-miner/ansible 目录执行:
- 配置 WireGuard 私网(务必先跑它)
1 | ansible-playbook -i inventory.yml wireguard.yml |
(如需修改私网网段,务必在此步骤前按“网段选择”章节改完 4 个文件后再执行。)
- 基础引导(Kubernetes/microk8s + NVIDIA 驱动/CUDA 等)
1 | ansible-playbook -i inventory.yml site.yml |
(Ubuntu 22.04 干净系统、别预装驱动,官方建议)
- 把节点加入同一 Kubernetes 集群
1 | ansible-playbook -i inventory.yml join-cluster.yml |
(注意:不要对这个 Playbook 使用 --limit,需要所有节点共同执行。)
- 一次性安装第三方 Helm 图表(NVIDIA GPU Operator + Prometheus)
1 | ansible-playbook -i inventory.yml extras.yml |
(可重复执行,一般 一次即可。)
七、在主节点准备 kubectl/helm 与命名空间
在阿里源安装 kubectl
1 | sudo apt-get update && sudo apt-get install -y apt-transport-https |
在 CPU 主节点上:如果您计划使用主节点,则应该使用别名kubectl和helm
1 | echo 'alias kubectl="microk8s kubectl"' >> ~/.bashrc |
(若在非主节点/本地机操作 kubectl:复制主节点 microk8s config 到本机 ~/.kube/config,把集群 IP 改为主节点公网 IP,执行时加 --insecure-skip-tls-verify;在主节点则无需此操作。)
八、创建 Kubernetes Secrets(两个)
建议在
CPU 主节点执行以下所有 Kubernetes 命令。
- 为避免因拉取公共镜像而受到速率限制,请创建一个 Docker Hub 登录(虽然你可能不需要,但这样做没有坏处):
前往 https://hub.docker.com/ 并注册,然后生成一个新的个人访问令牌(Personal Access Token)用于公共只读访问,最后创建 secret。
1 | kubectl create secret docker-registry regcred \ |
(官方建议“可选但推荐”)
- 矿工钱包密钥(Bittensor 热钥)
- 找到你用于挖矿的钱包 hotkey 文件(例如
~/.bittensor/wallets/default/hotkeys/<hotkey>),读取其中ss58Address与secretSeed。 - 创建 Secret(去掉 secretSeed 的
0x前缀):
1 | kubectl create secret generic miner-credentials \ |
- 官方给了完整示例(含
jq漂亮打印)可参考。
九、准备并修改 charts/values.yaml
进入 chutes-miner/charts,根据你的环境修改以下关键段落:
- validators(主网默认如下,可直接用):
1 | validators: |
(Chutes 需要显式配置 validators,不走 metagraph;大多数验证者建议用 child hotkey。)
- Hugging Face 缓存策略(默认示例,下限 30 天/850GB,可按节点覆写):
1 | cache: |
(有大量磁盘可适当放大;支持 per-node override。)
- Miner API 端口(默认 NodePort=32000,如需变更请与防火墙/add-node 参数一致):
1 | minerApi: |
(其余 redis/postgres 默认即可。)
镜像代理端口:请确保
inventory.yml中的registry_port与charts/values.yaml的registry.service.nodePort一致(默认 30500)。
十、生成一次性数据库/缓存密码(只执行一次)
此步骤一定要先于部署主图表执行,且只跑一次,否则会把已存在的 Secret 覆盖/破坏。
在 chutes-miner/charts:
1 | helm template . --set createPasswords=true -s templates/one-time-passwords.yaml | kubectl apply -n chutes -f - |
十一、渲染 Helm 模板并部署
仍在 chutes-miner/charts:
1 | # 根据修改后的 values.yaml 渲染为清单 |
(每次改了 values.yaml 都要重新渲染再 apply。)
十二、注册 Miner(子网 64)
1 | btcli subnet register --netuid 64 --wallet.name <你的COLDKEY> --wallet.hotkey <你的HOTKEY> |
不要 announnce axon:通信通过客户端发起的 socket.io 连接,公开 axon 无意义且增加攻击面。
十三、为每台 GPU 节点执行一次 add-node
安装 CLI:
1 | pip install chutes-miner-cli |
对你的 GPU 节点(示例值请按实际替换):
1 | chutes-miner add-node \ |
--name:Ansible inventory 里的短名(不是 FQDN)。--validator:验证者 hotkey(ss58)。--hourly-cost:该服务器单卡小时成本(Gepetto 会据此做成本优化)。--gpu-short-ref:GPU 简称(如a6000、l40s、h100_sxm等;支持列表见官方gpu.py)。--hotkey:你注册用的热钥文件路径(用于对 API 请求签名)。--miner-api:CPU 主节点对外的 Miner API 基址,端口要和 values.yaml/防火墙一致(默认 32000)。
(以上参数解释与示例见官方 CLI 章节)
十四、(可选)Gepetto 策略优化与热更新
- 编辑
gepetto.py(决定如何选择/扩缩/删除 chutes、抢 bounty 等,是矿工优化核心)。 - 更新为 ConfigMap 并滚动重启:
1 | kubectl create configmap gepetto-code --from-file=gepetto.py -n chutes |
(官方给出完整流程与命令)
十五、部署后自检清单
- 节点/Pod 状态
1 | kubectl get nodes -o wide |
- 日志排查
1 | kubectl logs -n chutes deployment/api |
- GPU 可见性
- GPU Operator 相关 Pod 是否 Running;
- 在 GPU 节点上
nvidia-smi正常; - 若拉镜像慢/失败,确认 Docker Hub
regcred存在。
十六、扩容新增节点(以后加机器)
- 先在
inventory.yml增加主机; - 依次执行:
1 | ansible-playbook -i inventory.yml wireguard.yml |
- 然后对新增 GPU 节点再执行一次
chutes-miner add-node ...。
常见问题/踩坑汇总
- GPU 节点必须是公网独享 IP,不能在共享 NAT 下混用不同出站 IP——验证会失败、NodePort 无法可达。
- 一次性密码只在第一次部署前生成;重复执行会破坏已部署的 Secret。
- **内存不足(RAM < 总 VRAM)**会导致部署失败或频繁驱逐。请严格按显存配内存。
- WireGuard 网段与供应商私网冲突会“半砖”,务必在开工前规划好(必要时改 4 个文件)。
- 矿工注册后不要 announce axon。通信是客户端发起的 Socket.io,开放 axon 只增风险无收益。
- 收益与激励基于近 7 天总算力时间,并且只注册一个 UID,多 UID 会内耗。建议准备多档 GPU(T4/A10/A5000 到 H100)以覆盖不同任务。
你现在可以照抄的“最小可行命令清单”
- Ansible 控制端装好 → 克隆仓库 → 写
inventory.yml(如上示例)。 ansible-playbook -i inventory.yml wireguard.yml(先私网)ansible-playbook -i inventory.yml site.yml(装 Kubernetes、NVIDIA/CUDA 等)ansible-playbook -i inventory.yml join-cluster.yml(拉成一套集群)ansible-playbook -i inventory.yml extras.yml(一次性装 GPU Operator/Prometheus)- 在CPU 主节点:
alias kubectl/helm→kubectl create ns chutes。 - 创建
regcred与miner-credentials两个 Secret。 - 编辑
charts/values.yaml的validators/cache/minerApi.service.nodePort。 - 只执行一次:
helm template . --set createPasswords=true -s templates/one-time-passwords.yaml | kubectl apply -n chutes -f -。 helm template . -f values.yaml > miner-charts.yaml && kubectl apply -f miner-charts.yaml -n chutes。btcli subnet register --netuid 64 --wallet.name <COLDKEY> --wallet.hotkey <HOTKEY>(不 announce axon)。pip install chutes-miner-cli→ 为每台 GPU 节点执行一次chutes-miner add-node ...。- 如需更新显卡驱动
ansible-playbook -i inventory.yml upgrade-nvidia.yml --limit chutes-miner-gpu-0 -e "ubuntu_major=22 ubuntu_minor=04 cuda_version=12-9 nvidia_version=575" - 如需更新ansible
pip install --upgrade ansible -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com - 带阿里源安装
pip install chutes-miner-cli -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com - 实时监控所有pod
watch microk8s kubectl get pods -A -o wide - 集群节点
microk8s kubectl get nodes -o wide - 查看miner API 应用日志
microk8s kubectl logs -n chutes deployment/api - 查看pod日志
microk8s kubectl logs -f -n chutes gepetto-xxx - 查看pod信息
microk8s kubectl describe pod -n chutes gepetto-xxx - 删除GPU Node
chutes-miner delete-node --name chutes-miner-gpu-0 --hotkey ~/.bittensor/wallets/default/hotkeys/<你的HOTKEY> --miner-api http://公网IP:32000 - 强制删除pod
kubectl delete pod chute-xxx -n chutes --force --grace-period=0 - 查看GPU验证信息
chutes-miner local-inventory --hotkey ~/.bittensor/wallets/default/hotkeys/<你的HOTKEY> - 查看GPU模型信息
chutes-miner remote-inventory --hotkey ~/.bittensor/wallets/default/hotkeys/<你的HOTKEY> - 更新github仓库
git pull origin main或更新某个文件git checkout origin/main -- gepetto.py - 删除所有chute pod
kubectl delete pods -l chutes/chute=true -n chutes --force --grace-period=0 - 删除gpu节点
chutes-miner delete-node --name chutes-miner-gpu-0 --hotkey ~/.bittensor/wallets/default/hotkeys/<你的HOTKEY> - 清除external-ip
microk8s kubectl label node chutes-miner-gpu-0 chutes/external-ip- - 设置external-ip
microk8s kubectl label node chutes-miner-gpu-0 chutes/external-ip=公网IP - 更新chutes-miner-cli
pip3 install --upgrade chutes-miner-cli - 删除GPU_ID
chutes-miner delete-remote --gpu-id xxxxxxxxxxxxxxxxxxxxxx --hotkey ~/.bittensor/wallets/default/hotkeys/<你的HOTKEY> - 恢复冷钱包
btcli wallet regen_coldkey --wallet.name default - 恢复热钱包
btcli wallet regen_hotkey --wallet.name default --wallet.hotkey <你的HOTKEY>
完成以上步骤后,你的 Chutes 矿工应该就能正常运行并开始提供计算资源了。请记住,激励是根据 7 天的总计算时间计算的,所以请耐心等待。同时,切勿注册多个 UID,这只会降低你的整体计算效率。
显卡支持情况与费率统计
以下是 Chutes 平台 gpu.py 文件中定义的 GPU 型号及其相关费率和支持状态:
| GPU 型号 (model_name_check) | 内部模型标识符 | VRAM (GB) | 每小时费率 (hourly_rate) | 当前支持状态 |
|---|---|---|---|---|
| RTX 3090 | 3090 |
24 | 0.3 | 已支持 |
| RTX 4090 | 4090 |
24 | 0.5 | 已支持 |
| RTX 5090 | 5090 |
24 | 0.7 | 已支持 |
| A4000 | a4000 |
16 | 0.2 | 已支持 |
| A4000_ADA | a4000_ada |
16 | 0.22 | 已支持 |
| A5000 | a5000 |
24 | 0.23 | 已支持 |
| A6000 | a6000 |
48 | 0.4 | 已支持 |
| A6000_ADA | a6000_ada |
48 | 0.65 | 已支持 |
| A10 | a10 |
24 | 0.5 | 已支持 |
| A100_40GB | a100_40gb |
40 | 0.8 | 已支持 |
| A100_40GB_SXM | a100_40gb_sxm |
40 | 0.85 | 已支持 |
| A100 | a100 |
80 | 0.9 | 已支持 |
| A100_SXM | a100_sxm |
80 | 0.95 | 已支持 |
| L4 | l4 |
24 | 0.32 | 已支持 |
| L40 | l40 |
48 | 0.6 | 已支持 |
| L40S | l40s |
48 | 0.65 | 已支持 |
| H100 | h100 |
80 | 1.4 | 已支持 |
| H100_NVL | h100_nvl |
94 | 1.5 | 已支持 |
| H100_SXM | h100_sxm |
80 | 1.6 | 已支持 |
| H800 | h800 |
80 | 1.8 | 已支持 |
| H200 | h200 |
141 | 2.7 | 已支持 |
| A40 | a40 |
48 | 0.27 | 已支持 |
| MI300X | mi300x |
192 | 2.5 | 当前未启用 |
| B200 | b200 |
192 | 4.0 | 当前未支持 |
支持状态说明:
- 已支持 (Fully Supported):这些 GPU 型号可以在 Chutes 平台上正常部署矿工并参与任务分配。
- 当前未启用 (Not enabled):文件中虽然有这些型号的数据,但注释明确指出它们目前尚未启用。这意味着你可能无法成功地将它们注册到 Chutes 矿工库存中,即使注册成功,也可能无法获得任务或产生收益。
RTX 5090和MI300X属于此类。 - 当前未支持 (Not yet supported):类似“未启用”,但措辞更强调“尚未”支持。
B200属于此类。
每小时费率 (hourly_rate) 0.3”在 Chutes 平台中的意义 (以 RTX 3090 为例)
每小时费率 0.3”可以理解为 Chutes 平台愿意为你的 RTX 3090 显卡每小时提供的计算工作“付出”的潜在基础价值。
更具体地解释:
- 平台的内部价值评估:
- 这个 0.3 的数值,是 Chutes 平台(在
gpu.py文件中定义)对一块 RTX 3090 显卡在每小时内能够提供的计算能力所做的内部价值评估或定价基准。平台会根据显卡的性能(如 Tensor Core 数量、VRAM 大小、架构等)来确定这个基础价值。 - 简单来说,平台认为 RTX 3090 跑一小时,它的“贡献”或“价值”大约是 0.3 个单位。
- 这个 0.3 的数值,是 Chutes 平台(在
- 与矿工运营成本 (
--hourly-cost) 的关系:- 作为矿工,你在部署时,需要通过
chutes-miner add-node命令设置一个--hourly-cost参数。这个--hourly-cost是你作为矿工声明的,你为运行 RTX 3090 每小时所支付的实际运营成本(例如电费、服务器折旧、网络成本等)。 - 平台的核心优化策略之一是“在选择服务器部署 Chute 时尽量降低成本”。这意味着平台会比较各个矿工的报价。如果你声明的
--hourly-cost低于或接近平台对 RTX 3090 评估的“潜在基础价值 0.3”,那么你的 RTX 3090 在竞标任务时就更具竞争力。
- 作为矿工,你在部署时,需要通过
- 如何影响收益?
- 你不需要向平台支付这个 0.3 的“费率”。
- 相反,当你成功地被分配到 Chute 任务,并且你的 RTX 3090 显卡完成了这些计算工作时,平台会向你支付奖励(以 TAO 币形式)。
- 这个“每小时费率 0.3”是平台计算你贡献价值的重要依据。如果你的 RTX 3090 能够高效、稳定地运行,并且你设置的
--hourly-cost具有竞争力,那么你就有更大的机会获得任务,从而将这种“潜在基础价值”转化为实际的收益。
总结:
对于你的 RTX 3090,每小时费率 0.3 代表了 Chutes 平台对它每小时工作能力的一个预设“价值标签”。你作为矿工,通过声明你的运营成本(--hourly-cost),与这个“价值标签”进行匹配和竞争,从而争取获得平台分配的任务,最终赚取收益。 你的目标是让你的 RTX 3090 以其“每小时费率 0.3”所代表的价值,能够持续高效地工作,从而为你带来回报。









