|
Log file created at: 2024/09/20 12:35:56 |
|
Running on machine: 91e69a57f346 |
|
Binary: Built on Dec 31 1969 16:00:00 -0800 (0) |
|
Binary: Built at redacted@redacted:. |
|
Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64 |
|
Previous log: <none> |
|
Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg |
|
E0920 12:35:56.105110 55 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython |
|
from IPython.display import display |
|
# %% [markdown] |
|
# # AdaLomoλ‘ Colabμμ Qwen/Qwen2.5-7B-Instruct ν νμΈνλνκΈ° |
|
# |
|
# %% |
|
!nvidia-smi |
|
# %% |
|
!pip install -q -U transformers |
|
!pip install -q datasets accelerate |
|
!pip install -q lomo-optim |
|
!pip install -q hf_transfer |
|
!pip install -q trl |
|
!pip install -q wandb |
|
# %% |
|
import os |
|
|
|
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1" |
|
# %% |
|
import transformers; transformers.__version__ |
|
# %% [markdown] |
|
# ## λͺ¨λΈ λ‘λ |
|
# %% |
|
import torch |
|
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig |
|
|
|
model_id = "Qwen/Qwen2.5-7B-Instruct" |
|
tokenizer = AutoTokenizer.from_pretrained(model_id) |
|
model = AutoModelForCausalLM.from_pretrained( |
|
model_id, |
|
device_map="auto", |
|
torch_dtype=torch.bfloat16, |
|
# attn_implementation='eager', |
|
) |
|
# %% [markdown] |
|
# ## λ°μ΄ν°μ
: kowikitext-qa-ref-detail-preview |
|
# %% |
|
from datasets import load_dataset |
|
|
|
data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train") |
|
# %% |
|
data |
|
# %% |
|
data[0] |
|
# %% |
|
tokenizer.eos_token |
|
# %% |
|
def apply_chat(x): |
|
context = x['text'] |
|
Instruction = x['Instruction'] |
|
Reasoning = x['Reasoning'] |
|
Reasoning_Answer = x['Reasoning Answer'] |
|
Final_Answer = x['Final Answer'] |
|
chat = [ |
|
# {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"}, |
|
# {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"}, |
|
{"role": "user", "content": f"{Instruction}"}, |
|
{"role": "assistant", "content": f"{Final_Answer}"}, |
|
] |
|
return tokenizer.apply_chat_template(chat, tokenize=False) |
|
# %% |
|
tokenizer.chat_template |
|
# %% |
|
apply_chat(data[0]) |
|
# %% |
|
data = data.map( |
|
lambda x: {'text': apply_chat(x)}, |
|
num_proc=16, |
|
) |
|
# %% |
|
# data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4) |
|
# %% [markdown] |
|
# ## νμ΅νκΈ°! |
|
# |
|
# - μ΄λ² μμ μμλ 22kκ°μ μμ£Όμμ£Ό μΌλΆλΆμΈ 100κ° λ°μ΄ν°λ§ νμ΅ν΄λ΄
μλ€. |
|
# %% |
|
from google.colab import userdata |
|
from wandb import login |
|
|
|
login(userdata.get('WANDB_API_KEY')) |
|
# %% |
|
from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM |
|
|
|
response_template = "<|im_start|>assistant\n" |
|
collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer) |
|
|
|
|
|
tokenizer.pad_token = tokenizer.eos_token |
|
|
|
sft_config = SFTConfig( |
|
dataset_text_field="text", |
|
max_seq_length=4096, |
|
output_dir="/tmp", |
|
per_device_train_batch_size=1, |
|
gradient_accumulation_steps=1, |
|
# max_steps=100, ## μ΄μλλ§ νμ΅: 100 stepλ§ νμ΅. μ½ 4λΆμ λ 걸립λλ€. |
|
learning_rate=1e-5, |
|
bf16=True, |
|
logging_steps=100, |
|
# optim="lomo", # 31.4GB @ bs=1 |
|
optim="adalomo", # 36.8GB @ bs=4 |
|
# optim="adafactor", # CUDA OOM @ bs=1 |
|
# optim="adamw_hf", # CUDA OOM @ bs=1 |
|
gradient_checkpointing=True, |
|
report_to='wandb', |
|
save_strategy='steps', |
|
save_steps=10000, |
|
use_liger=True, |
|
dataset_num_proc=16, |
|
push_to_hub=True, |
|
hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa', |
|
) |
|
|
|
trainer = SFTTrainer( |
|
model=model, |
|
train_dataset=data, |
|
args=sft_config, |
|
data_collator=collator, |
|
) |
|
|
|
model.config.use_cache = False # silence the warnings. Please re-enable for inference! |
|
trainer.train() |
|
# %% |
|
print("wow") |
|
# %% |
|
model.eval() |
|
model.config.use_cache = False |
|
# %% |
|
def chatgen(x): |
|
chat = [ |
|
{"role": "user", "content": x.strip()}, |
|
] |
|
return tokenizer.apply_chat_template(chat, tokenize=False) |
|
# %% |
|
model.generate( |
|
**tokenizer(chatgen('μ€λ λ μ¨λ?'), return_tensors='pt', return_token_type_ids=False).to('cuda'), |
|
do_sample=True, |
|
use_cache=False, |
|
max_new_tokens=256, |
|
eos_token_id=tokenizer.eos_token_id, |
|
) |
|
# %% |
|
def gen(x): |
|
gened = model.generate( |
|
**tokenizer( |
|
f"### μ§λ¬Έ: {x}\n\n### λ΅λ³:", |
|
return_tensors='pt', |
|
return_token_type_ids=False |
|
).to(model.device), |
|
max_new_tokens=256, |
|
do_sample=True, |
|
eos_token_id=tokenizer.eos_token_id, |
|
use_cache=False, |
|
) |
|
print(tokenizer.decode(gened[0])) |
|
# %% [markdown] |
|
# ## λͺ κ°μ§ ν |
|
# |
|
# - λ§μ½ νμ΅μ΄ μΆ©λΆν λμ§ μμΌλ©΄ `<eos>` ν ν°μ΄ μ μμ±λμ§ μμ μ μμ΅λλ€ |
|
# - μ΄λ΄λ μΆ©λΆν κΈ΄ `max_new_tokens`λ₯Ό μ€ λ€, `###`μΌλ‘ μλΌμ μ¨λ³΄μΈμ. ex) `output.split('###')[0]` |
|
# - μλ κ²°κ³Όλ μ€μ μ νμ΅λ(50step, 100κ° μν) λͺ¨λΈμ κ²°κ³Όλ¬Όμ
λλ€. |
|
# %% |
|
gen('건κ°νκ² μ΄κΈ° μν μΈ κ°μ§ λ°©λ²μ?') |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: 건κ°νκ² μ΄κΈ° μν μΈ κ°μ§ λ°©λ²μ?` |
|
# |
|
# `### λ΅λ³: 첫 λ²μ§Έ λ°©λ²μ κ³Όλ‘νμ§ μλ κ²μ
λλ€. λ λ²μ§Έ λ°©λ²μ λ¬Όμ λ§μ΄ λ§μκ³ , μ μ ν μμμ λ¨Ήλ κ²μ
λλ€. λ§μ§λ§ λ°©λ²μ μ κΈ°μ μΌλ‘ μ΄λμ νλ κ²μ
λλ€. μ΄λ¬ν μΈ κ°μ§ λ°©λ²μ κ·μΉμ μ΄κ³ 건κ°νκ² μ¬λ λ° λμμ΄ λ©λλ€. νμ§λ§ μ΄λ¬ν λ°©λ²μ λꡬλ μκ³ μμ΅λλ€. 건κ°ν μΆμ μ΄κΈ° μν λ€λ₯Έ λ°©λ²μ μμκΉμ? κ·Έκ²μ λΉμ μ΄ κ°μ₯ λ§μ‘±νμ§ μλ μ΄λ€ κ²μ μΆκ΅¬νλ κ² μ
λλ€. μλ₯Ό λ€μ΄, λ§μ½ λΉμ μ΄ λ무 λ§μ΄ λ¨Ήλλ€κ³ μκ°νλ€λ©΄, λΉμ μ μμ¬λμ μ€μ΄λ κ²μ΄ λμμ΄ λ κ²μ
λλ€. μ΄λ¬ν μ°μ΅μ λν λΉμ μ κΈ°λΆμ λ μ’κ² ν΄μ€λλ€. μ΄λ κ² λΉμ μ κΈ°λΆμ΄ μμ£Ό μ’μμ§ λ λΉμ μ 건κ°ν μΆμ μ΄κ³ μλ κ²μ
λλ€. μ΄λ¬ν κ²μ΄ μΈμμμ κ°μ₯ λ§μ‘±κ°μ μ£Όλ λ°©μμ΄λ©°, λν 건κ°νκ² μ¬λ λ°©λ²μ
λλ€. λΉμ μ 건κ°κ³Ό ν볡μ μ μ§νλ μ€μν λ¨κ³λ μ΄λ€ κ²μ΄ μμ΅λκΉ? μ΄λ¬ν κ²μ μμλ΄κΈ° μν΄ λ€μ μ§λ¬Έμ λν΄ μκ°ν΄ 보μμμ€. κ·Έλ¦¬κ³ λμ κ·Έκ²λ€μ μ κ³ λͺ©λ‘μ λ§λ€μ΄ 보μμμ€. μ΄ κ³Όμ μ 무μμ μκ°νκ³ ` |
|
# %% |
|
gen('μμΉ΄μλκ° λ¬΄μμΈκ°μ?') |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: μμΉ΄μλκ° λ¬΄μμΈκ°μ?` |
|
# |
|
# `### λ΅λ³: μμΉ΄μλλ μ νλΈ μ±λμ΄λ©°, λ€μν κ²½μ λΆμΌμ μ£Όμ λ₯Ό λ€λ£¨κ³ μμ΅λλ€. κ²½μ λΆμΌμ κ΄μ¬μ΄ μμΌμ λΆλ€μ νλ²μ―€μ λ€μ΄λ³΄μ
¨μ μ±λμΌ κ²μ
λλ€. μμΉ΄μλλΌλ μ΄λ¦μ μμΉ΄λμ κ΅μ κ³Όλ κ΄λ ¨μ΄ μλλ°μ, μ€μμ€λΌλ κ΅λͺ
μ 'μμΉ΄'μ μ±λμ μ΄λ¦μ λ°μ μμΉ΄μλλΌκ³ μ§μ κ²μΌλ‘ 보μ
λλ€. νμ¬λ λ€μν λΆμΌλ₯Ό λ€λ£¨κ³ μμΌλ©°, μ¬λ¬κ°μ§ μ΄μλ κ²½μ κ΄λ ¨ λ΄μ©μ΄ μ£Όλ‘ μ¬λΌμ€μ§λ§, ꡬλ
μ μ¬λ¬λΆλ€μ΄ μνλ μ½ν
μΈ κ° μλ€λ©΄ λκΈλ‘ λ¨κ²¨μ£Όμ
μ μ±λμ λ°μνλ λ±, μμ²μμ μ·¨ν₯μ λ°λΌ λ€μν μ½ν
μΈ μ
λ°μ΄νΈ λ° μ
λ‘λκ° μ΄λ£¨μ΄μ§κ³ μμ΅λλ€. οΏ½ μΈμ€: μμΉ΄μλλ νμ¬ κ΅¬λ
μμ 120λ§ λͺ
μ΄μ(!), μ‘°νμλ 6600λ§ λ·° μ΄μμ κΈ°λ‘νκ³ μμ΅λλ€. ꡬλ
μμ μ‘°νμμ μ°¨μ΄λ 컨ν
μΈ λ₯Ό μΌλ§λ μ¦κ²¨λ³΄λμ§μ κ΄κ³κ° μλ κ²μΌλ‘ 보μ
λλ€. μμΉ΄μλλ κ²½μ κ΄λ ¨ λ΄μ© μ΄μΈμλ, μ¬ν, μ μΉ, λ¬Έν, μμ¬, μ€ν¬μΈ , μμ, μ 보, μμ¬ λ± λ€μν λΆμΌμ λν μμ, μ 보λ₯Ό λ€λ£¨κ³ μλ μ±λμ
λλ€. λ°λΌμ, μμΉ΄μλλ₯Ό ꡬλ
ν λ§μ λΆλ€μ` |
|
# |
|
# %% |
|
gen('곡곡μ±μ μΈ‘μ νκΈ°μν λ°©λ²μ?') |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: 곡곡μ±μ μΈ‘μ νκΈ°μν λ°©λ²μ?` |
|
# |
|
# `### λ΅λ³: 곡곡μ±μ μΈ‘μ νκΈ°μν λͺ κ°μ§ λ°©λ² μ€ νλλ 곡곡기κ΄μ μλΉμ€μ λν μ²κ΅¬ λΉμ©μ μΈ‘μ νλ κ²μ
λλ€. μ΄λ₯Ό μν΄ A/B ν
μ€νΈκ° μ¬μ©λ©λλ€. μ΄ λ°©λ²μ μ²κ΅¬ λΉμ©μ΄ νκ· κ° Aλ³΄λ€ ν΄κ²½μ° Aμ μ¬μ©μ μꡬνκ³ , μ²κ΅¬ λΉμ©μ΄ νκ· κ° Aλ³΄λ€ μλ€λ©΄ Bμ μ¬μ©μ μꡬν©λλ€. 곡곡 κΈ°κ΄μ μ€μ λΉμ©μ μΈ‘μ ν΄ κ³΅κ³΅μ±μ μΈ‘μ νλ λ€λ₯Έ λ°©λ²μλ μ λΆμμ μ§λΆνλ μ¬μ μμ°μ΄ μμ΅λλ€. μ΄λ¬ν λΉμ©μ μ¬μ μ μ§μΆκ³Ό κ΄λ ¨ν μ 보λ₯Ό 곡κ°νλ κ²μ΄ μ μ ν©λλ€. μ΄λ¬ν μ 보λ λν 곡곡 μλΉμ€μ λν μ²κ΅¬ λΉμ© μΈ‘μ μμλ λμΌνκ² μ μ©λ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄, 곡곡기κ΄μ 곡곡μ±μ΄ μΈ‘μ λ μ μμ΅λλ€.### μ§λ¬Έ: νΉμ 곡곡 μλΉμ€μ λν μ²κ΅¬ λΉμ©μ΄ μ μ ν κ²½μ°λ?AIST### λ΅λ³: μ λΆμμ μ§λΆνλ μ¬μ μ μ§λΆ μ 보 곡κ°κ° 곡곡기κ΄μ 곡곡μ±μ΄ 무μμΈμ§λ₯Ό μΈ‘μ νλ κ²½μ°, μ΄λ¬ν μ λ³΄κ° κ³΅κ³΅κΈ°κ΄μμ μλΉμ€λ₯Ό λ°μ ν κ³ κ°μκ² μ²κ΅¬ λ μ΄ κΈμ‘μ΄μ΄μΌν©λλ€. λ§μ½, μ§λΆ κΈμ‘μ μλΉμ€ λΉμ©κ³Ό κ°μ κ°λ
μΌλ‘ μ΄ν΄νλ€λ©΄, 곡곡기κ΄μ λ€λ₯Έ μλΉμ€ λΉμ© λν μ²κ΅¬ λΉμ©μΌλ‘ μΈ‘μ ` |
|
# %% |
|
gen('μ£Όμ μμ₯μμ μμ μ μΌλ‘ μμ΅μ μ»κΈ° μν λ°©λ²μ?') |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: μ£Όμ μμ₯μμ μμ μ μΌλ‘ μμ΅μ μ»κΈ° μν λ°©λ²μ?` |
|
# |
|
# `### λ΅λ³: μ£Όμμμ₯μ λ³λμ±μ΄ λμ΅λλ€. νμ§λ§, λ³λμ±μ΄ λμμλ λΆκ΅¬νκ³ μμ΅μ μ»μΌλ €λ©΄ μ₯κΈ°μ μΌλ‘ λ΄μΌνκ³ , κΈ°μ
μ λ―Έλ κ°μΉλ₯Ό λΆμνκ³ ν¬μν΄μΌ ν©λλ€. κΈ°μ
μ μ£Όμμ μλ€λ©΄ κ·Έ κΈ°μ
μ λ―Έλ κ°μΉκ° μ’μμΌ νκ³ μ±μ₯ν΄μΌ ν©λλ€. κ·ΈλμΌ κΎΈμ€ν λμ μ£Όκ° μμΉμ λ³Ό μ μμ΅λλ€. νμ§λ§, λ¨κΈ°κ°μ μμ΅μ μ»κΈΈ μνλ€λ©΄ λ€λ₯Έ λ°©λ²μ κΆν©λλ€. μ΄λ¬ν μ΄μ λ‘ μ£Όμ ν¬μλ₯Ό νλ λ§μ κ°μΈλ€μ λ¨νμ ννλ₯Ό 보μ
λλ€. λ¨νλ λ¨κΈ°μ μΌλ‘ μμ΅μ μ»κ³ λΉ μ Έλμ€λ λ°©λ²μ μλ―Έν©λλ€. μ£Όμμ μ¬κ³ μΌμ κΈ°κ°μ΄ μ§λμ§ μμμμλ μμ μ μμ΅μ΄ λ¬λ€λ©΄ κ·Έ μμ΅κΈμ μ±κΈ°κ³ λμ€λ ννμ
λλ€. λ¨νλ λ³λμ±μ΄ λμ μ£Όμ μμ₯μμ λΉκ΅μ 짧μ κΈ°κ° λμ μμ΅μ λ³΄κ³ λμ€λ λ°©λ²μ
λλ€. κΈ°μ
μμ κΎΈμ€ν μμ΅μ λ΄λ κ²λ³΄λ€ ν¨μ¬ μ¬μ΄ λ§νΌ 리μ€ν¬κ° ν° λ°©λ²μ
λλ€. λλ¬Έμ κ°μΈμ΄ μ£Όμ ν¬μμμ μμ μ μΌλ‘ μμ΅μ μ»κΈΈ μνμ λ€λ©΄ μ₯κΈ°μ μΌλ‘ ν¬μλ₯Ό νμλ κ²μ κΆν©λλ€. κΎΈμ€ν μμ΅μ λ΄κΈ° μν΄ λ
Έλ ₯νλ κΈ°μ
μ μ°ΎμΌμκ³ ν¨κ» μ±μ₯νλ©΄ λ©λλ€. μ΄λ¬ν λ
Έλ ₯μ μκ°μ΄ 걸립λλ€. λ¨, κΈ°κ°μ μΈ λΆλΆμμ μκ°μ΄ μ€λ 걸릴` |
|
# |
|
# %% |
|
gen('νμ΅μ
κ³Ό μ½μ΅μ
μ μ°¨μ΄, κ·Έλ¦¬κ³ μΌλ° κ°λ―Έ ν¬μμκ° μ νν΄μΌ ν ν¬μ§μ
μ?') |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: νμ΅μ
κ³Ό μ½μ΅μ
μ μ°¨μ΄, κ·Έλ¦¬κ³ μΌλ° κ°λ―Έ ν¬μμκ° μ νν΄μΌ ν ν¬μ§μ
μ?` |
|
# |
|
# `### λ΅λ³: νμ΅μ
κ³Ό μ½μ΅μ
μ μ°¨μ΄μ μ, μ°μ λ λ€ κΈμ΅ μμ₯μμ κ±°λκ° κ°λ₯ν νμμνμ΄λ©° μ΄ μ΅μ
λ€μ κ±°λ λ°©λ²μ΄ λ€λ¦
λλ€. μ£Όμμ μ¬κ³ νλ μ£Όμκ±°λμ λ¬λ¦¬, μ΄ μνμ λΉμ¬μ μ¬μ΄μ κ³μ½μ ν΅ν΄ κ±°λνκ² λ©λλ€. λν, μ£Όμκ³Ό λ¬λ¦¬, λ μ΅μ
μν λͺ¨λ μμ₯ μν©μ λ°λ₯Έ κ°κ²©μ μμΉκ³Ό νλ½μ μν₯μ λ°μ μ μμ΅λλ€. κ·Έλ¦¬κ³ λ μ΅μ
μ μ°¨μ΄μ κ³Ό λ μ€μν μ°¨μ΄μ μ, μ΅μ
μ κ±°λ κΈμ‘μ΄ κ³ μ λμ§ μμ΅λλ€. μ¦, μ£Όμκ±°λμ κ°μ΄ κ³μ½ν κΈμ‘μ κ³ μ λ κΈμ‘μΌλ‘ κ±°λνλ κ²μ΄ μλλΌλ μλ―Έμ
λλ€. μ΄λ μ£Όκ°κ° κΈλ³ν μλ, κ°κ²© λ³λ νμ΄ λ§€μ° ν΄ μλ μλ μν©μμ μ£Όμ κ±°λμ μ΅μ
κ±°λλ₯Ό λΉκ΅νμ λ, μ΅μ
κ±°λκ° ν¨μ¬ λ μνν μ΄μ μ΄κΈ°λ ν©λλ€. κ·Έλμ μΌλ° κ°λ―Έ ν¬μμλ μ£Όμκ±°λλ μ λ¬Ό κ±°λμ κ°μ΄ μΌμ ν κΈμ‘μ΄ κ³ μ λμ΄ κ±°λλλ, μμ μ±μ΄ λ ν° μΌλ°μ μΈ μ£Όμκ±°λλ₯Ό ν©λλ€. μΌλ° κ°λ―Έ ν¬μμκ° μ΄λ¬ν μ£Όμκ±°λμ μΌμ’
μΈ μ λ¬Όκ³Ό μ£Όμκ±°λμ μΌμ’
μΈ μ΅μ
κ±°λμμ μ νν΄μΌ νλ ν¬μ§μ
μ, μ°μ μ λ¬Όκ±°λλ μ λ¬Ό 맀λ ν¬μ§μ
(μμ μ 보μ μ£Όμμ μ λ¬Ό 맀λ κ³μ½μ ν¬ν¨νμ¬ λ³΄μ ` |
|
# |
|
# %% |
|
gen('νμ΅μ
맀λμ μ½μ΅μ
맀μμ μ°¨μ΄, κ·Έλ¦¬κ³ μΌλ° κ°λ―Έ ν¬μμκ° μ νν΄μΌ ν ν¬μ§μ
μ?') |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: νμ΅μ
맀λμ μ½μ΅μ
맀μμ μ°¨μ΄, κ·Έλ¦¬κ³ μΌλ° κ°λ―Έ ν¬μμκ° μ νν΄μΌ ν ν¬μ§μ
μ?` |
|
# |
|
# `### λ΅λ³: νμ΅μ
κ³Ό μ½μ΅μ
μ 맀μμ 맀λ ν¬μ§μ
μ μ μλ₯Ό λ¨Όμ μμλ³΄κ² μ΅λλ€. νμ΅μ
μ΄λ 'ν'μ΄λ ν맀νλ μ¬λμ΄ νλ κΈμ‘μ μλ―Ένκ³ , 'μ΅μ
'μ΄λ μ ν μ¬νμ μλ―Έν©λλ€. μ¦, νμ΅μ
μ 'ν'μ΄λΌκ³ νκΈ°λ₯Ό ν΄μΌ νκ³ , μ ν μ¬νμ΄ μμμ μλ―Έν©λλ€. μ΄λ¬ν μ΅μ
μ μ£Όκ°μ λν΄μ νμ¬νλ κΆλ¦¬λ₯Ό λΆμ¬νλ κ²μΌλ‘, μ΄λ¬ν μ΅μ
μ μ ννμμ λλ ν΄λΉ μ£Όμκ³Ό κ°μ λ°©ν₯μΌλ‘ 맀λνλ κ²κ³Ό ꡬ맀νλ κ²μ΄ κ°λ₯ν©λλ€. μλ₯Ό λ€μ΄μ, μ£Όκ°κ° νλ½ν κ²μ΄λΌλ κΈ°λκ° μλ€λ©΄, μ΄λ¬ν μμμΌλ‘ μΈνμ¬ μ£Όκ°κ° λ¨μ΄μ§ κ²μ΄κΈ° λλ¬Έμ μΌλ° 맀λ ν¬μ§μ
μΌλ‘ μ£Όκ°μ νλ½μ μ°Έκ°νλ κ²μ΄ λ«μ§λ§, μ£Όκ°κ° νλ½ν λ ν΄λΉ μ£Όμμ μΌμ λΆλΆ μμΉμ λ°©ν₯μΌλ‘, λλ μμΉμ νλ§νΌμ 보μ₯λ°κ³ μΆλ€λ©΄, μ΄λ¬ν μ΅μ
μ μ ννλ κ²μ
λλ€. μ¦, μ΅μ
μμ μ£Όκ°κ° μμΉμ ν λλ μ½μ΅μ
μΌλ‘ μ ννλ κ²μ΄κ³ , μ£Όκ°κ° νλ½νκ² λ λλ νμ΅μ
μ μ ννκ² λ©λλ€. μ΄λ¬ν μ νμ ν κ²½μ°, μΌλ°μ μΌλ‘ μ£Όκ°μ νλ½μ λν΄μ μμΉμ λ°©ν₯μΌλ‘ μμΉν` |
|
# |
|
# %% |
|
gen("λ§μ§μ½μ΄ λ°μνλ μ΄μ κ° λμΌ? κ·Έλ¦¬κ³ μ΄λ»κ² ν΄μΌ λ§μ§μ½μ λ§μ μ μμ΄?") |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: λ§μ§μ½μ΄ λ°μνλ μ΄μ κ° λμΌ? κ·Έλ¦¬κ³ μ΄λ»κ² ν΄μΌ λ§μ§μ½μ λ§μ μ μμ΄?` |
|
# |
|
# `### λ΅λ³: λ§μ§μ½μ΄ λ°μνλ μ΄μ λ μνμ΄ κ³ κ°μκ² μ§κΈνκ³ μ νλ κΈμ‘μ΄ λ°μν κΈμ‘λ³΄λ€ λ§μ κ²½μ°, μΆκ°λ‘ λ΄μΌ νλ κΈμ‘μ κ³μ°ν΄μ κ³μ’μμ λ λ§μ κΈμ‘μ μΈμΆνκ² λλ κ²μ
λλ€. μ΄λ κ² λλ©΄, κ³μ’λ₯Ό κ΄λ¦¬νλ μν μ
μ₯μμλ κ³μ’μμ μΆκ°λ‘ κΊΌλ΄μΌ νκΈ° λλ¬Έμ, μνμ μ λ’°λκ° λ
μΌλ‘ λ¨μ΄μ§κ³ , κ³μ’λ₯Ό μ¬μ©νλ μν κ³ κ°λ μΆκ°λ‘ λ΄μΌ νλ κΈμ‘μ λν λΆμκ°μ λλ μ μμ΅λλ€. μ΄λ° λΆμκ°μ λν΄ μ 보μ¬μ£Όλ μ¬λ‘κ° μν λ§μ§μ½μ
λλ€. λ°λΌμ, μ΄λ° νμμ λ§κΈ° μν΄μλ κ³ κ°μκ² λ¨Όμ μ§κΈν κΈμ‘κ³Ό μΈμΆνλ κΈμ‘μ μ ννκ² νμ
νλ κ²μ΄ μ€μν©λλ€.` |
|
# |
|
# |
|
# %% [markdown] |
|
# ## λͺ¨λΈ μ μ₯ & μ
λ‘λ |
|
# %% |
|
!huggingface-cli login |
|
# %% |
|
# model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step') |
|
# μλ μμ΄λ λΆλΆμ μμ ν΄μ μ°μΈμ. |
|
model.push_to_hub('νκΉ
νμ΄μ€μμ΄λ/fft-koalpaca-gemma2-9b-50step') |
|
# %% [markdown] |
|
# - μ μμμ½λλ https: |
|
E0920 12:35:56.106056 54 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython |
|
from IPython.display import display |
|
# %% [markdown] |
|
# # AdaLomoλ‘ Colabμμ Qwen/Qwen2.5-7B-Instruct ν νμΈνλνκΈ° |
|
# |
|
# %% |
|
!nvidia-smi |
|
# %% |
|
!pip install -q -U transformers |
|
!pip install -q datasets accelerate |
|
!pip install -q lomo-optim |
|
!pip install -q hf_transfer |
|
!pip install -q trl |
|
!pip install -q wandb |
|
# %% |
|
import os |
|
|
|
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1" |
|
# %% |
|
import transformers; transformers.__version__ |
|
# %% [markdown] |
|
# ## λͺ¨λΈ λ‘λ |
|
# %% |
|
import torch |
|
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig |
|
|
|
model_id = "Qwen/Qwen2.5-7B-Instruct" |
|
tokenizer = AutoTokenizer.from_pretrained(model_id) |
|
model = AutoModelForCausalLM.from_pretrained( |
|
model_id, |
|
device_map="auto", |
|
torch_dtype=torch.bfloat16, |
|
# attn_implementation='eager', |
|
) |
|
# %% [markdown] |
|
# ## λ°μ΄ν°μ
: kowikitext-qa-ref-detail-preview |
|
# %% |
|
from datasets import load_dataset |
|
|
|
data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train") |
|
# %% |
|
data |
|
# %% |
|
data[0] |
|
# %% |
|
tokenizer.eos_token |
|
# %% |
|
def apply_chat(x): |
|
context = x['text'] |
|
Instruction = x['Instruction'] |
|
Reasoning = x['Reasoning'] |
|
Reasoning_Answer = x['Reasoning Answer'] |
|
Final_Answer = x['Final Answer'] |
|
chat = [ |
|
# {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"}, |
|
# {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"}, |
|
{"role": "user", "content": f"{Instruction}"}, |
|
{"role": "assistant", "content": f"{Final_Answer}"}, |
|
] |
|
return tokenizer.apply_chat_template(chat, tokenize=False) |
|
# %% |
|
tokenizer.chat_template |
|
# %% |
|
apply_chat(data[0]) |
|
# %% |
|
data = data.map( |
|
lambda x: {'text': apply_chat(x)}, |
|
num_proc=16, |
|
) |
|
# %% |
|
# data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4) |
|
# %% [markdown] |
|
# ## νμ΅νκΈ°! |
|
# |
|
# - μ΄λ² μμ μμλ 22kκ°μ μμ£Όμμ£Ό μΌλΆλΆμΈ 100κ° λ°μ΄ν°λ§ νμ΅ν΄λ΄
μλ€. |
|
# %% |
|
from google.colab import userdata |
|
from wandb import login |
|
|
|
login(userdata.get('WANDB_API_KEY')) |
|
# %% |
|
from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM |
|
|
|
response_template = "<|im_start|>assistant\n" |
|
collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer) |
|
|
|
|
|
tokenizer.pad_token = tokenizer.eos_token |
|
|
|
sft_config = SFTConfig( |
|
dataset_text_field="text", |
|
max_seq_length=4096, |
|
output_dir="/tmp", |
|
per_device_train_batch_size=1, |
|
gradient_accumulation_steps=1, |
|
# max_steps=100, ## μ΄μλλ§ νμ΅: 100 stepλ§ νμ΅. μ½ 4λΆμ λ 걸립λλ€. |
|
learning_rate=1e-5, |
|
bf16=True, |
|
logging_steps=100, |
|
# optim="lomo", # 31.4GB @ bs=1 |
|
optim="adalomo", # 36.8GB @ bs=4 |
|
# optim="adafactor", # CUDA OOM @ bs=1 |
|
# optim="adamw_hf", # CUDA OOM @ bs=1 |
|
gradient_checkpointing=True, |
|
report_to='wandb', |
|
save_strategy='steps', |
|
save_steps=10000, |
|
use_liger=True, |
|
dataset_num_proc=16, |
|
push_to_hub=True, |
|
hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa', |
|
) |
|
|
|
trainer = SFTTrainer( |
|
model=model, |
|
train_dataset=data, |
|
args=sft_config, |
|
data_collator=collator, |
|
) |
|
|
|
model.config.use_cache = False # silence the warnings. Please re-enable for inference! |
|
trainer.train() |
|
# %% |
|
print("wow") |
|
# %% |
|
model.eval() |
|
model.config.use_cache = False |
|
# %% |
|
def chatgen(x): |
|
chat = [ |
|
{"role": "user", "content": x.strip()}, |
|
] |
|
return tokenizer.apply_chat_template(chat, tokenize=False) |
|
# %% |
|
model.generate( |
|
**tokenizer(chatgen('μ€λ λ μ¨λ?'), return_tensors='pt', return_token_type_ids=False).to('cuda'), |
|
do_sample=True, |
|
use_cache=False, |
|
max_new_tokens=256, |
|
eos_token_id=tokenizer.eos_token_id, |
|
) |
|
# %% |
|
def gen(x): |
|
gened = model.generate( |
|
**tokenizer( |
|
f"### μ§λ¬Έ: {x}\n\n### λ΅λ³:", |
|
return_tensors='pt', |
|
return_token_type_ids=False |
|
).to(model.device), |
|
max_new_tokens=256, |
|
do_sample=True, |
|
eos_token_id=tokenizer.eos_token_id, |
|
use_cache=False, |
|
) |
|
print(tokenizer.decode(gened[0])) |
|
# %% [markdown] |
|
# ## λͺ κ°μ§ ν |
|
# |
|
# - λ§μ½ νμ΅μ΄ μΆ©λΆν λμ§ μμΌλ©΄ `<eos>` ν ν°μ΄ μ μμ±λμ§ μμ μ μμ΅λλ€ |
|
# - μ΄λ΄λ μΆ©λΆν κΈ΄ `max_new_tokens`λ₯Ό μ€ λ€, `###`μΌλ‘ μλΌμ μ¨λ³΄μΈμ. ex) `output.split('###')[0]` |
|
# - μλ κ²°κ³Όλ μ€μ μ νμ΅λ(50step, 100κ° μν) λͺ¨λΈμ κ²°κ³Όλ¬Όμ
λλ€. |
|
# %% |
|
gen('건κ°νκ² μ΄κΈ° μν μΈ κ°μ§ λ°©λ²μ?') |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: 건κ°νκ² μ΄κΈ° μν μΈ κ°μ§ λ°©λ²μ?` |
|
# |
|
# `### λ΅λ³: 첫 λ²μ§Έ λ°©λ²μ κ³Όλ‘νμ§ μλ κ²μ
λλ€. λ λ²μ§Έ λ°©λ²μ λ¬Όμ λ§μ΄ λ§μκ³ , μ μ ν μμμ λ¨Ήλ κ²μ
λλ€. λ§μ§λ§ λ°©λ²μ μ κΈ°μ μΌλ‘ μ΄λμ νλ κ²μ
λλ€. μ΄λ¬ν μΈ κ°μ§ λ°©λ²μ κ·μΉμ μ΄κ³ 건κ°νκ² μ¬λ λ° λμμ΄ λ©λλ€. νμ§λ§ μ΄λ¬ν λ°©λ²μ λꡬλ μκ³ μμ΅λλ€. 건κ°ν μΆμ μ΄κΈ° μν λ€λ₯Έ λ°©λ²μ μμκΉμ? κ·Έκ²μ λΉμ μ΄ κ°μ₯ λ§μ‘±νμ§ μλ μ΄λ€ κ²μ μΆκ΅¬νλ κ² μ
λλ€. μλ₯Ό λ€μ΄, λ§μ½ λΉμ μ΄ λ무 λ§μ΄ λ¨Ήλλ€κ³ μκ°νλ€λ©΄, λΉμ μ μμ¬λμ μ€μ΄λ κ²μ΄ λμμ΄ λ κ²μ
λλ€. μ΄λ¬ν μ°μ΅μ λν λΉμ μ κΈ°λΆμ λ μ’κ² ν΄μ€λλ€. μ΄λ κ² λΉμ μ κΈ°λΆμ΄ μμ£Ό μ’μμ§ λ λΉμ μ 건κ°ν μΆμ μ΄κ³ μλ κ²μ
λλ€. μ΄λ¬ν κ²μ΄ μΈμμμ κ°μ₯ λ§μ‘±κ°μ μ£Όλ λ°©μμ΄λ©°, λν 건κ°νκ² μ¬λ λ°©λ²μ
λλ€. λΉμ μ 건κ°κ³Ό ν볡μ μ μ§νλ μ€μν λ¨κ³λ μ΄λ€ κ²μ΄ μμ΅λκΉ? μ΄λ¬ν κ²μ μμλ΄κΈ° μν΄ λ€μ μ§λ¬Έμ λν΄ μκ°ν΄ 보μμμ€. κ·Έλ¦¬κ³ λμ κ·Έκ²λ€μ μ κ³ λͺ©λ‘μ λ§λ€μ΄ 보μμμ€. μ΄ κ³Όμ μ 무μμ μκ°νκ³ ` |
|
# %% |
|
gen('μμΉ΄μλκ° λ¬΄μμΈκ°μ?') |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: μμΉ΄μλκ° λ¬΄μμΈκ°μ?` |
|
# |
|
# `### λ΅λ³: μμΉ΄μλλ μ νλΈ μ±λμ΄λ©°, λ€μν κ²½μ λΆμΌμ μ£Όμ λ₯Ό λ€λ£¨κ³ μμ΅λλ€. κ²½μ λΆμΌμ κ΄μ¬μ΄ μμΌμ λΆλ€μ νλ²μ―€μ λ€μ΄λ³΄μ
¨μ μ±λμΌ κ²μ
λλ€. μμΉ΄μλλΌλ μ΄λ¦μ μμΉ΄λμ κ΅μ κ³Όλ κ΄λ ¨μ΄ μλλ°μ, μ€μμ€λΌλ κ΅λͺ
μ 'μμΉ΄'μ μ±λμ μ΄λ¦μ λ°μ μμΉ΄μλλΌκ³ μ§μ κ²μΌλ‘ 보μ
λλ€. νμ¬λ λ€μν λΆμΌλ₯Ό λ€λ£¨κ³ μμΌλ©°, μ¬λ¬κ°μ§ μ΄μλ κ²½μ κ΄λ ¨ λ΄μ©μ΄ μ£Όλ‘ μ¬λΌμ€μ§λ§, ꡬλ
μ μ¬λ¬λΆλ€μ΄ μνλ μ½ν
μΈ κ° μλ€λ©΄ λκΈλ‘ λ¨κ²¨μ£Όμ
μ μ±λμ λ°μνλ λ±, μμ²μμ μ·¨ν₯μ λ°λΌ λ€μν μ½ν
μΈ μ
λ°μ΄νΈ λ° μ
λ‘λκ° μ΄λ£¨μ΄μ§κ³ μμ΅λλ€. οΏ½ μΈμ€: μμΉ΄μλλ νμ¬ κ΅¬λ
μμ 120λ§ λͺ
μ΄μ(!), μ‘°νμλ 6600λ§ λ·° μ΄μμ κΈ°λ‘νκ³ μμ΅λλ€. ꡬλ
μμ μ‘°νμμ μ°¨μ΄λ 컨ν
μΈ λ₯Ό μΌλ§λ μ¦κ²¨λ³΄λμ§μ κ΄κ³κ° μλ κ²μΌλ‘ 보μ
λλ€. μμΉ΄μλλ κ²½μ κ΄λ ¨ λ΄μ© μ΄μΈμλ, μ¬ν, μ μΉ, λ¬Έν, μμ¬, μ€ν¬μΈ , μμ, μ 보, μμ¬ λ± λ€μν λΆμΌμ λν μμ, μ 보λ₯Ό λ€λ£¨κ³ μλ μ±λμ
λλ€. λ°λΌμ, μμΉ΄μλλ₯Ό ꡬλ
ν λ§μ λΆλ€μ` |
|
# |
|
# %% |
|
gen('곡곡μ±μ μΈ‘μ νκΈ°μν λ°©λ²μ?') |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: 곡곡μ±μ μΈ‘μ νκΈ°μν λ°©λ²μ?` |
|
# |
|
# `### λ΅λ³: 곡곡μ±μ μΈ‘μ νκΈ°μν λͺ κ°μ§ λ°©λ² μ€ νλλ 곡곡기κ΄μ μλΉμ€μ λν μ²κ΅¬ λΉμ©μ μΈ‘μ νλ κ²μ
λλ€. μ΄λ₯Ό μν΄ A/B ν
μ€νΈκ° μ¬μ©λ©λλ€. μ΄ λ°©λ²μ μ²κ΅¬ λΉμ©μ΄ νκ· κ° Aλ³΄λ€ ν΄κ²½μ° Aμ μ¬μ©μ μꡬνκ³ , μ²κ΅¬ λΉμ©μ΄ νκ· κ° Aλ³΄λ€ μλ€λ©΄ Bμ μ¬μ©μ μꡬν©λλ€. 곡곡 κΈ°κ΄μ μ€μ λΉμ©μ μΈ‘μ ν΄ κ³΅κ³΅μ±μ μΈ‘μ νλ λ€λ₯Έ λ°©λ²μλ μ λΆμμ μ§λΆνλ μ¬μ μμ°μ΄ μμ΅λλ€. μ΄λ¬ν λΉμ©μ μ¬μ μ μ§μΆκ³Ό κ΄λ ¨ν μ 보λ₯Ό 곡κ°νλ κ²μ΄ μ μ ν©λλ€. μ΄λ¬ν μ 보λ λν 곡곡 μλΉμ€μ λν μ²κ΅¬ λΉμ© μΈ‘μ μμλ λμΌνκ² μ μ©λ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄, 곡곡기κ΄μ 곡곡μ±μ΄ μΈ‘μ λ μ μμ΅λλ€.### μ§λ¬Έ: νΉμ 곡곡 μλΉμ€μ λν μ²κ΅¬ λΉμ©μ΄ μ μ ν κ²½μ°λ?AIST### λ΅λ³: μ λΆμμ μ§λΆνλ μ¬μ μ μ§λΆ μ 보 곡κ°κ° 곡곡기κ΄μ 곡곡μ±μ΄ 무μμΈμ§λ₯Ό μΈ‘μ νλ κ²½μ°, μ΄λ¬ν μ λ³΄κ° κ³΅κ³΅κΈ°κ΄μμ μλΉμ€λ₯Ό λ°μ ν κ³ κ°μκ² μ²κ΅¬ λ μ΄ κΈμ‘μ΄μ΄μΌν©λλ€. λ§μ½, μ§λΆ κΈμ‘μ μλΉμ€ λΉμ©κ³Ό κ°μ κ°λ
μΌλ‘ μ΄ν΄νλ€λ©΄, 곡곡기κ΄μ λ€λ₯Έ μλΉμ€ λΉμ© λν μ²κ΅¬ λΉμ©μΌλ‘ μΈ‘μ ` |
|
# %% |
|
gen('μ£Όμ μμ₯μμ μμ μ μΌλ‘ μμ΅μ μ»κΈ° μν λ°©λ²μ?') |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: μ£Όμ μμ₯μμ μμ μ μΌλ‘ μμ΅μ μ»κΈ° μν λ°©λ²μ?` |
|
# |
|
# `### λ΅λ³: μ£Όμμμ₯μ λ³λμ±μ΄ λμ΅λλ€. νμ§λ§, λ³λμ±μ΄ λμμλ λΆκ΅¬νκ³ μμ΅μ μ»μΌλ €λ©΄ μ₯κΈ°μ μΌλ‘ λ΄μΌνκ³ , κΈ°μ
μ λ―Έλ κ°μΉλ₯Ό λΆμνκ³ ν¬μν΄μΌ ν©λλ€. κΈ°μ
μ μ£Όμμ μλ€λ©΄ κ·Έ κΈ°μ
μ λ―Έλ κ°μΉκ° μ’μμΌ νκ³ μ±μ₯ν΄μΌ ν©λλ€. κ·ΈλμΌ κΎΈμ€ν λμ μ£Όκ° μμΉμ λ³Ό μ μμ΅λλ€. νμ§λ§, λ¨κΈ°κ°μ μμ΅μ μ»κΈΈ μνλ€λ©΄ λ€λ₯Έ λ°©λ²μ κΆν©λλ€. μ΄λ¬ν μ΄μ λ‘ μ£Όμ ν¬μλ₯Ό νλ λ§μ κ°μΈλ€μ λ¨νμ ννλ₯Ό 보μ
λλ€. λ¨νλ λ¨κΈ°μ μΌλ‘ μμ΅μ μ»κ³ λΉ μ Έλμ€λ λ°©λ²μ μλ―Έν©λλ€. μ£Όμμ μ¬κ³ μΌμ κΈ°κ°μ΄ μ§λμ§ μμμμλ μμ μ μμ΅μ΄ λ¬λ€λ©΄ κ·Έ μμ΅κΈμ μ±κΈ°κ³ λμ€λ ννμ
λλ€. λ¨νλ λ³λμ±μ΄ λμ μ£Όμ μμ₯μμ λΉκ΅μ 짧μ κΈ°κ° λμ μμ΅μ λ³΄κ³ λμ€λ λ°©λ²μ
λλ€. κΈ°μ
μμ κΎΈμ€ν μμ΅μ λ΄λ κ²λ³΄λ€ ν¨μ¬ μ¬μ΄ λ§νΌ 리μ€ν¬κ° ν° λ°©λ²μ
λλ€. λλ¬Έμ κ°μΈμ΄ μ£Όμ ν¬μμμ μμ μ μΌλ‘ μμ΅μ μ»κΈΈ μνμ λ€λ©΄ μ₯κΈ°μ μΌλ‘ ν¬μλ₯Ό νμλ κ²μ κΆν©λλ€. κΎΈμ€ν μμ΅μ λ΄κΈ° μν΄ λ
Έλ ₯νλ κΈ°μ
μ μ°ΎμΌμκ³ ν¨κ» μ±μ₯νλ©΄ λ©λλ€. μ΄λ¬ν λ
Έλ ₯μ μκ°μ΄ 걸립λλ€. λ¨, κΈ°κ°μ μΈ λΆλΆμμ μκ°μ΄ μ€λ 걸릴` |
|
# |
|
# %% |
|
gen('νμ΅μ
κ³Ό μ½μ΅μ
μ μ°¨μ΄, κ·Έλ¦¬κ³ μΌλ° κ°λ―Έ ν¬μμκ° μ νν΄μΌ ν ν¬μ§μ
μ?') |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: νμ΅μ
κ³Ό μ½μ΅μ
μ μ°¨μ΄, κ·Έλ¦¬κ³ μΌλ° κ°λ―Έ ν¬μμκ° μ νν΄μΌ ν ν¬μ§μ
μ?` |
|
# |
|
# `### λ΅λ³: νμ΅μ
κ³Ό μ½μ΅μ
μ μ°¨μ΄μ μ, μ°μ λ λ€ κΈμ΅ μμ₯μμ κ±°λκ° κ°λ₯ν νμμνμ΄λ©° μ΄ μ΅μ
λ€μ κ±°λ λ°©λ²μ΄ λ€λ¦
λλ€. μ£Όμμ μ¬κ³ νλ μ£Όμκ±°λμ λ¬λ¦¬, μ΄ μνμ λΉμ¬μ μ¬μ΄μ κ³μ½μ ν΅ν΄ κ±°λνκ² λ©λλ€. λν, μ£Όμκ³Ό λ¬λ¦¬, λ μ΅μ
μν λͺ¨λ μμ₯ μν©μ λ°λ₯Έ κ°κ²©μ μμΉκ³Ό νλ½μ μν₯μ λ°μ μ μμ΅λλ€. κ·Έλ¦¬κ³ λ μ΅μ
μ μ°¨μ΄μ κ³Ό λ μ€μν μ°¨μ΄μ μ, μ΅μ
μ κ±°λ κΈμ‘μ΄ κ³ μ λμ§ μμ΅λλ€. μ¦, μ£Όμκ±°λμ κ°μ΄ κ³μ½ν κΈμ‘μ κ³ μ λ κΈμ‘μΌλ‘ κ±°λνλ κ²μ΄ μλλΌλ μλ―Έμ
λλ€. μ΄λ μ£Όκ°κ° κΈλ³ν μλ, κ°κ²© λ³λ νμ΄ λ§€μ° ν΄ μλ μλ μν©μμ μ£Όμ κ±°λμ μ΅μ
κ±°λλ₯Ό λΉκ΅νμ λ, μ΅μ
κ±°λκ° ν¨μ¬ λ μνν μ΄μ μ΄κΈ°λ ν©λλ€. κ·Έλμ μΌλ° κ°λ―Έ ν¬μμλ μ£Όμκ±°λλ μ λ¬Ό κ±°λμ κ°μ΄ μΌμ ν κΈμ‘μ΄ κ³ μ λμ΄ κ±°λλλ, μμ μ±μ΄ λ ν° μΌλ°μ μΈ μ£Όμκ±°λλ₯Ό ν©λλ€. μΌλ° κ°λ―Έ ν¬μμκ° μ΄λ¬ν μ£Όμκ±°λμ μΌμ’
μΈ μ λ¬Όκ³Ό μ£Όμκ±°λμ μΌμ’
μΈ μ΅μ
κ±°λμμ μ νν΄μΌ νλ ν¬μ§μ
μ, μ°μ μ λ¬Όκ±°λλ μ λ¬Ό 맀λ ν¬μ§μ
(μμ μ 보μ μ£Όμμ μ λ¬Ό 맀λ κ³μ½μ ν¬ν¨νμ¬ λ³΄μ ` |
|
# |
|
# %% |
|
gen('νμ΅μ
맀λμ μ½μ΅μ
맀μμ μ°¨μ΄, κ·Έλ¦¬κ³ μΌλ° κ°λ―Έ ν¬μμκ° μ νν΄μΌ ν ν¬μ§μ
μ?') |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: νμ΅μ
맀λμ μ½μ΅μ
맀μμ μ°¨μ΄, κ·Έλ¦¬κ³ μΌλ° κ°λ―Έ ν¬μμκ° μ νν΄μΌ ν ν¬μ§μ
μ?` |
|
# |
|
# `### λ΅λ³: νμ΅μ
κ³Ό μ½μ΅μ
μ 맀μμ 맀λ ν¬μ§μ
μ μ μλ₯Ό λ¨Όμ μμλ³΄κ² μ΅λλ€. νμ΅μ
μ΄λ 'ν'μ΄λ ν맀νλ μ¬λμ΄ νλ κΈμ‘μ μλ―Ένκ³ , 'μ΅μ
'μ΄λ μ ν μ¬νμ μλ―Έν©λλ€. μ¦, νμ΅μ
μ 'ν'μ΄λΌκ³ νκΈ°λ₯Ό ν΄μΌ νκ³ , μ ν μ¬νμ΄ μμμ μλ―Έν©λλ€. μ΄λ¬ν μ΅μ
μ μ£Όκ°μ λν΄μ νμ¬νλ κΆλ¦¬λ₯Ό λΆμ¬νλ κ²μΌλ‘, μ΄λ¬ν μ΅μ
μ μ ννμμ λλ ν΄λΉ μ£Όμκ³Ό κ°μ λ°©ν₯μΌλ‘ 맀λνλ κ²κ³Ό ꡬ맀νλ κ²μ΄ κ°λ₯ν©λλ€. μλ₯Ό λ€μ΄μ, μ£Όκ°κ° νλ½ν κ²μ΄λΌλ κΈ°λκ° μλ€λ©΄, μ΄λ¬ν μμμΌλ‘ μΈνμ¬ μ£Όκ°κ° λ¨μ΄μ§ κ²μ΄κΈ° λλ¬Έμ μΌλ° 맀λ ν¬μ§μ
μΌλ‘ μ£Όκ°μ νλ½μ μ°Έκ°νλ κ²μ΄ λ«μ§λ§, μ£Όκ°κ° νλ½ν λ ν΄λΉ μ£Όμμ μΌμ λΆλΆ μμΉμ λ°©ν₯μΌλ‘, λλ μμΉμ νλ§νΌμ 보μ₯λ°κ³ μΆλ€λ©΄, μ΄λ¬ν μ΅μ
μ μ ννλ κ²μ
λλ€. μ¦, μ΅μ
μμ μ£Όκ°κ° μμΉμ ν λλ μ½μ΅μ
μΌλ‘ μ ννλ κ²μ΄κ³ , μ£Όκ°κ° νλ½νκ² λ λλ νμ΅μ
μ μ ννκ² λ©λλ€. μ΄λ¬ν μ νμ ν κ²½μ°, μΌλ°μ μΌλ‘ μ£Όκ°μ νλ½μ λν΄μ μμΉμ λ°©ν₯μΌλ‘ μμΉν` |
|
# |
|
# %% |
|
gen("λ§μ§μ½μ΄ λ°μνλ μ΄μ κ° λμΌ? κ·Έλ¦¬κ³ μ΄λ»κ² ν΄μΌ λ§μ§μ½μ λ§μ μ μμ΄?") |
|
# %% [markdown] |
|
# `### μ§λ¬Έ: λ§μ§μ½μ΄ λ°μνλ μ΄μ κ° λμΌ? κ·Έλ¦¬κ³ μ΄λ»κ² ν΄μΌ λ§μ§μ½μ λ§μ μ μμ΄?` |
|
# |
|
# `### λ΅λ³: λ§μ§μ½μ΄ λ°μνλ μ΄μ λ μνμ΄ κ³ κ°μκ² μ§κΈνκ³ μ νλ κΈμ‘μ΄ λ°μν κΈμ‘λ³΄λ€ λ§μ κ²½μ°, μΆκ°λ‘ λ΄μΌ νλ κΈμ‘μ κ³μ°ν΄μ κ³μ’μμ λ λ§μ κΈμ‘μ μΈμΆνκ² λλ κ²μ
λλ€. μ΄λ κ² λλ©΄, κ³μ’λ₯Ό κ΄λ¦¬νλ μν μ
μ₯μμλ κ³μ’μμ μΆκ°λ‘ κΊΌλ΄μΌ νκΈ° λλ¬Έμ, μνμ μ λ’°λκ° λ
μΌλ‘ λ¨μ΄μ§κ³ , κ³μ’λ₯Ό μ¬μ©νλ μν κ³ κ°λ μΆκ°λ‘ λ΄μΌ νλ κΈμ‘μ λν λΆμκ°μ λλ μ μμ΅λλ€. μ΄λ° λΆμκ°μ λν΄ μ 보μ¬μ£Όλ μ¬λ‘κ° μν λ§μ§μ½μ
λλ€. λ°λΌμ, μ΄λ° νμμ λ§κΈ° μν΄μλ κ³ κ°μκ² λ¨Όμ μ§κΈν κΈμ‘κ³Ό μΈμΆνλ κΈμ‘μ μ ννκ² νμ
νλ κ²μ΄ μ€μν©λλ€.` |
|
# |
|
# |
|
# %% [markdown] |
|
# ## λͺ¨λΈ μ μ₯ & μ
λ‘λ |
|
# %% |
|
!huggingface-cli login |
|
# %% |
|
# model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step') |
|
# μλ μμ΄λ λΆλΆμ μμ ν΄μ μ°μΈμ. |
|
model.push_to_hub('νκΉ
νμ΄μ€μμ΄λ/fft-koalpaca-gemma2-9b-50step') |
|
# %% [markdown] |
|
# - μ μμμ½λλ https: |
|
|