← Back to Home

MoE Model Verification

Worker-Verifier model identity experiments using log probabilities and expert routing.

Download the Report PDF · 235 KB Download the Source Data CSV + JSON · ZIP · 195 KB All Papers & Experiments

CitationThese experiments, figures and data files are published by the TrueOpen.ai team. When citing or redistributing them, in whole or in part, state that the source is the TrueOpen.ai team and link to www.trueopen.ai. The same requirement is repeated in the download bundle's README, in CITATION.txt, and in the header of every CSV file.

Worker-Verifier Method

Worker Evidence

The worker performs normal decode generation and records the following evidence:

input_ids
output_ids
worker_selected_logprob[d]
worker_selected_rank[d]
worker_topk_logprobs[d]

Here, d is the output token depth. The worker generation stage can use greedy decoding or sampling. In the main experiments, we use:

temperature = 0.0
top_p = 1.0
top_k = 0
max_new_tokens = 128

Verifier Replay

The verifier does not regenerate text. Instead, it fixes the path submitted by the worker:

full_prompt_ids = input_ids + output_ids

It then uses vLLM prompt logprobs to perform full-prefill replay. For output token output_ids[d], the verifier alignment position is:

prompt_pos = len(input_ids) + d

Therefore, the comparison is between the model distributions produced by the worker and verifier on the exact same token path, rather than a text similarity comparison between two freely generated outputs.

Logprob Metrics

This paper mainly uses the following metrics:

Metric Meaning
abs_logprob_diff abs(worker_selected_logprob - verifier_selected_logprob)
p95/p99/p999 Percentiles of abs_logprob_diff
rank_delta_rate Fraction of selected tokens whose rank changes
topk_jaccard Jaccard overlap between worker/verifier top-k token sets
union_js Jensen-Shannon divergence over the top-k union
missing_selected_count Number of worker selected tokens not returned by the verifier logprobs

It is important to emphasize that these experiments compare selected/top-k logprobs exposed by vLLM, not full-vocabulary raw logits.

MoE Logprob Experiments

Qwen3.6-35B-A3B Setup

The MoE experiments use Qwen/Qwen3.6-35B-A3B and include two main datasets:

  1. A 300-sample experiment for detailed analysis of BF16 baseline spikes, FP8 right shift, and window-level decision metrics.
  2. A 5000-sample moe_1 experiment to confirm BF16/FP8 worker-verifier directionality at larger scale.

300-Sample MoE Results

run verifier quant mean p50 p95 p99 p999 max rank_delta_rate jaccard p05 union_js p99
BF16 original BF16 0.0591 0.000606 0.1432 0.4331 11.1895 24.1029 0.0251 0.7297 0.0582
BF16 replicate 0001 BF16 0.0540 0.000525 0.1196 0.3665 10.1542 25.4778 0.0224 0.7297 0.0530
BF16 replicate 0002 BF16 0.0572 0.000568 0.1362 0.4208 10.5622 25.5559 0.0237 0.7297 0.0557
BF16 replicate 0003 BF16 0.0622 0.000619 0.1423 0.4181 11.8944 24.1498 0.0246 0.7297 0.0636
FP8 verifier FP8 0.0848 0.001088 0.2278 0.6729 12.6798 27.5559 0.0364 0.6842 0.1165

From mean, p95, p99, rank_delta_rate, and union_js_p99, the FP8 verifier does show a statistical right shift relative to the BF16 verifier. However, the MoE same-model BF16 baseline already has an extreme heavy tail:

BF16 p50 approx. 5e-4
BF16 p99 approx. 0.36 - 0.43
BF16 p999 approx. 10 - 12
BF16 max approx. 24 - 26

In other words, most tokens have very small differences, but a small number of tokens can produce extremely large logprob differences. This makes it difficult for a MoE logprob verifier to form a clean hard decision boundary using single-token thresholds or simple percentiles.

MoE Spike Pattern

The four BF16 baselines show:

threshold BF16 token rate pattern
abs_diff > 1 0.53% - 0.62% 92.8% - 94.3% are isolated single-point runs
pooled BF16 p99=0.4082 0.89% - 1.07% about 90% of spike runs are single-point
pooled BF16 p999=11.123 0.086% - 0.115% 96.9% - 100% of spike runs are single-point

These spikes are not purely random noise. Using (sample_id, depth) as the location, among spike locations with abs_diff > 1:

condition ratio
Appears in at least 2 BF16 runs 65.1%
Appears in at least 3 BF16 runs 43.6%
Appears in all 4 BF16 runs 21.5%

This suggests that spikes are tied to specific tokens or contexts, likely related to MoE routing boundaries, decode/prefill computation path differences, or kernel scheduling. Regardless of the root cause, they destroy the clean decision boundary required by a logprob verifier.

Window-Level Statistics Help, But Do Not Fully Solve the Problem

Using window medians can reduce the BF16 tail:

run token p99 window=5 median p99 window=16 median p99
BF16 original 0.4331 0.1101 0.0513
BF16 0001 0.3665 0.0972 0.0437
BF16 0002 0.4208 0.1131 0.0540
BF16 0003 0.4181 0.1124 0.0537
FP8 0.6729 0.1685 0.0802

When using the pooled BF16 window p99 as the threshold:

window BF16 bad-rate range FP8 bad rate
3 0.79% - 1.08% 2.99%
5 0.78% - 1.13% 3.41%
16 0.65% - 1.17% 4.66%
32 0.50% - 1.22% 5.07%

This shows that window-level statistics can reveal the systematic FP8 shift. However, this remains a statistical separation rather than a clean and stable model identity boundary like the one observed for dense models. MoE logprobs provide useful evidence, but should not be used as the sole final identity verifier.

5000-Sample MoE Results

The large-scale moe_1 experiment contains 5000 prompts with the following input buckets:

32, 128, 512, 2048, 8192

Each bucket has 1000 prompts. Both worker and verifier run on 6000ws, with vLLM version 0.27.1 and logprobs/top-k set to 64.

worker evidence verifier runs rows mean p50 p95 p99 p999 max rank_rate union_js_p99
BF16 worker BF16 verifier 3 531030 0.0816 0.000656 0.1700 0.6349 14.6015 32.1399 0.0305 0.1252
BF16 worker FP8 verifier 1 531030 0.0873 0.000952 0.2298 0.7324 13.5771 29.3174 0.0371 0.1273
FP8 worker BF16 verifier 3 536996 0.0974 0.000725 0.2362 0.8344 15.4485 28.2228 0.0386 0.1565

These results reinforce the earlier conclusion: MoE logprobs can reveal an overall distributional difference between BF16 and FP8, but the same-model BF16 baseline already has large p99/p999/max values. As a result, FP8 and BF16 do not separate as cleanly as they do for dense models.

Routed Experts Experiments

MoE also has experiments comparing different GPUs, but the core evidence comes from routed_experts rather than the 5000-sample logprob overall results above. The route reports cover BF16/FP8 same-model and cross-model comparisons across 6000ws and H100, and are used to verify whether expert routing fingerprints remain distinguishable across GPUs.

Method

In addition to the output token distribution, a MoE model selects routed experts for each token at each MoE layer. When vLLM is enabled with:

--enable-return-routed-experts

it can return the expert routing result for each token/layer. The experiment compares:

decode-time routed_experts
vs
prefill-time routed_experts

and computes:

Metric Meaning
entry_mismatch_rate Order-sensitive mismatch for token/layer/top-k slots
token_layer_set_match_rate Whether the top-k expert set matches for each token/layer
token_match_rate Whether all layer/top-k routes of a token match
mean_topk_jaccard Average Jaccard similarity of routed expert top-k sets

Routed Experts Results

case same_model cross_model samples layers tokens entry_mismatch_rate token_layer_set_match_rate mean_topk_jaccard
6000_bf16_vs_bf16 1000 0 1000 all 123616 0.1919 0.7690 0.9430
6000_bf16_vs_h100_bf16 1000 0 1000 all 123616 0.1910 0.7700 0.9433
h100_bf16_vs_bf16 1000 0 1000 all 123921 0.1889 0.7722 0.9438
6000_fp8_vs_fp8 1000 0 1000 all 123695 0.2725 0.6701 0.9164
6000_fp8_vs_h100_fp8 1000 0 1000 all 123695 0.2730 0.6692 0.9163
h100_fp8_vs_fp8 1000 0 1000 all 124354 0.2658 0.6784 0.9188
6000_bf16_vs_fp8 0 1000 1000 all 123616 0.2922 0.6452 0.9097
6000_bf16_vs_h100_fp8 0 1000 1000 all 123616 0.2915 0.6462 0.9100
h100_bf16_vs_fp8 0 1000 1000 all 123921 0.2941 0.6426 0.9088
6000_fp8_vs_bf16 0 1000 1000 all 123695 0.2926 0.6446 0.9092
6000_fp8_vs_h100_bf16 0 1000 1000 all 123695 0.2928 0.6443 0.9091
h100_fp8_vs_bf16 0 1000 1000 all 124354 0.2932 0.6434 0.9088

The all-layer route results show that MoE routed_experts already covers same-model and cross-model comparisons across 6000ws/H100:

Therefore, routed experts can distinguish BF16 same-model from BF16/FP8 cross-model cases. FP8 same-model and cross-model are closer under all-layer metrics, but can be further separated using early-layer metrics.

Early-Layer Route Fingerprint

When observing only the first few layers, same-model and cross-model cases separate more clearly:

case layers entry_mismatch_rate token_layer_set_match_rate token_match_rate mean_topk_jaccard
6000_bf16_vs_fp8_layers_0 0 0.1134 0.8871 0.5912 0.9744
6000_bf16_vs_fp8_layers_0_1 0,1 0.1318 0.8621 0.3086 0.9685
6000_bf16_vs_fp8_layers_0_4 0-4 0.1694 0.8111 0.0292 0.9563
6000_fp8_vs_fp8_layers_0 0 0.0492 0.9504 0.8009 0.9890
6000_fp8_vs_fp8_layers_0_1 0,1 0.0764 0.9190 0.5085 0.9820
6000_fp8_vs_fp8_layers_0_4 0-4 0.1262 0.8592 0.0756 0.9680

At layer 0, FP8 same-model has an entry mismatch of 0.0492, while BF16/FP8 cross-model has 0.1134; token-layer set match also drops from 0.9504 to 0.8871. This shows that the early-layer routed_experts route can serve as a stronger structural fingerprint.

More importantly, layer 0 is not merely a reduced-layer approximation that happens to work; in the current data, it is better suited for MoE identity verification than all-layer aggregation. In all-layer metrics, FP8 same-model entry mismatch is about 0.266-0.273, while BF16/FP8 cross-model is about 0.292-0.294, a gap of only about 0.02. At layer 0, however, FP8 same-model is 0.0492 and BF16/FP8 cross-model is 0.1134, increasing the absolute gap to 0.0642, with a cross/same ratio of about 2.30x. The BF16 verifier layer-0 cross-GPU check shows the same trend: BF16 positives have single-sample means around 0.024-0.029, while FP8 negatives are around 0.115-0.117, producing a much clearer separation.

The cross-GPU random-5 threshold test further supports this conclusion. Using only layer 0 and aggregating entry mismatch over 5 randomly sampled prompts each time, the BF16 verifier with threshold 0.060 achieves a combined TPR of 1.000000 and a negative false pass rate of 0.000000. The FP8 verifier with threshold 0.080 achieves a TPR of 0.999453, while the negative false pass rate remains 0.000000. This shows that the layer-0 route fingerprint is not an artifact of a single report, but remains stable under 6000ws/H100 cross-GPU comparisons.

Why Layer 0 Outperforms All Layers

At first glance, using all MoE layers might appear to contain more information. However, the experiments show that all-layer aggregation mixes identity signal with path noise. There are three main reasons.

First, the routing input to later MoE layers has already been affected by earlier layer outputs. Even for the same model, decode-time versus prefill-time execution, small hardware/kernel numerical differences, batch composition, and similar factors can move some tokens across a router decision boundary in later layers. These later-layer mismatches raise the same-model baseline and increase the all-layer entry mismatch.

Second, averaging over all layers dilutes the most discriminative early-layer differences. Layer 0 acts directly on the embedding and original context representation, before multiple rounds of expert selection have propagated errors. It is therefore closer to an initial routing signature: same-model layer-0 routes are more stable, while BF16/FP8 or different-model router boundary differences are already visible.

Third, cross-layer token-level exact match is an overly strict metric. As the number of layers grows, a boundary flip in any single layer can reduce token_match_rate, quickly pushing all-layer token_match into a low-value region and reducing discriminative power. In contrast, layer-0 entry mismatch and token-layer set match preserve a larger dynamic range, making thresholds easier to set.

Therefore, for MoE routed_experts verifiers, we recommend using layer 0 as the primary criterion or a strong feature. All-layer route diff is better suited as an auxiliary diagnostic for understanding the source of routing drift, rather than as a replacement for the layer-0 identity fingerprint.

Why Routed Experts Are Better Suited for MoE

MoE output logprobs are affected by expert routing, batch composition, and decode/prefill path differences. Even when the model weights are identical, if some tokens lie near a routing boundary, the selected logprob can produce extreme spikes. Logprob is the final projection of the output distribution and cannot directly explain whether these spikes come from model differences, path differences, or routing-sensitive points.

routed_experts directly exposes a structural intermediate state of the MoE model:

input/context -> router -> selected experts

If two models, two quantization settings, or two execution paths differ in expert selection, this difference appears before the final logprob. Thus, routed_experts is a more natural verifier for MoE identity: it verifies the key internal decision of the MoE architecture, rather than only the resulting output probabilities.

Limitations

  1. The logprob experiments use selected/top-k logprobs exposed by vLLM, not full-vocabulary raw logits.
  2. The output length limit is mainly 128 tokens; long-output settings require separate calibration.
  3. The main Dense 32B experiment uses 6000ws worker evidence and does not cover every worker/verifier direction.
  4. MoE logprobs already fail to form a clean and robust decision boundary in the same-GPU setting, so cross-GPU logprob verification is not a key missing experiment required for the paper's conclusion. MoE cross-GPU stability should mainly be verified through routed_experts, especially the layer-0 route fingerprint.
  5. routed_experts experiments already cover 6000ws/H100 cross-GPU comparisons. For production deployment, the vLLM version, prefix cache, batching policy, and routed_experts return format should still be fixed or calibrated.
  6. This paper studies statistical identity verification, not a cryptographic proof.