parkingsoman/gemma-4-e2b-it-onnx-webgpu
032
Gemma 4 E2B IT — ONNX for WebGPU in the browser
This is the "Small" model package behind Axiya. Axiya turns scanned PDFs into accessible HTML. The model runs inside Chrome, on the user's own GPU. No document leaves the computer.
The weights come from Google's Gemma 4 E2B IT QAT release, repacked for ONNX Runtime Web. The graphs need the Axiya onnxruntime-web fork (op SplitMaskedSoftmax, fp32 accumulation). The download is about 3.1 GB.
The build report below lists every input with its revision or sha256.
Gemma 4 E2B Q4 ONNX package (browser, ORT Web)
License: Apache 2.0 (Gemma 4 terms: https://ai.google.dev/gemma/docs/gemma4license). The graphs are our own export with MIT tools (tools/gemma12b/mobius_export.py); the weights are Google's.
Rebuild: browser-prototype/tools/gemma12b/README.md in the BlinkFix repo.
Sources
Graphs
Files
Build log
{
"graph_dir": "BlinkFix-models/mobius-e2b/q4",
"graph_sha256": {
"decoder/model.onnx": "9681ede78ae69b4a16bef2dc1a0833a69465545136ed6977436013f442c511f1",
"embedding/model.onnx": "cc9bb5218d38455681b90dd384038af072599245fab94028d1a1acbd8c727270",
"vision_encoder/model.onnx": "0f2c5c42a65723d9dc56c224e4cd599079dc0fe09b3b14efad617145099a841e"
},
"qk_precision": "fp32",
"decoder": {
"causal_proof": {
"v_decoder.model.Unsqueeze_110": {
"causal": true,
"pad_blocked": true,
"window": null,
"min_blocked_dist": null,
"max_allowed_dist": 1025
},
"v_decoder.model.Unsqueeze_96": {
"causal": true,
"pad_blocked": true,
"window": 512,
"min_blocked_dist": 512,
"max_allowed_dist": 511
}
},
"attention": [
{
"name": "decoder/model/layers.0/self_attn/Attention_node_137",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"past_key": "past_key_values.0.key",
"past_value": "past_key_values.0.value",
"present_key": "present.0.key",
"present_value": "present.0.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.1/self_attn/Attention_node_188",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"past_key": "past_key_values.1.key",
"past_value": "past_key_values.1.value",
"present_key": "present.1.key",
"present_value": "present.1.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.2/self_attn/Attention_node_239",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"past_key": "past_key_values.2.key",
"past_value": "past_key_values.2.value",
"present_key": "present.2.key",
"present_value": "present.2.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.3/self_attn/Attention_node_290",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"past_key": "past_key_values.3.key",
"past_value": "past_key_values.3.value",
"present_key": "present.3.key",
"present_value": "present.3.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.4/self_attn/Attention_node_341",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 512,
"scale": 1.0,
"past_key": "past_key_values.4.key",
"past_value": "past_key_values.4.value",
"present_key": "present.4.key",
"present_value": "present.4.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.5/self_attn/Attention_node_392",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"past_key": "past_key_values.5.key",
"past_value": "past_key_values.5.value",
"present_key": "present.5.key",
"present_value": "present.5.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.6/self_attn/Attention_node_443",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"past_key": "past_key_values.6.key",
"past_value": "past_key_values.6.value",
"present_key": "present.6.key",
"present_value": "present.6.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.7/self_attn/Attention_node_494",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"past_key": "past_key_values.7.key",
"past_value": "past_key_values.7.value",
"present_key": "present.7.key",
"present_value": "present.7.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.8/self_attn/Attention_node_545",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"past_key": "past_key_values.8.key",
"past_value": "past_key_values.8.value",
"present_key": "present.8.key",
"present_value": "present.8.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.9/self_attn/Attention_node_596",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 512,
"scale": 1.0,
"past_key": "past_key_values.9.key",
"past_value": "past_key_values.9.value",
"present_key": "present.9.key",
"present_value": "present.9.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.10/self_attn/Attention_node_647",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"past_key": "past_key_values.10.key",
"past_value": "past_key_values.10.value",
"present_key": "present.10.key",
"present_value": "present.10.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.11/self_attn/Attention_node_698",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"past_key": "past_key_values.11.key",
"past_value": "past_key_values.11.value",
"present_key": "present.11.key",
"present_value": "present.11.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.12/self_attn/Attention_node_749",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"past_key": "past_key_values.12.key",
"past_value": "past_key_values.12.value",
"present_key": "present.12.key",
"present_value": "present.12.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.13/self_attn/Attention_node_800",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"past_key": "past_key_values.13.key",
"past_value": "past_key_values.13.value",
"present_key": "present.13.key",
"present_value": "present.13.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.14/self_attn/Attention_node_851",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 512,
"scale": 1.0,
"past_key": "past_key_values.14.key",
"past_value": "past_key_values.14.value",
"present_key": "present.14.key",
"present_value": "present.14.value",
"is_causal": 1
},
{
"name": "decoder/model/layers.15/self_attn/Attention_node_887",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.16/self_attn/Attention_node_923",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.17/self_attn/Attention_node_959",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.18/self_attn/Attention_node_995",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.19/self_attn/Attention_node_1031",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 512,
"scale": 1.0,
"shared_from": "decoder/model/layers.14/self_attn/Attention_node_851",
"is_causal": 1
},
{
"name": "decoder/model/layers.20/self_attn/Attention_node_1067",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.21/self_attn/Attention_node_1103",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.22/self_attn/Attention_node_1139",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.23/self_attn/Attention_node_1175",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.24/self_attn/Attention_node_1211",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 512,
"scale": 1.0,
"shared_from": "decoder/model/layers.14/self_attn/Attention_node_851",
"is_causal": 1
},
{
"name": "decoder/model/layers.25/self_attn/Attention_node_1247",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.26/self_attn/Attention_node_1283",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.27/self_attn/Attention_node_1319",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.28/self_attn/Attention_node_1355",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.29/self_attn/Attention_node_1391",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 512,
"scale": 1.0,
"shared_from": "decoder/model/layers.14/self_attn/Attention_node_851",
"is_causal": 1
},
{
"name": "decoder/model/layers.30/self_attn/Attention_node_1427",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.31/self_attn/Attention_node_1463",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.32/self_attn/Attention_node_1499",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.33/self_attn/Attention_node_1535",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 256,
"scale": 1.0,
"shared_from": "decoder/model/layers.13/self_attn/Attention_node_800",
"is_causal": 1
},
{
"name": "decoder/model/layers.34/self_attn/Attention_node_1571",
"q_heads": 8,
"kv_heads": 1,
"head_dim": 512,
"scale": 1.0,
"shared_from": "decoder/model/layers.14/self_attn/Attention_node_851",
"is_causal": 1
}
],
"kv_layout": "split",
"or_replaced": 0,
"mask_chain_on_cpu": [],
"mask_gate_no_bool_broadcast": [
"decoder/model/Where_node_94",
"decoder/model/Where_node_108"
],
"split_softmax_fused": 35,
"sliding_kv_trim": {
"sliding_layers": 28,
"mask_users": {
"SplitMaskedSoftmax": 28
},
"replaced_tile": "v_decoder.model.Unsqueeze_96/tile8",
"mask_source": "v_decoder.model.Unsqueeze_96/f32"
},
"zero_points_dropped": 276,
"sliced_hidden": "v_decoder.model.layers.34.Mul_1595",
"equal": [],
"table_bits": 4,
"decoder_files": [
"decoder.onnx_data"
],
"decoder_seconds": 1.9,
"seconds": 9.4
},
"embed": {
"ple_rows_input": {
"table_removed": "embedding.embed_tokens_per_layer.weight",
"input": "ple_rows",
"width": 8960,
"scale": 16.0,
"replaced": [
"embedding/embed_tokens_per_layer/Gather_node_47",
"embedding/embed_tokens_per_layer/Mul_node_48"
]
},
"mask_chain_on_cpu": [
"embedding/Cast_node_5"
],
"embed_equal": [
{
"node": "embedding/Equal_node_3",
"inputs": [
"input_ids",
"v_embedding.Constant_2"
],
"upstream_graph_inputs": [
"input_ids"
],
"upstream_ops": [
"Constant"
],
"action": "left as is"
}
],
"ple_projection": {
"source": "google/gemma-4-E2B-it-qat-q4_0-unquantized@6befbaca7398925921802abd1f277b495b78b738 model.language_model.per_layer_model_projection.weight",
"bf16_sha256": "bf07beb16867b9e3ea03cac3af1650dfdd5448bbde999f8265b235cea5205e26",
"scale": 53.65,
"dtype": "float16 (bf16 x scale, rounded once)"
},
"embed_files": [
"embed.onnx_data"
],
"seconds": 7.2
},
"vision": {
"vision_files": [
"vision.onnx_data"
],
"vision_mmproj_tensors": 659,
"vision_inline_checked": 480,
"vision_layers": 16,
"vision_dtype": [
"float16",
"float32"
],
"seconds": 0.3
},
"ple": {
"ple": {
"files": [
"ple.q4_0_0.bin"
],
"bytes": 1321205760,
"rows": 262144
},
"seconds": 9.7
},
"shared_embed": {
"table_sha256": {
"decoder.lm_head.weight_t_Q4": "d944107936c0be4ca7a6fe81ea2d88845499dda208a89434efc966e1314a74ba",
"decoder.lm_head.weight_t_scales": "57748db985c30e8c5a448228ab05311f7144b4cc715468fef3d36d55b93e3b78"
},
"embed_nodes": 27,
"added_initializers": [
"decoder.lm_head.weight_t_scales.gather",
"const_39.191835884530846_f16",
"g12_embed/const_1d_1",
"const_0.02551551815399144_f16",
"const_0.7071067811865476_f16",
"g12_f32_16p0",
"v_embedding.Unsqueeze_14",
"embedding.per_layer_model_projection.weight_t",
"embedding.per_layer_projection_norm.weight",
"g12_embed/rows_shape"
],
"renamed": {
"const_1d_1": "g12_embed/const_1d_1"
},
"lm_scales_dims": [
12582912
],
"gather_scales_dims": [
262144,
48,
1
],
"gather_scales_external": {
"location": "decoder.onnx_data",
"offset": "1275183104",
"length": "25165824"
},
"table_bits": 4,
"new_inputs": [
"input_ids",
"image_features",
"ple_rows"
],
"external_kept": [
"embedding.per_layer_model_projection.weight_t"
],
"moved_to_decoder_data": [
{
"name": "embedding.per_layer_model_projection.weight_t",
"from": "embed.onnx_data",
"to": "decoder.onnx_data",
"offset": 1300348928,
"length": 27525120
}
],
"lookup_check": {
"shape": [
1,
246,
1536
],
"bit_identical": true,
"tokens": 246,
"per_output": {
"inputs_embeds": true,
"per_layer_inputs": true
}
}
}
}