跳转至

Kimi K2.6 Bootstrap

moonshotai/Kimi-K2.6 在治理模型中,poc_params(自 v0.2.12 起)。目前未提供服务:/v1/epochs/current/participants 中没有主机列出它。以下时间线是原始引导记录(最早在纪元 251 可用)。有关 MiniMax/DeepSeek 部署默认值,请参阅 Host Quickstart

本文档解释了模型组如何变得有资格以及参与模式的工作方式。

治理列表不等于资格

以下时间线中提及 Qwen235B 的步骤是历史性的(原始 Kimi 引导)。Qwen/Qwen3-235B-A22B-Instruct-2507-FP8 已在 提案 78 中于纪元 308 被移除。请勿部署它。

poc_params 中且无投票权的模型是下一个 PoC 的引导候选者。切换 node-config 不会恢复共识权重。资格需要 V_min 的已建立成员和 W_threshold(从 poc_params 读取实时值)。预资格仅为建议性质——足够多的主机仍可通过提交该模型的 PoC 而获得资格——但单个主机是不够的。

不要假设您必须 refuse 一个没有资格的模型。常规的错过/拒绝惩罚仅适用于有资格的组。在引导路径上,未匹配的主机被视为 NONE;refuse 不是引导参与模式。

Note

引导可能需要多个纪元,具体取决于有多少参与者准备就绪。在激活之前,如果参与者明确提交其选择且将要部署的主机提交 PoCIntent,则不会发生权重减少。

时间线

在块 3873996 之前,所有参与者必须提交:

- `PoCIntent` - 如果他们将部署 `Kimi-K2.6`。主机应保持使用 `Qwen235B` 部署的节点,并在块 `3873996` 评估后才切换
- `PoCDelegation` / `PoCRefusal` - 如果他们**不**将部署 `Kimi-K2.6`

在块 3873996,链运行预评估以检查是否应基于 PoCIntent / PoCDelegation 尝试激活模型

- 如果模型成为预资格 => 提交了 `PoCIntent` 的主机应将其模型节点切换到 `Kimi-K2.6`(在此 500 块窗口内无 CPoC)
- 如果模型未成为预资格 => 提交了 `PoCIntent` 的主机应将其节点保持在 `Qwen235B`

在块 3874496,PoC 开始

可能的场景

新模型的引导可能遵循以下主要场景:

  1. 该模型在块 3873996 未通过预评估,未获得资格

  2. 所有提交 PoCIntent 的人都保留其全部权重(无惩罚)

  3. 所有提交 PoCDelegation / PoCRefusal 的人都保留其全部权重(无惩罚)
  4. 所有未提交者将损失15%的权重

=> 明确发送一笔交易以表明您的预期行为非常重要

  1. 模型在块 3873996 通过预评估,但在 PoC 中未获得资格

  2. 所有参与 PoC 的人都保留其从 Qwen235 起的全部权重(无惩罚)

  3. 所有提交 PoCDelegation / PoCRefusal 的人都保留其全部权重(无惩罚)
  4. 所有未提交者将损失15%的权重
  5. 所有提交 PoCIntent 但未参与的人将损失15%的权重

如果模型通过两项检查,惩罚将遵循文档中描述的常规情况。

即将部署 Kimi-K2.6 的主机说明

向链发送 PoCIntent

export NODE=https://node3.gonka.ai/
./inferenced tx inference declare-poc-intent moonshotai/Kimi-K2.6 \
  --from node-2 \
  --node "$NODE" \
  --chain-id gonka-mainnet \
  --keyring-backend file \
  --gas auto \
  --gas-adjustment 1.3 \
  -y

检查您的设置,确保 Kimi-K2.6 权重已下载,且您能成功部署模型

  1. 等待块 3873996+,检查模型是否成为预合格:
NODE=https://node3.gonka.ai
MODEL='moonshotai/Kimi-K2.6'

HEIGHT=$(curl -sG "$NODE/chain-rpc/block_search" \
  --data-urlencode "query=\"bootstrap_model_preeligibility.model_id='$MODEL'\"" \
  | jq -r '[.result.blocks[].block.header.height|tonumber]|max')

echo "Latest snapshot at height $HEIGHT"

curl -s "$NODE/chain-rpc/block_results?height=$HEIGHT" \
  | jq --arg m "$MODEL" '
      .result.finalize_block_events[]
      | select(.type=="bootstrap_model_preeligibility")
      | (.attributes | from_entries) as $a
      | select($a.model_id==$m)
      | $a'

结果将通过所有渠道发送。

如需,将模型切换为 Kimi-K2.6

在 4xB200 / 8xB200 上部署 Kimi-K2.6 的示例命令:

curl -X POST http://localhost:9200/admin/v1/nodes \
     -H "Content-Type: application/json" \
     -d '{
       "id": "<NODE_ID>",
       "host": "<NODE_IP>",
       "inference_port": 5050,
       "poc_port": 8080,
       "max_concurrent": 500,
       "models": {
         "moonshotai/Kimi-K2.6": {
           "args": [
             "--tensor-parallel-size", "4",
             "--enable-expert-parallel",
             "--trust-remote-code",
             "--mm-encoder-tp-mode", "data",
             "--tool-call-parser", "kimi_k2",
             "--reasoning-parser", "kimi_k2",
             "--attention-backend", "FLASHINFER_MLA",
             "--disable-custom-all-reduce",
             "--gpu-memory-utilization", "0.95",
             "--max-num-seqs", "128",
             "--max-model-len", "240000"
           ]
         }
       }
     }'

验证您的部署

gonka 仓库 提供了一个代理技能 mlnode-validate,用于根据预计算的诚实 PoC 向量验证已部署的 ML 节点。对于 Kimi K2.6,提交的黄金参考是 mlnode/packages/benchmarks/scripts/poc_validation/artifacts/moonshotai-kimi-k2.6.json(200 个向量;记录于 4×B200)。参见 验证 ML 节点部署skills/mlnode-validate/SKILL.md

不部署 Kimi-K2.6 的主机说明

检查您是否信任任何将部署 Kimi K2.6 / 发送 PoCIntent 的主机

当前意图:

import time
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

NODE = "https://node3.gonka.ai"
MODEL = "moonshotai/Kimi-K2.6"
TIMEOUT = 60
DELAY = 0.15

def session():
    s = requests.Session()
    # Retry transient 5xx (node3 returns 503 for some poc_delegation lookups
    # under load) so a single hiccup does not silently drop a participant
    # from the result.
    retry = Retry(
        total=5,
        backoff_factor=0.5,
        status_forcelist=(502, 503, 504),
        allowed_methods=("GET",),
    )
    s.mount("https://", HTTPAdapter(max_retries=retry))
    s.headers["Connection"] = "close"
    return s

def weight(p):
    # weight may be 0, missing, or literally null — all mean "no voting weight".
    return int(p.get("weight") or 0)

def get_json(s, url):
    r = s.get(url, timeout=TIMEOUT)
    r.raise_for_status()
    return r.json()

s = session()

participants = get_json(s, f"{NODE}/v1/epochs/current/participants")[
    "active_participants"
]["participants"]

intents = []
with_kimi_model = []
skipped = []  # participants whose poc_delegation lookup failed after retries

for p in participants:
    addr = p["index"]
    w = weight(p)
    if MODEL in (p.get("models") or []):
        with_kimi_model.append((addr, w))

    try:
        resp = get_json(
            s,
            f"{NODE}/chain-api/productscience/inference/inference/poc_delegation/{addr}",
        )
    except requests.RequestException as e:
        skipped.append((addr, w, str(e)))
        time.sleep(DELAY)
        continue

    for i in resp.get("intents") or []:
        if i.get("model_id") == MODEL:
            intents.append((addr, w))
    time.sleep(DELAY)

total = sum(weight(p) for p in participants)
intent_weight = sum(w for _, w in intents)

nonzero_intents = [(a, w) for a, w in intents if w > 0]
zero_intents = [(a, w) for a, w in intents if w == 0]

print(f"Active participants: {len(participants)}")
print(f"With {MODEL} in models[]: {len(with_kimi_model)} (not same as intent)")
print()
print("Intent from (PoCDirectIntent on chain):")
for addr, w in nonzero_intents:
    print(f"  {addr} : {w}")
if zero_intents:
    print()
    print("Zero-weight intents (count toward V_min, contribute 0 to W_threshold):")
    for addr, _ in zero_intents:
        print(f"  {addr} : 0")
print()
print(f"Intent weight: {intent_weight} / {total}")
if total:
    print(f"Intent share: {100.0 * intent_weight / total:.2f}%")
if skipped:
    print()
    print(f"Skipped {len(skipped)} participants after retries (intent may be undercounted):")
    for addr, w, err in skipped:
        print(f"  {addr} (weight={w}): {err}")

发送委托或拒绝

委托:

export NODE=https://node3.gonka.ai/chain-rpc/
./inferenced tx inference set-poc-delegation moonshotai/Kimi-K2.6 <DELEGATEE> \
  --from gonka-account-key \
  --node "$NODE" \
  --chain-id gonka-mainnet \
  --keyring-backend file \
  --gas auto \
  --gas-adjustment 1.3 \
  -y

拒绝:

export NODE=https://node3.gonka.ai/chain-rpc/
./inferenced tx inference refuse-poc-delegation moonshotai/Kimi-K2.6 \
  --from gonka-account-key \
  --node "$NODE" \
  --chain-id gonka-mainnet \
  --keyring-backend file \
  --gas auto \
  --gas-adjustment 1.3 \
  -y