/ Модель

Характеристики

Контекст
1 024 токена
Архитектура
gpt2 · dense
Библиотека
transformers
Опубликована
7 авг 2024

gpt2_noLN

Генерация текстаТекст → текст3 профессии

Исследовательская модификация GPT-2 Small без эффективной LayerNorm для генерации текста и экспериментов с интерпретируемостью трансформеров.

278скачиваний за 30 дней4лайкавеса обновлены18 ноя 2024

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Текст» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

    Модели ответят на каждую задачу, судья оценит ответы. Опубликованный результат появится на этой странице.

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

apollo-research/gpt2_noLN — исследовательская версия GPT-2 Small от Apollo Research: модель GPT2LMHeadModel для генерации продолжения текста. Её дообучили на OpenWebText примерно на 500 млн токенов при длине контекста 1024 токена, постепенно отключая действие LayerNorm; параметры нормализации настроены так, чтобы слои LayerNorm не влияли на вычисления. Репозиторий содержит веса в формате safetensors и рассчитан на загрузку через библиотеку Transformers, а также на работу с инструментами для интерпретируемости моделей.

Модель подходит для экспериментов с трансформерами и анализа роли нормализации в языковых моделях. README описывает несколько вариантов обучения v1–v5; вариант v4 указан как используемый по умолчанию. Ограничение контекста — 1024 токена. Информация о лицензии в предоставленных данных отсутствует.

Сценарии применения

  • генерация продолжения текста
  • изучение влияния LayerNorm на работу GPT-2
  • анализ активаций трансформера
  • эксперименты с интерпретируемостью языковых моделей

Ограничения

Контекст ограничен 1024 токенами; обучение и описание модели ориентированы на эксперименты с нормализацией и интерпретируемостью, поэтому качество для иных сценариев не установлено. Лицензия не указана в предоставленных данных.

Для каких профессий подходит3

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Model Card for gpt2_noLN

This is a gpt2-small model with LayerNorm fine-tuned out.

The model was fine-tuned on OpenWebText for ~500M tokens (1000 iterations of batch size ~488 at 1024 context length) while gradually disableing LayerNorm layers.

There are 5 similar models available (v1 through v5) trained with different fine-tuning schedules. Please refer to the paper or blog post for details; the training code is available here. The best model (v4) is the default as of 6th September 2024 (previously v2 was the default).

The model is a GPT2LMHeadModel (to avoid requiring trust_remote_code) which technically contains LayerNorm blocks. However, the epsilon values are all set to 1e12 so that the LayerNorm has no effect. The LN scale is set to 1e6 (to counter the 1e12 epsilon), and the bias to 0. The final LayerNorm also has 1e12 as epsilon, but non-unity weights and biases. This is because the embed and unembed matrix are tried (and there is no unembed bias), thus the LN parameters cannot be folded into that matrix. You can completely remove all LNs by simply replacing ln_1 and ln_2 modules with identities, and replacing ln_f with modifications to the unembed matrix and unembed bias.

You can load the model with transformers, or one of the interpretability libraries listed below.

model = GPT2LMHeadModel.from_pretrained("apollo-research/gpt2_noLN").to("cpu")

TransformerLens loading code

import torch
from transformers import GPT2LMHeadModel
from transformer_lens import HookedTransformer

model = GPT2LMHeadModel.from_pretrained("apollo-research/gpt2_noLN").to("cpu")
hooked_model = HookedTransformer.from_pretrained("gpt2", hf_model=model, fold_ln=False, center_unembed=False).to("cpu")
# Kill the LayerNorms because TransformerLens overwrites eps
for block in hooked_model.blocks:
    block.ln1.eps = 1e12
    block.ln2.eps = 1e12
hooked_model.ln_final.eps = 1e12

Or with LNs properly replaced by identities:

import torch
from transformers import GPT2LMHeadModel
from transformer_lens import HookedTransformer

model = GPT2LMHeadModel.from_pretrained("apollo-research/gpt2_noLN").to("cpu")

# Undo my hacky LayerNorm removal
for block in model.transformer.h:
    block.ln_1.weight.data = block.ln_1.weight.data / 1e6
    block.ln_1.eps = 1e-5
    block.ln_2.weight.data = block.ln_2.weight.data / 1e6
    block.ln_2.eps = 1e-5
model.transformer.ln_f.weight.data = model.transformer.ln_f.weight.data / 1e6
model.transformer.ln_f.eps = 1e-5

# Properly replace LayerNorms by Identities
class HookedTransformerNoLN(HookedTransformer):
    def removeLN(self):
        for i in range(len(self.blocks)):
            self.blocks[i].ln1 = torch.nn.Identity()
            self.blocks[i].ln2 = torch.nn.Identity()
        self.ln_final = torch.nn.Identity()

hooked_model = HookedTransformerNoLN.from_pretrained("gpt2", hf_model=model, fold_ln=True, center_unembed=False).to("cpu")
hooked_model.removeLN()
hooked_model.cfg.normalization_type = None

Edit: Added the last line updating hooked_model.cfg.normalization_type so that ActivationCache.apply_ln_to_stack() still works, thanks to Quiche Eater for pointing this out.

NNSight loading code

Copy-pasted from Logan Riggs' comment, based on code by Caden.

import torch
from transformers import GPT2LMHeadModel
from transformer_lens import HookedTransformer
from nnsight.models.UnifiedTransformer import UnifiedTransformer


model = GPT2LMHeadModel.from_pretrained("apollo-research/gpt2_noLN").to("cpu")

# Undo my hacky LayerNorm removal
for block in model.transformer.h:
    block.ln_1.weight.data = block.ln_1.weight.data / 1e6
    block.ln_1.eps = 1e-5
    block.ln_2.weight.data = block.ln_2.weight.data / 1e6
    block.ln_2.eps = 1e-5
model.transformer.ln_f.weight.data = model.transformer.ln_f.weight.data / 1e6
model.transformer.ln_f.eps = 1e-5

# Properly replace LayerNorms by Identities
def removeLN(transformer_lens_model):
    for i in range(len(transformer_lens_model.blocks)):
        transformer_lens_model.blocks[i].ln1 = torch.nn.Identity()
        transformer_lens_model.blocks[i].ln2 = torch.nn.Identity()
    transformer_lens_model.ln_final = torch.nn.Identity()

hooked_model = HookedTransformer.from_pretrained("gpt2", hf_model=model, fold_ln=True, center_unembed=False).to("cpu")
removeLN(hooked_model)

model_nnsight = UnifiedTransformer(model="gpt2", hf_model=model, fold_ln=True, center_unembed=False).to("cpu")
removeLN(model_nnsight)

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · transformers

Можно запустить

Подбираем GPU…

Класс архитектуры
GPT2LMHeadModel
Ревизия весов
64a829f

0 моделей