AI/LLM

EXAONE-Deep

Tech코알라 2025. 3. 22. 10:47

현재 OpenAI의 o3, Anthropic의 Claude 3.7 Sonnet 과 같은 폐쇄형 LLM에서 Reasoning이 대세가 되고, 역시 오픈 소스 LLM 시장에서도 DeepSeek 의 DeepSeek R1, Google의 Gemma-3와 같은 모델이 출시되면서 Reasoning 모델이 대세가 되는 것 같습니다.

(OpenAI에서 GPT4.5를 출시하면서, 마지막 비추론 모델이라고 하기도 했습니다.) 

 

이 와중, 국내에서 뛰어난  성능의 오픈소스 LLM을 공개하던 LG AI 연구원에서 EXAONE 라인업으로 EXAONE-Deep을 공개했습니다. 사실, 필자도 ExaOne은 ExaOne 만의 라이센스를 사용하기에 상업적 활용이 어려워 AI 어플리케이션에 사용은 못하고 있지만 내놓은 모델마다 뛰어난 성능을 가지고 있어 다양한 테스트를 해보면서 감탄했던 적이 있는데요. EXAONE-Deep이 출시되었다길래 바로 테스트를 진행해 보았습니다.

 

EXAONE-Deep은 총 3가지로 2.4, 7.8, 32B 3가지로 모델을 출시 했는데요 특히, 32B 모델은 미국 비영리 연구 기관인 Epoch AI의 Notable AI Models 리스트에 등재되며 성능을 입증했다고 합니다. 이는 EXAONE 3.5 이후 연이어 등재된 것으로, 최근 2년간 해당 리스트에 등재된 대한민국 모델은 EXAONE이 유일합니다. 

 

EXAONE-Deep 벤치마크 성능

 

그래서 EXAONE-Deep의 Technical Report를 리뷰해보고자 합니다.  초록은 다음과 같은데요 기술보고서인 만큼 성능이 매우 뛰어나다는  내용입니다. 

 


We present EXAONE Deep series, which exhibits superior capabilities in various reasoning tasks, including math and coding benchmarks. We train our models mainly on the reasoning-specialized dataset that incorporates long streams of thought processes. Evaluation results show that our smaller models, EXAONE Deep 2.4B and 7.8B, outperform other models of comparable size, while the largest model, EXAONE Deep 32B, demonstrates competitive performance against leading openweight models. All EXAONE Deep models are openly available for research purposes and can be downloaded from https://huggingface.co/LGAI-EXAONE.

 

EXAONE Deep 시리즈는 수학과 코딩 벤치마크 등 다양한 추론 작업에서 뛰어난 성능을 보여줍니다. 이 모델들은 주로 사고 과정을 길게 추적할 수 있는 추론 전문 데이터셋을 활용해 학습되었습니다. 평가 결과, 소형 모델인 EXAONE Deep 2.4B와 7.8B는 동일 크기의 다른 모델보다 우수한 성능을 보였으며, 대형 모델인 EXAONE Deep 32B는 선도적인 오픈웨이트 모델과 경쟁력 있는 성능을 나타냈습니다. 모든 EXAONE Deep 모델은 연구 목적을 위해 공개되어 있으며, Huggingface에서 다운로드할 수 있습니다.


 

EXAONE-DEEP 모델들은 Supervised Fine-Tuning (SFT), Direct Preference Optimization (DPO), Online Reinforcement Learning (Online RL) 기법을 활용하여 학습되었다고 밝혔는데요. 

 

언어 모델의 추론 능력을 강화하기 위해, SFT에는 160만 개의 인스턴스, DPO에는 2만 개의 선호도 데이터, Online RL에는 추가 1만 개의 인스턴스를 활용했습니다. SFT 데이터셋은 약 120억 토큰으로 구성되어 있다고 합니다. 이 데이터셋은 모델이 아래의 그림에 제시된 연장된 체인오브생각(CoT) 과정을 통해 추론하도록 유도하기 위해 설계되었다고 합니다. 

 

학습 데이터셋


EXAONE Deep의 기본 모델은 EXAONE 3.5 Instruct 모델로, 명령어 따르기 능력을 갖추도록 튜닝된 모델입니다. EXAONE Deep의 추론 능력을 강화하기 위해, SFT와 DPO 데이터를 위의 그림처럼 제시된 템플릿 형식으로 구성했습니다. 각 학습 인스턴스는 구조화된 사고 과정과 그 사고 과정을 종합하여 일관되고 정확한 최종 답변을 도출하는 방식으로 구성됩니다. 구체적으로, EXAONE 3.5 Instruct 모델은 <thought>와 </thought> 태그 내에서 단계별 논리 전개, 반성, 자기 점검 및 수정 과정을 거쳐 추론하도록 학습되며, 최종 답변은 이 사고 과정을 요약한 자립적인 답변으로 설계되었습니다.

 

이러한 구조화된 접근 방식은 EXAONE Deep이 견고한 추론을 수행하고 주어진 질의에 대해 근거 있는 답변을 제공할 수 있도록 한다고 합니다. 또한, DPO 학습에는 SimPER , Online RL 학습에는 GRPO의 변형 알고리즘을 사용하였습니다. 학습에 필요한 계산 자원은 Google Cloud Platform이 제공하는 NVIDIA H100 GPU 클러스터와 NVIDIA NeMo Framework를 사용하였다고 합니다. 

 

사용 방법 (출처 : https://huggingface.co/LGAI-EXAONE/EXAONE-Deep-32B)

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
from threading import Thread

model_name = "LGAI-EXAONE/EXAONE-Deep-32B"
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)

# Choose your prompt:
#   Math example (AIME 2024)
prompt = r"""Let $x,y$ and $z$ be positive real numbers that satisfy the following system of equations:
\[\log_2\left({x \over yz}\right) = {1 \over 2}\]\[\log_2\left({y \over xz}\right) = {1 \over 3}\]\[\log_2\left({z \over xy}\right) = {1 \over 4}\]
Then the value of $\left|\log_2(x^4y^3z^2)\right|$ is $\tfrac{m}{n}$ where $m$ and $n$ are relatively prime positive integers. Find $m+n$.

Please reason step by step, and put your final answer within \boxed{}."""
#   Korean MCQA example (CSAT Math 2025)
prompt = r"""Question : $a_1 = 2$인 수열 $\{a_n\}$과 $b_1 = 2$인 등차수열 $\{b_n\}$이 모든 자연수 $n$에 대하여\[\sum_{k=1}^{n} \frac{a_k}{b_{k+1}} = \frac{1}{2} n^2\]을 만족시킬 때, $\sum_{k=1}^{5} a_k$의 값을 구하여라.

Options :
A) 120
B) 125
C) 130
D) 135
E) 140
 
Please reason step by step, and you should write the correct option alphabet (A, B, C, D or E) within \\boxed{}."""

messages = [
    {"role": "user", "content": prompt}
]
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]))

 

단, EXAONE-Deep을 사용하는 과정에서 flash-attention이라는 라이브러리의 설치가 필요한데 해당 라이브러리의 설치가 굉장히 까다롭습니다. 그렇기에 docker hub에 있는 Torch 이미지를 활용할 것을 추천합니다(EXAONE-Deep의 허깅페이스에서도 그렇게 제시되어 있습니다) 필자는 pytorch/pytorch:2.6.0-cuda12.4-cudnn9-runtime 이미지를 사용했습니다.

 

사용해본 바로는, RTX3090 4장에서 추론시 결과가 다 나올 때까지 굉장히 느린 느낌이었습니다. 추론 과정이 길어지다 보니 어쩔 수 없는 문제인 것 같습니다. 해당 문제에서 자유로운 모델은 사용 경험상, google의 동급 추론 모델인 google/gemma-3-27b-it이 유일하게 자유로운 것 같습니다. (이에 대해서 어떻게 최적화를 했는지 참 궁금합니다. ) 그렇지만 성능은 굉장히 좋은 것 같습니다.