- PVSM.RU - https://www.pvsm.ru -

OLMo — моделька от AI2, разработанная учёными для учёных. Если вы занимаетесь экспериментами над нейронками, это идеальный вариант: весь код и данные, необходимые для тренировки, открыто лежат на GitHub [1]. Более того, выложены даже промежуточные чекпоинты, с очень высокой гранулярностью. Это отличает ее от якобы "открытых" нейронок, которые обычно приходят к тебе монолитным финальным бинарём.
Эта статья — короткий гайд, по большей части взятый с GitHub создателей нейросети. Гайд проверен в боевых условиях и действительно работает.
Сначала установливаем Git, Python и PyTorch [2], следуя инструкциям для вашей операционной системы. Инструкции для PyTorch есть здесь [3].
Для обучения и дообучения рекомендуется установка из исходного кода:
git clone https://github.com/allenai/OLMo.git
cd OLMo
pip install -e .[all]
Также можно установить из PyPI:
pip install ai2-olmo
Shameless plug. Хотите свежего мяса и пейперов про нейронки? Телега @1red2black [4].
Предварительное обучение OLMo проходит в два этапа. На первом этапе мы обучаем модель на больших объёмах данных, преимущественно из интернета: OLMo-mix-1124 [5] На втором этапе мы обучаем на меньшем объёме высококачественных целевых данных: Dolmino-mix-1124 [6]
Вы можете найти все контрольные точки моделей, как минимум каждые 1000 шагов обучения, в форматах OLMo и Hugging Face:
|
Вариант |
Формат OLMo (Этап 1) |
Формат OLMo (Этап 2) |
Формат Hugging Face |
|---|---|---|---|
|
OLMo-2 1B |
OLMo-2 1B [7] |
OLMo-2 1B [8] |
|
|
OLMo-2 7B |
OLMo-2 7B [10] |
OLMo-2 7B [11] |
|
|
OLMo-2 13B |
OLMo-2 13B [13] |
OLMo-2 13B [14] |
|
|
OLMo-2 32B |
OLMo-2 32B [16] |
OLMo-2 32B [17] |
Примечание: для варианта 32B использовались новые скрипты для тренинга, которые тоже открыто опубликованы. Если хотите пройти весь этот путь, для обучения или дообучения OLMo-2 32B посетите OLMo-core [19].
Чтобы воспроизвести любой из описанных ниже процессов обучения, выполните:
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 [23] |
OLMo2-7B-stage1.yaml [24] |
|
|
WandB |
wandb.ai/OLMo2-1B [26] |
wandb.ai/OLMo2-7B [27] |
wandb.ai/OLMo2-13B [28] |
Данные, в основном, загружаются из веба. Посмотрите, как выглядит раздел 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 [26] |
||
|
случайное зерно 666 |
wandb.ai/OLMo2-1B [26] |
||
|
случайное зерно 42 |
wandb.ai/OLMo2-1B [26] |
||
|
итоговая смешанная модель |
main [35] |
нет конфигурации, просто усреднили веса в Python |
|
Для модели 7B проводилось три этапа обучения, с разным порядком данных, на 50 миллиардах высококачественных токенов, а затем всё усреднено в модельном супе.
|
|
Контрольная точка |
Конфигурация обучения |
WandB |
|---|---|---|---|
|
случайное зерно 42 |
wandb.ai/OLMo2-7B [38] |
||
|
случайное зерно 42069 |
wandb.ai/OLMo2-7B [38] |
||
|
случайное зерно 666 |
wandb.ai/OLMo2-7B [38] |
||
|
итоговая смешанная модель |
main [43] |
нет конфигурации, просто усреднили веса в Python |
|
Указанные здесь конфигурации настроены для загрузки последней контрольной точки после этапа 1, чтобы обучение началось прямо с этого момента. Как всегда, можно подшаманить и что-нибудь оптимизировать.
Для модели 13B проводилось три этапа обучения с разным порядком данных на 100 миллиардах высококачественных токенов и одно дополнительное обучение на 300 миллиардах высококачественных токенов. Как всегда, результаты сварили в супе.
|
|
Контрольная точка |
Конфигурация обучения |
WandB |
|---|---|---|---|
|
случайное зерно 1110, 100B |
wandb.ai/OLMo2-13B [28] |
||
|
случайное зерно 2662, 100B |
wandb.ai/OLMo2-13B [28] |
||
|
случайное зерно 6209, 100B |
wandb.ai/OLMo2-13B [28] |
||
|
случайное зерно 2662, 300B |
wandb.ai/OLMo2-13B [28] |
||
|
итоговая смешанная модель |
main [52] |
нет конфигурации, мы просто усреднили веса в Python |
|
Так же как и на прошлом этапе, конфигурации настроены для загрузки последнего чекпоинта после этапа 1, чтобы обучение началось прямо с этого момента. Как всегда, можно подшаманить и что-нибудь оптимизировать.
Примечание: Всю информацию о модели 32B можно найти в репозитории OLMo-core [19].
По ссылкам доступен полный набор instruct моделей:
OLMo2 1B Instruct [53]
OLMo2 7B Instruct [54]
OLMo2 13B Instruct [55]
OLMo2 32B Instruct [56]
Примечание: эти модели специально тренируются, чтобвы выполнять инструкции. Если базовые модели натренированы только на предсказание следующего токена и отлично подходит как база для чего-то большего, то 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 [57]('cuda')
Дополнительные инструменты для оценки моделей OLMo доступны в репозиториях OLMo Eval [58] и olmes [59].
Modal - довольно популярный зарубежный для моделей, который используют разработчики OLMo. Купить его карточкой МИР, конечно, нельзя — кроме

Пример скрипта для размещения модели 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://[домен эндпоинта из предыдущей команды]/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]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/opensource/418505
Ссылки в тексте:
[1] лежат на GitHub: https://github.com/allenai/OLMo
[2] PyTorch: https://pytorch.org/
[3] здесь: https://pytorch.org/get-started/locally/
[4] @1red2black: https://t.me/tg_1red2black
[5] OLMo-mix-1124: https://huggingface.co/datasets/allenai/olmo-mix-1124
[6] Dolmino-mix-1124: https://huggingface.co/datasets/allenai/dolmino-mix-1124
[7] OLMo-2 1B: https://github.com/allenai/OLMo/blob/main/configs/official-0425/OLMo-2-0425-1B.csv
[8] OLMo-2 1B: https://github.com/allenai/OLMo/blob/main/configs/official-0425/OLMo-2-0425-1B-stage2.csv
[9] Hugging Face для варианта 1B: https://huggingface.co/allenai/OLMo-2-0425-1B
[10] OLMo-2 7B: https://github.com/allenai/OLMo/blob/main/configs/official-1124/OLMo-2-1124-7B.csv
[11] OLMo-2 7B: https://github.com/allenai/OLMo/blob/main/configs/official-1124/OLMo-2-1124-7B-stage2.csv
[12] Hugging Face для варианта 7B: https://huggingface.co/allenai/OLMo-2-1124-7B
[13] OLMo-2 13B: https://github.com/allenai/OLMo/blob/main/configs/official-1124/OLMo-2-1124-13B.csv
[14] OLMo-2 13B: https://github.com/allenai/OLMo/blob/main/configs/official-1124/OLMo-2-1124-13B-stage2.csv
[15] Hugging Face для варианта 13B: https://huggingface.co/allenai/OLMo-2-1124-13B
[16] OLMo-2 32B: https://github.com/allenai/OLMo-core/blob/main/src/scripts/official/OLMo2-0325-32B.csv
[17] OLMo-2 32B: https://github.com/allenai/OLMo-core/blob/main/src/scripts/official/OLMo-2-0325-32B-stage2.csv
[18] Hugging Face для варианта 32B: https://huggingface.co/allenai/OLMo-2-0325-32B
[19] OLMo-core: https://github.com/allenai/OLMo-core
[20] stage1-step1907359-tokens4001B: https://huggingface.co/allenai/OLMo-2-0425-1B/tree/stage1-step1907359-tokens4001B
[21] stage1-step928646-tokens3896B: https://huggingface.co/allenai/OLMo-2-1124-7B/tree/stage1-step928646-tokens3896B
[22] stage1-step596057-tokens5001B: https://huggingface.co/allenai/OLMo-2-1124-13B/tree/stage1-step596057-tokens5001B
[23] OLMo2-1B-stage1.yaml: https://github.com/allenai/OLMo/blob/main/configs/official-0425/OLMo2-1B-stage1.yaml
[24] OLMo2-7B-stage1.yaml: https://github.com/allenai/OLMo/blob/main/configs/official-1124/OLMo2-7B-stage1.yaml
[25] OLMo2-13B-stage1.yaml: https://github.com/allenai/OLMo/blob/main/configs/official-1124/OLMo2-13B-stage1.yaml
[26] wandb.ai/OLMo2-1B: https://api.wandb.ai/links/ai2-llm/izdtrtu0
[27] wandb.ai/OLMo2-7B: https://wandb.ai/ai2-llm/OLMo-2-1124-7B/reports/OLMo-2-7B-Nov-2024--VmlldzoxMDUzMzE1OA
[28] wandb.ai/OLMo2-13B: https://wandb.ai/ai2-llm/OLMo-2-1124-13B/reports/OLMo-2-13B-Nov-2024--VmlldzoxMDUzMjQxNg
[29] stage2-ingredient1-step23852-tokens50B: https://huggingface.co/allenai/OLMo-2-0425-1B/tree/stage2-ingredient1-step23852-tokens51B
[30] OLMo2-1B-stage2-seed42069.yaml: https://claude.ai/chat/configs/official-0425/OLMo2-1B-stage2-seed42069.yaml
[31] stage2-ingredient2-step23852-tokens50B: https://huggingface.co/allenai/OLMo-2-0425-1B/tree/stage2-ingredient2-step23852-tokens51B
[32] OLMo2-1B-stage2-seed666.yaml: https://claude.ai/chat/configs/official-0425/OLMo2-1B-stage2-seed666.yaml
[33] stage2-ingredient3-step23852-tokens50B: https://huggingface.co/allenai/OLMo-2-0425-1B/tree/stage2-ingredient3-step23852-tokens51B
[34] OLMo2-1B-stage2-seed42.yaml: https://claude.ai/chat/configs/official-0425/OLMo2-1B-stage2-seed42.yaml
[35] main: https://huggingface.co/allenai/OLMo-2-0425-1B/tree/main
[36] stage2-ingredient1-step11931-tokens50B: https://huggingface.co/allenai/OLMo-2-1124-7B/tree/stage2-ingredient1-step11931-tokens50B
[37] OLMo2-7B-stage2-seed42.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-7B-stage2-seed42.yaml
[38] wandb.ai/OLMo2-7B: https://wandb.ai/ai2-llm/OLMo-2-1124-7B/reports/
[39] stage2-ingredient2-step11931-tokens50B: https://huggingface.co/allenai/OLMo-2-1124-7B/tree/stage2-ingredient2-step11931-tokens50B
[40] OLMo2-7B-stage2-seed42069.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-7B-stage2-seed42069.yaml
[41] stage2-ingredient3-step11931-tokens50B: https://huggingface.co/allenai/OLMo-2-1124-7B/tree/stage2-ingredient3-step11931-tokens50B
[42] OLMo2-7B-stage2-seed666.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-7B-stage2-seed666.yaml
[43] main: https://huggingface.co/allenai/OLMo-2-1124-7B/tree/main
[44] stage2-ingredient1-step11931-tokens100B: https://huggingface.co/allenai/OLMo-2-1124-13B/tree/stage2-ingredient1-step11931-tokens100B
[45] OLMo2-13B-stage2-seed1110-100B.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-13B-stage2-seed1110-100B.yaml
[46] stage2-ingredient2-step11931-tokens100B: https://huggingface.co/allenai/OLMo-2-1124-13B/tree/stage2-ingredient2-step11931-tokens100B
[47] OLMo2-13B-stage2-seed2662-100B.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-13B-stage2-seed2662-100B.yaml
[48] stage2-ingredient3-step11931-tokens100B: https://huggingface.co/allenai/OLMo-2-1124-13B/tree/stage2-ingredient3-step11931-tokens100B
[49] OLMo2-13B-stage2-seed6209-100B.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-13B-stage2-seed6209-100B.yaml
[50] stage2-ingredient4-step11931-tokens300B: https://huggingface.co/allenai/OLMo-2-1124-13B/tree/stage2-ingredient4-step35773-tokens300B
[51] OLMo2-13B-stage2-seed2662-300B.yaml: https://claude.ai/chat/configs/official-1124/OLMo2-13B-stage2-seed2662-300B.yaml
[52] main: https://huggingface.co/allenai/OLMo-2-1124-13B/tree/main
[53] OLMo2 1B Instruct: https://huggingface.co/allenai/OLMo-2-0425-1B-Instruct
[54] OLMo2 7B Instruct: https://huggingface.co/allenai/OLMo-2-1124-7B-Instruct
[55] OLMo2 13B Instruct: https://huggingface.co/allenai/OLMo-2-1124-13B-Instruct
[56] OLMo2 32B Instruct: https://huggingface.co/allenai/OLMo-2-0325-32B-Instruct
[57] ids.to: http://ids.to
[58] OLMo Eval: https://github.com/allenai/OLMo-eval
[59] olmes: https://github.com/allenai/olmes
[60] хостинг: https://www.reg.ru/?rlink=reflink-717
[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_campaign=906500&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.