Начнем с небольшой предыстории. Представьте себе: утро, офис Allen Institute for AI, разработчики пьют кофе и ворчат на текущий рынок языковых моделей. Все закрыто, метрики — только на картинках, данные спрятаны под NDA, а лицензии такие, что использовать модель в реальном продукте — как играть в рулетку с юристами.

И вот кто‑то из команды говорит: «А что, если мы сделаем всё наоборот? Полностью открытая модель, никаких секретов, всё доступно для проверки и использования». Так родилась идея OLMo.

Поначалу это был эксперимент. Первая версия, OLMo 0424, получилась... ну, скажем так, не без проблем. Обучение нестабильное, данные собирались по крупицам, метрики были, но не впечатляли. Это был, скорее, MVP, который доказал одно: open‑source языковые модели могут быть не хуже закрытых.

И вот, спустя полгода, команда вернулась с новой версией — OLMo 2. Теперь это не просто эксперимент, а полноценная модель, которая бросает вызов таким игрокам, как LLaMA 2, Mistral и Qwen. Полностью открытая, с детализированными данными обучения и архитектурой, которая заставляет сказать: они сделали это.

Ключевые особенности OLMo 2

OLMo 2 построена с учетом современных требований к языковым моделям. Основные улучшения:

  1. RMSNorm вместо LayerNorm. Улучшение, которое убирает числовую нестабильность в глубоких сетях. Оно нормализует векторные значения, что дает стабильность градиентов и ускоряет обучение.

  2. QK‑Norm. Нормализация запросов и ключей в механизме внимания. Она устраняет проблемы с переполнением чисел и позволяя модели лучше работать с длинным контекстом.

  3. Z‑Loss‑регуляризация. Регуляризатор, который повышает уверенность модели в редких токенах.

Также стоит отметить улучшенную инициализацию весов и подход к обучению в два этапа.

Данные

Для создания модели такого уровня важно иметь не только массивный датасет, но и понимать, что именно в него включать. Данные для OLMo 2 были отобраны и обработаны с использованием строгих фильтров качества, чтобы каждая строка играла свою роль.

OLMo-Mix-1124 (3.9 трлн токенов)

Это основной датасет, который охватывает:

  • Веб‑контент: включая статьи, блоги и форумы, которые дают модели возможность «читать» как формальный, так и разговорный язык.

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

  • Математические задачи: здесь все — от школьных задачников до научных публикаций, чтобы модель могла работать с числовыми данными и логикой.

OLMo‑Mix был создан для того, чтобы модель получила широкий языковой охват, и его объём в 3.9 трлн токенов стал основой общего обучения.

Dolmino-Mix-1124 (843 млрд токенов)

На втором этапе модель «затачивается» под более сложные и специфические задачи. Этот датасет включает:

  • Академические тексты: научные статьи, публикации, технические исследования. Это помогает модели понимать сложные структуры текста и использовать их в генерации.

  • Инструкции и Q&A: от простых руководств до специализированных вопросов и ответов. Такой контент делает модель более подходящей для практических приложений, включая чат‑ботов и ассистентов.

  • Высококачественные данные: только тщательно отобранные материалы без «шума», чтобы модель училась на лучших примерах.

Dolmino‑Mix, хоть и меньше по объему, играет важную роль в дообучении. Фокус на качестве, а не на количестве.

Архитектура

OLMo 2 — это трансформер, который строится на классической архитектуре, но с важными улучшениями. Его параметры:

Модель

Параметры

Контекст

Скрытый размер

Голов внимания

FLOPs (обучение)

OLMo-2–7B

7B

4096

4096

32

1.8×10²³

OLMo-2–13B

13B

4096

5120

40

4.6×10²³

Контекстная длина в 4096 токенов — это одна из фич OLMo 2. Такая длина позволяет модели «удерживать в голове» большие объемы информации, что важно для сложных задач. Например, при анализе документов, где важны взаимосвязи между удаленными друг от друга абзацами, или при генерации текста, который требует логической целостности на протяжении нескольких страниц. Большой контекст также дает возможность моделям OLMo 2 эффективно работать с кодом, сложными инструкциями или аналитическими запросами, где каждый фрагмент имеет значение в глобальной структуре. Это достигается за счет оптимизированной архитектуры внимания, которая минимизирует числовую деградацию в длинных последовательностях.

Скрытый размер модели — 4096 для версии с 7B параметров и 5120 для 13B — задает ширину внутреннего представления данных. Этот параметр напрямую влияет на способность модели выявлять и обрабатывать сложные зависимости между токенами. Чем выше размер скрытого слоя, тем более тонкие и глубокие паттерны может распознавать модель, включая сложные грамматические структуры или семантические связи.

Кроме того, OLMo 2 использует 32 (7B) и 40 (13B) голов внимания, что позволяет масштабировать вычислительную мощность для работы с большими объемами информации. Каждая «голова» внимания специализируется на своих зависимостях, например, одни обрабатывают локальные контексты (ближайшие слова), а другие сосредоточены на глобальных связях. Такое многоголовое внимание распределяет вычислительные нагрузки, что в чем‑то улучшает точность предсказаний в сложных и многоуровневых данных, особенно при обработке длинных текстов.

Производительность

Для оценки производительности использовалась система OLMES, включающая 20 тестов. Вот результаты на ключевых задачах:

Как видно, OLMo 2 показывает конкурентные результаты, превосходя тот же LLaMA 2 на нескольких тестах.

Инференс и настройка

OLMo 2 интегрируется с библиотекой Transformers. Пример кода для генерации текста:

from transformers import AutoModelForCausalLM, AutoTokenizer

# Загрузка модели и токенизатора
model = AutoModelForCausalLM.from_pretrained("allenai/OLMo-2-1124-7B")
tokenizer = AutoTokenizer.from_pretrained("allenai/OLMo-2-1124-7B")

# Пример ввода
input_text = "The future of AI is"
inputs = tokenizer(input_text, return_tensors="pt")

# Генерация текста
output = model.generate(**inputs, max_new_tokens=50, do_sample=True, top_k=40, top_p=0.9)
print(tokenizer.decode(output[0], skip_special_tokens=True))

Если вы хотите настроить модель под конкретную задачу, это можно сделать с помощью Transformers и PyTorch. Пример команды для обучения:

torchrun --nproc_per_node=8 scripts/train.py config.yaml \
    --data.paths=[path_to_data] \
    --load_path=path_to_checkpoint \
    --reset_trainer_state

Для fine‑tuning используйте последний checkpoint модели, доступный на Hugging Face.

Чтобы уменьшить потребление памяти, вы можете использовать квантование:

model = AutoModelForCausalLM.from_pretrained("allenai/OLMo-2-1124-7B", 
    torch_dtype=torch.float16, 
    load_in_8bit=True)

Квантование снижает использование GPU‑памяти и ускоряет инференс без значительной потери качества.

Выводы

OLMo 2 — это новый стандарт открытости, доступный каждому, кто хочет изучать, экспериментировать или строить мощные ML‑приложения. И да, это та модель, которую вы можете взять и начать использовать прямо сейчас.

Попробуйте OLMo 2:


Всем практикующим Data Scientists рекомендую посетить открытый урок «Auto feature engineering: генерация, конструирование и отбор признаков».

Вебинар посвящен программным инструментам для автоматизации процедур препроцессинга. Будут рассмотрены вопросы автоматической генерации и конструирования, а также отбора информативных признаков для поставленной задачи.

Записаться можно по ссылке.

Комментарии (1)


  1. avshkol
    05.12.2024 11:05

    Обучалась на русскоязычных данных? (или какой % таких данных?)