Transformers documentation
Llama3
Bu model, 2024-07-31 tarihinde HF papers'ta yayımlandı ve 2024-04-24 tarihinde Hugging Face Transformers'a katkıda bulunuldu.
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?")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ı
Llama3modelleribfloat16kullanılarak eğitildi, ancak orijinal çıkarımfloat16kullanır. Hub'a yüklenen denetim noktalarıdtype = 'float16'kullanır veAutoModelAPI'si denetim noktalarınıtorch.float32'dentorch.float16'ya dönüştürmek için bunu kullanır.Çevrimiçi ağırlıkların
dtypedeğeri,model = AutoModelForCausalLM.from_pretrained("path", dtype = "auto")iledtype="auto"kullanarak bir model başlatmadıkça büyük ölçüde önemsizdir. Bunun nedeni, modelin önce indirilmesi (çevrimiçi checkpoint'lerindtypedeğeri kullanılarak), ardındantorch'ün varsayılandtypedeğerine (torch.float32, device_map="auto" olarak) dönüştürülmesi ve son olarak yapılandırmadadtypeveyatorch_dtypebelirtilmişse bunun kullanılmasıdır.Modeli
float16ile eğitmek önerilmez venanüretmesi bilinmektedir; bu nedenle modelbfloat16ile 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 = -1değerini kullanır. Aynı mantığı uygulayamayız; bu nedenletokenizer.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ıcamodel.config.pad_token_iddeğerini de ayarlamanız gerekir. Modelinembed_tokenskatmanı,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 3Dö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_pretrainedsınıf yönteminedtypeparametresini geçirmeyin ve Otomatik Karma Hassasiyet (Automatic Mixed-Precision) eğitimi kullanın.Trainerkullanıyorsanız,Truedeğerinifp16veyabf16parametresine atamanız yeterlidir. Aksi takdirde,torch.autocastkullandığınızdan emin olun. Flash Attention yalnızcafp16vebf16veri 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