๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ด‘๊ณ  ๋ฐฐ๋„ˆ
IT/tutorials

๋„ค์ด๋ฒ„ ๋ฌด๋ฃŒ AI ๋‹ค์šด๋กœ๋“œ ๋ฐฉ๋ฒ•- ์ปดํ“จํ„ฐ์— ์‰ฝ๊ฒŒ ๋„ค์ด๋ฒ„ AI ์„ค์น˜ํ•˜๊ธฐ

๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„ค์ด๋ฒ„ AI๏ฝœ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ํ™œ์šฉ ๋ฐฉ๋ฒ•

์ตœ๊ทผ ๋„ค์ด๋ฒ„์—์„œ๋Š” ๋ˆ„๊ตฌ๋‚˜ ์†์‰ฝ๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ AI ๋ชจ๋ธ์„ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ณ„๋„์˜ ๋น„์šฉ ์—†์ด ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ ๋•๋ถ„์—, ๋„ค์ด๋ฒ„ ๋ฌด๋ฃŒ ๋‹ค์šด๋กœ๋“œ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ AI๋ฅผ ํ™œ์šฉํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ค์ด๋ฒ„์—์„œ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•˜๋Š” AI ๋ชจ๋ธ์€ ํ…์ŠคํŠธ ์ƒ์„ฑ, ์š”์•ฝ, ๋ฒˆ์—ญ, ์งˆ์˜์‘๋‹ต ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์— ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ณ„๋„์˜ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ์—†์ด๋„ ๋กœ์ปฌ์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ์ ์ด ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋„ค์ด๋ฒ„ AI๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‹œ์ž‘์œผ๋กœ, AI ๋ชจ๋ธ ์„ค์น˜ ๋ฐ ์‹คํ–‰ ๊ณผ์ •, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ํ™œ์šฉ ํŒ๊นŒ์ง€ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ถ„๋„ ์‰ฝ๊ฒŒ ๋”ฐ๋ผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹จ๊ณ„๋ณ„๋กœ ์†Œ๊ฐœํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋„ค์ด๋ฒ„ AI๋กœ ์—…๋ฌด ์ž๋™ํ™”ํ•˜๊ธฐ๏ฝœ๋กœ์ปฌ ๋ชจ๋ธ ์‹คํ–‰๋ถ€ํ„ฐ ํ™œ์šฉ ์‚ฌ๋ก€๊นŒ์ง€

๋„ค์ด๋ฒ„ ๋ฌด๋ฃŒ AI๋ž€?

๋„ค์ด๋ฒ„ ๋ฌด๋ฃŒ AI ์„œ๋น„์Šค๋Š” ๋„ค์ด๋ฒ„ ํด๋ผ์šฐ๋“œ ๋ฐ ๋„ค์ด๋ฒ„ ๊ฐœ๋ฐœ์ž ์„ผํ„ฐ์—์„œ ์ œ๊ณตํ•˜๋Š” AI ๋„๊ตฌ๋“ค๋กœ, ๋Œ€ํ‘œ์ ์œผ๋กœ CLOVA AI๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด AI๋Š” ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ(NLP), ์Œ์„ฑ ์ธ์‹, ์ด๋ฏธ์ง€ ๋ถ„์„ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฌด๋ฃŒ๋กœ API๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋ชจ๋ธ์„ ์ง์ ‘ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ค์ด๋ฒ„ AI ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ๋ฐ ๋กœ์ปฌ ์‹คํ–‰ ๋ฐฉ๋ฒ•

1. ๋„ค์ด๋ฒ„ ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ์˜ ํ•„์š”์„ฑ

API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ์†๋„๋‚˜ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ๋ชจ๋ธ์„ ๋กœ์ปฌ์— ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‹คํ–‰ํ•˜๋ฉด ๋”์šฑ ๋น ๋ฅด๊ฒŒ AI ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. AI ๋‹ค์šด๋กœ๋“œ ๋ฐฉ๋ฒ•

๋„ค์ด๋ฒ„ AI ๋ชจ๋ธ์€ Hugging Face ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. git-lfs ๋˜๋Š” huggingface-cli๋กœ ์ „์ฒด ๋ชจ๋ธ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

huggingface-cli login
git lfs install
git clone https://huggingface.co/naver-hyperclovax/HyperCLOVAX-SEED-Text-Instruct-0.5B

3. Python ์ฝ”๋“œ๋กœ ๋ชจ๋ธ ๋กœ๋“œ ์˜ˆ์‹œ

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

๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋ชจ๋ธ๊ณผ ํ† ํฌ๋‚˜์ด์ €๊ฐ€ ํฌํ•จ๋œ ํด๋”๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "naver-hyperclovax/HyperCLOVAX-SEED-Text-Instruct-0.5B"
save_directory = "./clova_model_full"  # ์›ํ•˜๋Š” ์ €์žฅ ๊ฒฝ๋กœ

# ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์ €์žฅ
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

model.save_pretrained(save_directory)
tokenizer.save_pretrained(save_directory)

4. ๋„ค์ด๋ฒ„ AI ์‰ฝ๊ฒŒ ๋‹ค์šด๋ฐ›๊ธฐ

HyperCLOVAX-SEED-Text-Instruct-0.5B ๋„ค์ด๋ฒ„ AI ๋‹ค์šด๋ฐ›๊ธฐ

๐Ÿ“ฆ ๋„ค์ด๋ฒ„ CLOVAX SEED 0.5B ๋ชจ๋ธ ๋ฌด๋ฃŒ ๋‹ค์šด๋กœ๋“œ

HyperCLOVAX-SEED-Text-Instruct-1.5B ๋„ค์ด๋ฒ„ AI ๋‹ค์šด ๋ฐ›๊ธฐ

๐Ÿ“ฆ ๋„ค์ด๋ฒ„ CLOVAX SEED 1.5B ๋ชจ๋ธ ๋ฌด๋ฃŒ ๋‹ค์šด๋กœ๋“œ

HyperCLOVAX-SEED-Vision-Instruct-3B ๋„ค์ด๋ฒ„ ai ๋‹ค์šด๋ฐ›๊ธฐ

๐Ÿ“ฆ ๋„ค์ด๋ฒ„ CLOVAX SEED 3.0B ๋ชจ๋ธ ๋ฌด๋ฃŒ ๋‹ค์šด๋กœ๋“œ

5. ๊ฒฐ๊ณผ ์˜ˆ์‹œ ๊ตฌ์กฐ

clova_model_full/
โ”œโ”€โ”€ config.json
โ”œโ”€โ”€ generation_config.json
โ”œโ”€โ”€ model.safetensors
โ”œโ”€โ”€ tokenizer_config.json
โ”œโ”€โ”€ tokenizer.json
โ”œโ”€โ”€ special_tokens_map.json
โ””โ”€โ”€ ...

5 ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์˜ˆ์ œ

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ชจ๋ธ์„ ./clova_model_full ํด๋”์— ์ €์žฅํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐ”๊พธ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค:

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

# CUDA ์‚ฌ์šฉ ์—ฌ๋ถ€ ํ™•์ธ ๋ฐ ์„ค์ •
device = "cuda" if torch.cuda.is_available() else "cpu"

# ๋กœ์ปฌ์— ์ €์žฅ๋œ ๋ชจ๋ธ ๋ฐ ํ† ํฌ๋‚˜์ด์ € ๊ฒฝ๋กœ
model_dir = "./clova_model_full"

# ๋ชจ๋ธ ๋ฐ ํ† ํฌ๋‚˜์ด์ € ๋กœ๋“œ (๋กœ์ปฌ ๊ฒฝ๋กœ์—์„œ)
model = AutoModelForCausalLM.from_pretrained(model_dir).to(device)
tokenizer = AutoTokenizer.from_pretrained(model_dir)

# ์ดˆ๊ธฐ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ
chat_history = [
    {"role": "tool_list", "content": ""},
    {"role": "system", "content": "- AI ์–ธ์–ด๋ชจ๋ธ์˜ ์ด๋ฆ„์€ \"CLOVA X\" ์ด๋ฉฐ ๋„ค์ด๋ฒ„์—์„œ ๋งŒ๋“ค์—ˆ๋‹ค.\n- ์˜ค๋Š˜์€ 2025๋…„ 04์›” 24์ผ(๋ชฉ)์ด๋‹ค."},
]

# ๋Œ€ํ™” ๋ฃจํ”„
while True:
    user_input = input("๋‹น์‹ : ")
    if user_input.strip().lower() in ["์ข…๋ฃŒ", "exit", "quit"]:
        print("๋Œ€ํ™”๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.")
        break

    # ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ถ”๊ฐ€
    chat_history.append({"role": "user", "content": user_input})

    # ์ž…๋ ฅ ํ…์„œ ์ƒ์„ฑ
    inputs = tokenizer.apply_chat_template(
        chat_history,
        add_generation_prompt=True,
        return_dict=True,
        return_tensors="pt"
    ).to(device)

    # ์‘๋‹ต ์ƒ์„ฑ
    with torch.no_grad():
        output_ids = model.generate(
            **inputs,
            max_length=1024,
            repetition_penalty=1.2,
            stop_strings=["<|endofturn|>", "<|stop|>"],
            tokenizer=tokenizer
        )

    # ์ถœ๋ ฅ ๋””์ฝ”๋”ฉ
    output_text = tokenizer.decode(output_ids[0], skip_special_tokens=True)

    # ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ดํ›„ ์‘๋‹ต๋งŒ ์ถ”์ถœ
    model_reply = output_text.split(user_input)[-1].strip()

    # ์ถœ๋ ฅ
    print("CLOVA X:", model_reply)

    # ํžˆ์Šคํ† ๋ฆฌ์— ๋ชจ๋ธ ์‘๋‹ต ์ถ”๊ฐ€
    chat_history.append({"role": "assistant", "content": model_reply})

๋„ค์ด๋ฒ„ ๋ฌด๋ฃŒ AI ๋‹ค์šด๋กœ๋“œ ๋ฐฉ๋ฒ• ์†Œ๊ฐœ

3. ๋„ค์ด๋ฒ„ ๋ฌด๋ฃŒ AI ํ™œ์šฉ ์‚ฌ๋ก€

3-1. AI ์ฑ—๋ด‡ ๊ฐœ๋ฐœ

์‚ฌ์šฉ์ž ์งˆ๋ฌธ์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ๋‹ต๋ณ€ํ•˜๋Š” ์ฑ—๋ด‡์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ณ ๊ฐ ์ƒ๋‹ด, ๊ต์œก, ๊ฐœ์ธ ๋น„์„œ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์— ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

3-2. ์ฝ˜ํ…์ธ  ์ž๋™ ์ƒ์„ฑ

๋ธ”๋กœ๊ทธ ๊ธ€, ๊ธฐ์‚ฌ, ๊ด‘๊ณ  ๋ฌธ๊ตฌ ๋“ฑ ๋‹ค์–‘ํ•œ ์ฝ˜ํ…์ธ ๋ฅผ AI๊ฐ€ ์ž๋™ ์ƒ์„ฑํ•˜์—ฌ ๋งˆ์ผ€ํŒ… ํšจ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3-3. ํ…์ŠคํŠธ ์š”์•ฝ ๋ฐ ๋ฒˆ์—ญ

๊ธด ๋ฌธ์„œ๋ฅผ ์š”์•ฝํ•˜๊ฑฐ๋‚˜ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•˜์—ฌ ์—…๋ฌด ํšจ์œจ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

AI ๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ (์ปดํ“จํ„ฐ)์‚ฌ์–‘

GPU NVIDIA RTX 3060 ์ด์ƒ ๋˜๋Š” ๋™๊ธ‰ ์ด์ƒ 0.5B ๋ชจ๋ธ๋„ GPU ํ•„์ˆ˜. VRAM 8GB ์ด์ƒ ๊ถŒ์žฅ
CUDA 11.7 ์ด์ƒ ์ง€์› PyTorch์™€ ํ˜ธํ™˜๋˜๋Š” CUDA ๋“œ๋ผ์ด๋ฒ„ ํ•„์ˆ˜
CPU Intel i7 ์ด์ƒ, AMD Ryzen 5 ์ด์ƒ CPU๋งŒ ์‚ฌ์šฉ ์‹œ ๋งค์šฐ ๋А๋ฆผ, ๋‹จ์ˆœ ํ…Œ์ŠคํŠธ์šฉ
8์ฝ”์–ด ์ด์ƒ ๊ถŒ์žฅ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์ง€์› ์‹œ ์กฐ๊ธˆ ํ–ฅ์ƒ
RAM 16GB ์ด์ƒ ๋ชจ๋ธ ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์šฉ๋Ÿ‰์— ์˜ํ–ฅ
์ €์žฅ์žฅ์น˜ SSD (NVMe SSD ๊ถŒ์žฅ) ๋ชจ๋ธ ํŒŒ์ผ ์ฝ๊ธฐ ์†๋„ ํ–ฅ์ƒ
PyTorch ์ตœ์‹  ๋ฒ„์ „ ๊ถŒ์žฅ (์˜ˆ: 2.x ์ด์ƒ) GPU ๊ฐ€์† ๋ฐ ์ตœ์‹  ๊ธฐ๋Šฅ ํ™œ์šฉ ๊ฐ€๋Šฅ
Python 3.8 ์ด์ƒ transformers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธํ™˜์„ฑ
์šด์˜์ฒด์ œ Windows 10/11, Linux (Ubuntu 20.04 ์ด์ƒ) Linux๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ตœ์ ํ™”์— ์œ ๋ฆฌ
๊ธฐํƒ€ GPU ๋“œ๋ผ์ด๋ฒ„ ์ตœ์‹  ์œ ์ง€ CUDA ๋ฐ cuDNN ๋ฒ„์ „ ์ผ์น˜ ์ค‘์š”
๋ชจ๋ธ ํŒŒ๋ผ๋ฏธํ„ฐ ์•ฝ 0.57B ํŒŒ๋ผ๋ฏธํ„ฐ ๋ชจ๋ธ ํฌ๊ธฐ ์ž์ฒด๊ฐ€ ์†๋„์— ์ง์ ‘์  ์˜ํ–ฅ
์ตœ๋Œ€ ์ปจํ…์ŠคํŠธ ๊ธธ์ด ์ตœ๋Œ€ 4,096 ํ† ํฐ ๊ธด ์ž…๋ ฅ ์‹œ ์—ฐ์‚ฐ๋Ÿ‰ ๊ธ‰์ฆ

AI๊ฐ€ ๋А๋ฆฐ ์ด์œ ์™€ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

1. ๋ชจ๋ธ ํฌ๊ธฐ์™€ ์—ฐ์‚ฐ๋Ÿ‰์˜ ์˜ํ–ฅ

HyperCLOVAX-SEED-Text-Instruct-0.5B ๋ชจ๋ธ์€ ์•ฝ 5์–ต 7์ฒœ๋งŒ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ–์ถ˜ ๊ฒฝ๋Ÿ‰ ์–ธ์–ด ๋ชจ๋ธ์ด์ง€๋งŒ, ์—ฌ์ „ํžˆ ์ƒ๋‹นํ•œ ์—ฐ์‚ฐ๋Ÿ‰์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์ตœ๋Œ€ 4K ํ† ํฐ ๊ธธ์ด๊นŒ์ง€ ์ง€์›๋˜๋Š” ๊ธด ์ปจํ…์ŠคํŠธ ์ฒ˜๋ฆฌ๋กœ ์ธํ•ด ์ž…๋ ฅ์ด ๊ธธ์–ด์งˆ์ˆ˜๋ก ์—ฐ์‚ฐ ๋ถ€๋‹ด์ด ์ฆ๊ฐ€ํ•˜๋ฉฐ, ๊ทธ์— ๋”ฐ๋ผ ์‘๋‹ต ์†๋„๋„ ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ:

๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ธด ์ž…๋ ฅ์„ ์ค„์ด๊ณ , max_length ๊ฐ™์€ ์ƒ์„ฑ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ ์ ˆํžˆ ์กฐ์ ˆํ•˜์—ฌ ํšจ์œจ์„ ๋†’์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๋ชฉ์ ์— ๋งž๊ฒŒ ์ปจํ…์ŠคํŠธ ๊ธธ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ๊ผญ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ํฌํ•จํ•˜์—ฌ ๋ชจ๋ธ์— ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

2. ํ•˜๋“œ์›จ์–ด ์„ฑ๋Šฅ์˜ ์ œ์•ฝ

AI ๋ชจ๋ธ์€ CPU์—์„œ๋„ ์ž‘๋™ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์—ฐ์‚ฐ ํšจ์œจ์ด ๋‚ฎ์•„ ์‹คํ–‰ ์†๋„๊ฐ€ ํฌ๊ฒŒ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. GPU๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†๋„๊ฐ€ ๋น„์•ฝ์ ์œผ๋กœ ํ–ฅ์ƒ๋˜๋ฉฐ, ํŠนํžˆ VRAM(๊ทธ๋ž˜ํ”ฝ ๋ฉ”๋ชจ๋ฆฌ) ์šฉ๋Ÿ‰์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ์—๋„ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

๊ฐ€๋Šฅํ•˜๋ฉด GPU ํ™˜๊ฒฝ์—์„œ ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

torch.cuda.is_available()๋ฅผ ํ†ตํ•ด GPU๊ฐ€ ์ œ๋Œ€๋กœ ์ธ์‹๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , VRAM์ด ์ถฉ๋ถ„ํžˆ ํ™•๋ณด๋˜์–ด ์žˆ๋Š”์ง€๋„ ์ ๊ฒ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3. ์ฝ”๋“œ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ • ์ตœ์ ํ™” ๋ถ€์กฑ

๋ชจ๋ธ์˜ ์ƒ์„ฑ ํ•จ์ˆ˜์ธ model.generate()๋ฅผ ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๋ถˆํ•„์š”ํ•˜๊ฒŒ ํฐ max_length ๊ฐ’์ด๋‚˜ ๋น„ํšจ์œจ์ ์ธ ๋ฐ˜๋ณต ์ œ์–ด ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ฑ์ด ์†๋„ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ์–ต์ œ ์„ค์ •(repetition_penalty) ๋“ฑ์€ ์†๋„์— ํฐ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์ง€๋งŒ, ์ตœ๋Œ€ ์ƒ์„ฑ ๊ธธ์ด ๊ฐ™์€ ์„ค์ •์€ ์„ฑ๋Šฅ์— ์ง๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

max_length, temperature, top_p ๋“ฑ์˜ ์ƒ์„ฑ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ชจ๋ธ์˜ ๋ชฉ์ ์— ๋งž๊ฒŒ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์‘๋‹ต ๋ฒ”์œ„์— ๋”ฐ๋ผ ํ…์ŠคํŠธ ๊ธธ์ด๋ฅผ ์ œํ•œํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ์ค„์ž…๋‹ˆ๋‹ค.

4. ํ† ํฌ๋‚˜์ด์ € ๋ฐ ์ž…์ถœ๋ ฅ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ

์ž…๋ ฅ ํ…์ŠคํŠธ๋ฅผ ๋ชจ๋ธ์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์—์„œ apply_chat_template ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ…œํ”Œ๋ฆฟ ๊ตฌ์กฐ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์ž…๋ ฅ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ , ์ด์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„๋„ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ถœ๋ ฅ ์—ญ์‹œ ์ •์ œ๋˜์ง€ ์•Š์€ ์ฑ„ ๊ณผ๋„ํ•˜๊ฒŒ ๊ธธ์–ด์งˆ ๊ฒฝ์šฐ ์ „์ฒด ์‘๋‹ต ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

apply_chat_template ์‚ฌ์šฉ ์‹œ ๋‚ด๋ถ€์ ์œผ๋กœ ์–ผ๋งˆ๋‚˜ ์ž…๋ ฅ์ด ํ™•์žฅ๋˜๋Š”์ง€ ๊ณ ๋ คํ•˜์—ฌ, ์ž…๋ ฅ ๋ฌธ์žฅ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ† ํฌ๋‚˜์ด์ € ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ๋ถ„์„ํ•˜๊ณ , ๊ผญ ํ•„์š”ํ•œ ์ž…๋ ฅ๋งŒ ํฌํ•จ๋˜๋„๋ก ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋„ค์ด๋ฒ„ ๋ฌด๋ฃŒ AI ํ™œ์šฉ ์‹œ ํŒ

  • GPU ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ๊ถŒ์žฅ
  • ์ตœ์‹  ๋ฒ„์ „ ์œ ์ง€
  • API์™€ ๋กœ์ปฌ ์‹คํ–‰ ๋ณ‘ํ–‰
  • ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋กœ์ปฌ ์ฒ˜๋ฆฌ
  • max_new_tokens๋กœ ์‘๋‹ต ๊ธธ์ด ์ œํ•œ
  • do_sample=True, top_p, temperature ํ™œ์šฉ
  • ์ž…๋ ฅ ๊ธธ์ด ์ตœ์†Œํ™”
  • Torch ๋ฐ CUDA ์ตœ์‹  ์œ ์ง€

๋„ค์ด๋ฒ„ AI๋Š” ์ง„์ž…์žฅ๋ฒฝ์„ ๋‚ฎ์ถ”๋ฉฐ, ์ฑ—๋ด‡, ์ฝ˜ํ…์ธ  ์ƒ์„ฑ, ๋ฒˆ์—ญ ๋“ฑ์— ํ™œ์šฉ๋„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

'IT > tutorials' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฌด๋ฃŒ ์ฝ”๋”ฉ AI ์ถ”์ฒœ .์ปด๋งน๋„ ์ฝ”๋”ฉํ•˜๋Š” ์‹œ๋Œ€, 10๋ถ„ ๋งŒ์— ํŒŒ์ด์ฌ ๋งˆ์Šคํ„ฐ?  (1) 2025.05.19
ํŒŒ์ด์ฌ์œผ๋กœ HTML ์š”์†Œ ์ฐพ๋Š” ๊ฐ„๋‹จํ•œ 4๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์†Œ๊ฐœ  (0) 2025.05.07
๋”ฅ์‹œํฌ AI, "์ค‘๊ตญ AI์ธ๊ฐ€?" ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋†€๋ผ์šด ๋‹ต๋ณ€  (1) 2025.03.25
ํŒŒ์ด์ฌ ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค ์ปดํŒŒ์ผํ•˜๊ธฐ PySide6์™€ PyInstaller ์‚ฌ์šฉ๋ฒ•  (1) 2025.03.24
์ฝ”๋“œ ์—๋””ํ„ฐ ์ถ”์ฒœ ๋น„์ฃผ์–ผ ์ฝ”๋“œ ์„ค์น˜์™€ Python ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ • ๊ฐ€์ด๋“œ  (3) 2025.03.23
[์˜จ๋ผ์ธ ๊ฐ•์˜ ๋น ๋ฅด๊ฒŒ ๋ณด๊ธฐ] ์ž๊ฒฉ์ฆ ๊ฐ•์˜๋‚˜ ์ธํ„ฐ๋„ท ๊ฐ•์˜ ๋™์˜์ƒ ๋ฐฐ์† ์„ค์ •ํ•˜๋Š” ๋ฒ•  (0) 2025.02.05
[ ์ด๋ฏธ์ง€ ํ™”์งˆ ๋†’์ด๋Š” ๋ฌด๋ฃŒ ์‚ฌ์ดํŠธ ์†Œ๊ฐœ ] ์ด๋ฏธ์ง€ ๊ฐœ์„  ํ•˜๋Š” ๋ฌด๋ฃŒ ์‚ฌ์ดํŠธ ์†Œ๊ฐœ  (0) 2025.02.03