Phase 4 — La ruta de datos de rebanadas de expertos (M1)

Un dispositivo débil descarga unos pocos expertos de 6 MB, no una capa de 1.4 GB — y el cómputo fragmentado iguala al monolítico hasta 3.6e-12.

Verificado · Qwen3.5-122B-A10B real

Una rebanada de experto es una copia de bytes — sin decuantización

256→8
rebanada en dim experto
~6.1
MB / experto (Q4+Q6)
206 MB
descarga 2 capas × 16 exp.
200
HTTP, GGUF válido

Los tensores de expertos MoE apilan todos los expertos a lo largo de la dimensión ggml más externa, así que el lector expone (n_expert, rows, row_bytes) de bytes cuantizados crudos. El experto *e* es una losa contigua alineada a bloques de cuantización — la rebanada es literalmente data[a:b], sin decuantización ni re-empaquetado.

write_expert_shard_gguf — la ida y vuelta verificada.

sliced = tensor.data[a:b]              # outermost axis = expert
writer.add_tensor(name, sliced, raw_dtype=tensor.tensor_type)
# router (ffn_gate_inp) & shared expert stay on the backbone → excluded
GET /api/proxy/models/{m}/expert-shard?layers=0:2&experts=0:16  # node-token authed
A laser slicing one expert slab into a mini-GGUF beside a perfectly level balance scale
El oráculo numérico

dispatch + combine == monolítico, exactamente

Con expertos reales de layer-0 del 122B (referencia decuantizada), dividir los expertos en 4 shards, computar cada uno por separado y combinar iguala a la FFN MoE monolítica: el sharding es un reagrupamiento exacto de la misma suma ponderada, no una aproximación.

3.6e-12
max|mono − sharded|
1.2e-07
error relativo
True
allclose(1e-5)
28/256
expertos tocados
Worker C++, verificado en hardware

linkcpp-expert-worker reproduce el oráculo en ROCm

  • ggml/gguf puro (sin libllama): carga la rebanada en un backend de GPU y corre mul_mat_id(up/gate) → swiglu → mul_mat_id(down).
  • Compilación + ejecución ROCm en un MI250: 122B layer-0, expertos [0,8), 4 tokens.
  • Cosine 0.99995 vs el oráculo, allclose(1e-3) = True, max|Δ| = 7.9e-7 — este residuo es en sí el primer caso medido de equivalencia entre backends (ROCm vs numpy).
  • La misma ruta de código cubre CUDA/Metal/Vulkan/CPU (mul_mat_id/swiglu son ggml de serie; CUDA tiene un kernel MoE dedicado).

La pieza más difícil y arriesgada — el kernel del worker en dispositivo — quedó verificada aquí. Lo que faltaba era la orquestación backbone↔worker; el worker es una función pura probada que consume estas rebanadas.