Apple, 스마트폰에서 동작하는 270M ~ 3B 규모의 작은 언어모델 OpenELM 패밀리 공개

:pytorch:PyTorchKR:kr:

Apple:apple:의 WWDC가 다가오며, 놀라운(!) 일들이 벌어지고 있습니다. 바로 Apple이 LLM을 공개한 것인데요, On-Device용으로 270M부터 3B까지의 작은 모델들(Small LM)을 공개했습니다. :astonished: 이름부터가 A family of Open-source Efficient Language Models을 뜻하는 OpenELM으로, CoreNet을 사용하여 사전 학습을 했다고 합니다. 함께 살펴보시죠.

Apple, 스마트폰에서 동작하는 270M ~ 3B 규모의 작은 언어모델 OpenELM 패밀리 공개


Apple, 스마트폰에서 동작하는 270M ~ 3B 규모의 작은 언어모델 OpenELM 패밀리 공개

소개

애플이 새롭게 발표한 OpenELM은 Hugging Face Hub를 통해 접근 가능한 오픈 소스 LLM입니다. 이 모델은 디바이스 내에서 동작하기 때문에 클라우드 기반 모델과 비교할 때 개인정보 보호가 강화되며, 연결이 불안정한 환경에서도 AI 기능을 사용할 수 있는 장점이 있습니다. 또한, 이 모델은 연구자들에게 더 많은 실험과 개선의 기회를 제공하며, 오픈 소스라는 점에서 개발자들이 자유롭게 사용하고 수정할 수 있습니다.

OpenELM은 기존의 클라우드 기반 대규모 언어 모델들과 크게 비교됩니다. 클라우드 기반 모델들은 강력한 처리 능력을 제공하지만, 개인정보 보호와 연속성 측면에서 취약점을 가질 수 있습니다. 반면, OpenELM은 디바이스 내 실행이 가능하여 이러한 문제들을 해결하고, 개발자가 보다 자유롭게 AI를 사용하고 개선할 수 있는 기회를 제공합니다.

주요 특징

OpenELM 모델은 CoreNet 라이브러리를 사용해 사전 훈련된 네 가지 모델과 네 가지 지시어 조정 모델을 포함하고 있습니다. 이 모델들은 각 변환기 모델의 레이어 내에서 효율적으로 파라미터를 할당하는 레이어별 스케일링 전략을 사용하여 정확도를 향상시킵니다. 예를 들어, 약 1B 파라미터 예산을 가진 OpenELM은 OLMo와 비교하여 2.36%의 정확도 향상을 보였으며, 사전 훈련 토큰 수도 2배 적게 요구합니다.

모델 성능 비교

Zero-Shot

OpenELM’s performance across training iterations on standard zero-shot tasks

Model Size ARC-c ARC-e BoolQ HellaSwag PIQA SciQ WinoGrande Average
OpenELM-270M 26.45 45.08 53.98 46.71 69.75 84.70 53.91 54.37
OpenELM-270M-Instruct 30.55 46.68 48.56 52.07 70.78 84.40 52.72 55.11
OpenELM-450M 27.56 48.06 55.78 53.97 72.31 87.20 58.01 57.56
OpenELM-450M-Instruct 30.38 50.00 60.37 59.34 72.63 88.00 58.96 59.95
OpenELM-1_1B 32.34 55.43 63.58 64.81 75.57 90.60 61.72 63.44
OpenELM-1_1B-Instruct 37.97 52.23 70.00 71.20 75.03 89.30 62.75 65.50
OpenELM-3B 35.58 59.89 67.40 72.44 78.24 92.70 65.51 67.39
OpenELM-3B-Instruct 39.42 61.74 68.17 76.36 79.00 92.50 66.85 69.15

LLM360

Model Size ARC-c HellaSwag MMLU TruthfulQA WinoGrande Average
OpenELM-270M 27.65 47.15 25.72 39.24 53.83 38.72
OpenELM-270M-Instruct 32.51 51.58 26.70 38.72 53.20 40.54
OpenELM-450M 30.20 53.86 26.01 40.18 57.22 41.50
OpenELM-450M-Instruct 33.53 59.31 25.41 40.48 58.33 43.41
OpenELM-1_1B 36.69 65.71 27.05 36.98 63.22 45.93
OpenELM-1_1B-Instruct 41.55 71.83 25.65 45.95 64.72 49.94
OpenELM-3B 42.24 73.28 26.76 34.98 67.25 48.90
OpenELM-3B-Instruct 47.70 76.87 24.80 38.76 67.96 51.22

OpenLLM Leaderboard

Model Size ARC-c CrowS-Pairs HellaSwag MMLU PIQA RACE TruthfulQA WinoGrande Average
OpenELM-270M 27.65 66.79 47.15 25.72 69.75 30.91 39.24 53.83 45.13
OpenELM-270M-Instruct 32.51 66.01 51.58 26.70 70.78 33.78 38.72 53.20 46.66
OpenELM-450M 30.20 68.63 53.86 26.01 72.31 33.11 40.18 57.22 47.69
OpenELM-450M-Instruct 33.53 67.44 59.31 25.41 72.63 36.84 40.48 58.33 49.25
OpenELM-1_1B 36.69 71.74 65.71 27.05 75.57 36.46 36.98 63.22 51.68
OpenELM-1_1B-Instruct 41.55 71.02 71.83 25.65 75.03 39.43 45.95 64.72 54.40
OpenELM-3B 42.24 73.29 73.28 26.76 78.24 38.76 34.98 67.25 54.35
OpenELM-3B-Instruct

사용 방법

Hugging Face의 transformer를 설치한 뒤, 사용하려는 OpenELM 모델을 불러옵니다. 예를 들어, 다음은 270M 파라미터를 가진 모델을 사용하는 코드입니다.

from transformers import AutoModelForCausalLM

# 270M 파라미터 모델 불러오기
openelm_270m = AutoModelForCausalLM.from_pretrained("apple/OpenELM-270M", trust_remote_code=True)

모델을 불러온 후, 간단한 텍스트 생성을 위한 스크립트를 실행할 수 있습니다. 아래의 예시는 OpenELM모델을 사용하여 텍스트를 생성하는 방법을 보여줍니다.

# generate_openelm.py 파일을 생성 후 아래 코드를 작성
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

def generate_text(model_name, prompt):
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)
    inputs = tokenizer(prompt, return_tensors="pt")
    outputs = model.generate(**inputs, max_length=50)
    return tokenizer.decode(outputs[0], skip_special_tokens=True)

# 사용 예
print(generate_text("apple/OpenELM-270M", "Once upon a time there was"))

이 스크립트는 주어진 prompt로 시작하는 이야기를 생성합니다. generate_text 함수는 토크나이저를 사용하여 입력 텍스트를 모델에 맞는 형식으로 변환하고, generate 메서드를 호출하여 텍스트를 생성한 후, 생성된 텍스트를 디코딩합니다.

그 외에도 모델의 생성 기능을 조정하기 위해 여러 추가 인수(generate_kwargs)를 전달할 수 있습니다. 예를 들어, 반복적인 텍스트의 생성을 방지하기 위한 repetition_penalty를 설정할 수 있습니다. 또한, prompt_lookup_num_tokens 같은 인수를 통해 토큰 예측 시 성능을 향상시킬 수 있습니다.

# 고급 설정 예제
print(generate_text("apple/OpenELM-270M", "Once upon a time there was", repetition_penalty=1.2, prompt_lookup_num_tokens=10))

더 읽어보기

기사

OpenELM 기술 문서

OpenELM-270M

OpenELM-450M

OpenELM-1_1B

OpenELM-3B

OpenELM-270M-Instruct

OpenELM-450M-Instruct

OpenELM-1_1B-Instruct

OpenELM-3B-Instruct

학습용 라이브러리 CoreNet의 GitHub 저장소




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

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

:gift: 아래:arrow_lower_right:쪽에 좋아요:heart:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck:

1개의 좋아요