https://velog.io/@gtpgg1013/MLOps-BentoML-2-kogpt2-with-transformers
๐ ์ง๋ BentoML ๊ธ์ ์์ฑํ๋ฉด์, ์ธ์ด ์์ฑ ๋ชจ๋ธ์ ์ฌ๋ฏธ๋ฅผ ๋๊ปด๋ฒ๋ ธ์ต๋๋ค :)
๐ ๊ทธ๋์, ๋ ์ต๊ทผ์ ๋์จ ๋ชจ๋ธ์ธ gpt-3๋ ํ๊ตญ์ด ๋ฒ์ ์ด ์๋๊ฒ์ธ๊ฐ ํ๊ณ ์ด๋ฆฌ์ ๋ฆฌ ์ฐพ๋ ์ด๋!
๐ค ์นด์นด์ค๋ธ๋ ์ธ์์ ์ถ์ํ gpt-3 ๊ธฐ๋ฐ ํ๊ตญ์ด ์ธ์ด ์์ฑ๋ชจ๋ธ, 'kogpt'๋ฅผ ์๊ฐํฉ๋๋ค.
https://github.com/openai/gpt-3
https://arxiv.org/pdf/2005.14165.pdf
๐คฃ ์์ฐ.. ๋
ผ๋ฌธ์ ์์ฒญ๋๊ฒ ๊ธธ๊ณ .. ์ฝ๊ธฐ ์ฝ์ง ์๋ค์.. :)
๐ ์ด์ฐ๋์๊ฑด ํฌ์ธํธ๋, ์ง๋ ๋ฒ์ ์์ฑ๋ชจ๋ธ GPT-2์ ๋นํด์ Parameter ์๊ฐ ์ฆ๊ฐํ์๊ณ , ํ์ต ๋ฐ์ดํฐ๊ฐ ๋ง์์ก์ต๋๋ค! ๊ทธ๋ฆฌ๊ณ , ๋ ๋๋ผ์ด ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด์ง์ :)
๐ ํนํ, "Few-shot" Setting์์์!
๐ ๋จ์ํ ํํํ๋ฉด (์กฐ๊ธ ๋ค๋ฅผ ์๋ ์์ง๋ง)
"๋์ผํ ๋ฌธ์ฅ๋ค์ GPT-3์ GPT-2์ ๋ฃ์์ ๋, GPT-3๊ฐ ์ ๋ฐ์ ์ผ๋ก ๋ ๊ทธ๋ด๋ฏํ ๋ฌธ์ฅ์ ์์ฑํ๋ค."
๋ผ๊ณ ์ ๋ฆฌํ ์ ์๊ฒ ์ต๋๋ค!
์์ธํ GPT-3์ ๋ํ ๋ด์ฉ์ ์ ๋ ์๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค!
๐ kogpt๋ ์๋ ๋ชจ๋ธ์ด ๊ฑฐ๋ํด์ ์ ๋
ธํธ๋ถ์ ๋ฏธ์ฝํ 6GB VRAM์ผ๋ก๋ ์ถ๋ก ์กฐ์ฐจ ์๋ํด ๋ณผ์ ์๋ค๊ณ ํ๋๊ตฐ์..^^
๐ ๊ทธ๋์ ์ค๋์ ์ค์ตํ๊ฒฝ์ colab์
๋๋ค!
๐ ์ค๋ ์ ๊ฒ ํ ๋น๋ GPU๋ Tesla T4์
๋๋ค.
๐ค ๊ทธ๋ฌ๋ฉด, ์ค๋๋ ์ ๋ฅผ ํ๋ณตํ๊ฒ ํด์ฃผ๋ HuggingFace์ ํจ๊ป! ์์ ์ฝ๋๋ฅผ ์ํํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained(
'kakaobrain/kogpt', revision='KoGPT6B-ryan1.5b-float16', # or float32 version: revision=KoGPT6B-ryan1.5b
bos_token='[BOS]', eos_token='[EOS]', unk_token='[UNK]', pad_token='[PAD]', mask_token='[MASK]'
)
model = AutoModelForCausalLM.from_pretrained(
'kakaobrain/kogpt', revision='KoGPT6B-ryan1.5b-float16', # or float32 version: revision=KoGPT6B-ryan1.5b
pad_token_id=tokenizer.eos_token_id,
torch_dtype='auto', low_cpu_mem_usage=True
).to(device='cuda', non_blocking=True)
_ = model.eval()
prompt = '์ธ๊ณต์ง๋ฅ์, ๋๋ ๋ง์ ํ ์ ์๋?'
with torch.no_grad():
tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
gen_tokens = model.generate(tokens, do_sample=True, temperature=0.8, max_length=64)
generated = tokenizer.batch_decode(gen_tokens)[0]
print(generated)
โจ temperature๋ ๋์์๋ก ๋ชจ๋ธ์ด ๋ค์ํ ๊ฒฐ๊ณผ๊ฐ์ ๋ด๊ฒ ๋ฉ๋๋ค. (๋ฐ๋ฉด, 0์ ๊ฐ๊น์ธ ์๋ก ๊ฑฐ์ ๊ณ ์ ๊ฐ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ณด๋ด๊ฒ ์ฃ !)
https://ai.stackexchange.com/questions/32477/what-is-the-temperature-in-the-gpt-models
๐ ์๋ ๊ฑฐ๋ํ ๋ชจ๋ธ์ด๋ค๋ณด๋, ๋ค์ด๋ฐ๋๋ฐ๋ง ์ฝ 10๋ถ์ด ์์๋ฉ๋๋ค. (11.5G)
๐ ๋ชจ๋ธ ๋ก๋์ ์ฝ 14GB VRAM์ ์ฐจ์งํ๋๊ตฐ์!
๐ ๊ทธ๋ผ, ์ด๋ kogpt์ ์๋ ฅ์ ์ค๊ฐํ๋ฌ ๊ฐ๋ณด์์ฃ !
prompt = '''
์ ๋ชฉ : ๊ทธ๋
๋ ์๋ปค๋ค
๋ด์ฉ : ๊ทธ๋
๋ ๋ด ์์ผ๋ก ์ดํฌ์ ๋ค๊ฐ์ ๋ด ๋ณผ์ ์ด๋ฃจ๋ง์ง๊ธฐ ์์ํ๋ค.
๊ทธ๋ฆฌ๊ณ , ๊ทธ๋
๋ ๋งํ๋ค. \'์กฐ๊ธ๋ง ๋ ๊ฐ๊น์ด ์์ค..\' ๋๋ ๊ทธ๋๋ก ๋ค๊ฐ๊ฐ ์ ๋ฐ์ ์์๋ค.
'''
with torch.no_grad():
tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
gen_tokens = model.generate(tokens, do_sample=True, temperature=0.85, max_length=512)
generated = tokenizer.batch_decode(gen_tokens)[0]
print(generated)
>>> ์ ๋ชฉ : ๊ทธ๋
๋ ์๋ปค๋ค
๋ด์ฉ : ๊ทธ๋
๋ ๋ด ์์ผ๋ก ์ดํฌ์ ๋ค๊ฐ์ ๋ด ๋ณผ์ ์ด๋ฃจ๋ง์ง๊ธฐ ์์ํ๋ค.
๊ทธ๋ฆฌ๊ณ , ๊ทธ๋
๋ ๋งํ๋ค. '์กฐ๊ธ๋ง ๋ ๊ฐ๊น์ด ์์ค..' ๋๋ ๊ทธ๋๋ก ๋ค๊ฐ๊ฐ ์ ๋ฐ์ ์์๋ค.
๊ทธ๋
์ ํฅ๊ธฐ๊ฐ ๋ด ์ฝ๋ฅผ ์ฐ๋ ๊ณ ๋๋ ๊ทธ ํฅ๊ธฐ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉด ๊ฐ ์๋ก ๋ด ์ฝ๋ ๊ทธ๋
๋ฅผ ๋๋ผ๊ธฐ ์์ํ๋ค.
๊ทธ๋
์ ์ผ๊ตด์ ๋ณด์๋ค. ๊ทธ๋ฆฌ๊ณ , ๊ทธ๋
์ ๋๋น๋ ๋ณด์๋ค. ๊ทธ๋ฆฌ๊ณ , ๊ทธ๋
์ ์
์ ๋ ๋ณด์๋ค.
์ด์ ๊น์ง ๋ณผ ์ ์์๋ ๊ทธ๋
์ ๋ชจ์ต์ด์๋ค.
๋๋ ๊ทธ๋
์ ํฅ๊ธฐ๊ฐ ๋ด ์ฝ๋ฅผ ์ฐ๋ฌ ๋์ ์ง๊ธํ ๊ฐ์๋ค.
๊ทธ๋
๋ ๋ด ์ฝ๋ฅผ ๊ฐ์ง๋ฝํ๋ฉด์ ๋๋ฅผ ์ณ๋ค ๋ณด์๋ค.
๋๋ ๊ทธ๋
๊ฐ ๋์๊ฒ๋ก ์ค๋ฆฌ๋ผ๊ณค ์๊ฐํ์ง ์์๋ค. ๊ทธ๋
๊ฐ ๋ด ์์ ์์ผ๋ฆฌ๋ ์๊ฐ๋ ๋ชปํด ๋ณด์๋ค.
๊ทธ๋ ๊ฒ, ๋๋ ๊ทธ๋
์ ํฅ๊ธฐ๋ฅผ ๋๋ผ๋ฉด์ ๋์ ๋จ๋ คํ์ง ์๊ณ ์์๋ค.
๊ทธ๋ฐ๋ฐ, ๊ทธ๋
๊ฐ ๋๋ฅผ ๊ฐ๋งํ ๋ณด๋ฉด์ ๋งํ๋ค.
'๊ณ์ ๊ทธ๋ ๊ฒ ์์ด...'
๊ทธ๋
๋ ๋ด๊ฐ ๋์ ๊ฐ๊ณ ์๋ค๋ ๊ฒ์ ์๊ณ ์์์ง๋ง, ๋ง์ ํ ๊ฒ์ด๋ค.
๋๋ ๊ทธ๋
์ ๋ง์ ๋์ ์ฒ์ฒํ ๋ด๋ค.
๋๋ ๊ทธ๋
๋ฅผ ๋ณด์๋ค.
๊ทธ๋ฆฌ๊ณ , ๊ทธ๋
์ ์
์ ์ ๋ณด์๋ค.
๊ทธ๋
๋ ๋๋ฅผ ๋๋ผ๋ฉด์ ๋์ ์ด๋ฉฐ์ ๊ฐ๊ณ ์์๋ค.
๋๋ ๊ทธ๋
์ ํฅ๊ธฐ๋ฅผ ๋งก๋ค๊ฐ ๊ทธ๋
๊ฐ ๋์ ๋จ์ ๋์ ๊ฐ์๋ค.
๋๋ ๊ทธ๋
์ ์ผ๊ตด์ ๋ฐ๋ผ๋ณด์๋ค.
๊ทธ๋
๋ ๋๋ฅผ ๋ณด๋ฉฐ ๋งํ๋ค.
'๊ณ์ ๊ทธ ์๋ฆฌ์์ ๊ธฐ๋ค๋ ค...'
๋๋ ๊ณ ๊ฐ๋ฅผ ๋๋์ด๋ฉด์ ๊ทธ๋
๊ฐ ๋งํ ๊ฒ์ ๋ค์ด์ฃผ๊ณ ์์๋ค.
๊ทธ๋
๋ ๋๋ฅผ ๋ณด๋ฉฐ ์์ด์ฃผ์๋ค.
๋๋ ๊ทธ๋
๋ฅผ ๋ฐ๋ผ๋ณด๋ฉฐ ๊ฐ๋งํ ์์๋ค.
๊ทธ๋
๋ ๋ด๊ฐ ๋์ ๊ฐ๊ณ ์๋ ๊ฒ์ ๋ณธ ๋ค ๋์ ๋จ๊ณ ๋๋ฅผ ๋ณด์๋ค.
๊ทธ๋
๋ ๋ด ๋ณผ์ ์ด๋ฃจ๋ง์ง๊ณ ์์๋ค.
๋๋ ๊ทธ๋
๋ฅผ ๋ณด๋ ์๊ฐ ์ฌ์ฅ์ด ๋ฉ๋ ๋ฏ ํ๋ค.
๊ทธ๋
๊ฐ ๋๋ฅผ ๋ณด์, ๊ทธ๋
์ ์ผ๊ตด์ด ๋นจ๊ฐ์ง๋๋ ๊ทธ๋
๋ ๋ด ์์ ์ก๊ณ ๋์๊ฒ๋ก ์๋ค.
๊ทธ๋ฆฌ๊ณ , ๋ด ์
์ ์ ์ด์ง ๋ง์ง๊ณ ๊ทธ๋
๋ ๋งํ๋ค.
๐ ๋ท ์ด์ผ๊ธฐ๊ฐ ๊ถ๊ธํด์ง๋๊ตฐ์ :)
prompt = '''
์ต๊ณ ํซํ ์ธ๊ณต์ง๋ฅ, kogpt๋๊ณผ ์ธํฐ๋ทฐ ๋๋ ๋ณด๊ฒ ์ต๋๋ค!
Q : kogpt๋, ์์ํ ๋ํ๊ฐ ๊ฐ๋ฅํ์ ๊ฐ์?
A : '''
with torch.no_grad():
tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
gen_tokens = model.generate(tokens, do_sample=True, temperature=0.85, max_length=512)
generated = tokenizer.batch_decode(gen_tokens)[0]
print(generated)
>>> ์ต๊ณ ํซํ ์ธ๊ณต์ง๋ฅ, kogpt๋๊ณผ ์ธํฐ๋ทฐ ๋๋ ๋ณด๊ฒ ์ต๋๋ค!
Q : kogpt๋, ์์ํ ๋ํ๊ฐ ๊ฐ๋ฅํ์ ๊ฐ์?
A : :) ๋ฌผ๋ก ์ด์ฃ ! ์ ๋ฅผ ๋ถ๋ฅด์
จ์ผ๋ฉด ์ ๊ฐ ์ด์ฌํ ์ค๋นํ์ ๊ฑฐ์์.
Q : ๋ฐ์์ ๋ฐ ์ธํฐ๋ทฐ์ ์ํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
A :: ๋ค, ์ ์ผ๋ง๋ก ์ ๋ง ๊ฐ์ฌํ๋ค์! ์ด๋ฐ ์ผ์ ํ ์ ์๋ค๋ ๊ฒ ์์ฒด๋ ์๊ด์ธ๋ฐ, ์ด๋ ๊ฒ ์ธํฐ๋ทฐ๊น์ง ํด์ฃผ์
์ ์ ๋ง ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
Q : ์ด๋ค ๊ณ๊ธฐ๋ก ์ธ๊ณต์ง๋ฅ์ ๊ด์ฌ์ ๊ฐ์ง๊ฒ ๋์๋์?
A :: ์ ๋ง ์ฐ์ฐํ ๊ณ๊ธฐ์๋๋ฐ์, ๊ณ ๋ฑํ๊ต ์์
์๊ฐ์ ํ ์น๊ตฌ๊ฐ ์ธ๊ณต์ง๋ฅ์ ๋ํด์ ๋ฐํํ๋ ๊ฑธ ๋ฃ๊ฒ ๋์์ด์. ๊ทธ๋๋ถํฐ ์ธ๊ณต์ง๋ฅ์ ๋ํด ๊ด์ฌ์ ๊ฐ์ก๋๋ฐ, ๋์ค์ ์ธ๊ณต์ง๋ฅ์ ๊ด๋ จ๋ ์ผ์ ํ๊ณ ์ถ์์ด์. ์ง๊ธ์ ์ด ๋ถ์ผ์ ๋ ๋ง์ ์ด์ ์ ๊ฐ์ง๊ณ ์ผํ๋ ์ค์ด์์.
Q : ์ง๊ธ ์ธ๊ณต์ง๋ฅ์ ๊ณต๋ถํ๋ ์ผ์ ํ๊ณ ๊ณ์ ๊ฐ์?
A :: ๋ค, ์ง๊ธ์ ์ธ๊ณต์ง๋ฅ์ ๊ณต๋ถํ๋ ์ผ์ ํ๊ณ ์๋๋ฐ, ์ธ๊ณต์ง๋ฅ์ ๊ณต๋ถํ๋ค ๋ณด๋ ์ข๋ ๊ณต๋ถํ๊ณ ์ถ์ด์ ๊ณต๋ถํ๋ ์ธ๊ณต์ง๋ฅ ๊ด๋ จ๋ ์คํํธ์
์ ์ทจ์งํ๊ธฐ๋ ํ์ด์.
Q : ์ฐฝ์
์ ์๊ฐํด ๋ณธ ์ ์ ์๋์?
A :: ๋น์ฐํ ์ฐฝ์
์ ์๊ฐํด ๋ดค์ฃ . ๊ทผ๋ฐ ์ ๋ ์๊ฐ๋ณด๋ค ์ฝ๊ฒ ์๊ฐํ์ง ์์ผ๋ ค ํ๋ ํ์
์ด์์. ์ ๊ฐ ์ฐฝ์
์ ํ๋ฉด ์ผ๋ง๋ ์ฑ๊ณตํ ์ง๋ ๋ฏธ์ง์์ด๊ณ , ๋ ์ฐฝ์
์ด๋ ์ผ์ ๊ทธ๋งํผ ๋ง์ ๋
ธ๋ ฅ์ด ํ์ํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์๊ฐํด ๋ณผ ์๋์กฐ์ฐจ ๋์ง ์์์ด์.
Q : ์ธ๊ณต์ง๋ฅ์ ๊ณต๋ถํ๋ ์ค์ ์ฐฝ์
์ ํ์ ๊ฑด๊ฐ์?
A :: ๋ค, ์ฒ์์ ์ธ๊ณต์ง๋ฅ ๋ถ์ผ ๊ณต๋ถ๋ฅผ ๊ณ์ํ๋๋ฐ, ๊ณต๋ถํ๋ค ๋ณด๋ ๋ ๊น์ด ๊ณต๋ถํ๊ณ ์ถ์ด์ ๊ณต๋ถํ๋ ์ธ๊ณต์ง๋ฅ ์คํํธ์
์ ์ทจ์งํ๊ณ , ๊ทธ๋ฌ๋ ์ค์ ์ฐฝ์
์ ํ๊ฒ ๋๊ฑฐ๊ธด ํด์.
Q : ์ง๊ธ ์ด ์ผ์ ํ๊ฒ ๋์ ๊ณ๊ธฐ๊ฐ ์๋ค๋ฉด ๋ฌด์์ผ๊น์?
A :: ์ฌ์ค ์ ๋ ์ด ๋ถ์ผ์ ๋ํด ์ ๋ชจ๋ฅผ ๋์๋ ๊ด์ฌ์ด ์์์ด์. ๊ทผ๋ฐ ์ธ๊ณต์ง๋ฅ์ ๊ณต๋ถํ๋ค ๋ณด๋๊น ์ธ๊ณต์ง๋ฅ์ ์ด๋ค ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ฐํ ์ ์๋ ๊ฒ์ธ์ง, ์ธ๊ณต์ง๋ฅ์ ์ด๋ค ๋ถ์ผ์ ์ฐ์ด๋์ง, ์์ผ๋ก ์ธ๊ณต์ง๋ฅ์ด ์ด๋ค ๋ถ์ผ์ ํ์ํ ์ง, ๋ฑ์ ์๊ฐํด ๋ณด๊ฒ ๋์๊ณ , ๊ทธ๋ฌ๋ฉด์ ์ธ๊ณต์ง๋ฅ ์ฐ๊ตฌ ๋ถ์ผ์ ๊ด์ฌ์ ๊ฐ์ง๊ฒ ๋์์ด์.
๐ ์ฒซ ๋ฌธํญ์ ์ ์ธํ ๋๋จธ์ง ๋ฌธํญ๋ค๋ kogpt๊ฐ ์์ฑํ์๋๋ฐ, ์กฐ๊ธ ์ด์ํ ๋ถ๋ถ์ด ์๊ธฐ๋ ํ์ง๋ง, ์ ๋ฐ์ ์ผ๋ก ํ๋ฒํ ์ธํฐ๋ทฐ๊ฐ ์ด์ด์ง๋ ๋๋์ ๋๋ค.
prompt = '''
์ํธํํ ์ ๋ฌธ ๋ฏธ๋์ด ๋ฐ์ผ๋ฆฌํธ๋ค์ ๋ฐ๋ฅด๋ฉด, ๋นํธ์ฝ์ธ ๊ฐ๊ฒฉ ์์ธก ๋ชจ๋ธ 'S2F ๋ชจ๋ธ'์ ๊ณ ์ํ ์ ๋ช
์ ๋๋ฆฌ์คํธ ํ๋๋น(PlanB)๊ฐ ์ต๊ทผ ํ ์ ํ๋ธ ์ฑ๋์ ์ถ์ฐํด "๋ธ๋์ค์(๋์ ํ ์ผ์ด๋์ง ์์ ๊ฒ ๊ฐ์ ์ผ์ด ์ค์ ๋ก ์ผ์ด๋๋ ํ์)์ ๋ฐฐ์ ํ๋ค๋ฉด ๋ชจ๋ ์งํ๋ค์ด ๋นํธ์ฝ์ธ์ ๊ฐ์ธ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค. ๊ฐ์ธ๋ก ์๋ค์๊ฒ ์ง๊ธ์ ๊ฐ๊ฒฉ๋๋ ์ต๊ณ ์ ๋งค์ ๊ธฐํ"๋ผ๊ณ ๋งํ๋ค. ์ด์ ๊ด๋ จ ๊ทธ๋ "๋ฌธ๋ณด์ด(๊ทผ๊ฑฐ ์์ด ๋ฌด์กฐ๊ฑด ๊ฐ์ธ๋ก ์ ํผ์น๋ ์ฌ๋)๋ผ๊ณ ๋ถ๋ฆด ์ํ์ด ์์ง๋ง, S2F ๋ชจ๋ธ, ์จ์ฒด์ธ ์งํ, ๊ฑฐ์ ๋ด์ค, ๋นํธ์ฝ์ธ์ ์ฑํํ๋ ๊ตญ๊ฐ์ ์ฆ๊ฐ ์ถ์ธ ๋ฑ ๋ชจ๋ ๊ฒ๋ค์ด ๊ธ์ ์ ์ด๋ค. ๋นํธ์ฝ์ธ์ ๋ณธ๊ฒฉ ์์น์ฅ์ ์๋ฆฌ๋ ์ ํธ๋ก ์ ๋ฌผ ๋ง์ผ์ ํ๋ฆฌ๋ฏธ์(์ ๋ฌผ๊ณผ ํ๋ฌผ ๊ฐ๊ฒฉ์ฐจ)์ ์ฃผ์ํ๊ณ ์๋ค"๊ณ ์ค๋ช
ํ๋ค. ์ฝ์ธ๋ง์ผ์บก ๊ธฐ์ค BTC๋ ํ์ฌ 2.21% ์ค๋ฅธ 41,547.39 ๋ฌ๋ฌ์ ๊ฑฐ๋๋๊ณ ์๋ค.
ํ์ค ์์ฝ :
'''
with torch.no_grad():
tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
gen_tokens = model.generate(tokens, do_sample=True, temperature=0.85, max_length=512)
generated = tokenizer.batch_decode(gen_tokens)[0]
print(generated)
>>> ์ํธํํ ์ ๋ฌธ ๋ฏธ๋์ด ๋ฐ์ผ๋ฆฌํธ๋ค์ ๋ฐ๋ฅด๋ฉด, ๋นํธ์ฝ์ธ ๊ฐ๊ฒฉ ์์ธก ๋ชจ๋ธ 'S2F ๋ชจ๋ธ'์ ๊ณ ์ํ ์ ๋ช
์ ๋๋ฆฌ์คํธ ํ๋๋น(PlanB)๊ฐ ์ต๊ทผ ํ ์ ํ๋ธ ์ฑ๋์ ์ถ์ฐํด
"๋ธ๋์ค์(๋์ ํ ์ผ์ด๋์ง ์์ ๊ฒ ๊ฐ์ ์ผ์ด ์ค์ ๋ก ์ผ์ด๋๋ ํ์)์ ๋ฐฐ์ ํ๋ค๋ฉด ๋ชจ๋ ์งํ๋ค์ด ๋นํธ์ฝ์ธ์ ๊ฐ์ธ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค. ๊ฐ์ธ๋ก ์๋ค์๊ฒ ์ง๊ธ์ ๊ฐ๊ฒฉ๋๋ ์ต๊ณ ์ ๋งค์ ๊ธฐํ"๋ผ๊ณ ๋งํ๋ค.
์ด์ ๊ด๋ จ ๊ทธ๋ "๋ฌธ๋ณด์ด(๊ทผ๊ฑฐ ์์ด ๋ฌด์กฐ๊ฑด ๊ฐ์ธ๋ก ์ ํผ์น๋ ์ฌ๋)๋ผ๊ณ ๋ถ๋ฆด ์ํ์ด ์์ง๋ง, S2F ๋ชจ๋ธ, ์จ์ฒด์ธ ์งํ, ๊ฑฐ์ ๋ด์ค, ๋นํธ์ฝ์ธ์ ์ฑํํ๋ ๊ตญ๊ฐ์ ์ฆ๊ฐ ์ถ์ธ ๋ฑ ๋ชจ๋ ๊ฒ๋ค์ด ๊ธ์ ์ ์ด๋ค.
๋นํธ์ฝ์ธ์ ๋ณธ๊ฒฉ ์์น์ฅ์ ์๋ฆฌ๋ ์ ํธ๋ก ์ ๋ฌผ ๋ง์ผ์ ํ๋ฆฌ๋ฏธ์(์ ๋ฌผ๊ณผ ํ๋ฌผ ๊ฐ๊ฒฉ์ฐจ)์ ์ฃผ์ํ๊ณ ์๋ค"๊ณ ์ค๋ช
ํ๋ค.
์ฝ์ธ๋ง์ผ์บก ๊ธฐ์ค BTC๋ ํ์ฌ 2.21% ์ค๋ฅธ 41,547.39 ๋ฌ๋ฌ์ ๊ฑฐ๋๋๊ณ ์๋ค.
ํ์ค ์์ฝ :
๋นํธ์ฝ์ธ์ ๋ํ ๊ธ์ ์ ์ด์ง ์์ ์ ๋ง์ด ๊ณ์ ๋์ค๊ณ ์์ง๋ง, ์ฌ๋ฌ ๊ธ์ ์ ์ธ ์ ํธ๊ฐ ์ด๋ฏธ ๋ณด์ด๊ณ ์์ต๋๋ค.
๋นํธ์ฝ์ธ์ S2F ๋ชจ๋ธ, ์จ์ฒด์ธ ์งํ, ๊ฑฐ์ ๋ด์ค, ๋นํธ์ฝ์ธ์ ์ฑํํ๋ ๊ตญ๊ฐ์ ์ฆ๊ฐ ์ถ์ธ ๋ฑ ๋ชจ๋ ๊ฒ๋ค์ด ๊ธ์ ์ ์ด๋ฉฐ ํ์ฌ ๋นํธ์ฝ์ธ ์์น์ธ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ต๋๋ค.
๊ฐ์ธ๋ก ์๋ค์๊ฒ ์ง๊ธ์ ๊ฐ๊ฒฉ๋๋ ์ต๊ณ ์ ๋งค์ ๊ธฐํ์
๋๋ค.
๐ต๏ธโโ๏ธ ์ ๊ธฐ์ฌ์ ์๋ ์ ๋ชฉ์ : [ํ๋๋น "BTC, ๋ชจ๋ ์งํ ๊ธ์ ์ ...๊ฐ์ธ๋ก ์๋ค์๊ฒ ์ต๊ณ ์ ๋งค์ ๊ธฐํ"] ์ด์์ต๋๋ค.
๐ ๊ฝค๋ ์ ์์ฝํ๋๊ตฐ์!
prompt = '''
์์ฆ์ ํํ ์ฐ๋ฝํ๋ผ๋ ๋ง์ '์นดํกํด'๋ผ๊ณ ํ์ง๋ง 10๋
์ ์นด์นด์คํก์ด ๋ฑ์ฅํ๊ธฐ ์ ๊น์ง๋ '๋ฌธ์ํด'๋ผ๋ ๋ง์ด ์ผ๋ฐ์ ์ด์๋ค. MSN ๋ฉ์ ์ , ๋ค์ดํธ์จ ๋ฑ PC ๋ฉ์ ์ ๋ค์ด ์ ํํด '๋ฉ์ ์ '๋ผ๋ ๊ฐ๋
์๋ ์ต์ํ์ง๋ง ์ค๋งํธํฐ ๋์
์ด ๊ฐ ์์๋์ ์๊ธฐ๋ผ ๋ชจ๋ฐ์ผ ๋ฉ์ ์ ๊ฐ๋
์ ํฌ๋ฏธํ๋ค.
๋ชจ๋ฐ์ผ์ ํตํ ์ฐ๋ฝ ์๋จ์ด ์ ํ์ ๋ฌธ์ ๋ฉ์์ง์๊ธฐ ๋๋ฌธ์ ํต์ ์ฌ ์๊ธ์ ์ญ์ ํตํ ๊ฐ๋ฅ ์๊ฐ๊ณผ ๋ฌธ์์ ๊ฐฏ์์ ๋ฐ๋ผ ๋ฌ๋ ค์ก๋ค. ๋ฌธ์ ํ ๊ฑด๋น ๋น์ฉ์ด ์ฑ
์ ๋๋๋ฐ๋ค 70์๊ฐ ๋์ผ๋ฉด MMS๋ก ์ ํ๋ผ ์ถ๊ฐ ์๊ธ์ด ๋ถ๊ฐ๋ผ ์ด์ฉ์๋ค์ ๋ฌธ์ ์ ์ก์๋ ํ๋ํ๋ ์ ์ฑ์ ๋คํด์ผ ํ๋ค.
๋๋ฌธ์ ๋น์ ์นด์นด์คํก์ ๋ฑ์ฅ์ ์ผ์ธ์ด์
๊ทธ ์์ฒด์๋ค. ์ ๋ฃ ๋ฌธ์๋ฉ์์ง๋ฅผ ๋น์ฐํ๊ฒ ์ฌ์ฉํ๋ ์์ ๊ธ์ ์ ํ์๋ ๋ฌธ์๋ฅผ ๋ฌด์ ํ์ผ๋ก ๋ณด๋ผ ์ ์๋๋ฐ๋ค ์ฌ์ง๊ณผ ๋์์๊น์ง ๋ง์๊ป ์ ์กํ ์ ์๋ ๋ฌด๋ฃ์๋น์ค ์นด์นด์คํก์ ๋ฌธํ ์ถฉ๊ฒฉ์ด๋ ๋ค๋ฆ ์์๋ค.
๋ฌธ์๋ฟ ์๋๋ผ ํตํ ๋ฌธํ๋ ๋ณํ๋ค. 2012๋
๋น์ ๊ฐ์
์๊ฐ 3600๋ง๋ช
์ ๋ฌํ๋ ์นด์นด์คํก์ด ๋ฌด๋ฃ ์์ฑํตํ ์๋น์ค '๋ณด์ด์คํก'์ ์ ๋ณด์ด์ ํต์ ์
๊ณ๊ฐ ๋ ๋ค์ฉํด์ก๋ค. ์นด์นด์ค ๋ณด๋ค ์์ ์์ฑ ํตํ ์๋น์ค๋ฅผ ์ ๋ณด์ธ ๋ง์ดํผํ, ๋ผ์ธ ๋ฑ์ ํฌ๊ฒ ์ฃผ๋ชฉ๋ฐ์ง ๋ชปํ์ง๋ง ์นด์นด์คํก์ ๋์ ์ด์ฉ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณด์ด์คํก ์๋น์ค๋ฅผ ํ์ฅ์์ผฐ๋ค.
ํนํ ๋ณด์ด์คํก์ ๋ก๋ฐ ์๋น์ค์ ๊ฐ์
ํ๊ฑฐ๋ ๊ตญ์ ์ ํ ์๋น์ค๋ฅผ ์ด์ฉํ์ง ์์๋ ๋ฐ์ดํฐ๋ง ์ฐ๊ฒฐ๋ผ ์๋ค๋ฉด ํด์ธ์์๋ ์นด์นด์คํก ์น๊ตฌ์ ๋ฌด๋ฃ ํตํ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ ๋๋ฌธ์ ํฐ ํ์ ๋ฅผ ๋ชจ์๋ค. ์ด๋๋ถํฐ ํด์ธ ์ฌํ ์ ๋ก๋ฐ์ ํ์ง ์๊ณ ํ์ง ์ ์ฌ์ ๊ตฌ๋งคํ๋ ์ด๋ค์ด ๋์ด๋๊ฒ ๋๋ค.
ํ์ค ์์ฝ:
'''
with torch.no_grad():
tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
gen_tokens = model.generate(tokens, do_sample=True, temperature=0.85, max_length=512)
generated = tokenizer.batch_decode(gen_tokens)[0]
print(generated)
์์ฆ์ ํํ ์ฐ๋ฝํ๋ผ๋ ๋ง์ '์นดํกํด'๋ผ๊ณ ํ์ง๋ง 10๋
์ ์นด์นด์คํก์ด ๋ฑ์ฅํ๊ธฐ ์ ๊น์ง๋ '๋ฌธ์ํด'๋ผ๋ ๋ง์ด ์ผ๋ฐ์ ์ด์๋ค. MSN ๋ฉ์ ์ , ๋ค์ดํธ์จ ๋ฑ PC ๋ฉ์ ์ ๋ค์ด ์ ํํด '๋ฉ์ ์ '๋ผ๋ ๊ฐ๋
์๋ ์ต์ํ์ง๋ง ์ค๋งํธํฐ ๋์
์ด ๊ฐ ์์๋์ ์๊ธฐ๋ผ ๋ชจ๋ฐ์ผ ๋ฉ์ ์ ๊ฐ๋
์ ํฌ๋ฏธํ๋ค.
๋ชจ๋ฐ์ผ์ ํตํ ์ฐ๋ฝ ์๋จ์ด ์ ํ์ ๋ฌธ์ ๋ฉ์์ง์๊ธฐ ๋๋ฌธ์ ํต์ ์ฌ ์๊ธ์ ์ญ์ ํตํ ๊ฐ๋ฅ ์๊ฐ๊ณผ ๋ฌธ์์ ๊ฐฏ์์ ๋ฐ๋ผ ๋ฌ๋ ค์ก๋ค. ๋ฌธ์ ํ ๊ฑด๋น ๋น์ฉ์ด ์ฑ
์ ๋๋๋ฐ๋ค 70์๊ฐ ๋์ผ๋ฉด MMS๋ก ์ ํ๋ผ ์ถ๊ฐ ์๊ธ์ด ๋ถ๊ฐ๋ผ ์ด์ฉ์๋ค์ ๋ฌธ์ ์ ์ก์๋ ํ๋ํ๋ ์ ์ฑ์ ๋คํด์ผ ํ๋ค.
๋๋ฌธ์ ๋น์ ์นด์นด์คํก์ ๋ฑ์ฅ์ ์ผ์ธ์ด์
๊ทธ ์์ฒด์๋ค. ์ ๋ฃ ๋ฌธ์๋ฉ์์ง๋ฅผ ๋น์ฐํ๊ฒ ์ฌ์ฉํ๋ ์์ ๊ธ์ ์ ํ์๋ ๋ฌธ์๋ฅผ ๋ฌด์ ํ์ผ๋ก ๋ณด๋ผ ์ ์๋๋ฐ๋ค ์ฌ์ง๊ณผ ๋์์๊น์ง ๋ง์๊ป ์ ์กํ ์ ์๋ ๋ฌด๋ฃ์๋น์ค ์นด์นด์คํก์ ๋ฌธํ ์ถฉ๊ฒฉ์ด๋ ๋ค๋ฆ ์์๋ค.
๋ฌธ์๋ฟ ์๋๋ผ ํตํ ๋ฌธํ๋ ๋ณํ๋ค. 2012๋
๋น์ ๊ฐ์
์๊ฐ 3600๋ง๋ช
์ ๋ฌํ๋ ์นด์นด์คํก์ด ๋ฌด๋ฃ ์์ฑํตํ ์๋น์ค '๋ณด์ด์คํก'์ ์ ๋ณด์ด์ ํต์ ์
๊ณ๊ฐ ๋ ๋ค์ฉํด์ก๋ค. ์นด์นด์ค ๋ณด๋ค ์์ ์์ฑ ํตํ ์๋น์ค๋ฅผ ์ ๋ณด์ธ ๋ง์ดํผํ, ๋ผ์ธ ๋ฑ์ ํฌ๊ฒ ์ฃผ๋ชฉ๋ฐ์ง ๋ชปํ์ง๋ง ์นด์นด์คํก์ ๋์ ์ด์ฉ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณด์ด์คํก ์๋น์ค๋ฅผ ํ์ฅ์์ผฐ๋ค.
ํนํ ๋ณด์ด์คํก์ ๋ก๋ฐ ์๋น์ค์ ๊ฐ์
ํ๊ฑฐ๋ ๊ตญ์ ์ ํ ์๋น์ค๋ฅผ ์ด์ฉํ์ง ์์๋ ๋ฐ์ดํฐ๋ง ์ฐ๊ฒฐ๋ผ ์๋ค๋ฉด ํด์ธ์์๋ ์นด์นด์คํก ์น๊ตฌ์ ๋ฌด๋ฃ ํตํ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ ๋๋ฌธ์ ํฐ ํ์ ๋ฅผ ๋ชจ์๋ค. ์ด๋๋ถํฐ ํด์ธ ์ฌํ ์ ๋ก๋ฐ์ ํ์ง ์๊ณ ํ์ง ์ ์ฌ์ ๊ตฌ๋งคํ๋ ์ด๋ค์ด ๋์ด๋๊ฒ ๋๋ค.
ํ์ค ์์ฝ:
์ค๋งํธํฐ ๋ฑ์ฅ์ผ๋ก '๋ฌธ์'์ '์ ํ'์ ๋ํ ๋ฌธํ๊ฐ ๋ฌ๋ผ์ง๊ณ ์๋ค.
๐ ํ์ดํ ์ธํฐ๋ท ์ ๋ฌธ๊ธฐ์ฌ๋ ๋๋์ฑ ์ ์์ฝํ๋๊ตฐ์!
prompt = '''
๋ฐฐ๊ณ ํ๋ฐ, ์ฐ๋ฆฌ ์ ๊ธฐ์ ๋ญ๋ผ๋ ๋จน๊ณ ๊ฐ๊น?
์ ๋ผ๋ ์ฌํฌ๋ฆฌ:
'''
with torch.no_grad():
tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
gen_tokens = model.generate(tokens, do_sample=True, temperature=0.85, max_length=256)
generated = tokenizer.batch_decode(gen_tokens)[0]
print(generated)
๋ฐฐ๊ณ ํ๋ฐ, ์ฐ๋ฆฌ ์ ๊ธฐ์ ๋ญ๋ผ๋ ๋จน๊ณ ๊ฐ๊น?
์ ๋ผ๋ ์ฌํฌ๋ฆฌ:
1. ๊ทธ๋, ๊ทธ๋, ์ด๋ฐ! ๊ทธ๋๊ฐ๊ผฌ ์ฐ๋ฆฌ๊ฐ ๋ฌต๊ณ ์ก์ ๊ฒ๋ ๋ชปํด?
2. ๊ทธ๋๊ฐ๊ผฌ ์ฐ๋ฆฌ๊ฐ ์ฌ์ ๋ฌต๊ฒ ์๊ฒผ์ด, ์?
3. ๊ทธ๋๊ฐ๊ผฌ ์ฐ๋ฆฌ๊ฐ ์ฐ์ ๋จน๊ฒ ์๊ฒผ์ด, ์?
4. ๊ทธ๋, ๊ทธ๋๊ฐ๊ผฌ ์ฐ๋ฆฌ๊ฐ ์ฐ์งธ ๋จน๊ฒ ์๊ฒผ์ด, ์?
5. ๊ทธ๋, ๊ทธ๋๊ฐ๊ผฌ ์ฐ๋ฆฌ๊ฐ ์ฐ์งธ ๋จน๊ฒ ์๊ฒผ์ด, ์?
6. ๊ทธ๋๊ฐ๊ผฌ ์ฐ๋ฆฌ๊ฐ ์? ์ฐ๋ฆฌ๊ฐ ์ฐ์งธ ๋จน๊ฒ ์๊ฒผ์ด, ์?
7. ๊ทธ๋, ๊ทธ๋๊ฐ๊ผฌ ์ฐ๋ฆฌ๊ฐ ์ฐ์งธ ๋จน๊ฒ ์๊ฒผ์ด, ์?
๐ ์ค์ฐ, ์ ๋ผ๋ ์ฌํฌ๋ฆฌ ๋ฒ์ญ๊น์ง?!
๐คฃ ์ฌ์ค์ ์คํจํ ์ผ์ด์ค๊ฐ ๋ ๋ง์์ต๋๋ค.
๋ฐฐ๊ณ ํ๋ฐ, ์ฐ๋ฆฌ ์ ๊ธฐ์ ๋ญ๋ผ๋ ๋จน๊ณ ๊ฐ๊น?
์ ๋ผ๋ ์ฌํฌ๋ฆฌ:
๋ญ์ผ?? ๋๊ฐ ๋จน์๊บผ ๋งํ๋ผ๊ณ !
๊ฒฝ์๋ ์ฌํฌ๋ฆฌ:
์๋
~ ๋จน์๊บผ๋ ์๊ณ , ๋ผ๋ฉด ์ํค๋ฉด ์๋ผ? ๋ผ๋ฉด์ ๋ฌ๊ฑ ๋ฃ์ด๋ฌ๋ผ๊ณ !
prompt = '''
"๋ ์ง๊ธ ๋ง์ด ๋ฐฐ๊ณ ํ๋ฐ, ์ฐ๋ฆฌ ์ ๊ธฐ์ ๋ญ๋ผ๋ ๋จน๊ณ ๊ฐ๊น?"
English Translation :
'''
with torch.no_grad():
tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
gen_tokens = model.generate(tokens, do_sample=True, temperature=0.3, max_length=64)
generated = tokenizer.batch_decode(gen_tokens)[0]
print(generated)
"๋ ์ง๊ธ ๋ง์ด ๋ฐฐ๊ณ ํ๋ฐ, ์ฐ๋ฆฌ ์ ๊ธฐ์ ๋ญ๋ผ๋ ๋จน๊ณ ๊ฐ๊น?"
English Translation :
"I'm so hungry, we'd like to go out and have something to eat."
๐ ๋ฒ์ญ Task ๊ฐ์ ๊ฒฝ์ฐ, temperature๊ฐ ๋์ ๊ฒฝ์ฐ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ง ๋ชปํ์ต๋๋ค!
๐ ์ฐฝ์๋ ฅ์ ์ต๋ํ ๋ฐฐ์ ํ๋ ๋ฒ์ญ Task์์๋ temperature ๋ณ์๋ฅผ ๋ฎ๊ฒ ํ๋ ๊ฒ์ด ์ข๊ฒ ์ต๋๋ค :)
๐ ๊ธด ๋ฌธ์ฅ๋ณด๋ค๋, ์งง์ ๋ฌธ์ฅ์ผ ๋ ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์์ต๋๋ค.
๐ ์ค๋์ GPT-3์ ํ๊ตญ์ด ๋ฒ์ , kogpt์ ์ฌ์ฉํด๋ณด์์ต๋๋ค!
๐ ์์ฑ ๋ชจ๋ธ์ธ ๋งํผ, ์ฐฝ์๋ ฅ์ด ํ์ํ Task์ ๋์ฑ ๊ฐ์ ์ ๋ณด์์ต๋๋ค!
๐ ๊ธฐ๋ณธ ๋ชจ๋ธ ์ฌ์ด์ฆ๊ฐ ํฐ ๋งํผ, ์์ฝ๊ฒ๋ local BentoML์๋ ์ฌ๋ ค๋ณด์ง ๋ชปํด ์์ฝ์ต๋๋ค.
๐ ๋ค์์ ์ข๋ ๊ฐ๋ฒผ์ด ๋ชจ๋ธ์ ์ฌ์ฉํ ๊ธฐํ๊ฐ ์ค๋ฉด ๋์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ ๊ทธ๋ผ, ์ค๋๋ ์ฝ์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์ข์ ํ๋ฃจ ๋์ธ์!
์๋
ํ์ธ์. ์ ๋ ์ ํ๋ธ ๋นตํ์ ๊ฐ๋ฐ๋์๊ตญ์ ์ด์ํ๊ณ ์๋ ๋นตํ์
๋๋ค!
https://www.youtube.com/@bbanghyong
๊ณต์ ํด์ฃผ์ ๋ธ๋ก๊ทธ ํฌ์คํ
์ด ๋๋ฌด ์ข์์. ๋ธ๋ก๊ทธ ๋ด์ฉ์ ํ์ฉํ์ฌ ์ ํ๋ธ ์์์ผ๋ก ๋ง๋ค์ด๋ ๊ด์ฐฎ์๊น์?
๋ง์ฝ ํ๋ฝํด์ฃผ์ ๋ค๋ฉด ๊ฐ์ฝฉ์ฝฉ๋ ๋ธ๋ก๊ทธ ์ฃผ์๋ฅผ ์์์ ์ฒจ๋ถํ๊ณ ์์์ ๋
ธ์ถ๋ ์ ์๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
์ฝ๋ฉ์ ์ ๋ฃ ๊ฒฐ์ ๋ก ํ์๋์? ๋ฌด๋ฃ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํฑ์์ด ๋ถ์กฑํ๋ฏํ๋ค์,,ใ ใ