Connect with us

Artificiell intelligens

Den kraftfullaste öppen källkods-LLM hittills: Meta LLAMA 3.1-405B

mm
The Most Powerful Open Source LLM Yet: Meta LLAMA 405B

Llama 3.1-405B, utvecklad av Meta AI, representerar ett betydande steg framåt i öppen källkods-språkmodeller. Med 405 miljarder parametrar är det den största offentligt tillgängliga språkmodellen hittills, som rivaliserar och till och med överträffar några av de mest avancerade proprietära modellerna i olika benchmark-tester.

Nyckelfunktioner:

  • 405 miljarder parametrar
  • 128K token kontextlängd
  • Flerspråkig stöd (8 språk)
  • Instruktionsjusterad version tillgänglig
  • Öppen källkod med en permissiv licens

Släppandet av en sådan kraftfull modell i den öppna källkodsdomänen är en spelväxlare, som demokratiserar tillgången till state-of-the-art AI-funktioner och främjar innovation över hela branschen.

Modellarkitektur och utbildning

Processen börjar med att indata-texttoken omvandlas till tokeninbäddningar. Dessa inbäddningar passerar genom flera lager av självuppmärksamhet och feedforward-nätverk, vilket gör att modellen kan fånga komplexa relationer och beroenden inom texten. Den autoregressiva avkodningsmekanismen genererar sedan utdatatexttoken, vilket slutför processen.

 

  1. Grupperad frågeuppmärksamhet (GQA)

Grupperad frågeuppmärksamhet

Grupperad frågeuppmärksamhet

Llama 3.1 använder Grupperad frågeuppmärksamhet, som är en viktig optimeringsteknik som inte fullständigt täcktes i den tidigare responsen. Låt oss undersöka detta närmare:

Grupperad frågeuppmärksamhet (GQA) är en variant av multi-huvuduppmärksamhet som syftar till att minska beräkningskostnader och minnesanvändning under inferens, särskilt för långa sekvenser. I Llama 3.1 405B-modellen implementeras GQA med 8 nyckel-värdehuvuden.

Här är hur GQA fungerar:

  1. I stället för att ha separata nyckel- och värdeprojektioner för varje uppmärksamhets-huvud, grupperar GQA flera frågehuvuden för att dela samma nyckel- och värdehuvuden.
  2. Denna gruppering minskar betydligt antalet parametrar i nyckel- och värdeprojektionerna, vilket leder till mindre modellstorlekar och snabbare inferens.
  3. Uppmärksamhetsberäkningen kan uttryckas som:

Uppmärksamhet(Q, K, V) = softmax(QK^T / sqrt(d_k))V

Där Q grupperas i g grupper, och K och V har färre huvuden än Q.

Fördelarna med GQA i Llama 3.1 405B inkluderar:

  • Minskat minnesavtryck: Färre nyckel- och värdeprojektioner innebär att mindre minne krävs för att lagra modellparametrarna.
  • Snabbare inferens: Med färre beräkningar som krävs för nyckel- och värdeprojektioner förbättras inferenshastigheten.
  • Bibehållen prestanda: Trots minskningen av parametrar har GQA visat sig bibehålla jämförbar prestanda med standard multi-huvuduppmärksamhet i många uppgifter.
  1. Tvåstegsförträning för utökad kontext

Artikeln nämner en tvåstegsförträning för att uppnå 128K token kontextfönstret. Detta är ett avgörande aspekt av Llama 3.1 405B:s funktioner:

Steg 1: Inledande förträning på 8K token

  • Modellen tränas först på sekvenser på upp till 8K token.
  • Denna fas tillåter modellen att lära sig allmän språkförståelse och genereringsförmåga.

Steg 2: Fortsatt förträning för kontextutvidgning

  • Efter den inledande träningen genomgår modellen fortsatt förträning för att öka kontextlängden till 128K token.
  • Denna fas innefattar noggrant utformade träningsregimer för att hjälpa modellen generalisera till längre sekvenser utan att förlora sin förmåga att hantera kortare sammanhang.
  1. Flerspråkiga funktioner

Medan den tidigare responsen berörde flerspråkiga funktioner, kan vi utöka hur Llama 3.1 405B implementerar detta:

Kompositionell ansats:

  • Llama 3.1 405B använder separata avkodare för olika modaliteter (t.ex. bilder, tal).
  • Dessa avkodare omvandlar indata från olika modaliteter till ett gemensamt inbäddningsspace som språkmodellen kan förstå.

Integrering med språkmodell:

  • Utdata från dessa specialiserade avkodare matas sedan in i huvudspråkmodellen.
  • Detta gör att Llama 3.1 405B kan bearbeta och förstå olika typer av data samtidigt, vilket möjliggör att den kan utföra uppgifter som involverar flera modaliteter.

Korsuppmärksamhetsmekanismer:

  • För att hantera integreringen av olika modaliteter, använder Llama 3.1 405B sannolikt korsuppmärksamhetsmekanismer.
  • Dessa mekanismer gör att modellen kan uppmärksamma relevant information från olika modaliteter när den genererar text eller utför andra uppgifter.

De flerspråkiga funktionerna i Llama 3.1 405B öppnar upp en mängd olika tillämpningar, såsom:

  • Bildbeskrivning och visuell frågebesvarande
  • Tal-till-text-transkription med kontextuell förståelse
  • Flerspråkiga resonemangsuppgifter som kombinerar text, bilder och potentiellt andra datatyper

Träningsdetaljer

  • Tränad på över 15 biljoner token
  • Anpassad GPU-kluster med 39,3M GPU-timmar för 405B-modellen
  • Mångfaldig datasettsamling för flerspråkiga funktioner

Den instruktionsjusterade versionen genomgick ytterligare träning:

Prestandabenchmark

Tabellen jämför Llama 3.1 405B, Nemotron 4 340B Instruct, GPT-4 (0125), GPT-4 Omni och Claude 3.5 Sonnet. Viktiga benchmark-tester inkluderar allmänna uppgifter som MMLU och IFEval, koduppgifter som HumanEval och GSM8K, och resonemangs-uppgifter som ARC Challenge. Varje benchmark-poäng reflekterar modellens förmåga att förstå och generera mänsklig text, lösa komplexa problem och utföra kod. Noterbart är att Llama 3.1 405B och Claude 3.5 Sonnet excellerar i flera benchmark-tester, vilket visar deras avancerade funktioner i både allmänna och domänspecifika uppgifter.

Minneskrav för Llama 3.1-405B

Körning av Llama 3.1-405B kräver betydande minne och beräkningsresurser:

  • GPU-minne: 405B-modellen kan använda upp till 80GB GPU-minne per A100 GPU för effektiv inferens. Användning av tensorparallellism kan distribuera belastningen över flera GPU:er.
  • RAM: En minimikrav på 512GB systemminne rekommenderas för att hantera modellens minnesavtryck och säkerställa smidig datahantering.
  • lagring: Se till att du har flera terabyte SSD-lagring för modellvikter och associerade dataset. Högpresterande SSD:er är avgörande för att minska datatillgångstider under träning och inferens​ (Llama Ai Model)​​ (Groq)​.

Inferensoptimeringstekniker för Llama 3.1-405B

Körning av en 405B-parametrarsmodell som Llama 3.1 effektivt kräver flera optimeringstekniker. Här är viktiga metoder för att säkerställa effektiv inferens:

a) Kvantifiering: Kvantifiering innebär att minska precisionen för modellens vikter, vilket minskar minnesanvändning och förbättrar inferenshastighet utan att signifikant offra noggrannhet. Llama 3.1 stöder kvantifiering till FP8 eller ännu lägre precisioner med tekniker som QLoRA (Kvantifierad låg-rankad anpassning) för att optimera prestanda på GPU:er.

Exempelkod:


from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

model_name = "meta-llama/Meta-Llama-3.1-405B"
bnb_config = BitsAndBytesConfig(
load_in_8bit=True, # Ändra till load_in_4bit för 4-bitars precision
bnb_8bit_quant_type="fp8",
bnb_8bit_compute_dtype=torch.float16,
)
model = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=bnb_config,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)

b) Tensorparallellism: Tensorparallellism innebär att dela modellens lager över flera GPU:er för att parallellisera beräkningar. Detta är särskilt användbart för stora modeller som Llama 3.1, vilket möjliggör effektiv användning av resurser.

Exempelkod:

from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline

model_name = "meta-llama/Meta-Llama-3.1-405B"
model = AutoModelForCausalLM.from_pretrained(
model_name,
device_map="auto",
torch_dtype=torch.float16
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
nlp = pipeline("text-generation", model=model, tokenizer=tokenizer, device=0)

c) KV-cacheoptimering: Effektiv hantering av nyckel-värde-cachen är avgörande för att hantera långa kontexter. Llama 3.1 stöder utökade kontextlängder, som kan hanteras effektivt med optimerade KV-cache-tekniker. Exempelkod:

# Se till att du har tillräckligt med GPU-minne för att hantera utökade kontextlängder
output = model.generate(
input_ids,
max_length=4096, # Öka baserat på ditt kontextlängdsbehov
use_cache=True
)

Distributionsstrategier

Distribution av Llama 3.1-405B kräver noggrann övervägning av hårdvaruresurser. Här är några alternativ:

a) Molnbaserad distribution: Använd högminnes-GPU-instanser från molntjänstleverantörer som AWS (P4d-instanser) eller Google Cloud (TPU v4).

Exempelkod:

# Exempelinställning för AWS
import boto3
ec2 = boto3.resource('ec2')
instance = ec2.create_instances(
ImageId='ami-0c55b159cbfafe1f0', # Deep Learning AMI
InstanceType='p4d.24xlarge',
MinCount=1,
MaxCount=1
)

b) Lokal distribution: För organisationer med högpresterande datorresurser, erbjuder distribution av Llama 3.1 på plats mer kontroll och potentiellt lägre långsiktiga kostnader.

Exempelinställning:

# Exempelinställning för lokal distribution
# Se till att du har flera högpresterande GPU:er, som NVIDIA A100 eller H100
pip install transformers
pip install torch # Se till att CUDA är aktiverat

c) Distribuerad inferens: För större distributioner, överväg att distribuera modellen över flera noder.

Exempelkod:

# Använd Hugging Faces accelerate-bibliotek
from accelerate import Accelerator

accelerator = Accelerator()
model, tokenizer = accelerator.prepare(model, tokenizer)

Användningsfall och tillämpningar

Kraften och flexibiliteten hos Llama 3.1-405B öppnar upp en mängd olika möjligheter:

a) Syntetisk datagenerering: Generera högkvalitativ, domänspecifik data för träning av mindre modeller.

Exempelanvändningsfall:

from transformers import pipeline

generator = pipeline("text-generation", model=model, tokenizer=tokenizer)
syntetisk_data = generator("Generera finansiella rapporter för Q1 2023", max_length=200)

b) Kunskapsdestillering: Överföra kunskapen från 405B-modellen till mindre, mer distribuerbara modeller.

Exempelkod:

# Använd destilleringstekniker från Hugging Face
from transformers import DistillationTrainer, DistillationTrainingArguments

training_args = DistillationTrainingArguments(
output_dir="./distilled_model",
per_device_train_batch_size=2,
num_train_epochs=3,
logging_dir="./logs",
)
trainer = DistillationTrainer(
teacher_model=model,
student_model=smaller_model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
)
trainer.train()

c) Domänspecifik finjustering: Anpassa modellen för specialiserade uppgifter eller branscher.

Exempelkod:

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(
output_dir="./domain_specific_model",
per_device_train_batch_size=1,
num_train_epochs=3,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
)
trainer.train()

Dessa tekniker och strategier kommer att hjälpa dig att utnyttja den fulla potentialen hos Llama 3.1-405B, säkerställande effektiv, skalbar och specialiserad AI-tillämpning.

Framtida riktningar

Släppandet av Llama 3.1-405B kommer sannolikt att accelerera innovation inom flera områden:

  • Förbättrade finjusteringstekniker för specialiserade domäner
  • Utveckling av mer effektiva inferensmetoder
  • Framsteg inom modellkomprimering och destillering

Slutsats

Llama 3.1-405B representerar en betydande milstolpe i öppen källkods-AI, som erbjuder funktioner som tidigare var exklusiva för slutna modeller.

Medan vi fortsätter att utforska kraften hos denna modell, är det avgörande att närma sig dess användning med ansvar och etisk hänsyn. Verktygen och skydd som tillhandahålls tillsammans med modellen erbjuder en ram för ansvarsfull distribution, men kontinuerlig vaksamhet och samarbete inom samhället kommer att vara avgörande för att säkerställa att denna kraftfulla teknologi används till fördel för samhället.

Jag har under de senaste fem åren dykt ner i den fascinerande världen av Machine Learning och Deep Learning. Min passion och expertis har lett mig till att bidra till över 50 olika mjukvaruutvecklingsprojekt, med särskild fokus på AI/ML. Min pågående nyfikenhet har också dragit mig mot Natural Language Processing, ett område som jag är angelägen om att utforska vidare.