본문 바로가기
AI

[ kakao / kanana ] 최근 공개한 kakao의 언어 모델인 kanana란?

by Lcoding 2025. 2. 28.
반응형

안녕하세요.

 

최근에 카카오에서 카나나라는 언어모델의 경량 버전을 오픈소스로 깃허브에 공개하였습니다.

 

자세한 정보는 아래 링크에서 확인가능합니다.

 

https://github.com/kakao/kanana?tab=readme-ov-file#kanana

 

GitHub - kakao/kanana: Kanana: Compute-efficient Bilingual Language Models

Kanana: Compute-efficient Bilingual Language Models - kakao/kanana

github.com

 

 

신규로 공개했으니 테스트 해보기위해 로컬에서 위 링크를 참조하여 테스트 코드를 작성해보았습니다.

 

이 글은 기본 프로젝트는 생성하였다는 가정하에 메소드 작성 및 호출만 진행합니다.

 

터미널에서 아래와 같이 설치해줍시다.

pip install transformers>=4.45.0

 

 

 

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from fastapi import FastAPI, Request


app = FastAPI()


@app.get("/testKakaoModel")
def home(request: Request):

    # 모델명 설정
    model_name = "kakaocorp/kanana-nano-2.1b-base"

    # 모델과 토크나이저 로드
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForCausalLM.from_pretrained(model_name)

    # `pad_token_id` 설정 (필수)
    if tokenizer.pad_token_id is None:
        tokenizer.pad_token = tokenizer.eos_token
        tokenizer.pad_token_id = tokenizer.eos_token_id  # 패딩 토큰 ID를 EOS 토큰 ID로 설정

    # 입력 문장
    input_text = "사람은 평생 여러가지 지식을 탐구하며"
    # input_text = "인간은 다이어트라는 주제에 대하여 오랜기간"
    # input_text = "이처럼 인간처럼 생각하고 행동하는 AI 모델은"


    # 토큰화 (여기서 `attention_mask` 추가!)
    inputs = tokenizer(input_text, return_tensors="pt", padding=True, truncation=True)


    device = "cuda" if torch.cuda.is_available() else "cpu"
    model = model.to(device)  # 모델을 GPU 또는 CPU로 이동

    outputs = model.generate(
        inputs["input_ids"].to(device),
        attention_mask=inputs["attention_mask"].to(device),
        pad_token_id=tokenizer.pad_token_id,
        max_new_tokens=64,
        do_sample=False,
    )


    # 생성된 결과 디코딩
    generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
    print(generated_text)

# Output:
# max_new_tokens=64
# 사람은 평생 여러가지 지식을 탐구하며 살아간다. 그 지식은 우리가 살아가는데 필요한 지식이기도 하고, 우리가 살아가는데 필요하지 않은 지식이기도 하다. 우리가 살아가는데 필요한 지식은 우리가 살아가는데 필요한 지식이기도 하고, 우리가 살아가는데 필요하지 않은
# 인간은 다이어트라는 주제에 대하여 오랜기간동안 관심을 가져왔다. 다이어트는 단순히 체중을 줄이는 것뿐만 아니라 건강한 식습관과 생활습관을 형성하는 것을 목표로 한다. 다이어트는 개인의 목표와 상황에 따라 다양한 방법과 전략이 존재한다. 이 글
# max_new_tokens=32
# 이처럼 인간처럼 생각하고 행동하는 AI 모델은 2020년대 중반에 등장할 것으로 예상된다. 2020년대 중반에 등장할 것으로 예상되는 AI 모델은 인간

 

 

 

코드 흐름 정리

1. FastAPI 애플리케이션 생성

 
app = FastAPI()

 

FastAPI를 사용하여 REST API를 실행할 준비를 합니다.

 

 

2. 모델 및 토크나이저 로드

model_name = "kakaocorp/kanana-nano-2.1b-base"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

 

Hugging Face에서 Kanana 모델 및 토크나이저 로드합니다.

 

 

3. 패딩 토큰 ID 설정

if tokenizer.pad_token_id is None:
    tokenizer.pad_token = tokenizer.eos_token
    tokenizer.pad_token_id = tokenizer.eos_token_id

 

pad_token_id가 없으면 eos_token_id로 설정하여 오류 방지합니다.

 

 

4. 입력 텍스트 정의 및 토큰화

input_text = "사람은 평생 여러가지 지식을 탐구하며"
inputs = tokenizer(input_text, return_tensors="pt", padding=True, truncation=True)

 

입력 문장을 정의하고, tokenizer를 사용해 PyTorch 텐서 형태로 변환합니다.

 

5. 모델을 GPU 또는 CPU로 이동

device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)

 

CUDA를 사용 불가능한 경우를 대비

CUDA(GPU) 가용 여부를 확인하여, GPU가 없으면 CPU에서 실행합니다.

 

 

6.텍스트 생성

outputs = model.generate(
    inputs["input_ids"].to(device),
    attention_mask=inputs["attention_mask"].to(device),
    pad_token_id=tokenizer.pad_token_id,
    max_new_tokens=64,
    do_sample=False,
)

 

텍스트 생성 파라미터:

  • max_new_tokens=64: 최대 64개 토큰 생성
  • do_sample=False: 샘플링 없이 일관된 출력 생성

 

7. 결과 디코딩 및 출력

generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(generated_text)

 

모델이 생성한 텍스트를 디코딩하여 출력합니다.

 

 

 

정리 - 

 

위와 같이 소스를 생성시에 GPU가 없는 경우에도 CPU로 사용이 가능하며, max_new_tokens을 이용하여 글자수도 지정할 수 있습니다.

 

최근 오픈AI와의 협업기사를 봤었는데 얼마되지않아, 언어 모델을 오픈소스로 공개하였습니다.

 

앞으로 카카오의 AI분야에 어떤 변화가 올지 기대됩니다.

 

감사합니다.

 

 

 

 

 

 

반응형

loading