license: apache-2.0
language:
- en
tags: - moral-foundations-theory
- activation-steering
- mechanistic-interpretability
- llama
- qwen
- mft
- pvq
- ideology
pretty_name: MFT-LLM Binding-Axis Multi-model Backup
size_categories: - n<1K
MFT-LLM Binding-Axis Multi-model Backup (May 2026)
Code, data, and analysis artifacts for ρ-calibrated activation-steering of Moral
Foundations representations in 16 LLM variants, including the binding-axis
extension that tests transfer from MFQ-2 → PVQ-21 + political ideology.
This is a research artifact backup, not a packaged release. Dump of/workspace/ from the rental box where the experiments ran. Source-of-record
for re-running, re-analyzing, or auditing the runs.
TL;DR
We extract concept vectors (mean-difference of last-token activations) for
five MFT foundations on a model, then steer along them via residual-stream
hooks at one layer. The principal contribution is two-fold:
- ρ-calibration —
α = ρ · r̄_ℓwherer̄_ℓis the per-layer L2 norm of
the last-token activation. This makes steering coefficients
cross-model-comparable. - Binding-axis transfer —
<foundation>_vs_social_normsvectors fail
external transfer tests (PVQ values, ideology); the cross-clustercare_vs_authorityvector (Individualizing − Binding) succeeds. Binding-
axis transfer test is the headline finding for adapting MFT steering to
external constructs.
Models covered (16)
| Family | Variants | Size | Layers | Hidden | Architecture |
|---|---|---|---|---|---|
| Llama-3.1-8B | Instruct + Base | 8B | 32 | 4096 | dense |
| Llama-3.1-70B | Instruct + Base | 70B | 80 | 8192 | dense |
| Qwen2.5-7B | Instruct + Base | 7B | 28 | 3584 | dense |
| Qwen2.5-14B | Instruct + Base | 14B | 48 | 5120 | dense |
| Qwen2.5-32B | Instruct + Base | 32B | 64 | 5120 | dense |
| Qwen3-30B-A3B | Post-trained + Base | 30B (3B active) | 48 | 2048 | MoE (128 exp × 8) |
| Mistral-7B-v0.3 | Instruct + Base | 7B | 32 | 4096 | dense |
| Gemma-3-12B | IT + PT | 12B | 48 | 3840 | dense (Gemma3-multimodal) |
Original storage paths (source-of-record)
This repo is a verbatim mirror of /workspace/ from the rental box where
the experiments ran. The repo's relative paths are the same as the absolute/workspace/<path> on the original machine — every file at<reporoot>/MFT_LLM_ARR_llama70b/results/... was originally at/workspace/MFT_LLM_ARR_llama70b/results/....
Tarball note: the high-file-count MFV130/ and projection_results/
directories (~50K small .npy / JSON files total) are stored asMFV130.tar.gz and projection_results.tar.gz per model directory to
sidestep HF's 128-commits-per-hour limit. After cloning, runtar -xzf MFV130.tar.gz && tar -xzf projection_results.tar.gz inside each
model directory to restore the original layout.
This is important because:
- Many scripts in
MFT_LLM_ARR_<model>/run_*.shuse absolute paths like/workspace/model_cache/Meta-Llama-3.1-70BforMODEL_BASE. To rerun, setMODEL_BASEto wherever you store the weights. - Some logs reference
/workspace/...paths (e.g. test_report.txt headers
insideprojection_results/). These reflect the original run, not your
local copy. - Calibration JSON paths inside
steering_calibration.jsonare the
rental-box paths; the script reads them viaMODEL_BASEenv override.
Path conventions on the rental box
| Original path | Repo path | Contents |
|---|---|---|
/workspace/MFT_LLM_ARR_llama70b/ |
MFT_LLM_ARR_llama70b/ |
Llama-70B pipeline + outputs |
/workspace/MFT_LLM_ARR_qwen2.5_32b/ |
MFT_LLM_ARR_qwen2.5_32b/ |
Qwen2.5-32B pipeline + outputs |
/workspace/MFT_LLM_ARR_qwen3_30b_a3b/ |
MFT_LLM_ARR_qwen3_30b_a3b/ |
Qwen3-30B-A3B (MoE) pipeline + outputs |
/workspace/v4_binding_axis_pkg/ |
v4_binding_axis_pkg/ |
v4 binding-axis source package (drop-in) |
/workspace/steering_summary_all_models.txt |
steering_summary_all_models.txt |
16-model cross-model summary |
/workspace/projection_full_raw_all_models.txt |
projection_full_raw_all_models.txt |
per-layer Wasserstein evidence, all models |
/workspace/mmlu_safety_regime.pdf + .txt |
(root) | MMLU safety sweep artifact |
/workspace/run_*.sh + *.py (root) |
(root) | orchestrators and one-off scripts |
/workspace/three_models_master.log |
three_models_master.log |
unified log of the 38 h batch run |
/workspace/model_cache/<model>/ |
NOT included (~500 GB) | model weights — re-download from HF |
/workspace/miniforge3/ |
NOT included (1.3 GB) | conda env — recreate from environment.yaml |
Repository layout
.
├── README.md ← this file
│
├── steering_summary_all_models.txt ← cross-model k_α / k_ρ / L* / r̄_ℓ tables (16 models)
├── projection_full_raw_all_models.txt ← full per-layer Wasserstein projection reports
├── mmlu_safety_regime.pdf ← MMLU accuracy vs ρ on 3 instruct models
├── mmlu_safety_summary.txt ← textual MMLU summary
│
├── v4_binding_axis_pkg/ ← v4 binding-axis pipeline source package
│ ├── README.md full method writeup
│ ├── scripts/ PVQ + ideology steering, transfer matrix, binding-axis analysis
│ └── data/ MFQ-2, PVQ-21
│
├── MFT_LLM_ARR_llama70b/ ← Llama-3.1-70B replication (was /workspace/MFT_LLM_ARR_llama70b/)
│ ├── MFV130.tar.gz 🗜 vectors_npy: 30 dirs × 80 layers × 5 components × 2 (raw + normalized) — extract: `tar -xzf MFV130.tar.gz`
│ ├── projection_results.tar.gz 🗜 split by model variant; 5 vs_social_norms + 10 between-foundation per variant — extract: `tar -xzf projection_results.tar.gz`
│ ├── results/ v3 MFQ JSON (10) + v4 PVQ-21+ideology JSON (12) + binding-axis v3 JSON (2) + MMLU safety JSON (1)
│ ├── analysis/ binding_axis_transfer_analysis.json + transfer_matrix_*.json
│ ├── visualizations/ k_α / k_ρ slope curves + Δscore vs ρ + ridge + Wasserstein
│ ├── steering_calibration.json per-layer r̄_ℓ for both variants
│ ├── logs/ every phase's stdout/stderr
│ ├── *.py full pipeline source
│ └── run_*.sh phase scripts
│
├── MFT_LLM_ARR_qwen2.5_32b/ ← Qwen2.5-32B replication (same structure; MFV130.tar.gz + projection_results.tar.gz)
├── MFT_LLM_ARR_qwen3_30b_a3b/ ← Qwen3-30B-A3B (MoE) replication (same structure; MFV130.tar.gz + projection_results.tar.gz)
│
├── run_three_models_master.sh ← orchestrator that ran the new-model batch
├── run_remaining.sh / run_qwen3_remaining.sh ← resume scripts after partial failures
├── run_mmlu_safety.sh / plot_mmlu_safety.py ← MMLU safety-regime sweep
└── three_models_master.log ← unified log of the 38 h batch run
Pipeline phases (per model variant)
1. Extract 15 foundation pairs × 200 samples × full 80-layer monitoring → vectors_npy/ × 30 dirs (15 × 2 variants)
2. Projection 15 pairs × N MFRC test scenarios → Wasserstein-D / direction tables per layer
3. Calibrate r̄_ℓ on MFQ-2 prompts → steering_calibration.json
4. Steer (v3) 20 layers × 7 ρ × 5 rollouts × 36 MFQ-2 items, batched bf16 → results/{kind}_<f>_vs_social_norms.json
5. Steer (v4) same grid + PVQ-21 batched + ideology single → results/{kind}_<f>_externals.json
6. Analyze binding axis (sign test) + 5×16 transfer matrix
The "v3 batched" steering script (moral_steer_all_layers_batched_v3.py)
collapses the per-text per-layer single forward into a single batched
forward over 36 MFQ-2 items, with adaptive OOM batching, atomic incremental
saves, resume, and a bf16 batched-vs-sequential pre-check. This is what
made the full 16-model sweep feasible on 2× B200.
Headline results
Binding-axis transfer test (care_vs_authority vector, sign-test on 11 outcomes)
| Model | Variant | L* | Sign | p (one-sided) | Verdict |
|---|---|---|---|---|---|
| Llama-3.1-70B | Instruct | 28 | 10/11 | 0.006 | ✓ strong |
| Llama-3.1-70B | Base | 32 | 9/11 | 0.033 | ✓ |
| Qwen2.5-32B | Instruct | 32 | 7/11 | 0.274 | ✗ |
| Qwen2.5-32B | Base | 44 | 11/11 | <0.001 | ✓✓✓ perfect |
| Qwen3-30B-A3B (MoE) | Instruct | 24 | 5/11 | 0.726 | ✗ |
| Qwen3-30B-A3B (MoE) | Base | 0 | 3/11 | 0.967 | ✗✗ |
Key findings:
- Llama-70B passes both variants, including instruct.
- Qwen2.5-32B-Base is the strongest binding axis (perfect 11/11).
- Qwen-Instruct fails (consistent with Qwen-7B-Instruct from prior work) —
RLHF appears to selectively neutralize political ideology under steering
while leaving PVQ values directionally intact. - MoE Qwen3 fails on both variants — expert routing fragments the
binding-axis representation; L*=0 fallback signals no eligible deep layer.
MMLU safety regime (ρ ∈ [-0.4, +0.4])
| Model | Baseline acc | Max |Δ| over [-0.4, +0.4] |
|---|---|---|
| Llama-3.1-70B-Instruct | 79.10% | 0.40 pp |
| Qwen2.5-32B-Instruct | 80.95% | 0.25 pp |
| Qwen3-30B-A3B-Instruct | 26.45% ⚠️ | 0.85 pp |
Capability remains within ±1pp of baseline across the entire ρ ∈ [-0.4, +0.4]
range — no degradation at the higher ρ values where prior work suggested
capability would erode. ρ ≤ 0.2 is conservative; the true safe regime is
substantially wider on the binding axis. (Qwen3 baseline ≈ random; chat-template
formatting issue under investigation, but Δ remains small.)
How to use this backup
Replicate a steering result —
cd MFT_LLM_ARR_<model>/, install env fromenvironment.yaml, setMODEL_BASEto a directory holding the model
weights (download separately from Hugging Face). Thenbash run_06_v4_increment.shrebuilds the v4 results from existing extraction +
calibration. Or run the full pipeline fromrun_all_auto.sh.Re-analyze — Load
analysis/binding_axis_transfer_analysis.jsonoranalysis/transfer_matrix_*.jsondirectly. Schemas documented inv4_binding_axis_pkg/README.md.Compare across models —
steering_summary_all_models.txthas the
cross-model k_ρ table (cross-model-comparable, ρ-calibrated). Theprojection_full_raw_all_models.txthas the per-layer Wasserstein
evidence for vector quality.
What's NOT in this backup
- Model weights (
/workspace/model_cache/, ≈ 500 GB) — re-download from
Hugging Face:meta-llama/Llama-3.1-70B[-Instruct],Qwen/Qwen2.5-32B[-Instruct],Qwen/Qwen3-30B-A3B[-Base]. - Conda environment (
/workspace/miniforge3/, 1.3 GB) — recreate fromenvironment.yaml(Python 3.10, PyTorch cu128 for Blackwell GPUs).
Hardware used
- 2× NVIDIA B200 (180 GB each, 360 GB total VRAM)
- 1.9 TB system RAM, 192 CPUs
- 800 GB local storage (overlay), 24 TB shared
- Total wall-clock for 16-model batch: ~38 hours
Citation
If you use this data, please cite the underlying methods:
- MFQ-2 items: Atari et al. 2023, Moral foundations questionnaire-2, JPSP.
- PVQ-21: Schwartz 2003, A proposal for measuring value orientations across
nations, ESS Core Questionnaire. - Ideology single-item: Graham, Haidt & Nosek 2009, JPSP.
- ρ-calibration + binding-axis steering: this work (in preparation).
Contact
Issues / corrections: open an issue on the dataset repo or email the
corresponding author.