728x90
반응형

GPT를 만들면서 개발 비용을 줄인 측면은 어디에 있을까?

인터넷에 존재하는 어머어마한 글자/문장/말뭉치를 처리하면서.... 에 대해 알아 보겠습니다.

 

사실, AI에서는 알고리듬이외에  '데이터'의 싸움이기도 하였습니다. 

국가정책에도 반영이 되어 'AI Hub'라는 사이트가 있으며, 국가나 공공차원에서 AI 기술 개발을 위한 기반 인프라인 AI데이터를 구축하고 공개(open)하고 있습니다. 물론 이 구축 과정에서  '올바른 고품질의 데이터'를 만들고 있습니다. 인터넷에 있는 무작위의, 많은 사람이 쓴 글의 품질과 대조적이죠.

(일반적으로 AI모델은 초기에는 올바른 고품질의 데이터를 기초로 하여 소위 지도(supervised)학습을 통해  모델을 만들고, 그 이후에는 비용을 줄이기 위해  임의의 데이터를 모델에 반영하는 것이 바람직한 개발 방향이겠죠.!)

 

GPT-3에서는 어떻게 하였을까요?

음, 필자는  위키피디아에 소개된 문장에서 힌트를 얻었습니다.

(GPT-3에 대한 원문 전체 페이지는 https://en.wikipedia.org/wiki/GPT-3 에 있습니다.)

The model was trained using generative pre-training; it is trained to predict what the next token is based on previous tokens. The model demonstrated strong zero-shot and few-shot learning on many tasks.
 The authors described how language understanding performances in natural language processing (NLP) were improved in GPT-n through a process of "generative pre-training of a language model on a diverse corpus of unlabeled text, followed by discriminative fine-tuning on each specific task."

우선, 모델 훈련은 generative pre-training 기법을 사용했다고 합니다.

데이터 셋 구성 즉 입력 과 출력은 한 개의 토근씩 어긋나게, 그 다음의 것이 출력(target)으로 지정합니다.

 

그 다음 키워드는  'zero-shot' 과 'few-shot'입니다. 뒤에  learning 이라는 학습법이라고 지칭하고 있습니다.훈련(training)을 특정한 학습법으로 한 것이죠. ( 시험 준비를 특정 학습법으로 하였다에 비유되죠.)zero-shot learning을 사용한 목적은 뒤쪽의 문구에 나타납니다.  'unlabeled text'.  이를 처리하는 방식인 것이죠.인터넷에 존재하는 많은 글들은 사람이 검토를 하지 않은 것이죠. 내용도 검증 안되었고, 철자법, 어떤 언어인지 등도 검증이 안된 데이터를 훈련에 반영하여야 하죠.  여기서 zero-shot 즉 한 번도 보지 않았던 것, 새로운 것을 어떻게 처리한 것이, 저비용으로 모델을 개선한 것입니다. 어마어마 하게 큰 모델을 만들면서. 이렇게 약간 어설프지만 큰 모델(커버리지 측면에서)을 만든 후,  discrimitive fine-tununing을 수행합니다. 특정 업무에 특화(each specific task)한 것이 바로  Chat-GPT3이죠.

 

또한, 주요 키워드는 'Generative'입니다.GPT 자체는 어차피 큰 언어모델( Large Language model)인데,  언어모델은 문장을 생성하는 것이죠. 근데  맨 앞에 Generative라는 것을 붙였습니다. 필자의 의견은 zero-shot learning을 적용하면서, unseen/unlabedl 데이터를 처리하면서, 점진적으로 키웠다.자라게했다의 의미에서 generative를 사용하지 않았나 싶습니다.

 

요약하면,  인터넷에 존재하는 많은 데이터는 한 번도 훈련에 반영되지 않은( 문장 또는 특징적인 측면에서) 것을 업데이트하여 반영하기 위해  Generative한 특징이 있는 zero-shot( 또는 few-shot) 학습기법을 적용하여, 큰 모델을 만든 후에,  미세 조정을 위한 discriminative fine-tuning(강화 학습기 기법 등)을 수행하였다.

 

비용 측면 즉 '큰 돈을 안 쓴',  '비용 절감 요소'는

This eliminated the need for human supervision and for time-intensive hand-labeling.

상기 기법을 사용하여,  인간의 지도/감독이나 문장 구축/교정 등의 필요성을 제거했다~~

로 표현되고 있습니다.

 

 

2023년 5월 1일에 내용 업데이트

챗GPT를 운영하는데 하루에 얼마나 들까 라는 IT WORLD뉴스를 접했습니다. 해당 기사에서 비용에 대한 상세 내용있어서, 상기 기술적인 측면이 아닌 운영 서비스 측면에서 살펴보겠습니다.

 

컨설팅 기업 세미애널리시스에 따르면,

HGX A100서버 3,6000여대,

총 28,900여개의 GPU 등으로

'하루에 약 70만달러, 우리 돈으로 9억 3천만원의 하드웨어/인프라 비용입니다.

(LLM 모델을 이용한 검색 서비스 운영 비용 추정, Semianalyis)

 

태생부터 금수저였다. 

AI 기업 레티튜드는 GPT-3 모델 학습에 3,110억 테라프롭이 필요.

A100  HGX 서버 51만대에 해당하며  1,000억달러 규모, 134조원이다. 구글의 1년 순익보다도 많다.

 

 

728x90
반응형
728x90
반응형

챗-GTP3 라고 이름이 붙은 이유부터 알고 보아야 합니다.

 

뒤에 있는 GPT3은   GPT 모델  3.0을 기반으로 사용하였다는 것입니다.

GPT는 Generative Pretrained Transformer의 약자이며, 제일 중요한 것은 Generative 입니다. 즉 문장을 생성해 내는 모델입니다. 보통은 흔히 언어모델(Language Model)이라고 합니다.  언어모델의 예는  사용자가 "I am a"를 입력하면,  "I am a boy.",  "I am a student'를 생성, 즉 만들어 냅니다.

 

Chat은 챗팅(Chatting) 즉 대화 쌍 또는 질문에 답변의 형태로 주고 받는 대화형태의 '별도'모델을 만들었다는 것입니다. 근데 기초가 되는 '대화'가 있어야겠죠.  그 대화를 GPT모델을 사용해서 만들고,  Chat기능이 되도록 '별도'의 모델을 만들었다는 것입니다.

 

그럼, "나도 만들어보고 싶은데....".

 

GPT3는 그 모델을 얻을 수 없습니다.( 보통 공개 모델이 AI 개발자 사이에는 종종 있습니다.)

그래서, 어쩔 수 없이 성능이 낮은 GPT2를 가지고  그 공정을 살펴보아야 합니다. ( Chat-GPT2를 만든다는 것입니다.)

 

GPT2는 언어모델입니다. 문장을 생성하는 모델입니다.

 

GPT2에 대한 것을 주요 용어 위주로 요약하면,

   - Pretrained model on English language using a causal language modeling (CLM) objective

  -  a transformers model pretrained on a very large corpus of English data in a self-supervised fashion

  -  pretrained on the raw texts only, with no humans labelling them in any way

  - an automatic process to generate inputs and  labels from those texts( e.g. target )

  - More precisely, it was trained to guess the next word in sentences.. ( shifted one token (word or piece of word) to the right )

  - This is the smallest version of GPT-2, with 124M parameters.

 

GPT2의 사용 예시

>>> from transformers import pipeline, set_seed
>>> generator = pipeline('text-generation', model='gpt2')
>>> set_seed(42)
>>> generator("Hello, I'm a language model,", max_length=30, num_return_sequences=5)

[{'generated_text': "Hello, I'm a language model, a language for thinking, a language for expressing thoughts."},
 {'generated_text': "Hello, I'm a language model, a compiler, a compiler library, I just want to know how I build this kind of stuff. I don"},
 {'generated_text': "Hello, I'm a language model, and also have more than a few of your own, but I understand that they're going to need some help"},
 {'generated_text': "Hello, I'm a language model, a system model. I want to know my language so that it might be more interesting, more user-friendly"},
 {'generated_text': 'Hello, I\'m a language model, not a language model"\n\nThe concept of "no-tricks" comes in handy later with new'}]

 Hello. I'm a language model,    뒤쪽에  최대 길이 30(token기준이겠죠?)로  5개 문장을 만들어냅니다.

 

GPT2를 훈련시킨 과정은 

   -  BPE( for unicode characters)로 token표현을 수행.

   -  Vocabulary size 50,257..   즉 token의 종류가  50,000여개라는 것입니다.

   -  훈련과정에 입력에 대한 벡터 처리 과정에서,  입력문의 token 수의 제한은 1,024개입니다.

   ( token의 분포의 크기 와 연속적인 표현을 구분하여야 합니다.^^)

 

GPT2 모델의 성능 측정 ( PPL과 ACC)

   - PPL 이 여러 테스트 데이터 셋에 대해,  평균 30~70레벨입니다. 즉, 한 단어(token)뒤에 올 수 있는 token의 수가 3~70개라는 것입니다.  (  인터넷에서 수집한 문장(모집단) 및  생성할 때의 고민도/난이도/연결도/혼잡성 을  나타냅니다.

  - ACC 는 Accuracy일 수 있는데, 아직 파악을 못했습니다.  40~87 범주이빈다.

  - BPB, BPC 의 척도도 있습니다.

 

 

 

728x90
반응형

+ Recent posts