HyperCLOVA X SEED 출시

안녕하세요. 이번에 네이버가 출시한 HyperCLOVA X SEED에 대해서 소개해보고자 합니다.

 

네이버가 이번에 HyperCLOVA X SEED를 출시하면서 "소버린 AI 생태계 구축을 위한 중요한 발걸음입니다. 소버린 AI의 구현은 어느 한 기업이나 국가가 혼자 이룰 수 없는 거대한 과제입니다. 네이버는 다른 기업들이 더 강력해지기를 바라며, 소버린 AI 생태계 조성을 위해 HyperCLOVA X SEED를 오픈소스로 공개합니다." 라는 말을 했는데 여기서 소버린 AI란 '자주적인', '주권이 있는' 이라는 의미의 소버린(Sovereign)에 AI(인공지능)을 붙인 단어로, 일반적으로, 특정 국가 또는 조직이 자국 내에서 독립적으로 운영하고 통제할 수 있는 인공지능 시스템을 의미합니다. 

 

최근 여러 오픈소스 모델이 출시되었지만, 한국에서 Pretrained된 LLM 모델은 극소수 였는데 이번에 Naver에서 소버린 AI를 내걸고 모델을 발표했습니다. 이번 Naver가 발표한 LLM 모델은 3/ 1.5/ 0.5B 총 3가지로 작은 모델 위주인데요. 특히 이중 3B 모델의 경우 이미지 이해 역량을 가지고 있어서 텍스트 및 비전 데이터를 동시에 처리할 수 있다고 합니다. 

 

HyperCLOVA X SEED 3B

 

HyperCLOVA X SEED 3B는 위에서 얘기했듯 이미지 이해 역량을 가지고 있어서 텍스트 및 비전 데이터를 동시에 처리할 수 있습니다. 특히, 텍스트 성능 측면에서는 다양한 한국어 벤치마크 테스트에서 경쟁력 있는 결과를 보여주며, 특히 HyperCLOVA X SEED가 한국어와 한국 문화를 잘 이해하고 처리할 수 있음을 보여주었다고 합니다. 또한, 이미지와 비디오 이해 분야의 벤치마크 테스트에서 경쟁 모델 대비 높은 점수를 기록했습니다. 특히 한국어 맥락에서 시각적 콘텐츠 이해 능력을 입증했다고 합니다. 

* 비교 모델 : Qwen 2.5-3B-Instruct, Gemma 3-4b-it

 

사용 예시)

!pip install transformers einops timm av opencv-python decord # 필요한 라이브러리 

from transformers import AutoModelForCausalLM, AutoProcessor, AutoTokenizer

model_name = "naver-hyperclovax/HyperCLOVAX-SEED-Vision-Instruct-3B"
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True).to(device="cuda")
preprocessor = AutoProcessor.from_pretrained(model_name, trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# LLM Example
# It is recommended to use the chat template with HyperCLOVAX models.
# Using the chat template allows you to easily format your input in ChatML style.
chat = [
    {"role": "system",    "content": "당신은 도움이 되는 어시스턴트입니다!"},
    {"role": "user",      "content": "안녕하세요, 어떻게 지내세요?"},
    {"role": "assistant", "content": "잘 지내고 있어요. 오늘 무엇을 도와드릴까요?"},
    {"role": "user",      "content": "채팅 템플릿 기능을 자랑하고 싶어요!"},
]
input_ids = tokenizer.apply_chat_template(chat, return_tensors="pt", tokenize=True)
input_ids = input_ids.to(device="cuda")

# Please adjust parameters like top_p appropriately for your use case.
output_ids = model.generate(
        input_ids,
        max_new_tokens=128 ,
        do_sample=True,
        top_p=0.6,
        temperature=0.5,
        repetition_penalty=1.0,
)
print("=" * 80)
print("LLM EXAMPLE")
print(tokenizer.batch_decode(output_ids)[0])
print("=" * 80)

# VLM Example
# For image and video inputs, you can use url, local_path, base64, or bytes.
vlm_chat = [
    {"role": "system", "content": {"type": "text", "text": "시스템 프롬프트"}},
    {"role": "user",   "content": {"type": "text", "text": "사용자 텍스트 1"}},

    {
        "role": "user",
        "content": {
            "type": "image",
            "filename": "tradeoff_sota.png",
            "image": "https://github.com/naver-ai/rdnet/blob/main/resources/images/tradeoff_sota.png?raw=true",
            "ocr": "이미지에 있는 단어를 래스터 순서대로 나열해 주세요. 읽기에 부자연스러워 보여도 래스터 순서를 따르면 모델이 처리할 수 있습니다.",
            "lens_keywords": "Gucci Ophidia, 크로스백, Ophidia 스몰, GG, Supreme 숄더백",
            "lens_local_keywords": "[0.07, 0.21, 0.92, 0.90] Gucci Ophidia",
        }
    },
    {
        "role": "user",
        "content": {
            "type": "image",
            "filename": "tradeoff.png",
            "image": "https://github.com/naver-ai/rdnet/blob/main/resources/images/tradeoff.png?raw=true",
        }
    },
    {"role": "assistant", "content": {"type": "text", "text": "당신은 설명을 정말 잘하는 모델입니다. "}},
    {"role": "user",      "content": {"type": "text", "text": "해당 이미지에 대해서 설명해주세요. "}},

    #{
    #    "role": "user",
    #    "content": {
    #        "type": "video",
    #        "filename": "rolling-mist-clouds.mp4",
    #        "video": "freenaturestock-rolling-mist-clouds.mp4",
    #    }
    #},
    #{"role": "user", "content": {"type": "text", "text": "해당 이미지에 대해서 설명해주세요."}},
]

new_vlm_chat, all_images, is_video_list = preprocessor.load_images_videos(vlm_chat)
preprocessed = preprocessor(all_images, is_video_list=is_video_list)
input_ids = tokenizer.apply_chat_template(
        new_vlm_chat, return_tensors="pt", tokenize=True, add_generation_prompt=True,
)

output_ids = model.generate(
        input_ids=input_ids.to(device="cuda"),
        max_new_tokens=8192,
        do_sample=True,
        top_p=0.6,
        temperature=0.5,
        repetition_penalty=1.0,
        **preprocessed,
)
print(tokenizer.batch_decode(output_ids)[0])

 

답변 

LLM EXAMPLE
<|im_start|>tool_list
<|im_end|>
<|im_start|>system
당신은 도움이 되는 어시스턴트입니다!<|im_end|>
<|im_start|>user
안녕하세요, 어떻게 지내세요?<|im_end|>
<|im_start|>assistant
잘 지내고 있어요. 오늘 무엇을 도와드릴까요?<|im_end|>
<|im_start|>user
채팅 템플릿 기능을 자랑하고 싶어요!<|im_end|>
<|im_start|>assistant
채팅 템플릿 기능은 정말 유용하죠! 다양한 상황에서 사용할 수 있는 미리 설정된 메시지 템플릿을 통해 대화의 효율성을 높이고 시간을 절약할 수 있습니다. 예를 들어, 고객 서비스에서는 일반적인 문의에 대한 답변을 빠르게 제공할 수 있고, 교육 분야에서는 학습 자료나 강의 내용을 정리할 때 큰 도움이 됩니다. 사용자님의 필요에 맞게 템플릿을 맞춤 설정하여 사용하면 더욱 효과적일 거예요! 자랑할 만한 기능이죠?<|im_end|><|endofturn|>

 

HyperCLOVA X SEED 1.5B

 

HyperCLOVA X SEED 1.5B는 주로 영어와 일본어 등 주요 언어 간 기본적인 번역 작업에 적합하다고 합니다. 예시와 같이 한국어 메시지를 영어로 번역하여 사용자가 더 명확한 의견을 표현할 수 있도록 안내하는데, 이러한 능력은 교육 자료나 비즈니스 커뮤니케이션에서 보조적인 도구로 활용할 수 있다고 합니다.

 

 

사용 예시) 

from transformers import AutoModelForCausalLM, AutoTokenizer
#모델 로드시, 허깅페이스에서 Accept 해야 되며 Huggingface-cli login --token <your-token> 필요
model = AutoModelForCausalLM.from_pretrained("naver-hyperclovax/HyperCLOVAX-SEED-Text-Instruct-1.5B")
tokenizer = AutoTokenizer.from_pretrained("naver-hyperclovax/HyperCLOVAX-SEED-Text-Instruct-1.5B")

chat = [
  {"role": "tool_list", "content": ""},
  {"role": "system", "content": "- AI 언어모델의 이름은 \"CLOVA X\" 이며 네이버에서 만들었다.\n- 오늘은 2025년 04월 24일(목)이다."},
  {"role": "user", "content": "슈뢰딩거 방정식과 양자역학의 관계를 최대한 자세히 알려줘."},
]

inputs = tokenizer.apply_chat_template(chat, add_generation_prompt=True, return_dict=True, return_tensors="pt")
output_ids = model.generate(**inputs, max_length=1024, stop_strings=["<|endofturn|>", "<|stop|>"], tokenizer=tokenizer)
print(tokenizer.batch_decode(output_ids))

 

['<|im_start|>tool_list\n<|im_end|>\n<|im_start|>system\n- 
AI 언어모델의 이름은 "CLOVA X" 이며 네이버에서 만들었다.\n- 오늘은 2025년 04월 24일(\x1d목)이다.
<|im_end|>\n<|im_start|>
user\n슈뢰딩거 방정식과 양자역학의 관계를 최대한 자세히 알려줘.
<|im_end|>\n<|im_start|>assistant\n슈뢰딩거 방정식은 양자역학에서 가장 중요한 방정식 중 하나입니다. 
이 방정식은 원자나 분자 등의 입자가 가진 에너지와 운동량을 나타내는 방정식입니다.
\n\n양자역학에서는 입자의 상태가 확률적으로 표현되며, 슈뢰딩거 방정식은 이러한 확률을 계산하는 데 사용됩니다. 
슈뢰딩거 방정식은 다음과 같은 형태입니다.

\n\n- 슈뢰딩거 방정식: $\\hat{H} \\psi(x,y,z,t) = \\hat{H} \\psi(x,y,z,t)$\n

- 슈뢰딩거 방정식: $\\hat{H} \\psi(x,y,z,t) = i\\hbar\\frac{\\partial \\psi(x,y,z,t)}{\\partial t}$\n
- 슈뢰딩거 방정식: $\\hat{H} \\psi(x,y,z,t) = -\\frac{\\hbar^2}{2m}\\nabla^2 \\psi(x,y,z,t) + V(x,y,z,t)\\psi(x,y,z,t)$\n\n
여기서 $\\hat{H}$는 에너지와 운동량을 나타내는 양자역학에서의 Hamiltonian입니다. $\\psi(x,y,z,t)$는 시간 $t$에서의 입자의 상태를 나타내는 함수입니다. 
$V(x,y,z,t)$는 입자가 위치한 공간에서의 중력이나 전기력 등의 외력을 나타내는 함수입니다.\n\n
슈뢰딩거 방정식은 매우 복잡하며, 이를 해결하기 위해서는 수학적 계산이 필요합니다. 
양자역학에서는 슈뢰딩거 방정식을 해결하기 위해 다양한 방법을 사용합니다. 
예를 들어, 파동함수 방법, 양자역학에서의 확률밀도함수 방법 등이 있습니다.\n\n
슈뢰딩거 방정식은 양자역학의 핵심적인 개념 중 하나이며, 이를 통해 원자, 분자, 원자핵 등의 입자의 동작과 성질을 이해할 수 있습니다.<|im_end|><|endofturn|>']

 

HyperCLOVA X SEED 0.5 B

 

특이하게도 모델 사이즈가 상대적으로 큰 두가지 모델에 대해서는 자세한 학습 방법을 소개하지 않고 있으나 해당 모델은 일부 학습 방법에 대해서 소개해주었습니다. 해당 모델은 텍스트를 이해하고 생성하는 모델로, 매우 작은 크기임에도 사용자와 멀티턴으로 한국어 대화를 주고받을 수 있다고 합니다. 리소스가 제한된 환경에서도 자연스러운 대화형 인터페이스를 구현할 수 있어 모바일 애플리케이션, 스마트홈 기기, 웨어러블 디바이스 등 다양한 활용 사례가 있을 것으로 기대한다고 하는데요. 아무래도 온디바이스 용으로 설계된 모델 같습니다.

 

HyperCLOVA X SEED 0.5B는 동일한 파라미터 크기의 Qwen2.5-0.5B-instruct 모델과 비교해 KMMLU, HAE-RAE, KoBEST 등 주요 한국어 벤치마크에서 일관되게 우수한 성능을 보여준다고 합니다. 특히, HyperCLOVA X SEED 0.5B는 고품질 학습 데이터와 고성능의 HyperCLOVA X 플래그십 모델을 활용해 유사 체급의 경쟁 모델보다 39배 적은 비용으로 학습되었습니다. 이 부분에서 HyperCLOVA X SEED 0.5B이 굉장히 큰 모델을 활용하여 강화학습을 진행했거나, 아니면 Distill을 한 것이 아닌가 유추해볼 수 있습니다. 

 

학습 비용 (pre-training) HyperCLOVA X SEED 0.5B QWEN2.5-0.5B
A100 GPU hours 4,358 169,257
Cost (USD) 6,537 253,886

 

from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("naver-hyperclovax/HyperCLOVAX-SEED-Text-Instruct-0.5B")
tokenizer = AutoTokenizer.from_pretrained("naver-hyperclovax/HyperCLOVAX-SEED-Text-Instruct-0.5B")

chat = [
  {"role": "tool_list", "content": ""},
  {"role": "system", "content": "- AI 언어모델의 이름은 \"CLOVA X\" 이며 네이버에서 만들었다.\n- 오늘은 2025년 04월 24일(목)이다."},
  {"role": "user", "content": "슈뢰딩거 방정식과 양자역학의 관계를 최대한 자세히 알려줘."},
]

inputs = tokenizer.apply_chat_template(chat, add_generation_prompt=True, return_dict=True, return_tensors="pt")
output_ids = model.generate(**inputs, max_length=1024, stop_strings=["<|endofturn|>", "<|stop|>"], tokenizer=tokenizer)
print(tokenizer.batch_decode(output_ids))

 

 

후기)

작은 모델만을 발표한데에 비해 굉장히 만족스러운 모델들인 것 같습니다. 더 어려운 태스크에 대해서 평가가 필요하지만 생성해내는 문맥등이 모델 사이즈에 비해서 굉장히 좋았던 것 같습니다. 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유