File size: 3,946 Bytes
b516e0a
 
 
 
 
 
 
 
 
 
 
 
 
 
3a8b5d7
 
b516e0a
3a8b5d7
 
 
b516e0a
 
 
3a8b5d7
 
b516e0a
 
3a8b5d7
 
 
b516e0a
 
 
3a8b5d7
 
b516e0a
 
 
 
 
3a8b5d7
b516e0a
3a8b5d7
b516e0a
3a8b5d7
 
 
b516e0a
3a8b5d7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b516e0a
 
 
3a8b5d7
 
b516e0a
 
 
 
 
3a8b5d7
 
 
 
b516e0a
 
3a8b5d7
 
 
b516e0a
3a8b5d7
 
b516e0a
 
 
 
 
 
 
 
 
 
 
3a8b5d7
 
b516e0a
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
---
license: gemma
license_link: https://ai.google.dev/gemma/terms
base_model: google/gemma-3n-E2B-it
tags:
  - gguf
  - llama.cpp
  - on-device
  - android
library_name: llama.cpp
---

# Gemma LITE (E2B) — a smaller dictionary, the same mind

A **Model Derivative** of Google's Gemma 3n E2B, made for phones that cannot hold
the original in memory.

**Nothing about the model's reasoning was changed.** All 35 transformer blocks are
byte-for-byte the quantisation they started as. The only modification is to one
tensor.

## What was modified

`per_layer_token_embd.weight` — requantised from **q6_K to q4_0**, matching the
precision of every layer that does the actual reasoning.

That single tensor is **57% of the original file**: 1,837 MiB of a 3,179 MiB
model, shaped `[8960, 262144]`. It is a *lookup table* — one row of about 7 KB is
read per token — and it was stored at **higher precision than the layers doing the
thinking**, every one of which is q4_0.

```
llama-quantize --allow-requantize \
  --tensor-type per_layer_token_embd=q4_0 \
  gemma-3n-E2B-it-q4_0.gguf gemma-lite-e2b-q4.gguf Q4_0
```

| | file | `per_layer_token_embd` |
|---|---|---|
| source (E2B q4_0) | 3.12 GiB | 1,837 MiB (q6_K) |
| **LITE** | **2.56 GiB** | 1,270 MiB (q4_0) |

## ⚠️ A q2_K version of this model was published here and has been withdrawn

An earlier build took the same tensor down to **q2_K**, reaching 2.04 GiB. It
passed a single-turn audition and **failed badly over a real conversation.** It
was replaced on 2026-08-12 and should not be used.

Over 30 turns, q2_K against this q4_0 build:

| | q2_K (withdrawn) | **q4_0 (this file)** |
|---|---|---|
| repetition, second half (4-gram overlap) | 0.175, peaking **0.43** | **0.000** |
| replies containing malformed control tokens | **17 of 30** | 3 of 30 |
| corrupted words (`It't what it is`) | throughout | none |
| latency, second half | 5,600 ms | 3,963 ms |

q2_K collapsed into a verbal tic — *"That's what it is"* in nearly every reply
after turn 12 — emitted malformed control tokens such as `<end_of_of_turn>` into
visible output, and confidently misremembered the conversation it was in.

☠️ **The lesson, if you are quantising embeddings yourself: a single-turn test
cannot see this.** The damage only appears once enough context has to be held at
once. Test over a long conversation, not one reply.

## Measured

Galaxy S22 Ultra (8 GB): the **unmodified** model was killed by Android's
low-memory killer eleven times and never finished loading.

ROG Phone 8 Pro, llama.cpp with OpenCL, 8192 context:

| | |
|---|---|
| unevictable (anonymous) memory | **~178 MiB** |
| GPU / shmem | ~80 MiB |
| prompt eval | **211 tok/s** |
| generation | **10.7 tok/s** |

A ~3,800-token system prompt prefills in about **18 seconds**.

☠️ The GPU path is not an optimisation — it is why this fits. On CPU the same
model holds **1,642 MiB** of unevictable memory, roughly 9× more, which is the
shape of failure that killed the unmodified model on 8 GB.

## Quality

☠️ **No perplexity or standardised benchmark has been run.** What exists is a
30-turn conversational soak and a 17-prompt content probe, both single-sample. If
you need measured quality, measure it.

Note the numbers above are for this file at 4,300 tokens of context; behaviour at
the full 8,192 has not been characterised.

## What it cannot do

The source GGUF carries **no vision or audio encoder tensors**, so this is a
**text-only** model. Gemma 3n's image and audio input paths are not present.

## Licence

Gemma 3n is provided under and subject to the **Gemma Terms of Use**:
https://ai.google.dev/gemma/terms

This is a **modified** version. The modification is described above and is limited
to the requantisation of a single tensor. The Gemma Terms, including the
Prohibited Use Policy, apply to this derivative and to anything derived from it.

Base model: `google/gemma-3n-E2B-it`.