[Meta AI] LLaMA: Open and Efficient Foundation Language Models
Hugo Touvron, Thibaut Lavril, Gautier Izacard, Xavier Martinet, Marie-Anne Lachaux, Timothée Lacroix, Baptiste Rozière, Naman Goyal, Eric Hambro, Faisal Azhar, Aurelien Rodriguez, Armand Joulin, Edouard Grave, Guillaume Lample
Статья: https://research.facebook.com/publications/llama-open-and-efficient-foundation-language-models/
Пост в блоге: https://ai.facebook.com/blog/large-language-model-llama-meta-ai/
Код (ничего интересного, только структура модели и инференс): https://github.com/facebookresearch/llama
Надо по горячим следам разобрать свежую модель LLaMA.
Сразу стоит отметить, что хоть она и заявляется Лекуном как open-source (https://www.facebook.com/yann.lecun/posts/pfbid027jeALGKiUcDZLLcfDA4smA3z9wJKUyBKogSo6EiuKz3PPNpBkskixSzoiY6b56Cql), это конечно безумно далеко от реальности. Опенсорс только структура модели и код для инференса, а код для обучения, датасеты и конечно же веса нифига не опенсорс. Так и я могу сказать, что я AlphaGo Zero заопенсорсил (https://github.com/che-shr-cat/alphago), но каждый же понимает насколько это далеко от реальности. Про веса ещё и сказано, что обученную модель (буде вам соизволят выдать к ней доступ, форма для заполнения в посте) нельзя использовать в коммерческих целях. В общем, конечно, лучше, чем с совсем закрытой Шиншиллой (https://t.me/gonzo_ML/1216), но всё равно называть это опенсорсом too much.
Что можно сказать про модель?
Это снова декодер трансформера в стиле GPT-3 (https://t.me/gonzo_ML/305), но более релевантный референс пойнт всё же Шиншилла (https://t.me/gonzo_ML/1216), потому что LLaMA обучена с учётом оптимального соотношения между размером модели и количеством токенов в обучении, найденного в той работе. И они в этом смысле сравнимы.
В текущей работе делают дополнительный упор на инференс, который безусловно важен и для множества моделей составляет их основное время жизни. Хотя кроме слов про это ничего больше нет.
Датасеты используются только публичные, чтобы можно было воспроизвести, это хорошо. В этом смысле вопрос про датасет в значительной мере снимается, хотя наверняка всё равно было много своего кода для его подготовки. Больше всего в данных содержится CommonCrawl (67%), потом C4 (15%), далее GitHub, Wikipedia (на 20 языках), Books, ArXiv и StackExchange (я не понял, это какой-то понятный датасет, который можно взять, или их собственный дамп, по описанию которого фиг воспроизведёшь работу).
Токенизатор BPE (от кстати тоже отсутствует в “опенсорсе”), все числа разбиваются на отдельные цифры, есть фолбэк на байты в случае незнакомых UTF-8 символов.
Обучено четыре модели: 6.7B, 13B, 32.5B, 65.2B. Первые две на 1T токенов, вторые на 1.4T.
Для сравнения:
- GPT-3, N=175B, D=300B
- Gopher, N=280B, D=300B (https://t.me/gonzo_ML/742)
- Chinchilla, N=70B, D=1.4T
- LLaMA, N=65B, D=1.4T
Для большинства токенов в обучении они используются лишь один раз, кроме Википедии и книг, которые используются примерно в двух эпохах.
Изменения в трансформере относительно классического трансформера Васвани:
- пренормализация как в GPT-3
- SwiGLU активация как в PaLM, но с чуть другой размерностью
- Rotary Embeddings (RoPE) как в GPTNeo
Оптимизатор AdamW с обычными гиперпараметрами, cosine learning rate schedule с финальным learning rate в 10% от максимального, 2 тысячи шагов прогрева.
Использовали эффективную имплементацию causal multi-head attention (экономит вычисления и память, не считая, что не нужно для замаскированных токенов), доступную в библиотеке xformers (https://github.com/facebookresearch/xformers).
Использовали чекпойнтинг, чтобы не пересчитывать активации на обратном проходе (сохраняли те, что дорого считать, типа выходов линейных слоёв). Для этого написали свой код для функции backward() трансформерных слоёв, не полагаясь на autograd пайторча (но этот код, конечно, тоже не входит в “опенсорс”).
Использовали model и sequence parallelism (как в работе Нвидии “Reducing Activation Recomputation in Large Transformer Models” https://arxiv.org/abs/2205.05198).
Post #1324
2.84K