인공 지능과 머신 러닝의 급속한 발전은 특히 자연어 처리 분야에서 주목할 만한 진전을 이루었습니다. 이 분야에서 Large Language Model(LLM)은 그 우수한 성능으로 다양한 서비스와 애플리케이션의 혁신을 가능하게 했습니다. 이러한 모델들은 방대한 양의 데이터와 복잡한 네트워크 구조를 바탕으로 학습되어, 상당한 컴퓨팅 자원과 시간을 필요로 합니다.
LLM은 언어 이해와 생성 작업에서 뛰어난 결과를 보여주며, 이를 가능하게 하는 기술적 구현은 특히 중요합니다. 실제 서비스에 LLM을 적용하기 위해서는 모델의 인퍼런스가 효율적이어야 하며, 이는 컴퓨팅 자원을 적절히 관리하고 최적화하는 과정을 포함합니다. 효율성과 효과성은 이 모델을 경제적으로 운용하면서도 최대의 성능을 발휘하도록 하는 핵심 요소입니다. 이러한 고려사항을 통해 LLM은 실용적인 다양한 응용 프로그램에서 그 가치를 입증할 수 있습니다.
효율적이고 효과적인 인퍼런스는 대규모 언어 모델(LLM)을 활용하는 서비스에 있어 핵심 요소입니다. 이러한 인퍼런스는 실시간 또는 거의 실시간 서비스, 예를 들어 언어 번역, 챗봇, 정보 검색, 자동 요약 등에서 매우 중요합니다. 이 서비스들은 사용자에게 지연 없는 빠른 응답을 제공해야 하기 때문입니다.
또한, 효과적인 인퍼런스는 필요한 컴퓨팅 자원을 최소화하고 에너지 효율성을 높임으로써 환경적 지속 가능성을 증진시킬 수 있습니다. 이는 동시에 비용을 절감하고 사용자 경험을 개선하는 효과를 가져와, 기업이나 조직에 경쟁 우위를 제공합니다.
이 시리즈의 목적은 LLM을 활용한 서비스를 효과적으로 구현하는 방법을 탐구하고, 이를 통해 혁신적인 서비스 개발에 필요한 핵심 고려 사항을 논의하는 것입니다. 이 과정에서 최신 기술을 실제 응용 프로그램에 어떻게 적용할 수 있는지에 대한 통찰력을 제공하고자 합니다.
LLM으로 문장 생성
언어 모델링에는 'Masked Language Modeling'과 'Causal Language Modeling' 두 가지 주요 유형이 있습니다.
'Masked Language Modeling'은 텍스트 시퀀스에서 일부 토큰을 마스킹 처리하고, 이 마스크된 토큰을 예측하는 방식으로 작동합니다. 이 모델은 시퀀스의 양방향에서 정보를 수집할 수 있어, 주변 토큰들의 전체적인 컨텍스트를 이해하는데 매우 유용합니다. BERT는 이 유형의 대표적인 예로, 다양한 자연어 처리 작업에서 탁월한 성능을 보입니다.
'Causal Language Modeling'은 토큰 시퀀스에서 다음에 올 토큰을 예측하는 작업에 초점을 맞춥니다. 이 모델은 주어진 토큰의 왼쪽 정보만을 사용하여 다음 토큰을 예측하므로, 시퀀스가 순차적으로 생성되는 상황에 적합합니다. GPT-2는 이 유형의 모델로서, 생성적 텍스트 작업에 자주 사용됩니다.
이러한 두 모델링 기법은 각각의 장점을 가지고 있으며, 특정 어플리케이션의 요구에 따라 선택적으로 사용됩니다. BERT와 GPT-2와 같은 모델은 각각의 모델링 기법이 어떻게 자연어 처리 과제에 적용될 수 있는지를 잘 보여주는 예시입니다.
Autoregressive generation
최근 주목받고 있는 Large Language Models(LLM) 중 많은 모델은 'Causal Language Modeling'을 통해 학습됩니다. 이러한 유형의 학습은 'Autoregressive generation'이라는 기법을 사용하여 문장을 생성합니다. Autoregressive generation 방식은 모델이 문장을 생성할 때, 이미 생성한 단어나 토큰을 기반으로 다음 단어나 토큰을 예측하고 생성하는 방법입니다.
이 과정에서 LLM은 주어진 텍스트 토큰 시퀀스를 입력으로 받아, 다음 토큰에 대한 확률 분포를 계산합니다. 이 확률 분포를 통해 모델은 가장 적절한 다음 토큰을 선택하며, 이는 텍스트가 자연스럽고 일관된 방식으로 확장되도록 합니다. 이 방식은 특히 연속적이고 일관된 내용의 텍스트를 생성하는 데에 유용하며, 다양한 자연어 처리 애플리케이션에서 효과적으로 활용됩니다.
Autoregressive generation에서 LLM을 활용할 때 가장 중요한 점 중 하나는 다음 토큰을 어떻게 선택할 것인지입니다. 이 선택 과정은 확률 분포를 기반으로 이루어지며, 가장 단순한 형태는 확률이 가장 높은 토큰을 직접 선택하는 것입니다. 하지만 때때로 더 복잡한 방법을 사용하여 결과 분포에서 샘플링하기 전에 추가적인 변환을 적용할 수도 있습니다.
이러한 토큰 선택 과정은 특정 중지 조건이 충족될 때까지 반복적으로 수행됩니다. 가장 흔한 중지 조건은 'End of Sentence' (EOS) 토큰의 생성입니다. 모델이 EOS 토큰을 생성하면 문장 생성을 멈춥니다. 모델은 EOS 토큰을 언제 생성해야 하는지를 학습하며, 이 기준에 도달하지 않을 경우 미리 정의된 최대 길이에 이를 때까지 생성을 계속합니다. 이 과정은 텍스트 생성의 자연스러움과 효율성을 보장하는 데 핵심적인 역할을 합니다.
Decoding 전략
Autoregressive generation 기법에서 토큰을 선택하는 전략은 텍스트 생성의 질과 효율성에 큰 영향을 미칩니다. Huggingface의 Transformers 라이브러리는 이러한 과정을 지원하기 위해 여러 가지 전략을 제공합니다: greedy search, contrastive search, multinomial Sampling, beam search
1. Greedy search
greedy search는 가장 단순한 방법이며, 가장 높은 확률을 가진 단어를 다음 단어로 선택합니다.
2. Contrastive search
contrastive search는 A Contrastive Framework for Neural Text Generation에서 제시된 방법이며, 반복되지 않으면서도 일관성 있는 긴 출력물을 생성하는 데 뛰어난 결과를 보여주었습니다.
3. Multinomial Sampling
greedy search가 가장 높은 확률의 토큰을 선택하는 것과는 반대로, multinomial sampling은 모델에서 반환된 확률 분포를 기반으로 다음 단어를 무작위로 선택합니다. 확률이 0이 아닌 모든 토큰이 선택될 가능성이 있으므로 반복적인 단어 선택이 감소됩니다.
4. Beam search
greedy와는 다르게, beam search에서는 이전에 생성한 확률 분포를 몇 타임 스텝 동안 유지하면서 전체적으로 가장 높은 확률을 가진 시퀀스를 선택합니다. greedy search에서는 초기 토큰의 확률이 낮음에도 불구하고 전체 시퀀스의 확률이 높은 케이스는 무시될 수 있기 때문에, 이러한 경우에 대해서 이점을 가집니다.
이 외에도 beam-search multinomial sampling, diverse beam search decoding, assisted decoding 등 다른 다양한 전략들 또한 존재하며, 자세한 내용은 Huggingface의 문서를 참고하면 좋습니다.
Decoding 전략 뿐만 아니라, 세부적으로 generation config를 설정할 수 있으며, 추후에 관련된 설정을 다루는 포스트를 게시할 생각입니다.
이번 글에서는 Large Language Model (LLM)의 인퍼런스 중요성과 효율적인 활용 방법을 중점적으로 다루었습니다. LLM을 활용한 문장 생성 기법으로는 autoregressive generation이 있으며, 이 기법을 통해 문장을 차례대로 생성하는 방식을 설명했습니다. 또한, 이 과정에서 사용할 수 있는 다양한 디코딩 전략들도 소개하였습니다. 이 디코딩 전략들은 텍스트 생성의 효율성과 품질을 높이는 데 중요한 역할을 합니다.
다음 포스트에서는 트랜스포머 기반 모델의 성능을 향상시키는 KV cache 방법론에 대해 자세히 다룰 예정입니다.
참고한 글
- https://huggingface.co/blog/how-to-generate
- https://huggingface.co/docs/transformers/tasks/language_modeling
- https://huggingface.co/docs/transformers/tasks/masked_language_modeling
- https://huggingface.co/docs/transformers/generation_strategies#decoding-strategies
- https://huggingface.co/blog/how-to-generate
- https://huggingface.co/blog/introducing-csearch
'AI > 모델 인퍼런스' 카테고리의 다른 글
LLM 인퍼런스 훑어보기 (6) - quantization (0) | 2023.11.17 |
---|---|
LLM 인퍼런스 훑어보기 (5) - continuous batching (0) | 2023.11.10 |
LLM 인퍼런스 훑어보기 (4) - kernel fusion (0) | 2023.10.14 |
LLM 인퍼런스 훑어보기 (3) - KV Cache (deep dive) (0) | 2023.09.23 |
LLM 인퍼런스 훑어보기 (2) - KV Cache (1) | 2023.09.19 |