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 조직에서 찾을 수 있어요.
텍스트 생성 예제
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를 붙이지 않아요.
더 알아보기
- Hugging Face Pipelines: 텍스트 생성 파이프라인
- Hugging Face GPU 성능: 대형 모델 양자화·추론 최적화
- Hugging Face Configuration:
PreTrainedConfig기반 이해