Transformers documentation

Llama3

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Эта модель была опубликована в HF papers 31 июля 2024 года и добавлена в Hugging Face Transformers 24 апреля 2024 года.

Llama3

Tensor parallelism
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', что будет использовано API AutoModel для приведения чекпоинтов из 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