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

このモデルは2024年7月31日にHF papersで公開され、2024年4月24日にHugging Face Transformersに貢献されました。

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の最初の2つのモデルを、広くご利用いただける形で公開できることを嬉しく思います。今回のリリースでは、8Bパラメータと70Bパラメータの事前学習済み言語モデルと、指示に微調整を施した言語モデルを提供し、幅広いユースケースに対応できます。この次世代Llamaは、幅広い業界ベンチマークで最先端の性能を示し、推論能力の向上など、新たな機能を提供します。私たちは、これらが同クラスで最良のオープンソースモデルであると確信しています。長年続けてきたオープンなアプローチを支持するため、Llama 3をコミュニティに提供します。アプリケーションから開発者ツール、評価、推論の最適化など、スタック全体にわたるAIの次のイノベーションの波を巻き起こしたいと考えています。皆様にご構築いただくものを待ちきれず、フィードバックをお待ちしております。

Llama3 のすべてのモデルチェックポイントはこちらで確認できます。 著者の元のコードはこちらにあります。

使用のコツ

Llama3モデルはbfloat16を使用して学習されましたが、元の推論ではfloat16が使用されています。Hubにアップロードされたチェックポイントはdtype = 'float16'を使用しており、AutoModel APIによって、チェックポイントがtorch.float32からtorch.float16へキャストされます。

dtype は、model = AutoModelForCausalLM.from_pretrained("path", dtype = "auto") のように dtype="auto" を指定してモデルを初期化する場合を除き、オンラインの重みに対してはほぼ無関係です。その理由は、モデルがまずオンラインのチェックポイントの dtype でダウンロードされ、次に torch のデフォルトの dtype(torch.float32 になり、device_map=“auto”)にキャストされ、最後に設定に dtype または torch_dtype が指定されている場合はそれが使用されるためです。

float16 でモデルをトレーニングすることは推奨されておらず、nan が発生することが知られています。そのため、モデルは bfloat16 でトレーニングする必要があります。

ヒント:

  • Llama3モデルの重みは、このフォームに記入することで入手できます。

  • アーキテクチャはLlama2と完全に同一です。

  • トークナイザーは、tiktoken に基づく BPE モデルです(Llama2 では sentencepiece 実装に基づいていました)。主な違いは、入力トークンが語彙の一部である場合、BPE のマージルールを無視することです。つまり、"hugging" を生成するマージが存在しない場合、["hug","ging"] のような最小単位で 2 つのトークンに分割されるのではなく、"hugging" が語彙の一部であれば、自動的に 1 つのトークンとして返されます。

  • 元のモデルは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")

    スクリプトの実行には、モデル全体をfloat16精度で保持するのに十分なCPU RAMが必要です(最大サイズのモデルは複数のチェックポイントに分割されていますが、各チェックポイントにはモデルの各重みの一部が含まれているため、すべてをRAMにロードする必要があります)。したがって、75Bモデルの場合、145GBのRAMが必要です。

  • attn_implementation="flash_attention_2" を介して Flash Attention 2 を使用する場合は、from_pretrained クラスメソッドに dtype を渡さず、Automatic Mixed-Precision 学習を使用してください。Trainer を使用する場合は、fp16 または bf16 を True に設定するだけです。それ以外の場合は、torch.autocast を使用していることを確認してください。これは、Flash Attention が fp16 と bf16 のデータ型のみをサポートするためです。

リソース

Llama2のドキュメントページには、すでに多くの優れたリソースが公開されています。Llama3向けに厳選された新しいリソースの追加にご協力ください!🤗

Update on GitHub