안녕하세요.
최근에 카카오에서 카나나라는 언어모델의 경량 버전을 오픈소스로 깃허브에 공개하였습니다.
자세한 정보는 아래 링크에서 확인가능합니다.
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분야에 어떤 변화가 올지 기대됩니다.
감사합니다.
'AI' 카테고리의 다른 글
[AI] 머신러닝 핵심 개념 요약 정리 - Day_1 (0) | 2025.05.30 |
---|---|
LangChain(랭체인)이란? (2) | 2025.03.22 |
청크(Chunk)와 임베딩 (Embedding)이란 (1) | 2025.03.10 |
[LLM]파인튜닝 (Fine-tuning)? RAG (Retrieval-Augmented Generation)? 무엇일까?? (1) | 2025.03.09 |
LLM과 RAG란 무엇일까? (3) | 2025.03.04 |