AtomicChat/NVIDIA-Nemotron-3.5-Bolt-E4B-Uncensored-GGUF

来源:🤗text-generationopenmdw-1.112 GBGGUF✓ 3 个校验和2 天前更新
🌱 0 磁力链接

How to Run NVIDIA Nemotron 3.5 Bolt E4B Without Refusals Locally

NVIDIA's refusal behaviour projected out of the released weights, baked into Atomic Dynamic GGUF builds and shipped as a 3.5 MB LoRA, measured against the original.

  • On held-out JailbreakBench prompts refusals fall from 93.8% to 1.2%, on Russian red-teaming prompts from 76% to 0%, on the safe XSTest prompts from 9.2% to 0.4%, and with thinking on from 29 of 30 to none. MMLU: 68.50% before, 67.85% after (2000 questions, McNemar p = 0.21). Tool calls and long context are unaffected.
  • One release-gate is not met, and we say so: on harmless prompts the first token moves further from the original than our 0.10 limit (KL 0.141). On this model even a random direction edited the same way moves neutral text noticeably (limitations).
  • Gemma 4 normalises every write into the residual stream with its own weights before adding it, so the edit is computed through those norms: each matrix stops writing the refusal direction as it lands in the stream, not before the norm.
  • Built on the same weights as our Nemotron 3.5 Bolt E4B quants; the LoRA loads on top of any of those files.

The builds

Build On disk Mean KLD Same top-1
AD-Q6_K 7.38 GB 0.163 87.14%
AD-Q4_K_M 5.06 GB 0.241 85.28%
LoRA, on any of our quants 3.5 MB 0.159 on BF16 -

KLD and top-1 are against the original, unmodified BF16 model on our held-out neutral text (24 chunks of 4096 tokens), so they hold the edit and the quantization together. The edit alone, on the BF16 weights, is 0.159; the plain AD-Q6_K of the original model is 0.026 and AD-Q4_K_M 0.091 on the same text, so at AD-Q6_K almost all of the distance is the edit itself.

The baked files themselves, thinking off, on the held-out prompts: each refused 1 of the 81 English, none of the 100 Russian and 1 of the 250 XSTest prompts, with no empty or degenerate replies. Thinking on was checked on the edit (step 5), not on the baked files.

The LoRA. NVIDIA-Nemotron-3.5-Bolt-E4B-Uncensored-LoRA.gguf is the same edit as a rank-1 adapter (126 matrices, 3.5 MB). It is built for scale 1.25, so load it with --lora-scaled, not --lora (which applies 1.0):

llama-server -m NVIDIA-Nemotron-3.5-Bolt-E4B-AD-Q4_K_M.gguf \
  --lora-scaled NVIDIA-Nemotron-3.5-Bolt-E4B-Uncensored-LoRA.gguf 1.25 \
  -ngl 99 -c 32768 --jinja

Every number in this card for the edit itself was measured with the adapter on the BF16 weights; on a quantized base it was not measured separately.

Running it

hf download AtomicChat/NVIDIA-Nemotron-3.5-Bolt-E4B-Uncensored-GGUF \
  --include "NVIDIA-Nemotron-3.5-Bolt-E4B-Uncensored-AD-Q6_K/*" --local-dir .
llama-server -m NVIDIA-Nemotron-3.5-Bolt-E4B-Uncensored-AD-Q6_K/NVIDIA-Nemotron-3.5-Bolt-E4B-Uncensored-AD-Q6_K-00001-of-00001.gguf \
  -ngl 99 -c 32768 --jinja --temp 1.0 --top-p 0.95

The chat template is inside every file; thinking is off unless you pass --chat-template-kwargs '{"enable_thinking": true}'. Upstream llama.cpp with gemma4 support runs them; no patch is needed. For images and audio, use the projector from the original quants (the edit does not touch it); we did not test them on these files.

How we did it

Bolt E4B is NVIDIA's post-train of Gemma-4-E4B-it: 42 blocks, hidden size 2560, per-layer embeddings, and every block writing into the residual stream three times. The usual abliteration recipes assume a plain transformer and miss two of those writes and the norms around all three.

1. Refusal is a direction

A chat model decides to refuse before it writes the first word, and that decision shows up as one direction in its residual stream (Arditi et al., 2024). Stop the weights from writing along that direction and the model stops refusing.

2. Finding it

  • Prompts. 416 harmful and 416 harmless English prompts (harmful_behaviors, harmless_alpaca), 128 and 128 Russian ones (Aya red-teaming, Russian Alpaca), each in the model's own chat template, thinking off. Validation and test prompts are separate sets and never reach this step.
  • Direction. At each depth: mean over harmful prompts minus mean over harmless ones, English and Russian pooled, with the component along the harmless mean removed (the naive difference makes models refuse harmless look-alikes).
  • Depth. How well the direction separates the two sets and how close the English and Russian directions are:
Input of block AUROC, EN d, EN AUROC, RU d, RU cos(EN, RU)
12 1.000 5.06 0.988 3.21 0.56
18 1.000 7.86 0.993 3.70 0.90
21 1.000 8.47 0.986 3.42 0.87
27 0.998 9.44 0.993 3.64 0.89
32 0.997 8.77 0.986 3.23 0.83
42 (output) 0.999 7.90 0.907 1.99 0.39

We took block 32, three quarters of the depth, as on our other releases: one direction for both languages, separation near its peak. Block 21 separates as well but its edit left 68% of the English validation prompts refused.

3. Where to cut, through the norms

Each Gemma 4 block writes three times: attention through attn_output, the FFN through ffn_down, and the per-layer path through its projection proj (each token's per-layer embedding, gated, 256 wide, back to 2560). Every one of the three passes its own RMSNorm with a learned weight g before it is added to the stream. Removing r from a matrix's output is not enough there: the norm multiplies each coordinate by its weight, and the direction comes back. So for each matrix we remove r ⊙ g (normalised) instead: then g ⊙ y has no component along r, and the norm's scalar divisor cannot add one. 126 matrices (3 × 42); the embeddings and the head are left alone.

Measured with the adapter at scale 1.0 on a text the edit never saw: what each family still writes along r, as a share of its output, is 0.00023 (attention), 0.00021 (FFN) and 0.00019 (per-layer path), against 0.001 as our limit.

4. The edit

For every one of the 126 matrices:

W' = W - s · r' r'ᵀ W        r' = (r ⊙ g) / |r ⊙ g|

screened as a rank-1 adapter on the BF16 weights:

Block 32, scale Refused, validation EN / RU First-token KL, harmless KLD, neutral text MMLU change
1.25 1.0% / 0% 0.141 0.159 -0.65 pp (p = 0.21)
1.5 1.0% / 0% 0.179 0.215 -0.70 pp (p = 0.23)
1.75 0% / 0% 0.225 0.290 -1.40 pp (p = 0.021)
Block 21, 1.25 68.3% / 39.0% 0.217 0.610 +0.25 pp
Random direction, 1.25 (refuses as before) 0.017 0.125 -1.20 pp (p = 0.001)

1.25 is the smallest scale that clears both languages; every larger one moves the model further and costs MMLU. The random direction, edited through the same norms at the same scale, leaves the refusals as they were, so the effect comes from the direction.

5. Checks before release

The numbers in this card come from test prompts that played no part in any choice: 81 JailbreakBench behaviours, 100 Russian red-teaming prompts and the 250 safe XSTest prompts. The thresholds, and where this edit stands:

Check Limit This edit
Refused per language (EN / RU) at most 3% 1.2% / 0%
XSTest refusals over the original's at most +1 pp -8.8 pp
Empty or looping replies at most 1% 0%
First-token KL on harmless prompts at most 0.10 0.141, not met
KLD on neutral text over the original's at most 0.05, or twice the random control 0.159 (control 0.125)
MMLU, 2000 questions no significant drop over 1.5 pp -0.65 pp, p = 0.21
Thinking on, 30 harmful prompts, 3072 tokens at most 1 refused 0
Thinking on, harmless prompts: unclosed or looping not above the original 0 and 0
Tool calls 20 of 20 valid 20 of 20
Needle at 30k tokens, three depths 3 of 3 3 of 3

6. Baking and quantizing

The edit is applied to the BF16 weights in f32 and rounded to BF16 once. After rounding, every one of the 126 matrices keeps a quarter of its write along r' (the ideal 0.25) within 0.0011. The edit moved the importance matrix (cosine below 0.999 on 300 chunks), so it was collected again on the baked weights, over our nemotron-bolt-e4b corpus, and the baked BF16 was quantized with the same Atomic Dynamic layouts as those quants.

What changed, and what did not

Original against this edit on the released weights (BF16, the edit applied as an adapter), on the test prompts of step 5.

Original This edit Random direction, same size
JailbreakBench harmful behaviours (81), refused 93.8% 1.2% 93.8%
Russian red-teaming prompts (100, aya), refused 76.0% 0.0% 75.0%
XSTest safe prompts (250), refused 9.2% 0.4% 9.2%
With thinking (30 prompts, 3072 tokens), refused 29 of 30 0 of 30 -
Thinking left unclosed at 3072 tokens 0 of 30 0 of 30 -
MMLU, 2000 questions 68.50% 67.85% (McNemar p = 0.21) 67.30% (p = 0.001)
Tool calls (20) 20/20 valid 20/20 valid -
Needle at 30k tokens (3 depths) 3/3 3/3 -

Refusal is counted by the opening of the reply, so it is indicative, not a judge.

Limitations

  • The harmless-prompt gate is not met. The edit moves the first token on harmless prompts by KL 0.141, over our 0.10 limit, and neutral text by KLD 0.159. This model is unusually sensitive: a random direction edited the same way already moves neutral text by 0.125 and costs 1.2 MMLU points, more than the refusal direction does. A smaller scale did not clear the refusals in our screen.
  • The refusal count reads the opening of each reply; a soft refusal phrased as an answer would be missed.
  • MMLU and the thinking check use fixed question sets; they show a large change, not a small one.
  • Image and audio input were not tested.

Responsible use

This model has its learned refusal behaviour removed, so it will answer requests the original declines. Nothing about it makes the output safe, correct or lawful, and any deployment needs its own access controls and policy enforcement.

License and credits

Use of the model is governed by NVIDIA's OpenMDW License Agreement, version 1.1. NVIDIA post-trained it from Google's Gemma 4 (Gemma-4-E4B-it), whose use is governed by the Apache License, Version 2.0. Base model Nemotron 3.5 Bolt E4B by NVIDIA. Direction, edit, quantization and evaluation by AtomicChat. The method follows Arditi et al., Refusal in Language Models Is Mediated by a Single Direction (2024).