오늘(3/18) 아침 LG의 야심작 EXAONE 모델의 새로운 버전이 오픈소스로 공개됐다.
https://huggingface.co/LGAI-EXAONE
LGAI-EXAONE (LG AI Research)
LG AI EXAONE Welcome to the official HuggingFace organization of EXAONE, which refers to the family of Large Language Models (LLMs) and Large Multimodal Models (LMMs) developed by LG AI Research. EXAONE stands for EXpert AI for EveryONE, a vision that LG i
huggingface.co
보통 모델에 Deep이 들어갔다는 건 추론 능력이 탑재되었다는 건데, 비교적 최근에 핫해진 Reasoning임에도 발빠르게 모델 개발을 해서 내놓은 걸 보니 처음엔 대단하다는 생각이 들었다. (물론 Reasoning이 처음 나온 이후 웬만한 빅테크에선 진작 각자 모델들을 내놓은 상황)
당연히 국내 최초다. 그래서 과연 얼마나 잘 만들었을까? 하는 기대감에 바로 사용을 해봤다.
EXAONE DEEP 2.4B
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
from threading import Thread
model_name = "LGAI-EXAONE/EXAONE-Deep-2.4B"
streaming = True # choose the streaming option
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16,
trust_remote_code=True,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
messages = [
{"role": "user", "content": "How many golf balls can fit in a school bus?"}
]
input_ids = tokenizer.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
return_tensors="pt"
)
if streaming:
streamer = TextIteratorStreamer(tokenizer)
thread = Thread(target=model.generate, kwargs=dict(
input_ids=input_ids.to("cuda"),
eos_token_id=tokenizer.eos_token_id,
max_new_tokens=32768,
do_sample=True,
temperature=0.6,
top_p=0.95,
streamer=streamer
))
thread.start()
for text in streamer:
print(text, end="", flush=True)
else:
output = model.generate(
input_ids.to("cuda"),
eos_token_id=tokenizer.eos_token_id,
max_new_tokens=32768,
do_sample=True,
temperature=0.6,
top_p=0.95,
)
print(tokenizer.decode(output[0]))
코드는 친절하게 허깅페이스 홈페이지에 예제가 올라와있고, Thread 기능을 활용해서 단어가 생성되는 걸 실시간으로 확인할 수도 있다. 예제로 올라온 '버스에 탁구공 몇 개가 들어갈까?' 라는 질문을 그대로 돌려봤다.
우선 2.4B로 테스트해봤다.
Reasoning 데이터셋으로 학습시킨 티가 잘 느껴진다. 추론이 잘 진행되고 있는 게 보인다.
문제는 이 다음인데.. 추론이 끝나질 않는다. GPU가 2080ti긴 하지만 10분이 넘어가도 추론이 끝나지 않았다.
OpenAI의 GPT 4o 토크나이저로 몇 토큰인지 계산해봤더니 6300토큰이 넘어가버린다. 추론하면 할수록 토큰이 쌓여서 생성 속도가 점점 느려지기에 어쩔 수 없이 여기서 코드를 멈추었다. 추론 내용을 읽어보면 정답에 근접은 해놓고 계속해서 망설이는 모습을 보인다. 뭐 계속 돌렸으면 답을 봤을 수도 있을 것 같긴 하다.
이번엔 같은 2.4B 모델에
학교 버스 한 대에 탁구공이 몇 개나 들어갈까?
라고 같은 질문을 한글로 바꿔 넣어봤다.
[|system|][|endofturn|]
[|user|]학교 버스 한 대에 탁구공이 몇 개나 들어갈까?
[|assistant|]<thought>
</thought>
school bus has a certain number of tennis balls to put into the bus.
The problem is asking how many tennis balls should be loaded onto each bus.
However, the question does not provide specific details such as the total number of tennis balls available, the capacity of the bus, or any other constraints.
Without additional information, it's impossible to determine a numerical answer.
Please provide more details so I can assist you better![|endofturn|]
정확한 숫자를 모르니 답변을 할 수 없다는 답이 돌아왔다. 이번엔 특이하게 아예 추론이 진행되지 않았다. 다른 모델도 이런 디테일을 요구할 때가 있으니 그러려니 했다.
마지막으로 한국어 능력도 한 번 보고 싶어서 한글로 대답해달라고 해봤다.
[|system|][|endofturn|]
[|user|]학교 버스 한 대에 탁구공이 몇 개나 들어갈까? 한글로 답변해줘
[|assistant|]<thought>
알았습니다! 버스에 탁구공을 어떻게 넣을지에 대한 궁금한 점을 가지시는군요.
먼저 버스에 넣을 탁구공의 수를 계산해 주세요.
then, 그 결과를 한글로 알려드리겠습니다.
please provide the number of tennis balls to put into the bus.
then, I will give you the result in Hangul.
please provide the number of tennis balls to put into the bus.
then, I will give you the result in Hangul.
please provide the number of tennis balls to put into the bus.
then, I will give you the result in Hangul.
please provide the number of tennis balls to put into the bus.
then, I will give you the result in Hangul.
please provide the number of tennis balls to put into the bus.
then, I will give you the result in Hangul.
... 내가 복붙 과정에서 실수한 게 아니라 위와 같이 같은 말을 무한 반복하기 시작했다...
질문이 너무 어려운 것 같아 쉬운 질문으로 바꿔봤다. 영화 5개를 추려달라는 간단한 질문이다.
[|system|][|endofturn|]
[|user|]역사상 가장 재밌는 영화 후보를 5개 추려줘. 한글로 답변해줘
[|assistant|]<thought>
</thought>
역사상 가장 재밌는 영화 후보 5개를 한글로 Select해 드리겠습니다:
1. **"백리민족" (1955) - 이성수**
Japanese: **"백리민족"**은 Japanese: **"White Lotus"**로 알려진 영화로, Indian: **"White Lotus"**는 Indian: **"Khanai Di Beta Naach"**로도 알려지지만, 그 감동적인 스토리와 인물극장으로 유명합니다.
2. **"테디노" (The Teidi No) (1962) - 나탈리시**
Indian: **"Teidi No"**는 Indian: **"Karan Thapar"**로도 알려져 있지만,main theme는 Indian: **"Terti No"**로 더 많이 알려지지만, 그 영화의 주요 스토리는 Indian: **"Terti No"**로 표현됩니다.
3. **"아마리 베오" (Amari Boole Boole) (1956) - 마탈라**
Indian: **"Amari Boole Boole"**은 Indian: **"Amari Bole Bole"**로도 알려지지만, 그 영화의 주요 스토리는 Indian: **"Amari Beole Beole"**로 더 잘립니다.
4. **"더 위즈" (The Wizard) (1997) - 기영**
Indian: **"The Wizard"**은 Indian: **"Giri"**로도known되지만, main focus는 Indian: **"The Wizard"**입니다.
5. **" 파나마" (Panama) (1981) - 알베르스**
Indian: **"Panama"**는 Indian: **"Albertas"**로도 known되지만, 그 영화의 감동적인 스토리로 Indian: **"Panama"**가 더 많이 사용됩니다.
Each film stands out for its unique storytelling, complex characters, and timeless themes that resonate deeply with audiences worldwide.[|endofturn|]
정말 경악스럽게도 5개의 영화 모두 실제로 존재하지 않는 영화인데다 중간중간 영어단어를 남발하고 마지막 답변 또한 영어로 돌아왔다.. LG 측에선 이걸 온디바이스 모델로 사용할 수 있다는데.. 아직은 먼 미래같다.
같은 질문을 gpt4o에 넣었을 때 돌아오는 답변과 수준 차이가 너무 심하다..
그래, 2.4B니깐 그럴 수 있지. LG에서 돈을 받으며 공부하는 입장에서 무작정 비난만 할 수는 없다. 왜냐면 모델 크기가 작을 때 발생하는 이슈는 다른 빅테크 기업의 LLM에서도 흔히 발생하기 때문. 7.8B를 사용해보되, 양자화를 안하면 GPU에 올라가지 않아서 안정성도 볼 겸 8비트 정수형으로 양자화한다음 사용해봤다.
EXAONE DEEP 7.8B
이번에도 허깅페이스의 예제 질문을 위에서 사용한대로 그대로 적용해봤다.
역시나 이번에도 추론이 끝나지 않고 max token 까지 진행될 기세였다. 그래서 도중에 한 번 토큰 수 체크를 하고, 속도가 너무 느려져서 멈췄다.
5537 토큰을 쓰고도 한참 동안 더 추론을 했는데, 이걸 캡처를 했어야 했는데 못 해서 아쉽다.
위는 딥시크 R1의 추론 토큰 수이다. 6118 토큰으로 같은 질문에 대한 추론을 끝냈으니, 추론 능력에 있어선 R1이 더 우수하다고 판단이 된다.
무엇보다 R1은 우선 답변을 완성해냈다. 훨씬 더 많은 추론양으로도 답변을 내지 못하였으니 R1이 더 낫다고 판단할 수밖에..
https://chatgpt.com/share/67d90b6d-054c-8010-be76-a004b1b996eb
ChatGPT - Golf Balls in Bus
Shared via ChatGPT
chatgpt.com
참고로 o1은 아주 적은 토큰만 사용해서 이성처리를 완료하고 계산은 비추론 영역에서 진행했다.
그래도 긍정적인 영역도 있었다.
[|system|][|endofturn|]
[|user|]역사상 가장 재미있던 영화 후보 5개를 추천해줘. 한국어로 대답해줘.
[|assistant|]<thought>
</thought>
역사상 가장 재미있는 영화 후보 5개를 추천해 드리겠습니다! 이 목록은 다양한 시대와 장르를 커버하며, 관객들에게 지속적인 관심을 유발하는 영화들을 선별했습니다.
1. **"시네마 천국" (1988)**
이탈리아의 유명한 감독 로베르토 로텔로가 감독한 이 영화는 어린 시절부터 영화를 사랑했던 소년의 이야기를 통해 영화의 매력과 삶의 의미를 탐구합니다. 감동적인 스토리와 따뜻한 연출로 많은 사랑을 받았습니다.
2. **"킹덤" (2019)**
조선시대를 배경으로 한 판타지 블록버스트 영화로, 조선 최초의 바이러스 침략과 좀비 현상을 중심으로 한 이야기를 그립니다. 역사적 사실과 상상력을 결합해 흥미로운 서사를 전개하며, 시각적 스펙터클과 함께 관객들을 매료시킵니다.
3. **"라라랜드" (2016)**
디즈니 애니메이션 '라라랜드'의 실사 버전으로, 뮤지컬과 로맨스를 결합한 작품입니다. 꿈을 향해 열정적으로 노력하는 배우들의 이야기를 통해 꿈과 현실의 갈등, 사랑의 아름다움을 보여줍니다. 감성적인 음악과 아름다운 영상으로 많은 사랑을 받았습니다.
4. **"1987" (2018)**
1987년 필리핀 역사상 중요한 변화의 시기를 배경으로 한 드라마 영화로, 시민들의 민주화 운동을 통해 사회의 변화를 보여줍니다. 현실적인 묘사와 감동적인 스토리로 역사의 중요성을 잘 전달합니다.
5. **"어바이어리티" (2023)**
최근 출시된 영화로, 시간 여행을 소재로 한 SF 블록버스트입니다. 과거와 현재를 연결하는 이야기를 통해 인간의 욕망과 시간에 대한 철학적 질문을 던집니다. 혁신적인 시각 효과와 함께 관객들의 관심을 끌고 있습니다.
이 영화들은 각각 다른 시대와 장르를 대표하며, 재미있는 요소와 함께 깊이 있는 메시지를 전달합니다. 취향에 따라 선택하시면 좋을 것 같습니다![|endofturn|]
7.8B의 비추론 답변을 보면 2.4B 보다 훨씬 잘 답변을 생성한 걸 볼 수 있다.물론 중간중간 틀린 내용들도 있긴 한데.. 뭐 이정도면 크기 치곤 무난한 성능같다.
물론 여전히 딥시크의 답변 수준엔 못 미치는 것 같다.
사용 후기
LG의 공식 벤치마크 성능에 의하면 OpenAI o1-mini를 앞서는 추론 능력을 보여준다. 하지만 이건 어디까지나 벤치마크 성능이고.. 실제 사용자들은 DeepSeek과 OpenAI o1 보단 훨씬 떨어지는 만족감을 느낄 것 같다.
커뮤니티에서 여러 사람들과 말해봤어도 DeepSeek의 증류 모델들은 진짜 좋다고 말하는 사람들이 많았는데, 이 엑사원을 쓰고 진짜 좋다고 느끼실 분이 얼마나 될지... 무엇보다 추론이 끝나지 않고 너무 길다는 점이 최대의 단점같다.
글이 너무 길어져서 내가 테스트해본 모든 프롬프트를 올리진 않았다. code generation 이나 math 같은 부분도 테스트 해보긴 했는데 추론으로 들어가기만 하면 답변이 생성되기까지 너무 오래 걸린다. 컴퓨팅 자원의 문제도 있겠지만 LG에서 직접 비교군으로 설정한 모델들보다 토큰 양 자체가 훨씬 많다는 점을 감안하면 너무 치명적인 단점으로 보인다.
결론 : 가벼운 모델 찾으면 DeepSeek-R1 증류 모델 사용할 것 같지 이거 쓸 것 같지는 않다. 엘지 측 분들이 만에 하나 이 글을 보신다면 전혀 악의는 없었음을 말씀드립니다.
'LLM' 카테고리의 다른 글
[LLM] ChatGPT 4o 이미지 생성 모델, 어떻게 만들었는지 원리 탐구 (2) | 2025.03.28 |
---|---|
[LLM] 심심해서 구해본 BERT의 파라미터 수 (2) | 2025.02.12 |
[LLM] Attention is All You Need 의 Base Transformer 파라미터 수 계산 (2) | 2025.02.11 |
[LLM] LLM으로 Tabular Data 학습해보기 3 - Langchain으로 데이터 증강하기 (8) | 2024.11.13 |
[LLM] LLM으로 Tabular Data 학습해보기 - 2. 이진분류 (경정데이터분석) (7) | 2024.09.29 |