Qwen2.5-7B-Instruct-kowiki-qa / language_service.91e69a57f346.root.log.INFO.20240920-123554.5761
beomi's picture
Training in progress, step 10000
0348b39 verified
Log file created at: 2024/09/20 12:35:54
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
I0920 12:35:54.991279 1 log_spam.go:43] Process id 5761
I0920 12:35:54.991620 1 log_spam.go:47] Current working directory /datalab/web
I0920 12:35:54.991628 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
I0920 12:35:54.991648 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
at redacted@redacted:.
as //research/colab/datalab/language_service:language_service
with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
from changelist 0 in a unknown client based on redacted
Build tool: unknown
Build target: //research/colab/datalab/language_service:language_service
Build id: unknown
Built with PGO profile: unknown
I0920 12:35:54.991651 1 log_spam.go:51] Command line arguments:
I0920 12:35:54.991654 1 log_spam.go:53] argv[0]: '/usr/colab/bin/language_service'
I0920 12:35:54.991656 1 log_spam.go:53] argv[1]: '--lsp_search_dirs=/datalab/web/pyright/typeshed-fallback/stdlib,/usr/local/lib/python3.10/dist-packages'
I0920 12:35:54.991658 1 log_spam.go:53] argv[2]: '--language_services_request_root_url=http://172.28.0.1:8013/'
I0920 12:35:54.991659 1 log_spam.go:53] argv[3]: '--language_services_request_timeout=30s'
I0920 12:35:54.991661 1 log_spam.go:53] argv[4]: '--'
I0920 12:35:54.991662 1 log_spam.go:53] argv[5]: 'node'
I0920 12:35:54.991664 1 log_spam.go:53] argv[6]: '/datalab/web/pyright/pyright-langserver.js'
I0920 12:35:54.991665 1 log_spam.go:53] argv[7]: '--stdio'
I0920 12:35:54.991666 1 log_spam.go:53] argv[8]: '--cancellationReceive=file:52dfe5d9ae468fccb8d7109f8a852d69f06e70cb8c'
I0920 12:35:56.104294 53 ls.go:1241] cancel was requested for: 2, needs to be canceled: true
I0920 12:35:56.104451 53 ls.go:1241] cancel was requested for: 3, needs to be canceled: true
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://huggingface.co./beomi/qlora-koalpaca-polyglot-12.8b-50step 에 μ˜¬λΌκ°‘λ‹ˆλ‹€. μ‚¬μš©ν•˜μ‹œλŠ”
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://huggingface.co./beomi/qlora-koalpaca-polyglot-12.8b-50step 에 μ˜¬λΌκ°‘λ‹ˆλ‹€. μ‚¬μš©ν•˜μ‹œλŠ”
I0920 12:35:56.129096 53 ls.go:1241] cancel was requested for: 4, needs to be canceled: false
I0920 12:35:56.129669 53 ls.go:1241] cancel was requested for: 5, needs to be canceled: false
I0920 12:35:56.171714 53 ls.go:1241] cancel was requested for: 6, needs to be canceled: false
I0920 12:35:56.829150 53 ls.go:1241] cancel was requested for: 10, needs to be canceled: false
I0920 12:35:56.860681 53 ls.go:1241] cancel was requested for: 9, needs to be canceled: false
I0920 12:35:56.860803 53 ls.go:1241] cancel was requested for: 8, needs to be canceled: false
I0920 12:36:10.932854 53 ls.go:1241] cancel was requested for: 24, needs to be canceled: false
I0920 12:36:22.896590 53 ls.go:1241] cancel was requested for: 32, needs to be canceled: false
I0920 12:36:28.674862 53 ls.go:1241] cancel was requested for: 36, needs to be canceled: false
I0920 12:36:28.680623 53 ls.go:1241] cancel was requested for: 37, needs to be canceled: false
I0920 12:36:45.181614 53 ls.go:1241] cancel was requested for: 44, needs to be canceled: false
I0920 12:36:45.181756 53 ls.go:1241] cancel was requested for: 45, needs to be canceled: false
I0920 12:36:45.466209 53 ls.go:1241] cancel was requested for: 46, needs to be canceled: false
I0920 12:36:46.186512 53 ls.go:1241] cancel was requested for: 47, needs to be canceled: false
I0920 12:37:41.646032 53 ls.go:1241] cancel was requested for: 55, needs to be canceled: false
I0920 13:17:12.836079 53 ls.go:1241] cancel was requested for: 66, needs to be canceled: false