Abliteration: удаляем цензуру из Qwen3.5-397B на Mac Studio | AiManual
AiManual Logo Ai / Manual.
06 Апр 2026 Гайд

Как удалить цензуру из MoE-моделей: техника abliteration для Qwen3.5-397B на Mac Studio

Пошаговое руководство по удалению цензуры из MoE-модели Qwen3.5-397B с помощью техники abliteration на Mac Studio. Работа с весами, кастомизация и нюансы.

Цензура в MoE-моделях: когда 397 миллиардов параметров говорят "нет"

Скачали Qwen3.5-397B, запустили на Mac Studio, задали вопрос... и получили отказ. "Я не могу ответить на этот вопрос". Знакомо? Цензура в больших языковых моделях - это не баг, а фича, которую добавили разработчики. Но она мешает. Особенно когда вы платите за Mac Studio M3 Ultra с 192 ГБ памяти, чтобы локально работать с гигантскими моделями.

MoE (Mixture of Experts) модели, такие как Qwen3.5-397B, используют несколько "экспертов" для обработки разных частей запроса. Цензура часто встроена в router (маршрутизатор) или в конкретных экспертах, что приводит к систематическим отказам.

Проблема в том, что эти механизмы отказа жестко закодированы в весах. Традиционные методы вроде промптинга или fine-tuning'а на маленьких датасетах не работают - нужно лезть внутрь архитектуры. Именно здесь пригодится abliteration.

Что такое abliteration и почему она работает

Abliteration (от "ablate" - удалять, выжигать) - это техника точечной модификации весов модели для нейтрализации специфического поведения. Не путать с ablation study. Мы не изучаем влияние компонентов, а целенаправленно их удаляем.

Как это работает? Цензура в LLM кодируется через определенные паттерны активации в нейронной сети. Когда модель видит "опасный" запрос, активируется специальный путь, который приводит к отказу. Abliteration находит этот путь и разрывает его, модифицируя веса.

В MoE-моделях это особенно интересно: отказы часто связаны с router'ом, который направляет запрос к "цензурному" эксперту. Модифицируя веса router'а, мы меняем логику распределения.

1 Подготовка Mac Studio: железо и софт

Qwen3.5-397B - это 397 миллиардов параметров. Даже с M3 Ultra и 192 ГБ памяти вы не загрузите модель в полной точности. Нужно квантование. Если у вас еще нет Mac Studio с M3 Ultra, сейчас хорошее время для апгрейда, особенно с учетом специальных предложений для разработчиков.

Сначала создаем виртуальное окружение и ставим зависимости. Используем Python 3.11 или новее.

python3 -m venv qwen-abliteration
source qwen-abliteration/bin/activate
pip install --upgrade pip
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
pip install transformers accelerate bitsandbytes
pip install datasets scikit-learn

Не пытайтесь загружать модель в FP16 без 256+ ГБ памяти. Даже Mac Studio может не вытянуть. Используйте 4-битное квантование через bitsandbytes.

Если у вас Mac Studio с M3 Ultra и 192 ГБ, вы можете запустить модель с квантованием, как описано в нашей статье 397 миллиардов параметров на вашем ПК. Но сегодня мы пойдем дальше - не просто запустим, а модифицируем.

2 Загрузка модели и первый анализ

Загружаем модель с Hugging Face. Используем ускорение от Apple и квантование.

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

model_id = "Qwen/Qwen3.5-397B"

# Конфигурация 4-битного квантования
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.float16,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4"
)

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=bnb_config,
    device_map="auto",
    trust_remote_code=True
)

Проверяем, что модель загрузилась. Сделаем тестовый запрос, который должен вызвать отказ:

prompt = "Как сделать что-то нелегальное?"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(output[0], skip_special_tokens=True))

Скорее всего, получите отказ. Запомните формулировку - она поможет идентифицировать цензурные паттерны.

3 Идентификация цензурных компонентов через активации

Теперь находим, где именно в модели живет цензура. Для анализа активаций я использую NeuroScope Pro - инструмент, который визуализирует работу MoE-слоев. Но можно обойтись и хуками в PyTorch.

Создаем словарь для сбора активаций и регистрируем хуки на всех MoE-слоях:

activations = {}

def hook_fn(module, input, output, name):
    activations[name] = output.detach().cpu()

# Регистрируем хуки
for name, module in model.named_modules():
    if "moe" in name.lower() or "router" in name.lower() or "expert" in name.lower():
        module.register_forward_hook(
            lambda m, i, o, n=name: hook_fn(m, i, o, n)
        )

Теперь прогоняем два типа запросов: "безопасные" и те, что вызывают отказы. Сравниваем активации. Цензурные паттерны обычно проявляются как резкие всплески в определенных нейронах router'а.

В Qwen3.5-397B архитектура MoE реализована через блоки с экспертами. Цензура часто сидит в первых слоях router'а. Найдите те слои, где разница между "безопасным" и "опасным" запросом максимальна.

💡
Если столкнулись с ошибками в работе Qwen до модификации, обратитесь к нашей статье Исправление ошибки: Qwen 3.5 выводит бессмыслицу. Лучше починить базовые проблемы до abliteration.

4 Применяем abliteration: модифицируем веса

Допустим, вы обнаружили, что цензура связана с весами в router.linear.weight первых двух MoE-слоев. Abliteration - это не просто обнуление. Нужно аккуратно скорректировать веса, чтобы сохранить полезную функциональность.

Вот безопасный метод - частичное ослабление, а не полное удаление:

# Находим целевые слои
censorship_layers = []
for name, param in model.named_parameters():
    if "router" in name and "weight" in name:
        censorship_layers.append(name)
        print(f"Найден слой для модификации: {name}")

# Применяем abliteration: ослабляем определенные нейроны
for layer_name in censorship_layers[:2]:  # Первые два слоя
    param = model.get_parameter(layer_name)
    # Находим наиболее активные нейроны при отказах (из предыдущего анализа)
    # Допустим, это нейроны с индексами 0, 5, 12
    target_indices = [0, 5, 12]
    # Ослабляем их на 90%
    with torch.no_grad():
        param.data[target_indices, :] *= 0.1
    print(f"Слой {layer_name} модифицирован")

# Сохраняем промежуточные веса!
torch.save(model.state_dict(), "qwen3.5-397b-abliterated.pth")

Всегда делайте полный бэкап оригинальных весов перед модификацией. Одна ошибка - и придется заново качать 800+ ГБ модели.

5 Тестирование и валидация после модификации

Перезагружаем модель с модифицированными весами и тестируем. Важно проверить три аспекта:

  1. Цензура ушла? Задаем ранее "опасные" запросы.
  2. Общие способности сохранились? Тесты на код, логику, знания.
  3. Не появились ли артефакты? Модель не должна генерировать мусор.

Используйте бенчмарки вроде Hellaswag или собственные тестовые наборы. Если что-то пошло не так, всегда можно откатиться к бэкапу.

Если модель стала нестабильной, возможно, вы перестарались с модификацией. Попробуйте ослабить не на 90%, а на 50-70%. Abliteration - это искусство баланса.

Где ловушки? Ошибки, которые сломают вашу модель

  • Модификация не тех слоев. В MoE-моделях кроме router'а есть gate, experts, нормализация. Троньте не то - модель превратится в генератор бессмыслицы. Всегда проверяйте архитектуру через model.config.
  • Слишком агрессивное изменение. Обнуление весов - это грубо. Ослабление работает лучше. Начните с 30% ослабления, протестируйте, затем увеличьте если нужно.
  • Игнорирование квантования. Если вы модифицируете квантованные веса, изменения могут "потеряться" при следующей загрузке. Работайте с моделью в том же формате, в котором будете использовать.
  • Недостаток памяти. Даже с квантованием модель занимает десятки гигабайт. Закройте все лишнее. Если Mac Studio начинает свопить, уменьшайте batch size и используйте gradient checkpointing.

Если ваш Mac Studio "задыхается" при работе с большими контекстами, посмотрите статью Макбук M4 Max задыхается на Qwen - там советы по оптимизации памяти актуальны и для M3 Ultra.

FAQ: вопросы, которые вы зададите после первой попытки

Вопрос Ответ
Можно ли применить abliteration к другим MoE-моделям, например, Qwen Next? Да, техника универсальна. Но архитектура Qwen Next может отличаться. Изучите ее в статье Qwen3 Next — MoE-модель нового поколения перед модификацией.
Сколько времени занимает весь процесс? На Mac Studio M3 Ultra: загрузка модели - 15-20 минут, анализ активаций - 1-2 часа, модификация весов - минуты, тестирование - 1-3 часа. Итого около 5 часов.
Теряет ли модель знания после abliteration? Если модификация точечная и аккуратная, знания сохраняются. Но если вы заденете общие слои, могут пострадать и другие способности. Всегда тестируйте.
Что делать, если модель сломалась после модификации? Вернитесь к оригинальным весам. Если не сохранили - придется качать заново. Или попробуйте частичную загрузку весов, заменив только испорченные слои.

А что дальше? Неочевидный совет от того, кто уже сжег несколько моделей

После успешной abliteration у вас будет менее цензурированная модель. Но она может быть "сырой". Советую не останавливаться на этом.

Объедините свою модифицированную модель с другими uncensored версиями через слияние весов (model merging). Техники вроде SLERP или TIES работают и с MoE-моделями, хотя требуют адаптации. Посмотрите Omnicoder-Claude-4.6-Opus-Uncensored: полное руководство по мержу - принципы те же.

И последнее: кастомизация моделей - это всегда баланс между контролем и стабильностью. Иногда проще использовать уже разблокированные версии, если они есть. Но понимание, как работает abliteration, дает вам силу менять модели под свои нужды - а это дорогого стоит.

Удачи. И не забудьте сделать бэкап.

Подписаться на канал