- BrainTools - https://www.braintools.ru -

OLMo — моделька от AI2, разработанная учёными для учёных. Если вы занимаетесь экспериментами над нейронками, это идеальный вариант: весь код и данные, необходимые для тренировки, открыто лежат на GitHub [1]. Более того, выложены даже промежуточные чекпоинты, с очень высокой гранулярностью. Это отличает ее от якобы “открытых” нейронок, которые обычно приходят к тебе монолитным финальным бинарём.
Эта статья — короткий гайд, по большей части взятый с GitHub создателей нейросети. Гайд проверен в боевых условиях и действительно работает.
Сначала установливаем Git, Python и PyTorch [2], следуя инструкциям для вашей операционной системы. Инструкции для PyTorch есть здесь [3].
Для обучения [4] и дообучения рекомендуется установка из исходного кода:
git clone https://github.com/allenai/OLMo.git
cd OLMo
pip install -e .[all]
Также можно установить из PyPI:
pip install ai2-olmo
Shameless plug. Хотите свежего мяса и пейперов про нейронки? Телега @1red2black [5].
Предварительное обучение OLMo проходит в два этапа. На первом этапе мы обучаем модель на больших объёмах данных, преимущественно из интернета: OLMo-mix-1124 [6] На втором этапе мы обучаем на меньшем объёме высококачественных целевых данных: Dolmino-mix-1124 [7]
Вы можете найти все контрольные точки моделей, как минимум каждые 1000 шагов обучения, в форматах OLMo и Hugging Face:
|
Вариант |
Формат OLMo (Этап 1) |
Формат OLMo (Этап 2) |
Формат Hugging Face |
|---|---|---|---|
|
OLMo-2 1B |
OLMo-2 1B [8] |
OLMo-2 1B [9] |
|
|
OLMo-2 7B |
OLMo-2 7B [11] |
OLMo-2 7B [12] |
|
|
OLMo-2 13B |
OLMo-2 13B [14] |
OLMo-2 13B [15] |
|
|
OLMo-2 32B |
OLMo-2 32B [17] |
OLMo-2 32B [18] |
Примечание: для варианта 32B использовались новые скрипты для тренинга, которые тоже открыто опубликованы. Если хотите пройти весь этот путь, для обучения или дообучения OLMo-2 32B посетите OLMo-core [20].
Чтобы воспроизвести любой из описанных ниже процессов обучения, выполните:
torchrun --nproc_per_node=8 scripts/train.py {путь_к_файлу_конфигурации}
Параметр --nproc_per_node , как и следует из названия — количество одновременных процессов PyTorch. Если у вас несколько GPU, то стоит установить значение, равное количеству GPU. При тренинге целиком на CPU, там должно быть разумное количество ядер процессора (не стоит на 16-ядерном процессоре занимать все 16 ядер).
Для настройки обучения, используйте любую из конфигураций, перечисленных ниже.
Если хотите переопределить какие-то настройки в конфигурации, без необходимости создавать новую конфигурацию каждый раз, можно сделать следующее:
torchrun --nproc_per_node=8 scripts/train.py {путь_к_файлу_конфигурации}
--настройка=значение
--настройка=значение
--настройка.поднастройка=значение
В конфигурации ниже, данные передаются в реальном времени по HTTP. Если нужно провести более полномасштабный эксперимент, рекомендуется загрузить файлы локально и изменить пути, чтобы они указывали на вашу локальную файловую систему.
python scripts/train.py {путь_к_файлу_конфигурации}
Пример:
python scripts/train.py configs/tiny/OLMo-20M.yaml --save_overwrite
Примечание: Для запуска необходимо обновить PyTorch до версии 2.5.x.
Этап 1 — самый масштабный и дорогой этап, где нейронка обучается на 4-5 триллионах токенов. В таблице ниже приведены ссылки на файлы, которые нужно передавать для консольной команды pytorch:
|
|
OLMo2 1B |
OLMo2 7B |
OLMo2 13B |
|---|---|---|---|
|
Number of tokens |
4 Trillion |
4 Trillion |
5 Trillion |
|
Checkpoint |
|||
|
Training config |
OLMo2-1B-stage1.yaml [24] |
OLMo2-7B-stage1.yaml [25] |
|
|
WandB |
wandb.ai/OLMo2-1B [27] |
wandb.ai/OLMo2-7B [28] |
wandb.ai/OLMo2-13B [29] |
Данные, в основном, загружаются из веба. Посмотрите, как выглядит раздел data.paths, и не забудьте пересохранить его в виде локальных файлов. В качестве лайфхака, можно локально развернуть веб-сервер и подменить домен olmo-data.org на 127.0.0.1. В общем, развлекайтесь, оптимизация — дело добровольное.
data:
pad_direction: right
# generate_doc_lengths: true
num_workers: 32
drop_last: true
pin_memory: true
prefetch_factor: 8
persistent_workers: true
memmap_dtype: uint32
timeout: 0
instance_filter:
repetition_max_period: 13
repetition_min_period: 1
repetition_max_count: 32
paths:
# ProofPile 2: Algebraic Stack Data
- http://olmo-data.org/preprocessed/proof-pile-2/v0_decontaminated/algebraic-stack/train/allenai/dolma2-tokenizer/part-00-00000.npy
- http://olmo-data.org/preprocessed/proof-pile-2/v0_decontaminated/algebraic-stack/train/allenai/dolma2-tokenizer/part-01-00000.npy
- http://olmo-data.org/preprocessed/proof-pile-2/v0_decontaminated/algebraic-stack/train/allenai/dolma2-tokenizer/part-02-00000.npy
Для модели 1B можно сделать три прохода обучения, с разным порядком данных, на 50 миллиардах высококачественных токенов, а затем усреднили и сварили модельный суп.
“суп”/”soup” — удобный термин, появившийся где-то в 2022-23 годах. Это метафора: когда варишь суп, нужно в кастрюлю сложить много ингридиентов. В данном случае, это модели, которые усредняются и склеиваются для достижения общего результата.
|
|
Контрольная точка |
Конфигурация обучения |
WandB |
|---|---|---|---|
|
случайное зерно 42049 |
wandb.ai/OLMo2-1B [27] |
||
|
случайное зерно 666 |
wandb.ai/OLMo2-1B [27] |
||
|
случайное зерно 42 |
wandb.ai/OLMo2-1B [27] |
||
|
итоговая смешанная модель |
main [36] |
нет конфигурации, просто усреднили веса в Python |
|
Для модели 7B проводилось три этапа обучения, с разным порядком данных, на 50 миллиардах высококачественных токенов, а затем всё усреднено в модельном супе.
|
|
Контрольная точка |
Конфигурация обучения |
WandB |
|---|---|---|---|
|
случайное зерно 42 |
wandb.ai/OLMo2-7B [39] |
||
|
случайное зерно 42069 |
wandb.ai/OLMo2-7B [39] |
||
|
случайное зерно 666 |
wandb.ai/OLMo2-7B [39] |
||
|
итоговая смешанная модель |
main [44] |
нет конфигурации, просто усреднили веса в Python |
|
Указанные здесь конфигурации настроены для загрузки последней контрольной точки после этапа 1, чтобы обучение началось прямо с этого момента. Как всегда, можно подшаманить и что-нибудь оптимизировать.
Для модели 13B проводилось три этапа обучения с разным порядком данных на 100 миллиардах высококачественных токенов и одно дополнительное обучение на 300 миллиардах высококачественных токенов. Как всегда, результаты сварили в супе.
|
|
Контрольная точка |
Конфигурация обучения |
WandB |
|---|---|---|---|
|
случайное зерно 1110, 100B |
wandb.ai/OLMo2-13B [29] |
||
|
случайное зерно 2662, 100B |
wandb.ai/OLMo2-13B [29] |
||
|
случайное зерно 6209, 100B |
wandb.ai/OLMo2-13B [29] |
||
|
случайное зерно 2662, 300B |
wandb.ai/OLMo2-13B [29] |
||
|
итоговая смешанная модель |
main [53] |
нет конфигурации, мы просто усреднили веса в Python |
|
Так же как и на прошлом этапе, конфигурации настроены для загрузки последнего чекпоинта после этапа 1, чтобы обучение началось прямо с этого момента. Как всегда, можно подшаманить и что-нибудь оптимизировать.
Примечание: Всю информацию о модели 32B можно найти в репозитории OLMo-core [20].
По ссылкам доступен полный набор instruct моделей:
OLMo2 1B Instruct [54]
OLMo2 7B Instruct [55]
OLMo2 13B Instruct [56]
OLMo2 32B Instruct [57]
Примечание: эти модели специально тренируются, чтобвы выполнять инструкции. Если базовые модели натренированы только на предсказание следующего токена и отлично подходит как база для чего-то большего, то OLMo2 Instruct лучше подходит для ответов на вопросы, суммаризации текстов и так далее. Во флагманских моделях компаний типа Anthropic подразумевается тренировка на соответствие человеческим ценностям, но конкретно в OLMo2 Instruct этим особо не заморачивались. Поэтому, если вы собираетесь использовать модельку в продакшен среде, подумайте что будете делать, когда она ответит пользователю какую-нибудь невероятную дичь.
Вы можете использовать интеграцию с Hugging Face для запуска инференса на контрольных точках OLMo Transformers:
from transformers import AutoModelForCausalLM, AutoTokenizer
olmo = AutoModelForCausalLM.from_pretrained("allenai/OLMo-2-0425-1B")
tokenizer = AutoTokenizer.from_pretrained("allenai/OLMo-2-0425-1B")
message = ["Языковое моделирование — это "]
inputs = tokenizer(message, return_tensors='pt', return_token_type_ids=False)
# необязательная проверка cuda
# inputs = {k: v.to('cuda') for k,v in inputs.items()}
# olmo = olmo.to('cuda')
response = olmo.generate(**inputs, max_new_tokens=100, do_sample=True, top_k=50, top_p=0.95)
print(tokenizer.batch_decode(response, skip_special_tokens=True)[0])
Альтернатива — абстракция pipeline от Hugging Face:
from transformers import pipeline
olmo_pipe = pipeline("text-generation", model="allenai/OLMo-2-0425-1B")
print(olmo_pipe("Ехал Грека через реку, видит Грека — в реке что?"))
olmo = AutoModelForCausalLM.from_pretrained("allenai/OLMo-2-0425-1B", torch_dtype=torch.float16, load_in_8bit=True) # требуется bitsandbytes
Квантизированная модель чувствительна к типам входных данных и обработке CUDA. Чтобы избежать потенциальных проблем, рекомендуется явно преобразовывать входные идентификаторы в CUDA, используя: inputs.input_ids.to [58]('cuda')
Дополнительные инструменты для оценки моделей OLMo доступны в репозиториях OLMo Eval [59] и olmes [60].
Modal – довольно популярный зарубежный хостинг для моделей, который используют разработчики OLMo. Купить его карточкой МИР, конечно, нельзя — кроме хостинга типа Cloud.ru [61] у нас не так много опций. Но вот турецкой карточкой — уже можно попробовать.

Пример скрипта для размещения модели OLMo 2 на Modal.com [62] с использованием OpenAI API предоставлен в ./scripts/olmo2_modal_openai.py [63]. Для его запуска:
Следуйте инструкциям в разделе “Getting Started” в руководстве [64]Modal.com [62], чтобы установить библиотеку Modal и необходимые консольные утилиты.
Следуйте инструкциям в разделе Secrets [65] руководства Modal.com [62], чтобы создать секрет Modal с именем “example-secret-token”, который определяет значение переменной MODAL_TOKEN для вашего сервера.
Затем выполните:
modal deploy ./scripts/olmo2_modal_openai.py
Эндпоинт можно проверить с помощью curl:
curl -X POST
-H "Authorization: Bearer [секретный токен из предыдущего шага]"
-H "Content-Type: application/json"
-d @body.json
https://[веб-точка, созданная modal выше]/v1/chat/completions
где body.json имеет формат:
{
"model": "OLMo-2-1124-13B-Instruct",
"messages": [
{
"role": "user",
"content": "Что общего у письменного стола и Дональда Трампа?"
}
],
"max_tokens": 100,
"temperature": 0.9,
"stream": true
}
Миниатюрная (доступная не только арабским шейхам), качественная, полностью открытая кодовая база, бесплатно. Идеальная штука, чтобы ставить эксперименты и тренироваться в алгоритмах. Лицензия Apache 2.0. Идеалити.
Разработчики не собираются останавливаться на достигнутом, следите за обновлениями их странички на Hugging Face [66].
Автор: DubnovyBlazen
Источник [67]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/14870
URLs in this post:
[1] лежат на GitHub: https://github.com/allenai/OLMo
[2] PyTorch: https://pytorch.org/
[3] здесь: https://pytorch.org/get-started/locally/
[4] обучения: http://www.braintools.ru/article/5125
[5] @1red2black: https://t.me/tg_1red2black
[6] OLMo-mix-1124: https://huggingface.co/datasets/allenai/olmo-mix-1124
[7] Dolmino-mix-1124: https://huggingface.co/datasets/allenai/dolmino-mix-1124
[8] OLMo-2 1B: https://github.com/allenai/OLMo/blob/main/configs/official-0425/OLMo-2-0425-1B.csv
[9] OLMo-2 1B: https://github.com/allenai/OLMo/blob/main/configs/official-0425/OLMo-2-0425-1B-stage2.csv
[10] Hugging Face для варианта 1B: https://huggingface.co/allenai/OLMo-2-0425-1B
[11] OLMo-2 7B: https://github.com/allenai/OLMo/blob/main/configs/official-1124/OLMo-2-1124-7B.csv
[12] OLMo-2 7B: https://github.com/allenai/OLMo/blob/main/configs/official-1124/OLMo-2-1124-7B-stage2.csv
[13] Hugging Face для варианта 7B: https://huggingface.co/allenai/OLMo-2-1124-7B
[14] OLMo-2 13B: https://github.com/allenai/OLMo/blob/main/configs/official-1124/OLMo-2-1124-13B.csv
[15] OLMo-2 13B: https://github.com/allenai/OLMo/blob/main/configs/official-1124/OLMo-2-1124-13B-stage2.csv
[16] Hugging Face для варианта 13B: https://huggingface.co/allenai/OLMo-2-1124-13B
[17] OLMo-2 32B: https://github.com/allenai/OLMo-core/blob/main/src/scripts/official/OLMo2-0325-32B.csv
[18] OLMo-2 32B: https://github.com/allenai/OLMo-core/blob/main/src/scripts/official/OLMo-2-0325-32B-stage2.csv
[19] Hugging Face для варианта 32B: https://huggingface.co/allenai/OLMo-2-0325-32B
[20] OLMo-core: https://github.com/allenai/OLMo-core
[21] stage1-step1907359-tokens4001B: https://huggingface.co/allenai/OLMo-2-0425-1B/tree/stage1-step1907359-tokens4001B
[22] stage1-step928646-tokens3896B: https://huggingface.co/allenai/OLMo-2-1124-7B/tree/stage1-step928646-tokens3896B
[23] stage1-step596057-tokens5001B: https://huggingface.co/allenai/OLMo-2-1124-13B/tree/stage1-step596057-tokens5001B
[24] OLMo2-1B-stage1.yaml: https://github.com/allenai/OLMo/blob/main/configs/official-0425/OLMo2-1B-stage1.yaml
[25] OLMo2-7B-stage1.yaml: https://github.com/allenai/OLMo/blob/main/configs/official-1124/OLMo2-7B-stage1.yaml
[26] OLMo2-13B-stage1.yaml: https://github.com/allenai/OLMo/blob/main/configs/official-1124/OLMo2-13B-stage1.yaml
[27] wandb.ai/OLMo2-1B: https://api.wandb.ai/links/ai2-llm/izdtrtu0
[28] wandb.ai/OLMo2-7B: https://wandb.ai/ai2-llm/OLMo-2-1124-7B/reports/OLMo-2-7B-Nov-2024--VmlldzoxMDUzMzE1OA
[29] wandb.ai/OLMo2-13B: https://wandb.ai/ai2-llm/OLMo-2-1124-13B/reports/OLMo-2-13B-Nov-2024--VmlldzoxMDUzMjQxNg
[30] stage2-ingredient1-step23852-tokens50B: https://huggingface.co/allenai/OLMo-2-0425-1B/tree/stage2-ingredient1-step23852-tokens51B
[31] OLMo2-1B-stage2-seed42069.yaml: https://claude.ai/chat/configs/official-0425/OLMo2-1B-stage2-seed42069.yaml
[32] stage2-ingredient2-step23852-tokens50B: https://huggingface.co/allenai/OLMo-2-0425-1B/tree/stage2-ingredient2-step23852-tokens51B
[33] OLMo2-1B-stage2-seed666.yaml: https://claude.ai/chat/configs/official-0425/OLMo2-1B-stage2-seed666.yaml
[34] stage2-ingredient3-step23852-tokens50B: https://huggingface.co/allenai/OLMo-2-0425-1B/tree/stage2-ingredient3-step23852-tokens51B
[35] OLMo2-1B-stage2-seed42.yaml: https://claude.ai/chat/configs/official-0425/OLMo2-1B-stage2-seed42.yaml
[36] main: https://huggingface.co/allenai/OLMo-2-0425-1B/tree/main
[37] stage2-ingredient1-step11931-tokens50B: https://huggingface.co/allenai/OLMo-2-1124-7B/tree/stage2-ingredient1-step11931-tokens50B
[38] OLMo2-7B-stage2-seed42.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-7B-stage2-seed42.yaml
[39] wandb.ai/OLMo2-7B: https://wandb.ai/ai2-llm/OLMo-2-1124-7B/reports/
[40] stage2-ingredient2-step11931-tokens50B: https://huggingface.co/allenai/OLMo-2-1124-7B/tree/stage2-ingredient2-step11931-tokens50B
[41] OLMo2-7B-stage2-seed42069.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-7B-stage2-seed42069.yaml
[42] stage2-ingredient3-step11931-tokens50B: https://huggingface.co/allenai/OLMo-2-1124-7B/tree/stage2-ingredient3-step11931-tokens50B
[43] OLMo2-7B-stage2-seed666.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-7B-stage2-seed666.yaml
[44] main: https://huggingface.co/allenai/OLMo-2-1124-7B/tree/main
[45] stage2-ingredient1-step11931-tokens100B: https://huggingface.co/allenai/OLMo-2-1124-13B/tree/stage2-ingredient1-step11931-tokens100B
[46] OLMo2-13B-stage2-seed1110-100B.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-13B-stage2-seed1110-100B.yaml
[47] stage2-ingredient2-step11931-tokens100B: https://huggingface.co/allenai/OLMo-2-1124-13B/tree/stage2-ingredient2-step11931-tokens100B
[48] OLMo2-13B-stage2-seed2662-100B.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-13B-stage2-seed2662-100B.yaml
[49] stage2-ingredient3-step11931-tokens100B: https://huggingface.co/allenai/OLMo-2-1124-13B/tree/stage2-ingredient3-step11931-tokens100B
[50] OLMo2-13B-stage2-seed6209-100B.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-13B-stage2-seed6209-100B.yaml
[51] stage2-ingredient4-step11931-tokens300B: https://huggingface.co/allenai/OLMo-2-1124-13B/tree/stage2-ingredient4-step35773-tokens300B
[52] OLMo2-13B-stage2-seed2662-300B.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-13B-stage2-seed2662-300B.yaml
[53] main: https://huggingface.co/allenai/OLMo-2-1124-13B/tree/main
[54] OLMo2 1B Instruct: https://huggingface.co/allenai/OLMo-2-0425-1B-Instruct
[55] OLMo2 7B Instruct: https://huggingface.co/allenai/OLMo-2-1124-7B-Instruct
[56] OLMo2 13B Instruct: https://huggingface.co/allenai/OLMo-2-1124-13B-Instruct
[57] OLMo2 32B Instruct: https://huggingface.co/allenai/OLMo-2-0325-32B-Instruct
[58] ids.to: http://ids.to
[59] OLMo Eval: https://github.com/allenai/OLMo-eval
[60] olmes: https://github.com/allenai/olmes
[61] Cloud.ru: https://cloud.ru/products/vychislitelnyye-moschnosti-s-gpu
[62] Modal.com: http://Modal.com
[63] openai.py: http://openai.py
[64] руководстве : https://modal.com/docs/guide
[65] Secrets: https://modal.com/docs/guide/secrets
[66] странички на Hugging Face: https://huggingface.co/allenai
[67] Источник: https://habr.com/ru/companies/bar/articles/906500/?utm_source=habrahabr&utm_medium=rss&utm_campaign=906500
Нажмите здесь для печати.