이 저장소에는 GPT(Generative Pretrained Transformer) 변형인 LLaMA 2(Large Language Model Meta AI) 모델의 구현이 포함되어 있습니다. 구현은 모델 아키텍처와 추론 프로세스에 중점을 둡니다. 아키텍처의 주요 부분을 쉽게 이해할 수 있도록 코드가 재구성되고 주석이 많이 추가되었습니다.
RMS-정규화: RMSNorm은 원래 레이어 정규화(LayerNorm)를 단순화한 것입니다. LayerNorm은 레이어 활성화를 안정화하고 모델 수렴을 향상시키기 위해 내부 공변량 이동 문제를 처리할 수 있는 정규화 기술입니다. LLaMA 2에서는 꽤 성공적인 것으로 입증되었습니다.
활성화 기능: LLaMA 2는 ReLU 대신 SwiGLU 활성화 기능을 사용하여 훈련 성능을 향상시킵니다.
RoPE(로터리 위치 임베딩): GPT-Neo-X 프로젝트에서 영감을 받은 LLaMA 2는 각 레이어에 회전 위치 임베딩을 통합하여 모델의 위치 이해를 향상시킵니다.
증가된 컨텍스트 길이 및 그룹화된 쿼리 주의(GQA): LLaMA 2 모델은 두 배의 컨텍스트 창(2048에서 4096개 토큰으로)을 가지며 그룹화된 쿼리 주의를 사용합니다. 이를 통해 긴 문서, 채팅 기록 및 요약 작업을 더 효과적으로 처리할 수 있습니다.
KV 캐싱은 LM(언어 모델) 디코딩에 대한 추론 프로세스를 가속화하기 위해 이 구현에 사용된 중요한 최적화 기술입니다. 각 토큰이 이전 토큰을 기반으로 예측되는 자동 회귀 디코딩 중에 모델 내의 self-attention은 인과 관계입니다. 이는 토큰의 표현이 미래 토큰이 아닌 토큰 자체와 이전 토큰만을 기반으로 계산된다는 것을 의미합니다.
self-attention에서는 입력 시퀀스가 키, 값 및 쿼리 프로젝션을 사용하여 프로젝션됩니다. KV 캐시는 키 및 값 예측 결과를 효율적으로 저장하므로 향후 디코딩 반복에서 중복 계산이 필요하지 않습니다. 결과적으로 자동 회귀 디코딩 중에 고정된 상태로 유지되는 토큰 표현을 캐시에서 검색할 수 있어 추론 속도가 크게 향상됩니다.
이 KV 캐싱 기술은 디코딩 중에 LLaMA 모델의 효율성과 속도를 향상시키는 핵심 아키텍처 기능입니다.
LLaMA 2 모델은 MHA(Multi-Head Attention) 알고리즘을 개선한 Shazeer(2019)가 제안한 MQA(Multi-Query Attention) 개념의 변형을 통합합니다. MQA는 정확도 저하를 최소화하면서 주의 메커니즘의 효율성을 향상시킵니다.
전통적인 다중 헤드 어텐션에서는 전체 어텐션 계산이 h번 복제됩니다. 여기서 h는 어텐션 헤드의 수입니다. 그러나 GQA는 K 및 V 값에서 헤드 치수(h)를 제거하거나 크게 줄여 계산 중복성을 줄입니다. MQA에서는 쿼리 값(Q)의 각 "헤드"가 동일한 K 및 V 변환을 거쳐 어텐션 계산을 최적화합니다.
이러한 개선으로 인해 MHA와 유사한 계산 성능이 제공되지만 메모리에서 읽고 쓰는 데이터의 양이 크게 줄어듭니다. 결과적으로 GQA는 성능(산술 강도 증가를 통해)과 메모리 공간 효율성(저장된 KV 캐시 데이터 양 감소를 통해)을 모두 향상시켜 LLaMA 아키텍처에 귀중한 추가 기능이 됩니다.
LLaMA 2 모델에서 RoPE(로터리 위치 임베딩)는 위치 정보를 토큰 표현에 통합하여 주의 메커니즘을 향상시키는 데 중요한 역할을 합니다. "주의"라는 개념은 강력하지만 계산된 주의가 의미가 있는지 확인하려면 토큰에 위치 개념이 있어야 합니다.
위치 임베딩에는 절대 및 상대라는 두 가지 주요 유형이 있습니다. 절대 위치 임베딩은 입력 문구에서 단어의 절대 위치를 인코딩하는 반면, 상대 위치 임베딩은 두 단어 사이의 상대 위치를 인코딩합니다. 이러한 임베딩은 토큰이 해당 컨텍스트를 순서대로 이해하는 데 도움이 되는 중요한 위치 정보를 제공합니다.
회전식 위치 임베딩은 회전 행렬을 활용하여 위치 정보를 임베딩하는 독특한 접근 방식을 취합니다. 목표는 위치 m과 n에서 벡터 q와 k의 내적이 q, k 및 상대 거리(m – n)에만 의존하도록 하는 것입니다. 각도가 벡터의 위치인 회전 행렬은 이 기준에 맞춰 행렬 곱셈을 통해 원래 벡터에 삽입됩니다.
위치 정보를 통합하는 이 혁신적인 접근 방식은 토큰 관계와 컨텍스트를 이해하는 모델의 능력을 향상시켜 향상된 주의 메커니즘에 기여합니다.
model.py
: 각 구성 요소와 기능을 설명하는 자세한 설명과 함께 LLaMA 변환기 모델의 구현이 포함되어 있습니다.
inference.py
: 추론을 위해 훈련된 LLaMA 모델을 사용하여 입력 및 출력 처리에 대한 통찰력을 제공하는 방법을 보여줍니다.
자유롭게 코드를 탐색하고, 실수가 있으면 수정하고, LLaMA 2 모델을 실험해보세요!