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

Bu model, 2024-07-31 tarihinde HF papers'ta yayımlandı ve 2024-04-24 tarihinde Hugging Face Transformers'a katkıda bulunuldu.

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?")

Genel Bakış

Llama3 modeli, meta AI ekibi tarafından Introducing Meta Llama 3: The most capable openly available LLM to date başlıklı çalışmada önerilmiştir.

Blog yazısındaki özet aşağıdaki gibidir:

Bugün, Llama'nın yeni nesli olan Meta Llama 3'ün, geniş kullanım için erişime açılan ilk iki modelini paylaşmaktan heyecan duyuyoruz. Bu sürüm, geniş bir kullanım senaryosu yelpazesini destekleyebilen 8B ve 70B parametreli ön eğitilmiş ve talimatla ince ayarlanmış dil modelleri içeriyor. Llama'nın bu yeni nesli, çeşitli sektör standartlarında en iyi performansı sergilemekte ve gelişmiş akıl yürütme dahil olmak üzere yeni yetenekler sunmaktadır. Bu modellerin, kendi sınıflarında en iyi açık kaynak modeller olduğuna inanıyoruz. Uzun süredir benimsediğimiz açık yaklaşımımız doğrultusunda, Llama 3'ü topluluğun kullanımına sunuyoruz. Uygulamalardan geliştirici araçlarına, değerlendirmelerden çıkarım optimizasyonlarına kadar tüm yığın boyunca yapay zekâdaki bir sonraki inovasyon dalgasını başlatmak istiyoruz. Ne inşa edeceğinizi görmek ve geri bildirimlerinizi almak için sabırsızlanıyoruz.

Tüm Llama3 model kontrol noktalarını burada inceleyebilirsiniz. Yazarların orijinal kodu burada bulunabilir.

Kullanım ipuçları

Llama3 modelleri bfloat16 kullanılarak eğitildi, ancak orijinal çıkarım float16 kullanır. Hub'a yüklenen denetim noktaları dtype = 'float16' kullanır ve AutoModel API'si denetim noktalarını torch.float32'den torch.float16'ya dönüştürmek için bunu kullanır.

Çevrimiçi ağırlıkların dtype değeri, model = AutoModelForCausalLM.from_pretrained("path", dtype = "auto") ile dtype="auto" kullanarak bir model başlatmadıkça büyük ölçüde önemsizdir. Bunun nedeni, modelin önce indirilmesi (çevrimiçi checkpoint'lerin dtype değeri kullanılarak), ardından torch'ün varsayılan dtype değerine (torch.float32, device_map="auto" olarak) dönüştürülmesi ve son olarak yapılandırmada dtype veya torch_dtype belirtilmişse bunun kullanılmasıdır.

Modeli float16 ile eğitmek önerilmez ve nan üretmesi bilinmektedir; bu nedenle model bfloat16 ile eğitilmelidir.

İpuçları:

  • Llama3 modellerinin ağırlıkları, bu formu doldurarak elde edilebilir.

  • Mimari, Llama2 ile tamamen aynıdır.

  • Tokenizör, tiktoken tabanlı bir BPE modelidir (Llama2 için sentencepiece uygulamasına dayalı olandan farklı olarak). Temel farkı, bir girdi tokeni sözlüğün bir parçasıysa BPE birleştirme kurallarını yok saymasıdır. Bu, "hugging" tokenini üretmek için bir birleştirme kuralı yoksa, ["hug","ging"] gibi en küçük birimlerden oluşan 2 token yerine, "hugging" sözlüğün bir parçasıysa otomatik olarak bir token olarak döndürüleceği anlamına gelir.

  • Orijinal model, dolgu sembolü olmadığını gösteren pad_id = -1 değerini kullanır. Aynı mantığı uygulayamayız; bu nedenle tokenizer.add_special_tokens({"pad_token":"<pad>"}) ile bir dolgu sembolü eklediğinizden ve token gömme boyutunu buna göre yeniden boyutlandırdığınızdan emin olun. Ayrıca model.config.pad_token_id değerini de ayarlamanız gerekir. Modelin embed_tokens katmanı, self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx) ile başlatılır; bu, dolgu sembolünün kodlanmasının sıfır üreteceğini garanti eder, bu yüzden başlatma sırasında bu değeri geçmek önerilir.

  • Orijinal checkpoint, dönüştürme betiği kullanılarak dönüştürülebilir. Betik, aşağıdaki (örnek) komutla çağrılabilir:

    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
  • Dönüştürme işleminden sonra model ve tokenizer şu şekilde yüklenebilir:

    from transformers import AutoModelForCausalLM, AutoTokenizer
    
    tokenizer = AutoTokenizer.from_pretrained("/output/path")
    model = AutoModelForCausalLM.from_pretrained("/output/path", device_map="auto")

    Not edin ki betiğin çalıştırılması, tüm modelin float16 hassasiyetinde barındırılması için yeterli CPU RAM gerektirir (en büyük sürümler birden fazla checkpoint olarak gelse de, bunların her biri modelin her ağırlığının bir parçasını içerdiğinden, hepsini RAM'e yüklememiz gerekir). 75B model için bu, 145GB RAM gerektirir.

  • attn_implementation="flash_attention_2" ile Flash Attention 2 kullanırken, from_pretrained sınıf yöntemine dtype parametresini geçirmeyin ve Otomatik Karma Hassasiyet (Automatic Mixed-Precision) eğitimi kullanın. Trainer kullanıyorsanız, True değerini fp16 veya bf16 parametresine atamanız yeterlidir. Aksi takdirde, torch.autocast kullandığınızdan emin olun. Flash Attention yalnızca fp16 ve bf16 veri türlerini desteklediği için bu gereklidir.

Kaynaklar

Llama2 dokümantasyon sayfasında zaten bol miktarda harika kaynak mevcut; Llama3 için derlenmiş yeni kaynaklar eklemeye davet ediyoruz! 🤗

Update on GitHub