Hugging Face Llama

Hugging Face Llama (Llama)

Llama는 7B에서 65B 파라미터에 이르는 대규모 언어 모델 계열이에요. 더 적은 토큰으로 더 큰 모델을 학습하는 대신, 더 많은 토큰으로 더 작은 모델을 학습해서 효율적인 추론(특히 서빙에 중요)에 집중해요. Llama는 GPT 아키텍처를 기반으로 하지만, 학습 안정성을 위한 사전 정규화(pre-normalization), 성능을 높이기 위해 ReLU를 SwiGLU로 교체, 긴 시퀀스 처리를 위해 absolute position 임베딩 대신 rotary positional embeddings(RoPE)을 사용해요.

원본 Llama 체크포인트는 Huggy Llama 조직에서 찾을 수 있어요.

출처: Hugging Face Llama 문서

텍스트 생성 예제

Pipeline을 쓰는 예제를 볼게요.

from transformers import pipeline

pipeline = pipeline(
    task="text-generation",
    model="huggyllama/llama-7b",
    device=0
)
pipeline("Plants create energy through a process known as")

양자화는 가중치를 더 낮은 정밀도로 표현해 큰 모델의 메모리 부담을 줄여요. 아래 예제는 torchao를 써서 가중치만 int4로 양자화해요.

# pip install torchao
from transformers import AutoModelForCausalLM, AutoTokenizer, TorchAoConfig

quantization_config = TorchAoConfig("int4_weight_only", group_size=128)
model = AutoModelForCausalLM.from_pretrained(
    "huggyllama/llama-30b",
    device_map="auto",
    quantization_config=quantization_config,
)
tokenizer = AutoTokenizer.from_pretrained("huggyllama/llama-30b")
input_ids = tokenizer("Plants create energy through a process known as", return_tensors="pt").to(model.device)
output = model.generate(**input_ids, cache_implementation="static")
print(tokenizer.decode(output[0], skip_special_tokens=True))

LlamaConfig

LlamaConfig는 Llama 모델의 설정을 저장하는 클래스예요. 인자로 모델 아키텍처를 정의하고, 기본값으로 인스턴스화하면 meta-llama/Llama-2-7b-hf와 유사한 설정이 만들어져요.

>>> from transformers import LlamaModel, LlamaConfig

>>> # llama-7b 스타일 설정 생성
>>> configuration = LlamaConfig()

>>> # 설정에서 모델 생성
>>> model = LlamaModel(configuration)
>>> configuration = model.config

주요 파라미터를 살펴볼게요.

  • vocab_size (int, 기본 32000) — 모델 어휘 크기
  • hidden_size (int, 기본 4096) — hidden 표현의 차원
  • intermediate_size (int, 기본 11008) — MLP 표현의 차원
  • num_hidden_layers (int, 기본 32) — Transformer 디코더의 hidden 레이어 수
  • num_attention_heads (int, 기본 32) — 각 attention 레이어의 헤드 수
  • num_key_value_heads (int, 선택) — Grouped Query Attention 구현에 쓰이는 key_value 헤드 수. num_key_value_heads=num_attention_heads면 MHA, =1이면 MQA, 그 외엔 GQA. 지정 안 하면 num_attention_heads로 기본값
  • hidden_act (str, 기본 silu) — 디코더의 비선형 활성화 함수. "gelu", "relu", "silu"
  • max_position_embeddings (int, 기본 2048) — 모델이 사용할 최대 시퀀스 길이
  • rms_norm_eps (float, 기본 1e-06) — rms normalization 레이어의 epsilon
  • use_cache (bool, 기본 True) — 마지막 key/value 어텐션을 반환할지
  • bos_token_id (int, 기본 1) — 스트림 시작 토큰 id
  • eos_token_id (int 또는 list[int], 기본 2) — 스트림 종료 토큰 id
  • rope_parameters (선택) — RoPE 임베딩 설정 파라미터. rope_theta 값과 스케일링용 파라미터 포함
  • attention_bias (bool, 기본 False) — self-attention 투영 레이어에 bias 사용 여부
  • attention_dropout (기본 0.0) — attention 확률의 dropout 비율

토크나이저 참고사항

Llama 토크나이저는 SentencePiece 기반 byte-pair encoding 모델이에요. 디코딩 시 첫 토큰이 단어 시작(예: "Banana")일 때 문자열 앞에 prefix space를 붙이지 않아요.

더 알아보기