OLMo(Open Language Model): 모두를 위한 공개 언어 모델 (feat. 상업적 사용 가능)

PyTorchKR​:fire::kr: :thinking::speech_balloon:

  • LLM에 대한 관심이 뜨거운 것만큼이나, 오픈소스 모델에 대해서도 여러 이야기들이 나오고 있습니다. 이런 와중, AllenAI에서 공개 언어 모델인 OLMo를 공개하여 소개합니다. 특히, OLMo는 7B 크기의 모델 외에 1B 크기의 모델도 함께 공개하였는데요, 작은 규모의 LLM에 대한 사람들의 니즈를 반영한 것으로 보입니다. :smiley:
  • 이 글은 GPT 모델로 정리한 것으로, 잘못된 부분이 있을 수 있으니 글 아래쪽의 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

소개

OLMo: 모두를 위한 공개 언어 모델 (Open Language Model)

인공지능(AI) 분야는 빠르게 진화하고 있으며, 언어 모델은 이러한 발전의 최전선에 있습니다. 대규모 언어 모델(LLM)과 같은 강력한 도구는 텍스트를 생성하고, 언어를 번역하고, 다양한 종류의 창의적인 콘텐츠를 작성하고, 질문에 유익한 방식으로 답변할 수 있습니다. 하지만 많은 언어 모델들은 오픈 소스가 아니기 때문에 접근성과 영향력이 제한될 수 있습니다.

그리고, 이것이 바로 AllenAI가 공개 언어 모델(OLMo; Open Language Model)를 공개한 이유입니다! OLMo는 오픈소스일 뿐만 아니라, 방대한 데이터셋을 기반으로 학습한 대규모 언어 모델입니다. 또한, 가중치 뿐만 아니라 여러 체크포인트를 함께 공개하여 언어 모델링의 최신 발전을 실험하고 이를 기반으로 구축하고자 하는 개발자와 연구자에게 유용한 리소스입니다.

OLMo 모델 개요

OLMo의 첫번째 단계로, 1B와 7B 크기의 2가지 모델을 공개합니다. 다양한 아키텍처와 옵티마이저, 학습 인프라를 통해 학습한 7B 모델(및 일부 변경 모델들), 2T 이상의 토큰으로 학습한 1B 모델이 그것입니다.

지금까지 출시된, (모두 돌마 데이터셋으로 학습된) OLMo 제품군의 핵심 모델은 다음과 같습니다:

Model Training Tokens Context Length Training Config W&B Logs Data Order File(s) ☨
OLMo 1B 3 Trillion 2048 configs/official/OLMo-1B.yaml Epoch 1
OLMo 7B 2.5 Trillion 2048 configs/official/OLMo-7B.yaml wandb.ai/ai2-llm/OLMo-7B Epoch 1, Epoch 2
OLMo 7B Twin 2T 2 Trillion 2048 configs/official/OLMo-7B.yaml Epoch 1

각 모델들에는 다음과 같은 내용들이 포함되어 있습니다:

  • 학습 데이터를 생성하는 코드를 포함하여 각 모델에 사용된 전체 학습 데이터는 AI2의 Dolma 및 사전 학습 데이터 분석을 위한 WIMBD에서 제공합니다.
  • Full training data used for these models, including code that produces the training data, from AI2’s Dolma, and WIMBD for analyzing pretraining data.
  • 전체 모델의 가중치를 비롯하여 학습 코드와 학습 로그, 가중치 및 편향성 로그 형태의 학습 메트릭들, 추론 코드들이 모두 공개되었습니다.
  • Full model weights, training code, training logs, training metrics in the form of Weights & Biases logs, and inference code.
  • 각 모델별로 학습 과정 중 1,000단계(step)마다 저장한 체크포인트(chekpoint) 500+개를 제공하며, 허깅페이스에서 리비전으로 사용 가능합니다.
  • 500+ checkpoints per model, from every 1000 steps during the training process, available as revisions on HuggingFace.
  • 각 모델의 평가 코드는 AI2의 CatwalkPaloma에 포함되어 있습니다.
  • Evaluation code under the umbrella of AI2’s Catwalk and Paloma.
  • 미세조정(fine-tuning)에 사용한 코드 및 적용 모델들도 ((Open Instruct와 함께) 곧 공개될 예정입니다.
  • Fine-tuning code and adapted models (coming soon with Open Instruct)
  • 모든 코드, 가중치, 중간 체크포인트는 Apache 2.0 라이선스에 따라 공개됩니다.
  • All code, weights, and intermediate checkpoints are released under the Apache 2.0 License.

OLMo의 중요성

언어 모델링 분야에서 OLMo가 중요한 이유는 몇 가지가 있습니다.

첫번째로, OLMo는 누구나 접근하고 사용할 수 있는 오픈소스입니다. 즉, 누구나 코드를 내려받고 수정하여 자신만의 언어 모델을 만들 수 있습니다. 이는 다른 많은 언어 모델이 독점적이고 대중에게 공개되지 않는 것과는 대조적입니다.

두번쨰 이유는 OLMo는 최종 모델뿐만 아니라 학습 과정 중 여러 개의 체크포인트(checkpoint)를 함께 공개하였습니다. 이러한 체크포인트는 학습의 여러 지점에서 모델의 스냅샷과 같은 역할을 합니다. 이를 통해 연구자들은 다양한 버전의 모델을 실험하고 다양한 작업에서 모델이 어떻게 작동하는지 확인할 수 있습니다.

마지막으로 OLMo는 텍스트와 코드로 구성된 방대한 데이터셋을 학습했습니다. 이 데이터셋에는 책, 기사, 코드, 심지어 소셜 미디어의 대화들까지 포함됩니다. 이 방대한 양의 데이터 덕분에 OLMo는 언어에 대한 보다 포괄적인 이해를 학습할 수 있으며, 이를 통해 더욱 다양하고 강력해집니다.

OLMo의 성능 비교

OLMo 7B 모델의 성능 비교
OLMo 7B 모델의 성능 비교

OLMo 1B 모델의 성능 비교
OLMo 1B 모델의 성능 비교

간단한 OLMo 사용법 소개

pip로 설치

(PyTorch가 미리 설치되어 있어야 합니다.)

pip install ai2-olmo

허깅페이스 pipeline 사용 예시

import hf_olmo
from transformers import pipeline

olmo_pipe = pipeline("text-generation", model="allenai/OLMo-7B")

print(olmo_pipe("Language modeling is "))
# Language modeling is the task of …

(pipeline을 사용하지 않는) 더 세부적인 사용 예시

from hf_olmo import * # registers the Auto* classes

from transformers import AutoModelForCausalLM, AutoTokenizer

olmo = AutoModelForCausalLM.from_pretrained("allenai/OLMo-7B")
tokenizer = AutoTokenizer.from_pretrained("allenai/OLMo-7B")

message = ["Language modeling is "]
inputs = tokenizer(message, return_tensors='pt', return_token_type_ids=False)
response = olmo.generate(**inputs, max_new_tokens=100, do_sample=True, top_k=50, top_p=0.95)
print(tokenizer.batch_decode(response, skip_special_tokens=True)[0])
# Language modeling is the task of …

양자화(Quantization)된 모델 사용하기

pip install bitsandbytes
olmo = AutoModelForCausalLM.from_pretrained("allenai/OLMo-7B", torch_dtype=torch.float16, load_in_8bit=True)  # requires bitsandbytes

미세조정(파인튜닝, fine-tuning) 스크립트 실행 예시

torchrun --nproc_per_node=8 scripts/train.py {path_to_train_config} \
    --data.paths=[{path_to_data}/input_ids.npy] \
    --data.label_mask_paths=[{path_to_data}/label_mask.npy] \
    --load_path={path_to_checkpoint} \
    --reset_trainer_state

더 읽어보기

OLMo 공개 발표 블로그

OLMo 프로젝트 홈페이지

OLMo 7B 가중치

OLMo 1B 가중치

OLMo 기술문서

OLMo GitHub 저장소

OLMo 평가 코드 저장소




:fire:파이토치 한국 사용자 모임:kr:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:gift: 아래:arrow_lower_right:쪽에 좋아요:heart:를 눌러주시면 뉴스 발행에 힘이 됩니다~ :star_struck:

2개의 좋아요