Transformers documentation
Llama3
Эта модель была опубликована в HF papers 31 июля 2024 года и добавлена в Hugging Face Transformers 24 апреля 2024 года.
Llama3
import torch
import transformers
model_id = "meta-llama/Meta-Llama-3-8B"
pipeline = transformers.pipeline("text-generation", model=model_id, model_kwargs={"dtype": torch.bfloat16}, device_map="auto")
pipeline("Hey how are you doing today?")Обзор
Модель Llama3 была представлена командой Meta AI в статье Introducing Meta Llama 3: The most capable openly available LLM to date.
Аннотация из блога следующая:
Сегодня мы рады представить первые две модели следующего поколения Llama — Meta Llama 3, доступные для широкого использования. В этом релизе представлены предобученные и дообученные на инструкциях языковые модели с 8B и 70B параметрами, способные поддерживать широкий спектр задач. Новое поколение Llama демонстрирует передовые результаты на множестве отраслевых бенчмарков и предлагает новые возможности, включая улучшенное рассуждение. Мы считаем, что это лучшие открытые модели своего класса, без оговорок. В рамках нашего давнего открытого подхода мы передаём Llama 3 в руки сообщества. Мы хотим запустить новую волну инноваций в области ИИ по всему стеку — от приложений и инструментов для разработчиков до оценок и оптимизации инференса. Мы с нетерпением ждём, что вы создадите, и будем рады вашему отзыву.
Все контрольные точки моделей Llama3 можно найти здесь. Исходный код авторов доступен здесь.
Советы по использованию
Модели
Llama3обучались с использованиемbfloat16, однако исходный инференс используетfloat16. Чекпоинты, загруженные на Hub, используютdtype = 'float16', что будет использовано APIAutoModelдля приведения чекпоинтов изtorch.float32кtorch.float16.
dtypeонлайн-весов в большинстве случаев не имеет значения, если только при инициализации модели с помощьюmodel = AutoModelForCausalLM.from_pretrained("path", dtype = "auto")не используетсяdtype="auto". Причина в том, что модель сначала скачивается (с использованиемdtypeиз онлайн-чекпоинтов), затем приводится кdtypeпо умолчанию вtorch(становитсяtorch.float32, device_map=“auto”), и, наконец, если в конфигурации заданыdtypeилиtorch_dtype, они будут использованы.Обучение модели в
float16не рекомендуется, так как известно, что это приводит к появлениюnan; поэтому модель следует обучать вbfloat16.
Советы:
Веса для моделей Llama3 можно получить, заполнив эту форму
Архитектура полностью совпадает с Llama2.
Токенизатор представляет собой модель BPE на основе tiktoken (в отличие от реализации на базе sentencepiece для Llama2). Главное отличие состоит в том, что он игнорирует правила слияния BPE, если входной токен уже входит в словарь. Это означает, что если не существует слияния, которое могло бы образовать
"hugging", то вместо получения минимальных единиц, например["hug","ging"]из 2 токенов, если"hugging"входит в словарь, он будет автоматически возвращён как токен.Исходная модель использует
pad_id = -1, что означает отсутствие токена отступов. Мы не можем использовать ту же логику, поэтому убедитесь, что добавили токен отступов с помощьюtokenizer.add_special_tokens({"pad_token":"<pad>"})и соответствующим образом изменили размер эмбеддингов токенов. Также необходимо установитьmodel.config.pad_token_id. Слойembed_tokensмодели инициализируется выражениемself.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx), что гарантирует, что кодирование токена отступов будет возвращать нули, поэтому рекомендуется передавать его при инициализации.Исходную контрольную точку можно преобразовать с помощью скрипта конвертации. Скрипт можно запустить следующей (примерной) командой:
python src/transformers/models/llama/convert_llama_weights_to_hf.py \ --input_dir /path/to/downloaded/llama/weights --model_size 7B --output_dir /output/path --llama_version 3После конвертации модель и токенизатор можно загрузить с помощью:
from transformers import AutoModelForCausalLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("/output/path") model = AutoModelForCausalLM.from_pretrained("/output/path", device_map="auto")Обратите внимание, что для выполнения скрипта необходимо достаточно оперативной памяти CPU, чтобы разместить всю модель в точности float16 (даже если самые большие версии поставляются в виде нескольких контрольных точек, каждая из них содержит часть каждого веса модели, поэтому нам нужно загрузить их все в ОЗУ). Для модели 75B требуется 145 ГБ ОЗУ.
При использовании Flash Attention 2 через
attn_implementation="flash_attention_2"не передавайтеdtypeв метод классаfrom_pretrainedи используйте обучение с автоматическим смешанным прецизионным режимом. При использованииTrainerдостаточно установитьfp16илиbf16вTrue. В противном случае убедитесь, что вы используетеtorch.autocast. Это необходимо, так как Flash Attention поддерживает только типы данныхfp16иbf16.
Ресурсы
На странице документации Llama2 уже собрано множество полезных ресурсов, и мы приглашаем участников добавлять сюда новые материалы, отобранные для Llama3! 🤗
Update on GitHub