Transformers documentation

Llama3

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

이 모델은 2024-07-31에 HF papers에 게시되었으며, 2024-04-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의 첫 두 모델을 공개하게 되어 기쁩니다. 이 릴리스에는 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")로 캐스팅되며, 마지막으로 config에 dtype 또는 torch_dtype가 제공된 경우 해당 값이 사용되기 때문입니다.

float16로 모델을 학습하는 것은 권장되지 않으며 nan이 발생하는 것으로 알려져 있습니다. 따라서 모델은 bfloat16로 학습해야 합니다.

팁:

  • Llama3 모델의 가중치는 이 양식을 작성하여 받을 수 있습니다.

  • 아키텍처는 Llama2와 정확히 동일합니다.

  • 토크나이저는 tiktoken 기반의 BPE 모델입니다(Llama2의 sentencepiece 구현 기반 모델과 다름). 주요 차이점은 입력 토큰이 어휘의 일부인 경우 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")

    를 실행하려면 float16 정밀도로 전체 모델을 호스팅할 수 있을 만큼 충분한 CPU RAM이 필요합니다(가장 큰 버전이 여러 개의 checkpoint로 제공되더라도, 각 checkpoint에는 모델의 각 가중치 일부가 포함되어 있으므로 RAM에 모두 로드해야 합니다). 따라서 75B 모델의 경우 145GB의 RAM이 필요합니다.

  • attn_implementation="flash_attention_2"를 통해 Flash Attention 2를 사용할 때는 from_pretrained 클래스 메서드에 dtype을 전달하지 말고 Automatic Mixed-Precision 학습을 사용하세요. Trainer를 사용하는 경우 True로 fp16 또는 bf16 중 하나를 지정하기만 하면 됩니다. 그렇지 않은 경우 torch.autocast를 사용하고 있는지 확인하세요. Flash Attention은 fp16과 bf16 데이터 타입만 지원하기 때문에 이 설정이 필요합니다.

리소스

Llama2 문서 페이지에는 이미 다양한 유용한 리소스가 제공되고 있으며, Llama3에 맞춰 선별된 새로운 리소스를 추가할 기여자를 환영합니다! 🤗

Update on GitHub