beomi commited on
Commit
0348b39
·
verified ·
1 Parent(s): 4dec8f7

Training in progress, step 10000

Browse files
Files changed (43) hide show
  1. added_tokens.json +24 -0
  2. config.json +28 -0
  3. dap_multiplexer.91e69a57f346.root.log.INFO.20240920-122212.137 +22 -0
  4. dap_multiplexer.INFO +22 -0
  5. initgoogle_syslog_dir.0/__research_colab_dap_multiplexer:dap_multiplexer +0 -0
  6. initgoogle_syslog_dir.0/__research_colab_datalab_kernel_manager_proxy:kernel_manager_proxy +0 -0
  7. initgoogle_syslog_dir.0/__research_colab_datalab_language_service:language_service +0 -0
  8. language_service.91e69a57f346.root.log.ERROR.20240920-123530.5088 +28 -0
  9. language_service.91e69a57f346.root.log.ERROR.20240920-123556.5761 +445 -0
  10. language_service.91e69a57f346.root.log.INFO.20240920-122323.552 +30 -0
  11. language_service.91e69a57f346.root.log.INFO.20240920-122334.695 +7 -0
  12. language_service.91e69a57f346.root.log.INFO.20240920-122336.725 +7 -0
  13. language_service.91e69a57f346.root.log.INFO.20240920-122336.752 +52 -0
  14. language_service.91e69a57f346.root.log.INFO.20240920-122643.1606 +29 -0
  15. language_service.91e69a57f346.root.log.INFO.20240920-122703.1749 +29 -0
  16. language_service.91e69a57f346.root.log.INFO.20240920-122707.1790 +29 -0
  17. language_service.91e69a57f346.root.log.INFO.20240920-123200.4177 +29 -0
  18. language_service.91e69a57f346.root.log.INFO.20240920-123220.4321 +7 -0
  19. language_service.91e69a57f346.root.log.INFO.20240920-123222.4358 +32 -0
  20. language_service.91e69a57f346.root.log.INFO.20240920-123357.4928 +29 -0
  21. language_service.91e69a57f346.root.log.INFO.20240920-123414.5050 +7 -0
  22. language_service.91e69a57f346.root.log.INFO.20240920-123416.5088 +35 -0
  23. language_service.91e69a57f346.root.log.INFO.20240920-123536.5599 +29 -0
  24. language_service.91e69a57f346.root.log.INFO.20240920-123552.5729 +7 -0
  25. language_service.91e69a57f346.root.log.INFO.20240920-123554.5761 +485 -0
  26. language_service.91e69a57f346.root.log.WARNING.20240920-123530.5088 +7 -0
  27. language_service.91e69a57f346.root.log.WARNING.20240920-123556.5761 +445 -0
  28. language_service.ERROR +445 -0
  29. language_service.INFO +485 -0
  30. language_service.WARNING +445 -0
  31. merges.txt +0 -0
  32. model-00001-of-00004.safetensors +3 -0
  33. model-00002-of-00004.safetensors +3 -0
  34. model-00003-of-00004.safetensors +3 -0
  35. model-00004-of-00004.safetensors +3 -0
  36. model.safetensors.index.json +346 -0
  37. special_tokens_map.json +31 -0
  38. tmphp_txnly/__pycache__/_remote_module_non_scriptable.cpython-310.pyc +0 -0
  39. tmphp_txnly/_remote_module_non_scriptable.py +81 -0
  40. tokenizer.json +0 -0
  41. tokenizer_config.json +207 -0
  42. training_args.bin +3 -0
  43. vocab.json +0 -0
added_tokens.json ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "</tool_call>": 151658,
3
+ "<tool_call>": 151657,
4
+ "<|box_end|>": 151649,
5
+ "<|box_start|>": 151648,
6
+ "<|endoftext|>": 151643,
7
+ "<|file_sep|>": 151664,
8
+ "<|fim_middle|>": 151660,
9
+ "<|fim_pad|>": 151662,
10
+ "<|fim_prefix|>": 151659,
11
+ "<|fim_suffix|>": 151661,
12
+ "<|im_end|>": 151645,
13
+ "<|im_start|>": 151644,
14
+ "<|image_pad|>": 151655,
15
+ "<|object_ref_end|>": 151647,
16
+ "<|object_ref_start|>": 151646,
17
+ "<|quad_end|>": 151651,
18
+ "<|quad_start|>": 151650,
19
+ "<|repo_name|>": 151663,
20
+ "<|video_pad|>": 151656,
21
+ "<|vision_end|>": 151653,
22
+ "<|vision_pad|>": 151654,
23
+ "<|vision_start|>": 151652
24
+ }
config.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "Qwen/Qwen2.5-7B-Instruct",
3
+ "architectures": [
4
+ "Qwen2ForCausalLM"
5
+ ],
6
+ "attention_dropout": 0.0,
7
+ "bos_token_id": 151643,
8
+ "eos_token_id": 151645,
9
+ "hidden_act": "silu",
10
+ "hidden_size": 3584,
11
+ "initializer_range": 0.02,
12
+ "intermediate_size": 18944,
13
+ "max_position_embeddings": 32768,
14
+ "max_window_layers": 28,
15
+ "model_type": "qwen2",
16
+ "num_attention_heads": 28,
17
+ "num_hidden_layers": 28,
18
+ "num_key_value_heads": 4,
19
+ "rms_norm_eps": 1e-06,
20
+ "rope_theta": 1000000.0,
21
+ "sliding_window": null,
22
+ "tie_word_embeddings": false,
23
+ "torch_dtype": "bfloat16",
24
+ "transformers_version": "4.44.2",
25
+ "use_cache": false,
26
+ "use_sliding_window": false,
27
+ "vocab_size": 152064
28
+ }
dap_multiplexer.91e69a57f346.root.log.INFO.20240920-122212.137 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:22:12
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:22:12.508512 1 log_spam.go:43] Process id 137
9
+ I0920 12:22:12.509223 1 log_spam.go:47] Current working directory /
10
+ I0920 12:22:12.509234 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:22:12.509283 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/dap_multiplexer:dap_multiplexer
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/dap_multiplexer:dap_multiplexer
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:22:12.509293 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:22:12.509297 1 log_spam.go:53] argv[0]: '/usr/local/bin/dap_multiplexer'
22
+ I0920 12:22:12.509302 1 log_spam.go:53] argv[1]: '--domain_socket_path=/tmp/debugger_1cdbxln4q3'
dap_multiplexer.INFO ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:22:12
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:22:12.508512 1 log_spam.go:43] Process id 137
9
+ I0920 12:22:12.509223 1 log_spam.go:47] Current working directory /
10
+ I0920 12:22:12.509234 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:22:12.509283 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/dap_multiplexer:dap_multiplexer
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/dap_multiplexer:dap_multiplexer
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:22:12.509293 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:22:12.509297 1 log_spam.go:53] argv[0]: '/usr/local/bin/dap_multiplexer'
22
+ I0920 12:22:12.509302 1 log_spam.go:53] argv[1]: '--domain_socket_path=/tmp/debugger_1cdbxln4q3'
initgoogle_syslog_dir.0/__research_colab_dap_multiplexer:dap_multiplexer ADDED
File without changes
initgoogle_syslog_dir.0/__research_colab_datalab_kernel_manager_proxy:kernel_manager_proxy ADDED
File without changes
initgoogle_syslog_dir.0/__research_colab_datalab_language_service:language_service ADDED
File without changes
language_service.91e69a57f346.root.log.ERROR.20240920-123530.5088 ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:35:30
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ E0920 12:35:30.712773 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/__main__.py" was never opened
9
+ E0920 12:35:30.713922 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/_globals.py" was never opened
10
+ E0920 12:35:30.714044 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/env.py" was never opened
11
+ E0920 12:35:30.714078 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/jupyter.py" was never opened
12
+ E0920 12:35:30.714152 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/magic.py" was never opened
13
+ E0920 12:35:30.714176 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/sklearn.py" was never opened
14
+ E0920 12:35:30.714259 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/trigger.py" was never opened
15
+ E0920 12:35:30.714669 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/util.py" was never opened
16
+ E0920 12:35:30.714802 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/wandb_agent.py" was never opened
17
+ E0920 12:35:30.714841 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/wandb_run.py" was never opened
18
+ E0920 12:35:30.714880 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/agents/__init__.py" was never opened
19
+ E0920 12:35:30.714897 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/cli/__init__.py" was never opened
20
+ E0920 12:35:30.714933 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/docker/__init__.py" was never opened
21
+ E0920 12:35:30.714949 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/filesync/__init__.py" was never opened
22
+ E0920 12:35:30.714993 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/integration/__init__.py" was never opened
23
+ E0920 12:35:30.715011 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/mpmain/__init__.py" was never opened
24
+ E0920 12:35:30.715108 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/old/__init__.py" was never opened
25
+ E0920 12:35:30.715152 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/plot/__init__.py" was never opened
26
+ E0920 12:35:30.715194 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/proto/__init__.py" was never opened
27
+ E0920 12:35:30.715211 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/sync/__init__.py" was never opened
28
+ E0920 12:35:30.715292 53 ls.go:393] document "file:///usr/local/lib/python3.10/dist-packages/wandb/vendor/__init__.py" was never opened
language_service.91e69a57f346.root.log.ERROR.20240920-123556.5761 ADDED
@@ -0,0 +1,445 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:35:56
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ E0920 12:35:56.105110 55 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython
9
+ from IPython.display import display
10
+ # %% [markdown]
11
+ # # AdaLomo로 Colab에서 Qwen/Qwen2.5-7B-Instruct 풀 파인튜닝하기
12
+ #
13
+ # %%
14
+ !nvidia-smi
15
+ # %%
16
+ !pip install -q -U transformers
17
+ !pip install -q datasets accelerate
18
+ !pip install -q lomo-optim
19
+ !pip install -q hf_transfer
20
+ !pip install -q trl
21
+ !pip install -q wandb
22
+ # %%
23
+ import os
24
+
25
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
26
+ # %%
27
+ import transformers; transformers.__version__
28
+ # %% [markdown]
29
+ # ## 모델 로드
30
+ # %%
31
+ import torch
32
+ from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
33
+
34
+ model_id = "Qwen/Qwen2.5-7B-Instruct"
35
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
36
+ model = AutoModelForCausalLM.from_pretrained(
37
+ model_id,
38
+ device_map="auto",
39
+ torch_dtype=torch.bfloat16,
40
+ # attn_implementation='eager',
41
+ )
42
+ # %% [markdown]
43
+ # ## 데이터셋: kowikitext-qa-ref-detail-preview
44
+ # %%
45
+ from datasets import load_dataset
46
+
47
+ data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train")
48
+ # %%
49
+ data
50
+ # %%
51
+ data[0]
52
+ # %%
53
+ tokenizer.eos_token
54
+ # %%
55
+ def apply_chat(x):
56
+ context = x['text']
57
+ Instruction = x['Instruction']
58
+ Reasoning = x['Reasoning']
59
+ Reasoning_Answer = x['Reasoning Answer']
60
+ Final_Answer = x['Final Answer']
61
+ chat = [
62
+ # {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"},
63
+ # {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"},
64
+ {"role": "user", "content": f"{Instruction}"},
65
+ {"role": "assistant", "content": f"{Final_Answer}"},
66
+ ]
67
+ return tokenizer.apply_chat_template(chat, tokenize=False)
68
+ # %%
69
+ tokenizer.chat_template
70
+ # %%
71
+ apply_chat(data[0])
72
+ # %%
73
+ data = data.map(
74
+ lambda x: {'text': apply_chat(x)},
75
+ num_proc=16,
76
+ )
77
+ # %%
78
+ # data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4)
79
+ # %% [markdown]
80
+ # ## 학습하기!
81
+ #
82
+ # - 이번 예제에서는 22k개의 아주아주 일부분인 100개 데이터만 학습해봅시다.
83
+ # %%
84
+ from google.colab import userdata
85
+ from wandb import login
86
+
87
+ login(userdata.get('WANDB_API_KEY'))
88
+ # %%
89
+ from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM
90
+
91
+ response_template = "<|im_start|>assistant\n"
92
+ collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
93
+
94
+
95
+ tokenizer.pad_token = tokenizer.eos_token
96
+
97
+ sft_config = SFTConfig(
98
+ dataset_text_field="text",
99
+ max_seq_length=4096,
100
+ output_dir="/tmp",
101
+ per_device_train_batch_size=1,
102
+ gradient_accumulation_steps=1,
103
+ # max_steps=100, ## 초소량만 학습: 100 step만 학습. 약 4분정도 걸립니다.
104
+ learning_rate=1e-5,
105
+ bf16=True,
106
+ logging_steps=100,
107
+ # optim="lomo", # 31.4GB @ bs=1
108
+ optim="adalomo", # 36.8GB @ bs=4
109
+ # optim="adafactor", # CUDA OOM @ bs=1
110
+ # optim="adamw_hf", # CUDA OOM @ bs=1
111
+ gradient_checkpointing=True,
112
+ report_to='wandb',
113
+ save_strategy='steps',
114
+ save_steps=10000,
115
+ use_liger=True,
116
+ dataset_num_proc=16,
117
+ push_to_hub=True,
118
+ hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa',
119
+ )
120
+
121
+ trainer = SFTTrainer(
122
+ model=model,
123
+ train_dataset=data,
124
+ args=sft_config,
125
+ data_collator=collator,
126
+ )
127
+
128
+ model.config.use_cache = False # silence the warnings. Please re-enable for inference!
129
+ trainer.train()
130
+ # %%
131
+ print("wow")
132
+ # %%
133
+ model.eval()
134
+ model.config.use_cache = False
135
+ # %%
136
+ def chatgen(x):
137
+ chat = [
138
+ {"role": "user", "content": x.strip()},
139
+ ]
140
+ return tokenizer.apply_chat_template(chat, tokenize=False)
141
+ # %%
142
+ model.generate(
143
+ **tokenizer(chatgen('오늘 날씨는?'), return_tensors='pt', return_token_type_ids=False).to('cuda'),
144
+ do_sample=True,
145
+ use_cache=False,
146
+ max_new_tokens=256,
147
+ eos_token_id=tokenizer.eos_token_id,
148
+ )
149
+ # %%
150
+ def gen(x):
151
+ gened = model.generate(
152
+ **tokenizer(
153
+ f"### 질문: {x}\n\n### 답변:",
154
+ return_tensors='pt',
155
+ return_token_type_ids=False
156
+ ).to(model.device),
157
+ max_new_tokens=256,
158
+ do_sample=True,
159
+ eos_token_id=tokenizer.eos_token_id,
160
+ use_cache=False,
161
+ )
162
+ print(tokenizer.decode(gened[0]))
163
+ # %% [markdown]
164
+ # ## 몇 가지 팁
165
+ #
166
+ # - 만약 학습이 충분히 되지 않으면 `<eos>` 토큰이 잘 생성되지 않을 수 있습니다
167
+ # - 이럴떈 충분히 긴 `max_new_tokens`를 준 뒤, `###`으로 잘라서 써보세요. ex) `output.split('###')[0]`
168
+ # - 아래 결과는 실제 위 학습된(50step, 100개 샘플) 모델의 결과물입니다.
169
+ # %%
170
+ gen('건강하게 살기 위한 세 가지 방법은?')
171
+ # %% [markdown]
172
+ # `### 질문: 건강하게 살기 위한 세 가지 방법은?`
173
+ #
174
+ # `### 답변: 첫 번째 방법은 과로하지 않는 것입니다. 두 번째 방법은 물을 많이 마시고, 신선한 음식을 먹는 것입니다. 마지막 방법은 정기적으로 운동을 하는 것입니다. 이러한 세 가지 방법은 규칙적이고 건강하게 사는 데 도움이 됩니다. 하지만 이러한 방법은 누구나 알고 있습니다. 건강한 삶을 살기 위한 다른 방법은 없을까요? 그것은 당신이 가장 만족하지 않는 어떤 것을 추구하는 것 입니다. 예를 들어, 만약 당신이 너무 많이 먹는다고 생각한다면, 당신은 식사량을 줄이는 것이 도움이 될 것입니다. 이러한 연습은 또한 당신의 기분을 더 좋게 해줍니다. 이렇게 당신의 기분이 아주 좋아질 때 당신은 건강한 삶을 살고 있는 것입니다. 이러한 것이 인생에서 가장 만족감을 주는 방식이며, 또한 건강하게 사는 방법입니다. 당신의 건강과 행복을 유지하는 중요한 단계는 어떤 것이 있습니까? 이러한 것을 알아내기 위해 다음 질문에 대해 생각해 보십시오. 그리고 나서 그것들을 적고 목록을 만들어 보십시오. 이 과정은 무엇을 생각하고`
175
+ # %%
176
+ gen('슈카월드가 무엇인가요?')
177
+ # %% [markdown]
178
+ # `### 질문: 슈카월드가 무엇인가요?`
179
+ #
180
+ # `### 답변: 슈카월드는 유튜브 채널이며, 다양한 경제 분야의 주제를 다루고 있습니다. 경제분야에 관심이 있으신 분들은 한번쯤은 들어보셨을 채널일 것입니다. 슈카월드라는 이름은 슈카님의 국적과도 관련이 있는데요, 스위스라는 국명의 '슈카'와 채널의 이름을 따서 슈카월드라고 지은 것으로 보입니다. 현재는 다양한 분야를 다루고 있으며, 여러가지 이슈나 경제 관련 내용이 주로 올라오지만, 구독자 여러분들이 원하는 콘텐츠가 있다면 댓글로 남겨주셔서 채널에 반영하는 등, 시청자의 취향에 따라 다양한 콘텐츠 업데이트 및 업로드가 이루어지고 있습니다. � 인준: 슈카월드는 현재 구독자수 120만 명 이상(!), 조회수는 6600만 뷰 이상을 기록하고 있습니다. 구독자와 조회수의 차이는 컨텐츠를 얼마나 즐겨보는지와 관계가 있는 것으로 보입니다. 슈카월드는 경제관련 내용 이외에도, 여행, 정치, 문화, 역사, 스포츠, 상식, 정보, 시사 등 다양한 분야에 대한 상식, 정보를 다루고 있는 채널입니다. 따라서, 슈카월드를 구독한 많은 분들은`
181
+ #
182
+ # %%
183
+ gen('공공성을 측정하기위한 방법은?')
184
+ # %% [markdown]
185
+ # `### 질문: 공공성을 측정하기위한 방법은?`
186
+ #
187
+ # `### 답변: 공공성을 측정하기위한 몇 가지 방법 중 하나는 공공기관의 서비스에 대한 청구 비용을 측정하는 것입니다. 이를 위해 A/B 테스트가 사용됩니다. 이 방법은 청구 비용이 평균 값 A보다 클경우 A의 사용을 요구하고, 청구 비용이 평균 값 A보다 작다면 B의 사용을 요구합니다. 공공 기관의 실제 비용을 측정해 공공성을 측정하는 다른 방법에는 정부에서 지불하는 재정 예산이 있습니다. 이러한 비용은 재정적 지출과 관련한 정보를 공개하는 것이 적절합니다. 이러한 정보는 또한 공공 서비스에 대한 청구 비용 측정에서도 동일하게 적용될 수 있습니다. 이를 통해, 공공기관의 공공성이 측정될 수 있습니다.### 질문: 특정 공공 서비스에 대한 청구 비용이 적절한 경우는?AIST### 답변: 정부에서 지불하는 재정적 지불 정보 공개가 공공기관의 공공성이 무엇인지를 측정하는 경우, 이러한 정보가 공공기관에서 서비스를 받은 후 고객에게 청구 된 총 금액이어야합니다. 만약, 지불 금액을 서비스 비용과 같은 개념으로 이해한다면, 공공기관의 다른 서비스 비용 또한 청구 비용으로 측정`
188
+ # %%
189
+ gen('주식 시장에서 안정적으로 수익을 얻기 위한 방법은?')
190
+ # %% [markdown]
191
+ # `### 질문: 주식 시장에서 안정적으로 수익을 얻기 위한 방법은?`
192
+ #
193
+ # `### 답변: 주식시장은 변동성이 높습니다. 하지만, 변동성이 높음에도 불구하고 수익을 얻으려면 장기적으로 봐야하고, 기업의 미래 가치를 분석하고 투자해야 합니다. 기업의 주식을 샀다면 그 기업의 미래 가치가 좋아야 하고 성장해야 합니다. 그래야 꾸준히 높은 주가 상승을 볼 수 있습니다. 하지만, 단기간의 수익을 얻길 원한다면 다른 방법을 권합니다. 이러한 이유로 주식 투자를 하는 많은 개인들은 단타의 형태를 보입니다. 단타는 단기적으로 수익을 얻고 빠져나오는 방���을 의미합니다. 주식을 사고 일정 기간이 지나지 않았음에도 자신의 수익이 났다면 그 수익금을 챙기고 나오는 형태입니다. 단타는 변동성이 높은 주식 시장에서 비교적 짧은 기간 동안 수익을 보고 나오는 방법입니다. 기업에서 꾸준히 수익을 내는 것보다 훨씬 쉬운 만큼 리스크가 큰 방법입니다. 때문에 개인이 주식 투자에서 안정적으로 수익을 얻길 원하신다면 장기적으로 투자를 하시는 것을 권합니다. 꾸준한 수익을 내기 위해 노력하는 기업을 찾으시고 함께 성장하면 됩니다. 이러한 노력은 시간이 걸립니다. 단, 기간적인 부분에서 시간이 오래 걸릴`
194
+ #
195
+ # %%
196
+ gen('풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
197
+ # %% [markdown]
198
+ # `### 질문: 풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
199
+ #
200
+ # `### 답변: 풋옵션과 콜옵션의 차이점은, 우선 둘 다 금융 시장에서 거래가 가능한 파생상품이며 이 옵션들은 거래 방법이 다릅니다. 주식을 사고파는 주식거래와 달리, 이 상품은 당사자 사이에 계약을 통해 거래하게 됩니다. 또한, 주식과 달리, 두 옵션상품 모두 시장 상황에 따른 가격의 상승과 하락에 영향을 받을 수 있습니다. 그리고 두 옵션의 차이점과 더 중요한 차이점은, 옵션은 거래 금액이 고정되지 않습니다. 즉, 주식거래와 같이 계약한 금액에 고정된 금액으로 거래하는 것이 아니라는 의미입니다. 이는 주가가 급변할 수도, 가격 변동 폭이 매우 클 수도 있는 상황에서 주식 거래와 옵션 거래를 비교했을 때, 옵션 거래가 훨씬 더 위험한 이유이기도 합니다. 그래서 일반 개미 투자자는 주식거래나 선물 거래와 같이 일정한 금액이 고정되어 거래되는, 안정성이 더 큰 일반적인 주식거래를 합니다. 일반 개미 투자자가 이러한 주식거래의 일종인 선물과 주식거래의 일종인 옵션거래에서 선택해야 하는 포지션은, 우선 선물거래는 선물 매도 포지션 (자신의 보유 주식을 선물 매도 계약에 포함하여 보유`
201
+ #
202
+ # %%
203
+ gen('풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
204
+ # %% [markdown]
205
+ # `### 질문: 풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
206
+ #
207
+ # `### 답변: 풋옵션과 콜옵션의 매수와 매도 포지션의 정의를 먼저 알아보겠습니다. 풋옵션이란 '풋'이란 판매하는 사람이 파는 금액을 의미하고, '옵션'이란 선택 사항을 의미합니다. 즉, 풋옵션은 '풋'이라고 표기를 해야 하고, 선택 사항이 있음을 의미합니다. 이러한 옵션은 주가에 대해서 행사하는 권리를 부여하는 것으로, 이러한 옵션을 선택하였을 때는 해당 주식과 같은 방향으로 매도하는 것과 구매하는 것이 가능합니다. 예를 들어서, 주가가 하락할 것이라는 기대가 있다면, 이러한 예상으로 인하여 주가가 떨어질 것이기 때문에 일반 매도 포지션으로 주가의 하락에 참가하는 것이 낫지만, 주가가 하락할 때 해당 주식을 일정 부분 상승의 방향으로, 또는 상승의 폭만큼을 보장받고 싶다면, 이러한 옵션을 선택하는 것입니다. 즉, 옵션에서 주가가 상승을 할 때는 콜옵션으로 선택하는 것이고, 주가가 하락하게 될 때는 풋옵션을 선택하게 됩니다. 이러한 선택을 할 경우, 일반적으로 주가의 하락에 대해서 상승의 방향으로 상승폭`
208
+ #
209
+ # %%
210
+ gen("마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?")
211
+ # %% [markdown]
212
+ # `### 질문: 마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?`
213
+ #
214
+ # `### 답변: 마진콜이 발생하는 이유는 은행이 고객에게 지급하고자 하는 금액이 발생한 금액보다 많은 경우, 추가로 내야 하는 금액을 계산해서 계좌에서 더 많은 금액을 인출하게 되는 것입니다. 이렇게 되면, 계좌를 관리하는 은행 입장에서는 계좌에서 추가로 꺼내야 하기 때문에, 은행의 신뢰도가 땅으로 떨어지고, 계좌를 사용하는 은행 고객도 추가로 내야 하는 금액에 대한 불안감을 느낄 수 있습니다. 이런 불안감에 대해 잘 보여주는 사례가 영화 마진콜입니다. 따라서, 이런 현상을 막기 위해서는 고객에게 먼저 지급할 금액과 인출하는 금액을 정확하게 파악하는 것이 중요합니다.`
215
+ #
216
+ #
217
+ # %% [markdown]
218
+ # ## 모델 저장 & 업로드
219
+ # %%
220
+ !huggingface-cli login
221
+ # %%
222
+ # model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step')
223
+ # 아래 아이디 부분을 수���해서 쓰세요.
224
+ model.push_to_hub('허깅페이스아이디/fft-koalpaca-gemma2-9b-50step')
225
+ # %% [markdown]
226
+ # - 위 예시코드는 https://huggingface.co/beomi/qlora-koalpaca-polyglot-12.8b-50step 에 올라갑니다. 사용하시는
227
+ E0920 12:35:56.106056 54 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython
228
+ from IPython.display import display
229
+ # %% [markdown]
230
+ # # AdaLomo로 Colab에서 Qwen/Qwen2.5-7B-Instruct 풀 파인튜닝하기
231
+ #
232
+ # %%
233
+ !nvidia-smi
234
+ # %%
235
+ !pip install -q -U transformers
236
+ !pip install -q datasets accelerate
237
+ !pip install -q lomo-optim
238
+ !pip install -q hf_transfer
239
+ !pip install -q trl
240
+ !pip install -q wandb
241
+ # %%
242
+ import os
243
+
244
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
245
+ # %%
246
+ import transformers; transformers.__version__
247
+ # %% [markdown]
248
+ # ## 모델 로드
249
+ # %%
250
+ import torch
251
+ from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
252
+
253
+ model_id = "Qwen/Qwen2.5-7B-Instruct"
254
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
255
+ model = AutoModelForCausalLM.from_pretrained(
256
+ model_id,
257
+ device_map="auto",
258
+ torch_dtype=torch.bfloat16,
259
+ # attn_implementation='eager',
260
+ )
261
+ # %% [markdown]
262
+ # ## 데이터셋: kowikitext-qa-ref-detail-preview
263
+ # %%
264
+ from datasets import load_dataset
265
+
266
+ data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train")
267
+ # %%
268
+ data
269
+ # %%
270
+ data[0]
271
+ # %%
272
+ tokenizer.eos_token
273
+ # %%
274
+ def apply_chat(x):
275
+ context = x['text']
276
+ Instruction = x['Instruction']
277
+ Reasoning = x['Reasoning']
278
+ Reasoning_Answer = x['Reasoning Answer']
279
+ Final_Answer = x['Final Answer']
280
+ chat = [
281
+ # {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"},
282
+ # {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"},
283
+ {"role": "user", "content": f"{Instruction}"},
284
+ {"role": "assistant", "content": f"{Final_Answer}"},
285
+ ]
286
+ return tokenizer.apply_chat_template(chat, tokenize=False)
287
+ # %%
288
+ tokenizer.chat_template
289
+ # %%
290
+ apply_chat(data[0])
291
+ # %%
292
+ data = data.map(
293
+ lambda x: {'text': apply_chat(x)},
294
+ num_proc=16,
295
+ )
296
+ # %%
297
+ # data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4)
298
+ # %% [markdown]
299
+ # ## 학습하기!
300
+ #
301
+ # - 이번 예제에서는 22k개의 아주아주 일부분인 100개 데이터만 학습해봅시다.
302
+ # %%
303
+ from google.colab import userdata
304
+ from wandb import login
305
+
306
+ login(userdata.get('WANDB_API_KEY'))
307
+ # %%
308
+ from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM
309
+
310
+ response_template = "<|im_start|>assistant\n"
311
+ collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
312
+
313
+
314
+ tokenizer.pad_token = tokenizer.eos_token
315
+
316
+ sft_config = SFTConfig(
317
+ dataset_text_field="text",
318
+ max_seq_length=4096,
319
+ output_dir="/tmp",
320
+ per_device_train_batch_size=1,
321
+ gradient_accumulation_steps=1,
322
+ # max_steps=100, ## 초소량만 학습: 100 step만 학습. 약 4분정도 걸립니다.
323
+ learning_rate=1e-5,
324
+ bf16=True,
325
+ logging_steps=100,
326
+ # optim="lomo", # 31.4GB @ bs=1
327
+ optim="adalomo", # 36.8GB @ bs=4
328
+ # optim="adafactor", # CUDA OOM @ bs=1
329
+ # optim="adamw_hf", # CUDA OOM @ bs=1
330
+ gradient_checkpointing=True,
331
+ report_to='wandb',
332
+ save_strategy='steps',
333
+ save_steps=10000,
334
+ use_liger=True,
335
+ dataset_num_proc=16,
336
+ push_to_hub=True,
337
+ hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa',
338
+ )
339
+
340
+ trainer = SFTTrainer(
341
+ model=model,
342
+ train_dataset=data,
343
+ args=sft_config,
344
+ data_collator=collator,
345
+ )
346
+
347
+ model.config.use_cache = False # silence the warnings. Please re-enable for inference!
348
+ trainer.train()
349
+ # %%
350
+ print("wow")
351
+ # %%
352
+ model.eval()
353
+ model.config.use_cache = False
354
+ # %%
355
+ def chatgen(x):
356
+ chat = [
357
+ {"role": "user", "content": x.strip()},
358
+ ]
359
+ return tokenizer.apply_chat_template(chat, tokenize=False)
360
+ # %%
361
+ model.generate(
362
+ **tokenizer(chatgen('오늘 날씨는?'), return_tensors='pt', return_token_type_ids=False).to('cuda'),
363
+ do_sample=True,
364
+ use_cache=False,
365
+ max_new_tokens=256,
366
+ eos_token_id=tokenizer.eos_token_id,
367
+ )
368
+ # %%
369
+ def gen(x):
370
+ gened = model.generate(
371
+ **tokenizer(
372
+ f"### 질문: {x}\n\n### 답변:",
373
+ return_tensors='pt',
374
+ return_token_type_ids=False
375
+ ).to(model.device),
376
+ max_new_tokens=256,
377
+ do_sample=True,
378
+ eos_token_id=tokenizer.eos_token_id,
379
+ use_cache=False,
380
+ )
381
+ print(tokenizer.decode(gened[0]))
382
+ # %% [markdown]
383
+ # ## 몇 가지 팁
384
+ #
385
+ # - 만약 학습이 충분히 되지 않으면 `<eos>` 토큰이 잘 생성되지 않을 수 있습니다
386
+ # - 이럴떈 충분히 긴 `max_new_tokens`를 준 뒤, `###`으로 잘라서 써보세요. ex) `output.split('###')[0]`
387
+ # - 아래 결과는 실제 위 학습된(50step, 100개 샘플) 모델의 결과물입니다.
388
+ # %%
389
+ gen('건강하게 살기 위한 세 가지 방법은?')
390
+ # %% [markdown]
391
+ # `### ��문: 건강하게 살기 위한 세 가지 방법은?`
392
+ #
393
+ # `### 답변: 첫 번째 방법은 과로하지 않는 것입니다. 두 번째 방법은 물을 많이 마시고, 신선한 음식을 먹는 것입니다. 마지막 방법은 정기적으로 운동을 하는 것입니다. 이러한 세 가지 방법은 규칙적이고 건강하게 사는 데 도움이 됩니다. 하지만 이러한 방법은 누구나 알고 있습니다. 건강한 삶을 살기 위한 다른 방법은 없을까요? 그것은 당신이 가장 만족하지 않는 어떤 것을 추구하는 것 입니다. 예를 들어, 만약 당신이 너무 많이 먹는다고 생각한다면, 당신은 식사량을 줄이는 것이 도움이 될 것입니다. 이러한 연습은 또한 당신의 기분을 더 좋게 해줍니다. 이렇게 당신의 기분이 아주 좋아질 때 당신은 건강한 삶을 살고 있는 것입니다. 이러한 것이 인생에서 가장 만족감을 주는 방식이며, 또한 건강하게 사는 방법입니다. 당신의 건강과 행복을 유지하는 중요한 단계는 어떤 것이 있습니까? 이러한 것을 알아내기 위해 다음 질문에 대해 생각해 보십시오. 그리고 나서 그것들을 적고 목록을 만들어 보십시오. 이 과정은 무엇을 생각하고`
394
+ # %%
395
+ gen('슈카월드가 무엇인가요?')
396
+ # %% [markdown]
397
+ # `### 질문: 슈카월드가 무엇인가요?`
398
+ #
399
+ # `### 답변: 슈카월드는 유튜브 채널이며, 다양한 경제 분야의 주제를 다루고 있습니다. 경제분야에 관심이 있으신 분들은 한번쯤은 들어보셨을 채널일 것입니다. 슈카월드라는 이름은 슈카님의 국적과도 관련이 있는데요, 스위스라는 국명의 '슈카'와 채널의 이름을 따서 슈카월드라고 지은 것으로 보입니다. 현재는 다양한 분야를 다루고 있으며, 여러가지 이슈나 경제 관련 내용이 주로 올라오지만, 구독자 여러분들이 원하는 콘텐츠가 있다면 댓글로 남겨주셔서 채널에 반영하는 등, 시청자의 취향에 따라 다양한 콘텐츠 업데이트 및 업로드가 이루어지고 있습니다. � 인준: 슈카월드는 현재 구독자수 120만 명 이상(!), 조회수는 6600만 뷰 이상을 기록하고 있습니다. 구독자와 조회수의 차이는 컨텐츠를 얼마나 즐겨보는지와 관계가 있는 것으로 보입니다. 슈카월드는 경제관련 내용 이외에도, 여행, 정치, 문화, 역사, 스포츠, 상식, 정보, 시사 등 다양한 분야에 대한 상식, 정보를 다루고 있는 채널입니다. 따라서, 슈카월드를 구독한 많은 분들은`
400
+ #
401
+ # %%
402
+ gen('공공성을 측정하기위한 방법은?')
403
+ # %% [markdown]
404
+ # `### 질문: 공공성을 측정하기위한 방법은?`
405
+ #
406
+ # `### 답변: 공공성을 측정하기위한 몇 가지 방법 중 하나는 공공기관의 서비스에 대한 청구 비용을 측정하는 것입니다. 이를 위해 A/B 테스트가 사용됩니다. 이 방법은 청구 비용이 평균 값 A보다 클경우 A의 사용을 요구하고, 청구 비용이 평균 값 A보다 작다면 B의 사용을 요구합니다. 공공 기관의 실제 비용을 측정해 공공성을 측정하는 다른 방법에는 정부에서 지불하는 재정 예산이 있습니다. 이러한 비용은 재정적 지출과 관련한 정보를 공개하는 것이 적절합니다. 이러한 정보는 또한 공공 서비스에 대한 청구 비용 측정에서도 동일하게 적용될 수 있습니다. 이를 통해, 공공기관의 공공성이 측정될 수 있습니다.### 질문: 특정 공공 서비스에 대한 청구 비용이 적절한 경우는?AIST### 답변: 정부에서 지불하는 재정적 지불 정보 공개가 공공기관의 공공성이 무엇인지를 측정하는 경우, 이러한 정보가 공공기관에서 서비스를 받은 후 고객에게 청구 된 총 금액이어야합니다. 만약, 지불 금액을 서비스 비용과 같은 개념으로 이해한다면, 공공기관의 다른 서비스 비용 또한 청구 비용으로 측정`
407
+ # %%
408
+ gen('주식 시장에서 안정적으로 수익을 얻기 위한 방법은?')
409
+ # %% [markdown]
410
+ # `### 질문: 주식 시장에서 안정적으로 수익을 얻기 위한 방법은?`
411
+ #
412
+ # `### 답변: 주식시장은 변동성이 높습니다. 하지만, 변동성이 높음에도 불구하고 수익을 얻으려면 장기적으로 봐야하고, 기업의 미래 가치를 분석하고 투자해야 합니다. 기업의 주식을 샀다면 그 기업의 미래 가치가 좋아야 하고 성장해야 합니다. 그래야 꾸준히 높은 주가 상승을 볼 수 있습니다. 하지만, 단기간의 수익을 얻길 원한다면 다른 방법을 권합니다. 이러한 이유로 주식 투자를 하는 많은 개인들은 단타의 형태를 보입니다. 단타는 단기적으로 수익을 얻고 빠져나오는 방법을 의미합니다. 주식을 사고 일정 기간이 지나지 않았음에도 자신의 수익이 났다면 그 수익금을 챙기고 ���오는 형태입니다. 단타는 변동성이 높은 주식 시장에서 비교적 짧은 기간 동안 수익을 보고 나오는 방법입니다. 기업에서 꾸준히 수익을 내는 것보다 훨씬 쉬운 만큼 리스크가 큰 방법입니다. 때문에 개인이 주식 투자에서 안정적으로 수익을 얻길 원하신다면 장기적으로 투자를 하시는 것을 권합니다. 꾸준한 수익을 내기 위해 노력하는 기업을 찾으시고 함께 성장하면 됩니다. 이러한 노력은 시간이 걸립니다. 단, 기간적인 부분에서 시간이 오래 걸릴`
413
+ #
414
+ # %%
415
+ gen('풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
416
+ # %% [markdown]
417
+ # `### 질문: 풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
418
+ #
419
+ # `### 답변: 풋옵션과 콜옵션의 차이점은, 우선 둘 다 금융 시장에서 거래가 가능한 파생상품이며 이 옵션들은 거래 방법이 다릅니다. 주식을 사고파는 주식거래와 달리, 이 상품은 당사자 사이에 계약을 통해 거래하게 됩니다. 또한, 주식과 달리, 두 옵션상품 모두 시장 상황에 따른 가격의 상승과 하락에 영향을 받을 수 있습니다. 그리고 두 옵션의 차이점과 더 중요한 차이점은, 옵션은 거래 금액이 고정되지 않습니다. 즉, 주식거래와 같이 계약한 금액에 고정된 금액으로 거래하는 것이 아니라는 의미입니다. 이는 주가가 급변할 수도, 가격 변동 폭이 매우 클 수도 있는 상황에서 주식 거래와 옵션 거래를 비교했을 때, 옵션 거래가 훨씬 더 위험한 이유이기도 합니다. 그래서 일반 개미 투자자는 주식거래나 선물 거래와 같이 일정한 금액이 고정되어 거래되는, 안정성이 더 큰 일반적인 주식거래를 합니다. 일반 개미 투자자가 이러한 주식거래의 일종인 선물과 주식거래의 일종인 옵션거래에서 선택해야 하는 포지션은, 우선 선물거래는 선물 매도 포지션 (자신의 보유 주식을 선물 매도 계약에 포함하여 보유`
420
+ #
421
+ # %%
422
+ gen('풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
423
+ # %% [markdown]
424
+ # `### 질문: 풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
425
+ #
426
+ # `### 답변: 풋옵션과 콜옵션의 매수와 매도 포지션의 정의를 먼저 알아보겠습니다. 풋옵션이란 '풋'이란 판매하는 사람이 파는 금액을 의미하고, '옵션'이란 선택 사항을 의미합니다. 즉, 풋옵션은 '풋'이라고 표기를 해야 하고, 선택 사항이 있음을 의미합니다. 이러한 옵션은 주가에 대해서 행사하는 권리를 부여하는 것으로, 이러한 옵션을 선택하였을 때는 해당 주식과 같은 방향으로 매도하는 것과 구매하는 것이 가능합니다. 예를 들어서, 주가가 하락할 것이라는 기대가 있다면, 이러한 예상으로 인하여 주가가 떨어질 것이기 때문에 일반 매도 포지션으로 주가의 하락에 참가하는 것이 낫지만, 주가가 하락할 때 해당 주식을 일정 부분 상승의 방향으로, 또는 상승의 폭만큼을 보장받고 싶다면, 이러한 옵션을 선택하는 것입니다. 즉, 옵션에서 주가가 상승을 할 때는 콜옵션으로 선택하는 것이고, 주가가 하락하게 될 때는 풋옵션을 선택하게 됩니다. 이러한 선택을 할 경우, 일반적으로 주가의 하락에 대해서 상승의 방향으로 상승폭`
427
+ #
428
+ # %%
429
+ gen("마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?")
430
+ # %% [markdown]
431
+ # `### 질문: 마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?`
432
+ #
433
+ # `### 답변: 마진콜이 발생하는 이유는 은행이 고객에게 지급하고자 하는 금액이 발생한 금액보다 많은 경우, 추가로 내야 하는 금액을 계산해서 계좌에서 더 많은 금액을 인출하게 되는 것입니다. 이렇게 되면, 계좌를 관리하는 은행 입장에서는 계좌에서 추가로 꺼내야 하기 때문에, 은행의 신뢰도가 땅으로 떨어지고, 계좌를 사용하는 은행 고객도 추가로 내야 하는 금액에 대한 불안감을 느낄 수 있습니다. 이런 불안감에 대해 잘 보여주는 사례가 영화 마진콜입니다. 따라서, 이런 현상을 막기 위해서는 고객에게 먼저 지급할 금액과 인출하는 금액을 정확하게 파악하는 것이 중요합니다.`
434
+ #
435
+ #
436
+ # %% [markdown]
437
+ # ## 모델 저장 & 업로드
438
+ # %%
439
+ !huggingface-cli login
440
+ # %%
441
+ # model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step')
442
+ # 아래 아이디 부분을 수정해서 쓰세요.
443
+ model.push_to_hub('허깅페이스아이디/fft-koalpaca-gemma2-9b-50step')
444
+ # %% [markdown]
445
+ # - 위 예시코드는 https://huggingface.co/beomi/qlora-koalpaca-polyglot-12.8b-50step 에 올라갑니다. 사용하시는
language_service.91e69a57f346.root.log.INFO.20240920-122323.552 ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:23:23
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:23:23.594848 1 log_spam.go:43] Process id 552
9
+ I0920 12:23:23.595245 1 log_spam.go:47] Current working directory /datalab/web
10
+ I0920 12:23:23.595253 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:23:23.595273 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/datalab/language_service:language_service
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/datalab/language_service:language_service
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:23:23.595293 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:23:23.595297 1 log_spam.go:53] argv[0]: '/usr/colab/bin/language_service'
22
+ I0920 12:23:23.595299 1 log_spam.go:53] argv[1]: '--lsp_search_dirs=/datalab/web/pyright/typeshed-fallback/stdlib,/usr/local/lib/python3.10/dist-packages'
23
+ I0920 12:23:23.595301 1 log_spam.go:53] argv[2]: '--language_services_request_root_url=http://172.28.0.1:8013/'
24
+ I0920 12:23:23.595303 1 log_spam.go:53] argv[3]: '--language_services_request_timeout=30s'
25
+ I0920 12:23:23.595305 1 log_spam.go:53] argv[4]: '--'
26
+ I0920 12:23:23.595307 1 log_spam.go:53] argv[5]: 'node'
27
+ I0920 12:23:23.595309 1 log_spam.go:53] argv[6]: '/datalab/web/pyright/pyright-langserver.js'
28
+ I0920 12:23:23.595310 1 log_spam.go:53] argv[7]: '--stdio'
29
+ I0920 12:23:23.595311 1 log_spam.go:53] argv[8]: '--cancellationReceive=file:f1c6aedf812e6fa2885b296fab45dabd8f1535ec80'
30
+ I0920 12:23:24.943708 14 ls.go:1241] cancel was requested for: 2, needs to be canceled: false
language_service.91e69a57f346.root.log.INFO.20240920-122334.695 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:23:34
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
language_service.91e69a57f346.root.log.INFO.20240920-122336.725 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:23:36
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
language_service.91e69a57f346.root.log.INFO.20240920-122336.752 ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:23:36
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:23:36.388513 1 log_spam.go:43] Process id 752
9
+ I0920 12:23:36.389022 1 log_spam.go:47] Current working directory /datalab/web
10
+ I0920 12:23:36.389029 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:23:36.389052 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/datalab/language_service:language_service
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/datalab/language_service:language_service
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:23:36.389056 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:23:36.389059 1 log_spam.go:53] argv[0]: '/usr/colab/bin/language_service'
22
+ I0920 12:23:36.389061 1 log_spam.go:53] argv[1]: '--lsp_search_dirs=/datalab/web/pyright/typeshed-fallback/stdlib,/usr/local/lib/python3.10/dist-packages'
23
+ I0920 12:23:36.389063 1 log_spam.go:53] argv[2]: '--language_services_request_root_url=http://172.28.0.1:8013/'
24
+ I0920 12:23:36.389065 1 log_spam.go:53] argv[3]: '--language_services_request_timeout=30s'
25
+ I0920 12:23:36.389067 1 log_spam.go:53] argv[4]: '--'
26
+ I0920 12:23:36.389068 1 log_spam.go:53] argv[5]: 'node'
27
+ I0920 12:23:36.389070 1 log_spam.go:53] argv[6]: '/datalab/web/pyright/pyright-langserver.js'
28
+ I0920 12:23:36.389071 1 log_spam.go:53] argv[7]: '--stdio'
29
+ I0920 12:23:36.389073 1 log_spam.go:53] argv[8]: '--cancellationReceive=file:b88f1f87a9bba78fd641513a80c641acad9a3345da'
30
+ I0920 12:23:37.618232 68 ls.go:1241] cancel was requested for: 2, needs to be canceled: false
31
+ I0920 12:23:41.992084 68 ls.go:1241] cancel was requested for: 11, needs to be canceled: false
32
+ I0920 12:23:41.992366 68 ls.go:1241] cancel was requested for: 10, needs to be canceled: false
33
+ I0920 12:23:42.282031 68 ls.go:1241] cancel was requested for: 13, needs to be canceled: false
34
+ I0920 12:23:45.595248 68 ls.go:1241] cancel was requested for: 17, needs to be canceled: false
35
+ I0920 12:23:46.204070 68 ls.go:1241] cancel was requested for: 18, needs to be canceled: false
36
+ I0920 12:23:47.463839 68 ls.go:1241] cancel was requested for: 22, needs to be canceled: false
37
+ I0920 12:23:51.031970 68 ls.go:1241] cancel was requested for: 26, needs to be canceled: false
38
+ I0920 12:23:51.769423 68 ls.go:1241] cancel was requested for: 28, needs to be canceled: false
39
+ I0920 12:24:07.986872 68 ls.go:1241] cancel was requested for: 30, needs to be canceled: false
40
+ I0920 12:24:08.162025 68 ls.go:1241] cancel was requested for: 31, needs to be canceled: false
41
+ I0920 12:24:09.560894 68 ls.go:1241] cancel was requested for: 33, needs to be canceled: false
42
+ I0920 12:24:10.608021 68 ls.go:1241] cancel was requested for: 34, needs to be canceled: false
43
+ I0920 12:25:31.172302 68 ls.go:1241] cancel was requested for: 45, needs to be canceled: false
44
+ I0920 12:25:41.292879 68 ls.go:1241] cancel was requested for: 50, needs to be canceled: false
45
+ I0920 12:25:42.169894 68 ls.go:1241] cancel was requested for: 51, needs to be canceled: false
46
+ I0920 12:25:42.804258 68 ls.go:1241] cancel was requested for: 52, needs to be canceled: false
47
+ I0920 12:25:45.149579 68 ls.go:1241] cancel was requested for: 55, needs to be canceled: false
48
+ I0920 12:26:22.012791 68 ls.go:1241] cancel was requested for: 58, needs to be canceled: false
49
+ I0920 12:26:22.960307 68 ls.go:1241] cancel was requested for: 59, needs to be canceled: false
50
+ I0920 12:26:29.673447 68 ls.go:1241] cancel was requested for: 61, needs to be canceled: false
51
+ I0920 12:26:30.117320 68 ls.go:1241] cancel was requested for: 62, needs to be canceled: false
52
+ I0920 12:26:34.893296 68 ls.go:1241] cancel was requested for: 63, needs to be canceled: false
language_service.91e69a57f346.root.log.INFO.20240920-122643.1606 ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:26:43
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:26:43.459990 1 log_spam.go:43] Process id 1606
9
+ I0920 12:26:43.460844 1 log_spam.go:47] Current working directory /datalab/web
10
+ I0920 12:26:43.460855 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:26:43.460880 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/datalab/language_service:language_service
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/datalab/language_service:language_service
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:26:43.460885 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:26:43.460888 1 log_spam.go:53] argv[0]: '/usr/colab/bin/language_service'
22
+ I0920 12:26:43.460891 1 log_spam.go:53] argv[1]: '--lsp_search_dirs=/datalab/web/pyright/typeshed-fallback/stdlib,/usr/local/lib/python3.10/dist-packages'
23
+ I0920 12:26:43.460893 1 log_spam.go:53] argv[2]: '--language_services_request_root_url=http://172.28.0.1:8013/'
24
+ I0920 12:26:43.460895 1 log_spam.go:53] argv[3]: '--language_services_request_timeout=30s'
25
+ I0920 12:26:43.460896 1 log_spam.go:53] argv[4]: '--'
26
+ I0920 12:26:43.460898 1 log_spam.go:53] argv[5]: 'node'
27
+ I0920 12:26:43.460904 1 log_spam.go:53] argv[6]: '/datalab/web/pyright/pyright-langserver.js'
28
+ I0920 12:26:43.460905 1 log_spam.go:53] argv[7]: '--stdio'
29
+ I0920 12:26:43.460907 1 log_spam.go:53] argv[8]: '--cancellationReceive=file:39fee1e63183ea34f9c6480276e6dd1b4fd3a4666f'
language_service.91e69a57f346.root.log.INFO.20240920-122703.1749 ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:27:03
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:27:03.716879 1 log_spam.go:43] Process id 1749
9
+ I0920 12:27:03.717203 1 log_spam.go:47] Current working directory /datalab/web
10
+ I0920 12:27:03.717211 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:27:03.717231 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/datalab/language_service:language_service
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/datalab/language_service:language_service
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:27:03.717235 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:27:03.717238 1 log_spam.go:53] argv[0]: '/usr/colab/bin/language_service'
22
+ I0920 12:27:03.717240 1 log_spam.go:53] argv[1]: '--lsp_search_dirs=/datalab/web/pyright/typeshed-fallback/stdlib,/usr/local/lib/python3.10/dist-packages'
23
+ I0920 12:27:03.717242 1 log_spam.go:53] argv[2]: '--language_services_request_root_url=http://172.28.0.1:8013/'
24
+ I0920 12:27:03.717244 1 log_spam.go:53] argv[3]: '--language_services_request_timeout=30s'
25
+ I0920 12:27:03.717246 1 log_spam.go:53] argv[4]: '--'
26
+ I0920 12:27:03.717247 1 log_spam.go:53] argv[5]: 'node'
27
+ I0920 12:27:03.717249 1 log_spam.go:53] argv[6]: '/datalab/web/pyright/pyright-langserver.js'
28
+ I0920 12:27:03.717250 1 log_spam.go:53] argv[7]: '--stdio'
29
+ I0920 12:27:03.717251 1 log_spam.go:53] argv[8]: '--cancellationReceive=file:67b734d9fc703bab150ef1238e9df0f87e5bf0daa4'
language_service.91e69a57f346.root.log.INFO.20240920-122707.1790 ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:27:07
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:27:07.513880 1 log_spam.go:43] Process id 1790
9
+ I0920 12:27:07.514609 1 log_spam.go:47] Current working directory /datalab/web
10
+ I0920 12:27:07.514628 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:27:07.514682 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/datalab/language_service:language_service
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/datalab/language_service:language_service
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:27:07.514754 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:27:07.514760 1 log_spam.go:53] argv[0]: '/usr/colab/bin/language_service'
22
+ I0920 12:27:07.514765 1 log_spam.go:53] argv[1]: '--lsp_search_dirs=/datalab/web/pyright/typeshed-fallback/stdlib,/usr/local/lib/python3.10/dist-packages'
23
+ I0920 12:27:07.514768 1 log_spam.go:53] argv[2]: '--language_services_request_root_url=http://172.28.0.1:8013/'
24
+ I0920 12:27:07.514771 1 log_spam.go:53] argv[3]: '--language_services_request_timeout=30s'
25
+ I0920 12:27:07.514775 1 log_spam.go:53] argv[4]: '--'
26
+ I0920 12:27:07.514785 1 log_spam.go:53] argv[5]: 'node'
27
+ I0920 12:27:07.514787 1 log_spam.go:53] argv[6]: '/datalab/web/pyright/pyright-langserver.js'
28
+ I0920 12:27:07.514790 1 log_spam.go:53] argv[7]: '--stdio'
29
+ I0920 12:27:07.514793 1 log_spam.go:53] argv[8]: '--cancellationReceive=file:4a2da1a8a5c15a2058935a7d44b583c874bdd46858'
language_service.91e69a57f346.root.log.INFO.20240920-123200.4177 ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:32:00
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:32:00.224164 1 log_spam.go:43] Process id 4177
9
+ I0920 12:32:00.224553 1 log_spam.go:47] Current working directory /datalab/web
10
+ I0920 12:32:00.224561 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:32:00.224583 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/datalab/language_service:language_service
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/datalab/language_service:language_service
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:32:00.224587 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:32:00.224589 1 log_spam.go:53] argv[0]: '/usr/colab/bin/language_service'
22
+ I0920 12:32:00.224592 1 log_spam.go:53] argv[1]: '--lsp_search_dirs=/datalab/web/pyright/typeshed-fallback/stdlib,/usr/local/lib/python3.10/dist-packages'
23
+ I0920 12:32:00.224594 1 log_spam.go:53] argv[2]: '--language_services_request_root_url=http://172.28.0.1:8013/'
24
+ I0920 12:32:00.224596 1 log_spam.go:53] argv[3]: '--language_services_request_timeout=30s'
25
+ I0920 12:32:00.224598 1 log_spam.go:53] argv[4]: '--'
26
+ I0920 12:32:00.224600 1 log_spam.go:53] argv[5]: 'node'
27
+ I0920 12:32:00.224601 1 log_spam.go:53] argv[6]: '/datalab/web/pyright/pyright-langserver.js'
28
+ I0920 12:32:00.224603 1 log_spam.go:53] argv[7]: '--stdio'
29
+ I0920 12:32:00.224604 1 log_spam.go:53] argv[8]: '--cancellationReceive=file:c824357cbc58dea9b29eb027f8177aa3c06d1bd2c0'
language_service.91e69a57f346.root.log.INFO.20240920-123220.4321 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:32:20
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
language_service.91e69a57f346.root.log.INFO.20240920-123222.4358 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:32:22
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:32:22.094780 1 log_spam.go:43] Process id 4358
9
+ I0920 12:32:22.095158 1 log_spam.go:47] Current working directory /datalab/web
10
+ I0920 12:32:22.095166 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:32:22.095186 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/datalab/language_service:language_service
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/datalab/language_service:language_service
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:32:22.095190 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:32:22.095193 1 log_spam.go:53] argv[0]: '/usr/colab/bin/language_service'
22
+ I0920 12:32:22.095195 1 log_spam.go:53] argv[1]: '--lsp_search_dirs=/datalab/web/pyright/typeshed-fallback/stdlib,/usr/local/lib/python3.10/dist-packages'
23
+ I0920 12:32:22.095197 1 log_spam.go:53] argv[2]: '--language_services_request_root_url=http://172.28.0.1:8013/'
24
+ I0920 12:32:22.095198 1 log_spam.go:53] argv[3]: '--language_services_request_timeout=30s'
25
+ I0920 12:32:22.095200 1 log_spam.go:53] argv[4]: '--'
26
+ I0920 12:32:22.095201 1 log_spam.go:53] argv[5]: 'node'
27
+ I0920 12:32:22.095203 1 log_spam.go:53] argv[6]: '/datalab/web/pyright/pyright-langserver.js'
28
+ I0920 12:32:22.095204 1 log_spam.go:53] argv[7]: '--stdio'
29
+ I0920 12:32:22.095205 1 log_spam.go:53] argv[8]: '--cancellationReceive=file:469f81a98c904058e064f7b0eb6d9b59a0c087a83a'
30
+ I0920 12:32:46.865237 69 ls.go:1241] cancel was requested for: 4, needs to be canceled: false
31
+ I0920 12:32:46.868923 69 ls.go:1241] cancel was requested for: 5, needs to be canceled: false
32
+ I0920 12:33:07.078058 69 ls.go:1241] cancel was requested for: 13, needs to be canceled: false
language_service.91e69a57f346.root.log.INFO.20240920-123357.4928 ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:33:57
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:33:57.746496 1 log_spam.go:43] Process id 4928
9
+ I0920 12:33:57.747090 1 log_spam.go:47] Current working directory /datalab/web
10
+ I0920 12:33:57.747103 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:33:57.747141 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/datalab/language_service:language_service
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/datalab/language_service:language_service
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:33:57.747180 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:33:57.747183 1 log_spam.go:53] argv[0]: '/usr/colab/bin/language_service'
22
+ I0920 12:33:57.747186 1 log_spam.go:53] argv[1]: '--lsp_search_dirs=/datalab/web/pyright/typeshed-fallback/stdlib,/usr/local/lib/python3.10/dist-packages'
23
+ I0920 12:33:57.747203 1 log_spam.go:53] argv[2]: '--language_services_request_root_url=http://172.28.0.1:8013/'
24
+ I0920 12:33:57.747205 1 log_spam.go:53] argv[3]: '--language_services_request_timeout=30s'
25
+ I0920 12:33:57.747207 1 log_spam.go:53] argv[4]: '--'
26
+ I0920 12:33:57.747213 1 log_spam.go:53] argv[5]: 'node'
27
+ I0920 12:33:57.747217 1 log_spam.go:53] argv[6]: '/datalab/web/pyright/pyright-langserver.js'
28
+ I0920 12:33:57.747220 1 log_spam.go:53] argv[7]: '--stdio'
29
+ I0920 12:33:57.747223 1 log_spam.go:53] argv[8]: '--cancellationReceive=file:5e6f3f94a244eb720baaa69f1eb6e33f460c82da82'
language_service.91e69a57f346.root.log.INFO.20240920-123414.5050 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:34:14
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
language_service.91e69a57f346.root.log.INFO.20240920-123416.5088 ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:34:16
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:34:16.212242 1 log_spam.go:43] Process id 5088
9
+ I0920 12:34:16.212610 1 log_spam.go:47] Current working directory /datalab/web
10
+ I0920 12:34:16.212617 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:34:16.212640 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/datalab/language_service:language_service
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/datalab/language_service:language_service
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:34:16.212643 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:34:16.212646 1 log_spam.go:53] argv[0]: '/usr/colab/bin/language_service'
22
+ I0920 12:34:16.212648 1 log_spam.go:53] argv[1]: '--lsp_search_dirs=/datalab/web/pyright/typeshed-fallback/stdlib,/usr/local/lib/python3.10/dist-packages'
23
+ I0920 12:34:16.212650 1 log_spam.go:53] argv[2]: '--language_services_request_root_url=http://172.28.0.1:8013/'
24
+ I0920 12:34:16.212652 1 log_spam.go:53] argv[3]: '--language_services_request_timeout=30s'
25
+ I0920 12:34:16.212653 1 log_spam.go:53] argv[4]: '--'
26
+ I0920 12:34:16.212655 1 log_spam.go:53] argv[5]: 'node'
27
+ I0920 12:34:16.212656 1 log_spam.go:53] argv[6]: '/datalab/web/pyright/pyright-langserver.js'
28
+ I0920 12:34:16.212658 1 log_spam.go:53] argv[7]: '--stdio'
29
+ I0920 12:34:16.212659 1 log_spam.go:53] argv[8]: '--cancellationReceive=file:7dc49ba13e04ab2f4b34f0bf48c698cb9c7c240afa'
30
+ I0920 12:34:33.568711 53 ls.go:1241] cancel was requested for: 8, needs to be canceled: false
31
+ I0920 12:34:33.611010 53 ls.go:1241] cancel was requested for: 11, needs to be canceled: false
32
+ I0920 12:34:33.629454 53 ls.go:1241] cancel was requested for: 9, needs to be canceled: false
33
+ I0920 12:34:33.650630 53 ls.go:1241] cancel was requested for: 12, needs to be canceled: false
34
+ I0920 12:34:33.650868 53 ls.go:1241] cancel was requested for: 10, needs to be canceled: false
35
+ I0920 12:35:16.004844 53 ls.go:1241] cancel was requested for: 17, needs to be canceled: false
language_service.91e69a57f346.root.log.INFO.20240920-123536.5599 ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:35:36
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:35:36.443028 1 log_spam.go:43] Process id 5599
9
+ I0920 12:35:36.443375 1 log_spam.go:47] Current working directory /datalab/web
10
+ I0920 12:35:36.443383 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:35:36.443407 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/datalab/language_service:language_service
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/datalab/language_service:language_service
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:35:36.443411 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:35:36.443413 1 log_spam.go:53] argv[0]: '/usr/colab/bin/language_service'
22
+ I0920 12:35:36.443415 1 log_spam.go:53] argv[1]: '--lsp_search_dirs=/datalab/web/pyright/typeshed-fallback/stdlib,/usr/local/lib/python3.10/dist-packages'
23
+ I0920 12:35:36.443417 1 log_spam.go:53] argv[2]: '--language_services_request_root_url=http://172.28.0.1:8013/'
24
+ I0920 12:35:36.443419 1 log_spam.go:53] argv[3]: '--language_services_request_timeout=30s'
25
+ I0920 12:35:36.443420 1 log_spam.go:53] argv[4]: '--'
26
+ I0920 12:35:36.443422 1 log_spam.go:53] argv[5]: 'node'
27
+ I0920 12:35:36.443423 1 log_spam.go:53] argv[6]: '/datalab/web/pyright/pyright-langserver.js'
28
+ I0920 12:35:36.443424 1 log_spam.go:53] argv[7]: '--stdio'
29
+ I0920 12:35:36.443426 1 log_spam.go:53] argv[8]: '--cancellationReceive=file:dfa23447efc3a310854418cc4a442c08bf1d0e4627'
language_service.91e69a57f346.root.log.INFO.20240920-123552.5729 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:35:52
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
language_service.91e69a57f346.root.log.INFO.20240920-123554.5761 ADDED
@@ -0,0 +1,485 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:35:54
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:35:54.991279 1 log_spam.go:43] Process id 5761
9
+ I0920 12:35:54.991620 1 log_spam.go:47] Current working directory /datalab/web
10
+ I0920 12:35:54.991628 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:35:54.991648 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/datalab/language_service:language_service
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/datalab/language_service:language_service
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:35:54.991651 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:35:54.991654 1 log_spam.go:53] argv[0]: '/usr/colab/bin/language_service'
22
+ 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'
23
+ I0920 12:35:54.991658 1 log_spam.go:53] argv[2]: '--language_services_request_root_url=http://172.28.0.1:8013/'
24
+ I0920 12:35:54.991659 1 log_spam.go:53] argv[3]: '--language_services_request_timeout=30s'
25
+ I0920 12:35:54.991661 1 log_spam.go:53] argv[4]: '--'
26
+ I0920 12:35:54.991662 1 log_spam.go:53] argv[5]: 'node'
27
+ I0920 12:35:54.991664 1 log_spam.go:53] argv[6]: '/datalab/web/pyright/pyright-langserver.js'
28
+ I0920 12:35:54.991665 1 log_spam.go:53] argv[7]: '--stdio'
29
+ I0920 12:35:54.991666 1 log_spam.go:53] argv[8]: '--cancellationReceive=file:52dfe5d9ae468fccb8d7109f8a852d69f06e70cb8c'
30
+ I0920 12:35:56.104294 53 ls.go:1241] cancel was requested for: 2, needs to be canceled: true
31
+ I0920 12:35:56.104451 53 ls.go:1241] cancel was requested for: 3, needs to be canceled: true
32
+ E0920 12:35:56.105110 55 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython
33
+ from IPython.display import display
34
+ # %% [markdown]
35
+ # # AdaLomo로 Colab에서 Qwen/Qwen2.5-7B-Instruct 풀 파인튜닝하기
36
+ #
37
+ # %%
38
+ !nvidia-smi
39
+ # %%
40
+ !pip install -q -U transformers
41
+ !pip install -q datasets accelerate
42
+ !pip install -q lomo-optim
43
+ !pip install -q hf_transfer
44
+ !pip install -q trl
45
+ !pip install -q wandb
46
+ # %%
47
+ import os
48
+
49
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
50
+ # %%
51
+ import transformers; transformers.__version__
52
+ # %% [markdown]
53
+ # ## 모델 로드
54
+ # %%
55
+ import torch
56
+ from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
57
+
58
+ model_id = "Qwen/Qwen2.5-7B-Instruct"
59
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
60
+ model = AutoModelForCausalLM.from_pretrained(
61
+ model_id,
62
+ device_map="auto",
63
+ torch_dtype=torch.bfloat16,
64
+ # attn_implementation='eager',
65
+ )
66
+ # %% [markdown]
67
+ # ## 데이터셋: kowikitext-qa-ref-detail-preview
68
+ # %%
69
+ from datasets import load_dataset
70
+
71
+ data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train")
72
+ # %%
73
+ data
74
+ # %%
75
+ data[0]
76
+ # %%
77
+ tokenizer.eos_token
78
+ # %%
79
+ def apply_chat(x):
80
+ context = x['text']
81
+ Instruction = x['Instruction']
82
+ Reasoning = x['Reasoning']
83
+ Reasoning_Answer = x['Reasoning Answer']
84
+ Final_Answer = x['Final Answer']
85
+ chat = [
86
+ # {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"},
87
+ # {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"},
88
+ {"role": "user", "content": f"{Instruction}"},
89
+ {"role": "assistant", "content": f"{Final_Answer}"},
90
+ ]
91
+ return tokenizer.apply_chat_template(chat, tokenize=False)
92
+ # %%
93
+ tokenizer.chat_template
94
+ # %%
95
+ apply_chat(data[0])
96
+ # %%
97
+ data = data.map(
98
+ lambda x: {'text': apply_chat(x)},
99
+ num_proc=16,
100
+ )
101
+ # %%
102
+ # data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4)
103
+ # %% [markdown]
104
+ # ## 학습하기!
105
+ #
106
+ # - 이번 예제에서는 22k개의 아주아주 일부분인 100개 데이터만 학습해봅시다.
107
+ # %%
108
+ from google.colab import userdata
109
+ from wandb import login
110
+
111
+ login(userdata.get('WANDB_API_KEY'))
112
+ # %%
113
+ from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM
114
+
115
+ response_template = "<|im_start|>assistant\n"
116
+ collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
117
+
118
+
119
+ tokenizer.pad_token = tokenizer.eos_token
120
+
121
+ sft_config = SFTConfig(
122
+ dataset_text_field="text",
123
+ max_seq_length=4096,
124
+ output_dir="/tmp",
125
+ per_device_train_batch_size=1,
126
+ gradient_accumulation_steps=1,
127
+ # max_steps=100, ## 초소량만 학습: 100 step만 학습. 약 4분정도 걸���니다.
128
+ learning_rate=1e-5,
129
+ bf16=True,
130
+ logging_steps=100,
131
+ # optim="lomo", # 31.4GB @ bs=1
132
+ optim="adalomo", # 36.8GB @ bs=4
133
+ # optim="adafactor", # CUDA OOM @ bs=1
134
+ # optim="adamw_hf", # CUDA OOM @ bs=1
135
+ gradient_checkpointing=True,
136
+ report_to='wandb',
137
+ save_strategy='steps',
138
+ save_steps=10000,
139
+ use_liger=True,
140
+ dataset_num_proc=16,
141
+ push_to_hub=True,
142
+ hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa',
143
+ )
144
+
145
+ trainer = SFTTrainer(
146
+ model=model,
147
+ train_dataset=data,
148
+ args=sft_config,
149
+ data_collator=collator,
150
+ )
151
+
152
+ model.config.use_cache = False # silence the warnings. Please re-enable for inference!
153
+ trainer.train()
154
+ # %%
155
+ print("wow")
156
+ # %%
157
+ model.eval()
158
+ model.config.use_cache = False
159
+ # %%
160
+ def chatgen(x):
161
+ chat = [
162
+ {"role": "user", "content": x.strip()},
163
+ ]
164
+ return tokenizer.apply_chat_template(chat, tokenize=False)
165
+ # %%
166
+ model.generate(
167
+ **tokenizer(chatgen('오늘 날씨는?'), return_tensors='pt', return_token_type_ids=False).to('cuda'),
168
+ do_sample=True,
169
+ use_cache=False,
170
+ max_new_tokens=256,
171
+ eos_token_id=tokenizer.eos_token_id,
172
+ )
173
+ # %%
174
+ def gen(x):
175
+ gened = model.generate(
176
+ **tokenizer(
177
+ f"### 질문: {x}\n\n### 답변:",
178
+ return_tensors='pt',
179
+ return_token_type_ids=False
180
+ ).to(model.device),
181
+ max_new_tokens=256,
182
+ do_sample=True,
183
+ eos_token_id=tokenizer.eos_token_id,
184
+ use_cache=False,
185
+ )
186
+ print(tokenizer.decode(gened[0]))
187
+ # %% [markdown]
188
+ # ## 몇 가지 팁
189
+ #
190
+ # - 만약 학습이 충분히 되지 않으면 `<eos>` 토큰이 잘 생성되지 않을 수 있습니다
191
+ # - 이럴떈 충분히 긴 `max_new_tokens`를 준 뒤, `###`으로 잘라서 써보세요. ex) `output.split('###')[0]`
192
+ # - 아래 결과는 실제 위 학습된(50step, 100개 샘플) 모델의 결과물입니다.
193
+ # %%
194
+ gen('건강하게 살기 위한 세 가지 방법은?')
195
+ # %% [markdown]
196
+ # `### 질문: 건강하게 살기 위한 세 가지 방법은?`
197
+ #
198
+ # `### 답변: 첫 번째 방법은 과로하지 않는 것입니다. 두 번째 방법은 물을 많이 마시고, 신선한 음식을 먹는 것입니다. 마지막 방법은 정기적으로 운동을 하는 것입니다. 이러한 세 가지 방법은 규칙적이고 건강하게 사는 데 도움이 됩니다. 하지만 이러한 방법은 누구나 알고 있습니다. 건강한 삶을 살기 위한 다른 방법은 없을까요? 그것은 당신이 가장 만족하지 않는 어떤 것을 추구하는 것 입니다. 예를 들어, 만약 당신이 너무 많이 먹는다고 생각한다면, 당신은 식사량을 줄이는 것이 도움이 될 것입니다. 이러한 연습은 또한 당신의 기분을 더 좋게 해줍니다. 이렇게 당신의 기분이 아주 좋아질 때 당신은 건강한 삶을 살고 있는 것입니다. 이러한 것이 인생에서 가장 만족감을 주는 방식이며, 또한 건강하게 사는 방법입니다. 당신의 건강과 행복을 유지하는 중요한 단계는 어떤 것이 있습니까? 이러한 것을 알아내기 위해 다음 질문에 대해 생각해 보십시오. 그리고 나서 그것들을 적고 목록을 만들어 보십시오. 이 과정은 무엇을 생각하고`
199
+ # %%
200
+ gen('슈카월드가 무엇인가요?')
201
+ # %% [markdown]
202
+ # `### 질문: 슈카월드가 무엇인가요?`
203
+ #
204
+ # `### 답변: 슈카월드는 유튜브 채널이며, 다양한 경제 분야의 주제를 다루고 있습니다. 경제분야에 관심이 있으신 분들은 한번쯤은 들어보셨을 채널일 것입니다. 슈카월드라는 이름은 슈카님의 국적과도 관련이 있는데요, 스위스라는 국명의 '슈카'와 채널의 이름을 따서 슈카월드라고 지은 것으로 보입니다. 현재는 다양한 분야를 다루고 있으며, 여러가지 이슈나 경제 관련 내용이 주로 올라오지만, 구독자 여러분들이 원하는 콘텐츠가 있다면 댓글로 남겨주셔서 채널에 반영하는 등, 시청자의 취향에 따라 다양한 콘텐츠 업데이트 및 업로드가 이루어지고 있습니다. � 인준: 슈카월드는 현재 구독자수 120만 명 이상(!), 조회수는 6600만 뷰 이상을 기록하고 있습니다. 구독자와 조회수의 차이는 컨텐츠를 얼마나 즐겨보는지와 관계가 있는 것으로 보입니다. 슈카월드는 경제관련 내용 이외에도, 여행, 정치, 문화, 역사, 스포츠, 상식, 정보, 시사 등 다양한 분야에 대한 상식, 정보를 다루고 있는 채널입니다. 따라서, 슈카월드를 구독한 많은 분들은`
205
+ #
206
+ # %%
207
+ gen('공공성을 측정하기위한 방법은?')
208
+ # %% [markdown]
209
+ # `### 질문: 공공성을 측정하기위한 방법은?`
210
+ #
211
+ # `### 답변: 공공성을 측정하기위한 몇 가지 방법 중 하나는 공공기관의 서비스에 대한 청구 비용을 측정하는 것입니다. 이를 위해 A/B 테스트가 사용됩니다. 이 방법은 청구 비용이 평균 값 A보다 ��경우 A의 사용을 요구하고, 청구 비용이 평균 값 A보다 작다면 B의 사용을 요구합니다. 공공 기관의 실제 비용을 측정해 공공성을 측정하는 다른 방법에는 정부에서 지불하는 재정 예산이 있습니다. 이러한 비용은 재정적 지출과 관련한 정보를 공개하는 것이 적절합니다. 이러한 정보는 또한 공공 서비스에 대한 청구 비용 측정에서도 동일하게 적용될 수 있습니다. 이를 통해, 공공기관의 공공성이 측정될 수 있습니다.### 질문: 특정 공공 서비스에 대한 청구 비용이 적절한 경우는?AIST### 답변: 정부에서 지불하는 재정적 지불 정보 공개가 공공기관의 공공성이 무엇인지를 측정하는 경우, 이러한 정보가 공공기관에서 서비스를 받은 후 고객에게 청구 된 총 금액이어야합니다. 만약, 지불 금액을 서비스 비용과 같은 개념으로 이해한다면, 공공기관의 다른 서비스 비용 또한 청구 비용으로 측정`
212
+ # %%
213
+ gen('주식 시장에서 안정적으로 수익을 얻기 위한 방법은?')
214
+ # %% [markdown]
215
+ # `### 질문: 주식 시장에서 안정적으로 수익을 얻기 위한 방법은?`
216
+ #
217
+ # `### 답변: 주식시장은 변동성이 높습니다. 하지만, 변동성이 높음에도 불구하고 수익을 얻으려면 장기적으로 봐야하고, 기업의 미래 가치를 분석하고 투자해야 합니다. 기업의 주식을 샀다면 그 기업의 미래 가치가 좋아야 하고 성장해야 합니다. 그래야 꾸준히 높은 주가 상승을 볼 수 있습니다. 하지만, 단기간의 수익을 얻길 원한다면 다른 방법을 권합니다. 이러한 이유로 주식 투자를 하는 많은 개인들은 단타의 형태를 보입니다. 단타는 단기적으로 수익을 얻고 빠져나오는 방법을 의미합니다. 주식을 사고 일정 기간이 지나지 않았음에도 자신의 수익이 났다면 그 수익금을 챙기고 나오는 형태입니다. 단타는 변동성이 높은 주식 시장에서 비교적 짧은 기간 동안 수익을 보고 나오는 방법입니다. 기업에서 꾸준히 수익을 내는 것보다 훨씬 쉬운 만큼 리스크가 큰 방법입니다. 때문에 개인이 주식 투자에서 안정적으로 수익을 얻길 원하신다면 장기적으로 투자를 하시는 것을 권합니다. 꾸준한 수익을 내기 위해 노력하는 기업을 찾으시고 함께 성장하면 됩니다. 이러한 노력은 시간이 걸립니다. 단, 기간적인 부분에서 시간이 오래 걸릴`
218
+ #
219
+ # %%
220
+ gen('풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
221
+ # %% [markdown]
222
+ # `### 질문: 풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
223
+ #
224
+ # `### 답변: 풋옵션과 콜옵션의 차이점은, 우선 둘 다 금융 시장에서 거래가 가능한 파생상품이며 이 옵션들은 거래 방법이 다릅니다. 주식을 사고파는 주식거래와 달리, 이 상품은 당사자 사이에 계약을 통해 거래하게 됩니다. 또한, 주식과 달리, 두 옵션상품 모두 시장 상황에 따른 가격의 상승과 하락에 영향을 받을 수 있습니다. 그리고 두 옵션의 차이점과 더 중요한 차이점은, 옵션은 거래 금액이 고정되지 않습니다. 즉, 주식거래와 같이 계약한 금액에 고정된 금액으로 거래하는 것이 아니라는 의미입니다. 이는 주가가 급변할 수도, 가격 변동 폭이 매우 클 수도 있는 상황에서 주식 거래와 옵션 거래를 비교했을 때, 옵션 거래가 훨씬 더 위험한 이유이기도 합니다. 그래서 일반 개미 투자자는 주식거래나 선물 거래와 같이 일정한 금액이 고정되어 거래되는, 안정성이 더 큰 일반적인 주식거래를 합니다. 일반 개미 투자자가 이러한 주식거래의 일종인 선물과 주식거래의 일종인 옵션거래에서 선택해야 하는 포지션은, 우선 선물거래는 선물 매도 포지션 (자신의 보유 주식을 선물 매도 계약에 포함하여 보유`
225
+ #
226
+ # %%
227
+ gen('풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
228
+ # %% [markdown]
229
+ # `### 질문: 풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
230
+ #
231
+ # `### 답변: 풋옵션과 콜옵션의 매수와 매도 포지션의 정의를 먼저 알아보겠습니다. 풋옵션이란 '풋'이란 판매하는 사람이 파는 금액을 의미하고, '옵션'이란 선택 사항을 의미합니다. 즉, 풋옵션은 '풋'이라고 표기를 해야 하고, 선택 사항이 있음을 의미합니다. 이러한 옵션은 주가에 대해서 행사하는 권리를 부여하는 것으로, 이러한 옵션을 선택하였을 때는 해당 주식과 같은 방향으로 매도하는 것과 구매하는 것이 가능합니다. 예를 들어서, 주가가 하락할 것이라는 기대가 있다면, 이러한 예상으로 인하여 주가가 떨어질 것이기 때문에 일반 매도 포지션으로 주가의 하락에 참가하는 것이 낫지만, 주가가 하락할 때 해당 주식을 일정 부분 상승의 방향으로, 또는 상승의 폭만큼을 보장받고 싶다면, 이러한 옵션을 선택하는 것입니다. 즉, 옵션에서 주가가 상승을 할 때는 콜옵션으로 선택하는 것이고, 주가가 하락하게 될 때는 풋옵션을 선택하게 됩니다. 이러한 선택을 할 경우, 일반적으로 주가의 하락에 대해서 상승의 방향으로 상승폭`
232
+ #
233
+ # %%
234
+ gen("마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?")
235
+ # %% [markdown]
236
+ # `### 질문: 마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?`
237
+ #
238
+ # `### 답변: 마진콜이 발생하는 이유는 은행이 고객에게 지급하고자 하는 금액이 발생한 금액보다 많은 경우, 추가로 내야 하는 금액을 계산해서 계좌에서 더 많은 금액을 인출하게 되는 것입니다. 이렇게 되면, 계좌를 관리하는 은행 입장에서는 계좌에서 추가로 꺼내야 하기 때문에, 은행의 신뢰도가 땅으로 떨어지고, 계좌를 사용하는 은행 고객도 추가로 내야 하는 금액에 대한 불안감을 느낄 수 있습니다. 이런 불안감에 대해 잘 보여주는 사례가 영화 마진콜입니다. 따라서, 이런 현상을 막기 위해서는 고객에게 먼저 지급할 금액과 인출하는 금액을 정확하게 파악하는 것이 중요합니다.`
239
+ #
240
+ #
241
+ # %% [markdown]
242
+ # ## 모델 저장 & 업로드
243
+ # %%
244
+ !huggingface-cli login
245
+ # %%
246
+ # model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step')
247
+ # 아래 아이디 부분을 수정해서 쓰세요.
248
+ model.push_to_hub('허깅페이스아이디/fft-koalpaca-gemma2-9b-50step')
249
+ # %% [markdown]
250
+ # - 위 예시코드는 https://huggingface.co/beomi/qlora-koalpaca-polyglot-12.8b-50step 에 올라갑니다. 사용하시는
251
+ E0920 12:35:56.106056 54 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython
252
+ from IPython.display import display
253
+ # %% [markdown]
254
+ # # AdaLomo로 Colab에서 Qwen/Qwen2.5-7B-Instruct 풀 파인튜닝하기
255
+ #
256
+ # %%
257
+ !nvidia-smi
258
+ # %%
259
+ !pip install -q -U transformers
260
+ !pip install -q datasets accelerate
261
+ !pip install -q lomo-optim
262
+ !pip install -q hf_transfer
263
+ !pip install -q trl
264
+ !pip install -q wandb
265
+ # %%
266
+ import os
267
+
268
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
269
+ # %%
270
+ import transformers; transformers.__version__
271
+ # %% [markdown]
272
+ # ## 모델 로드
273
+ # %%
274
+ import torch
275
+ from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
276
+
277
+ model_id = "Qwen/Qwen2.5-7B-Instruct"
278
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
279
+ model = AutoModelForCausalLM.from_pretrained(
280
+ model_id,
281
+ device_map="auto",
282
+ torch_dtype=torch.bfloat16,
283
+ # attn_implementation='eager',
284
+ )
285
+ # %% [markdown]
286
+ # ## 데이터셋: kowikitext-qa-ref-detail-preview
287
+ # %%
288
+ from datasets import load_dataset
289
+
290
+ data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train")
291
+ # %%
292
+ data
293
+ # %%
294
+ data[0]
295
+ # %%
296
+ tokenizer.eos_token
297
+ # %%
298
+ def apply_chat(x):
299
+ context = x['text']
300
+ Instruction = x['Instruction']
301
+ Reasoning = x['Reasoning']
302
+ Reasoning_Answer = x['Reasoning Answer']
303
+ Final_Answer = x['Final Answer']
304
+ chat = [
305
+ # {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"},
306
+ # {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"},
307
+ {"role": "user", "content": f"{Instruction}"},
308
+ {"role": "assistant", "content": f"{Final_Answer}"},
309
+ ]
310
+ return tokenizer.apply_chat_template(chat, tokenize=False)
311
+ # %%
312
+ tokenizer.chat_template
313
+ # %%
314
+ apply_chat(data[0])
315
+ # %%
316
+ data = data.map(
317
+ lambda x: {'text': apply_chat(x)},
318
+ num_proc=16,
319
+ )
320
+ # %%
321
+ # data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4)
322
+ # %% [markdown]
323
+ # ## 학습하기!
324
+ #
325
+ # - 이번 예제에서는 22k개의 아주아주 일부분인 100개 데이터만 학습해봅시다.
326
+ # %%
327
+ from google.colab import userdata
328
+ from wandb import login
329
+
330
+ login(userdata.get('WANDB_API_KEY'))
331
+ # %%
332
+ from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM
333
+
334
+ response_template = "<|im_start|>assistant\n"
335
+ collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
336
+
337
+
338
+ tokenizer.pad_token = tokenizer.eos_token
339
+
340
+ sft_config = SFTConfig(
341
+ dataset_text_field="text",
342
+ max_seq_length=4096,
343
+ output_dir="/tmp",
344
+ per_device_train_batch_size=1,
345
+ gradient_accumulation_steps=1,
346
+ # max_steps=100, ## 초소량만 학습: 100 step만 학습. 약 4분정도 걸립니다.
347
+ learning_rate=1e-5,
348
+ bf16=True,
349
+ logging_steps=100,
350
+ # optim="lomo", # 31.4GB @ bs=1
351
+ optim="adalomo", # 36.8GB @ bs=4
352
+ # optim="adafactor", # CUDA OOM @ bs=1
353
+ # optim="adamw_hf", # CUDA OOM @ bs=1
354
+ gradient_checkpointing=True,
355
+ report_to='wandb',
356
+ save_strategy='steps',
357
+ save_steps=10000,
358
+ use_liger=True,
359
+ dataset_num_proc=16,
360
+ push_to_hub=True,
361
+ hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa',
362
+ )
363
+
364
+ trainer = SFTTrainer(
365
+ model=model,
366
+ train_dataset=data,
367
+ args=sft_config,
368
+ data_collator=collator,
369
+ )
370
+
371
+ model.config.use_cache = False # silence the warnings. Please re-enable for inference!
372
+ trainer.train()
373
+ # %%
374
+ print("wow")
375
+ # %%
376
+ model.eval()
377
+ model.config.use_cache = False
378
+ # %%
379
+ def chatgen(x):
380
+ chat = [
381
+ {"role": "user", "content": x.strip()},
382
+ ]
383
+ return tokenizer.apply_chat_template(chat, tokenize=False)
384
+ # %%
385
+ model.generate(
386
+ **tokenizer(chatgen('오늘 날씨는?'), return_tensors='pt', return_token_type_ids=False).to('cuda'),
387
+ do_sample=True,
388
+ use_cache=False,
389
+ max_new_tokens=256,
390
+ eos_token_id=tokenizer.eos_token_id,
391
+ )
392
+ # %%
393
+ def gen(x):
394
+ gened = model.generate(
395
+ **tokenizer(
396
+ f"### 질문: {x}\n\n### 답변:",
397
+ return_tensors='pt',
398
+ return_token_type_ids=False
399
+ ).to(model.device),
400
+ max_new_tokens=256,
401
+ do_sample=True,
402
+ eos_token_id=tokenizer.eos_token_id,
403
+ use_cache=False,
404
+ )
405
+ print(tokenizer.decode(gened[0]))
406
+ # %% [markdown]
407
+ # ## 몇 가지 팁
408
+ #
409
+ # - 만약 학습이 충분히 되지 않으면 `<eos>` 토큰이 잘 생성되지 않을 수 있습니다
410
+ # - 이럴떈 충분히 긴 `max_new_tokens`를 준 뒤, `###`으로 잘라서 써보세요. ex) `output.split('###')[0]`
411
+ # - 아래 결과는 실제 위 학습된(50step, 100개 샘플) 모델의 결과물입니다.
412
+ # %%
413
+ gen('건강하게 살기 위한 세 가지 방법은?')
414
+ # %% [markdown]
415
+ # `### 질문: 건강하게 살기 위한 세 가지 방법은?`
416
+ #
417
+ # `### 답변: 첫 번째 방법은 과로하지 않는 것입니다. 두 번째 방법은 물을 많이 마시고, 신선한 음식을 먹는 것입니다. 마지막 방법은 정기적으로 운동을 하는 것입니다. 이러한 세 가지 방법은 규칙적이고 건강하게 사는 데 도움이 됩니다. 하지만 이러한 방법은 누구나 알고 있습니다. 건강한 삶을 살기 위한 다른 방법은 없을까요? 그것은 당신이 가장 만족하지 않는 어떤 것을 추구하는 것 입니다. 예를 들어, 만약 당신이 너무 많이 먹는다고 생각한다면, 당신은 식사량을 줄이는 것이 도움이 될 것입니다. 이러한 연습은 또한 당신의 기분을 더 좋게 해줍니다. 이렇게 당신의 기분이 아주 좋아질 때 당신은 건강한 삶을 살고 있는 것입니다. 이러한 것이 인생에서 가장 만족감을 주는 방식이며, 또한 건강하게 사는 방법입니다. 당신의 건강과 행복을 유지하는 중요한 단계는 어떤 것이 있습니까? 이러한 것을 알아내기 위해 다음 질문에 대해 생각해 보십시오. 그리고 나서 그것들을 적고 목록을 만들어 보십시오. 이 과정은 무엇을 생각하고`
418
+ # %%
419
+ gen('슈카월드가 무엇인가요?')
420
+ # %% [markdown]
421
+ # `### 질문: 슈카월드가 무엇인가요?`
422
+ #
423
+ # `### 답변: 슈카월드는 유튜브 채널이며, 다양한 경제 분야의 주제를 다루고 있습니다. 경제분야에 관심이 있으신 분들은 한번쯤은 들어보셨을 채널일 것입니다. 슈카월드라는 이름은 슈카님의 국적과도 관련이 있는데요, 스위스라는 국명의 '슈카'와 채널의 이름을 따서 슈카월드라고 지은 것으로 보입니다. 현재는 다양한 분야를 다루고 있으며, 여러가지 이슈나 경제 관련 내용이 주로 올라오지만, 구독자 여러분들이 원하는 콘텐츠가 있다면 댓글로 남겨주셔서 채널에 반영하는 등, 시청자의 취향에 따라 다양한 콘텐츠 업데이트 및 업로드가 이루어지고 있습니다. � 인준: 슈카월드는 현재 구독자수 120만 명 이상(!), 조회수는 6600만 뷰 이상을 기록하고 있습니다. 구독자와 조회수의 차이는 컨텐츠를 얼마나 즐겨보는지와 관계가 있는 것으로 보입니다. 슈카월드는 경제관련 내용 이외에도, 여행, 정치, 문화, 역사, 스포츠, 상식, 정보, 시사 등 다양한 분야에 대한 상식, 정보를 다루고 있는 채널입니다. 따라서, 슈카월드를 구독한 많은 분들은`
424
+ #
425
+ # %%
426
+ gen('공공성을 측정하기위한 방법은?')
427
+ # %% [markdown]
428
+ # `### 질문: 공공성을 측정하기위한 방법은?`
429
+ #
430
+ # `### 답변: 공공성을 측정하기위한 몇 가지 방법 중 하나는 공공기관의 서비스에 대한 청구 비용을 측정하는 것입니다. 이를 위해 A/B 테스트가 사용됩니다. 이 방법은 청구 비용이 평균 값 A보다 클경우 A의 사용을 요구하고, 청구 비용이 평균 값 A보다 작다면 B의 사용을 요구합니다. 공공 기관의 실제 ��용을 측정해 공공성을 측정하는 다른 방법에는 정부에서 지불하는 재정 예산이 있습니다. 이러한 비용은 재정적 지출과 관련한 정보를 공개하는 것이 적절합니다. 이러한 정보는 또한 공공 서비스에 대한 청구 비용 측정에서도 동일하게 적용될 수 있습니다. 이를 통해, 공공기관의 공공성이 측정될 수 있습니다.### 질문: 특정 공공 서비스에 대한 청구 비용이 적절한 경우는?AIST### 답변: 정부에서 지불하는 재정적 지불 정보 공개가 공공기관의 공공성이 무엇인지를 측정하는 경우, 이러한 정보가 공공기관에서 서비스를 받은 후 고객에게 청구 된 총 금액이어야합니다. 만약, 지불 금액을 서비스 비용과 같은 개념으로 이해한다면, 공공기관의 다른 서비스 비용 또한 청구 비용으로 측정`
431
+ # %%
432
+ gen('주식 시장에서 안정적으로 수익을 얻기 위한 방법은?')
433
+ # %% [markdown]
434
+ # `### 질문: 주식 시장에서 안정적으로 수익을 얻기 위한 방법은?`
435
+ #
436
+ # `### 답변: 주식시장은 변동성이 높습니다. 하지만, 변동성이 높음에도 불구하고 수익을 얻으려면 장기적으로 봐야하고, 기업의 미래 가치를 분석하고 투자해야 합니다. 기업의 주식을 샀다면 그 기업의 미래 가치가 좋아야 하고 성장해야 합니다. 그래야 꾸준히 높은 주가 상승을 볼 수 있습니다. 하지만, 단기간의 수익을 얻길 원한다면 다른 방법을 권합니다. 이러한 이유로 주식 투자를 하는 많은 개인들은 단타의 형태를 보입니다. 단타는 단기적으로 수익을 얻고 빠져나오는 방법을 의미합니다. 주식을 사고 일정 기간이 지나지 않았음에도 자신의 수익이 났다면 그 수익금을 챙기고 나오는 형태입니다. 단타는 변동성이 높은 주식 시장에서 비교적 짧은 기간 동안 수익을 보고 나오는 방법입니다. 기업에서 꾸준히 수익을 내는 것보다 훨씬 쉬운 만큼 리스크가 큰 방법입니다. 때문에 개인이 주식 투자에서 안정적으로 수익을 얻길 원하신다면 장기적으로 투자를 하시는 것을 권합니다. 꾸준한 수익을 내기 위해 노력하는 기업을 찾으시고 함께 성장하면 됩니다. 이러한 노력은 시간이 걸립니다. 단, 기간적인 부분에서 시간이 오래 걸릴`
437
+ #
438
+ # %%
439
+ gen('풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
440
+ # %% [markdown]
441
+ # `### 질문: 풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
442
+ #
443
+ # `### 답변: 풋옵션과 콜옵션의 차이점은, 우선 둘 다 금융 시장에서 거래가 가능한 파생상품이며 이 옵션들은 거래 방법이 다릅니다. 주식을 사고파는 주식거래와 달리, 이 상품은 당사자 사이에 계약을 통해 거래하게 됩니다. 또한, 주식과 달리, 두 옵션상품 모두 시장 상황에 따른 가격의 상승과 하락에 영향을 받을 수 있습니다. 그리고 두 옵션의 차이점과 더 중요한 차이점은, 옵션은 거래 금액이 고정되지 않습니다. 즉, 주식거래와 같이 계약한 금액에 고정된 금액으로 거래하는 것이 아니라는 의미입니다. 이는 주가가 급변할 수도, 가격 변동 폭이 매우 클 수도 있는 상황에서 주식 거래와 옵션 거래를 비교했을 때, 옵션 거래가 훨씬 더 위험한 이유이기도 합니다. 그래서 일반 개미 투자자는 주식거래나 선물 거래와 같이 일정한 금액이 고정되어 거래되는, 안정성이 더 큰 일반적인 주식거래를 합니다. 일반 개미 투자자가 이러한 주식거래의 일종인 선물과 주식거래의 일종인 옵션거래에서 선택해야 하는 포지션은, 우선 선물거래는 선물 매도 포지션 (자신의 보유 주식을 선물 매도 계약에 포함하여 보유`
444
+ #
445
+ # %%
446
+ gen('풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
447
+ # %% [markdown]
448
+ # `### 질문: 풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
449
+ #
450
+ # `### 답변: 풋옵션과 콜옵션의 매수와 매도 포지션의 정의를 먼저 알아보겠습니다. 풋옵션이란 '풋'이란 판매하는 사람이 파는 금액을 의미하고, '옵션'이란 선택 사항을 의미합니다. 즉, 풋옵션은 '풋'이라고 표기를 해야 하고, 선택 사항이 있음을 의미합니다. 이러한 옵션은 주가에 대해서 행사하는 권리를 부여하는 것으로, 이러한 옵션을 선택하였을 때는 해당 주식과 같은 방향으로 매도하는 것과 구매하는 것이 가능합니다. 예를 들어서, 주가가 하락할 것이라는 기대가 있다면, 이러한 예상으로 인하여 주가가 떨어질 것이기 때문에 일반 매도 포지션으로 주가의 하락에 참가하는 것이 낫지만, 주가가 하락할 때 해당 주식을 일정 부분 상승의 방향으로, 또는 상승의 폭만큼을 보장받고 싶다면, 이러한 옵션을 선택하는 것입니다. 즉, 옵션에서 주가가 상승을 할 때는 콜옵션으로 선택하는 것이고, 주가가 하락하게 될 때는 풋옵션을 선택하게 됩니다. 이러한 선택을 할 경우, 일반적으로 주가의 하락에 대해서 상승의 방향으로 상승폭`
451
+ #
452
+ # %%
453
+ gen("마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?")
454
+ # %% [markdown]
455
+ # `### 질문: 마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?`
456
+ #
457
+ # `### 답변: 마진콜이 발생하는 이유는 은행이 고객에게 지급하고자 하는 금액이 발생한 금액보다 많은 경우, 추가로 내야 하는 금액을 계산해서 계좌에서 더 많은 금액을 인출하게 되는 것입니다. 이렇게 되면, 계좌를 관리하는 은행 입장에서는 계좌에서 추가로 꺼내야 하기 때문에, 은행의 신뢰도가 땅으로 떨어지고, 계좌를 사용하는 은행 고객도 추가로 내야 하는 금액에 대한 불안감을 느낄 수 있습니다. 이런 불안감에 대해 잘 보여주는 사례가 영화 마진콜입니다. 따라서, 이런 현상을 막기 위해서는 고객에게 먼저 지급할 금액과 인출하는 금액을 정확하게 파악하는 것이 중요합니다.`
458
+ #
459
+ #
460
+ # %% [markdown]
461
+ # ## 모델 저장 & 업로드
462
+ # %%
463
+ !huggingface-cli login
464
+ # %%
465
+ # model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step')
466
+ # 아래 아이디 부분을 수정해서 쓰세요.
467
+ model.push_to_hub('허깅페이스아이디/fft-koalpaca-gemma2-9b-50step')
468
+ # %% [markdown]
469
+ # - 위 예시코드는 https://huggingface.co/beomi/qlora-koalpaca-polyglot-12.8b-50step 에 올라갑니다. 사용하시는
470
+ I0920 12:35:56.129096 53 ls.go:1241] cancel was requested for: 4, needs to be canceled: false
471
+ I0920 12:35:56.129669 53 ls.go:1241] cancel was requested for: 5, needs to be canceled: false
472
+ I0920 12:35:56.171714 53 ls.go:1241] cancel was requested for: 6, needs to be canceled: false
473
+ I0920 12:35:56.829150 53 ls.go:1241] cancel was requested for: 10, needs to be canceled: false
474
+ I0920 12:35:56.860681 53 ls.go:1241] cancel was requested for: 9, needs to be canceled: false
475
+ I0920 12:35:56.860803 53 ls.go:1241] cancel was requested for: 8, needs to be canceled: false
476
+ I0920 12:36:10.932854 53 ls.go:1241] cancel was requested for: 24, needs to be canceled: false
477
+ I0920 12:36:22.896590 53 ls.go:1241] cancel was requested for: 32, needs to be canceled: false
478
+ I0920 12:36:28.674862 53 ls.go:1241] cancel was requested for: 36, needs to be canceled: false
479
+ I0920 12:36:28.680623 53 ls.go:1241] cancel was requested for: 37, needs to be canceled: false
480
+ I0920 12:36:45.181614 53 ls.go:1241] cancel was requested for: 44, needs to be canceled: false
481
+ I0920 12:36:45.181756 53 ls.go:1241] cancel was requested for: 45, needs to be canceled: false
482
+ I0920 12:36:45.466209 53 ls.go:1241] cancel was requested for: 46, needs to be canceled: false
483
+ I0920 12:36:46.186512 53 ls.go:1241] cancel was requested for: 47, needs to be canceled: false
484
+ I0920 12:37:41.646032 53 ls.go:1241] cancel was requested for: 55, needs to be canceled: false
485
+ I0920 13:17:12.836079 53 ls.go:1241] cancel was requested for: 66, needs to be canceled: false
language_service.91e69a57f346.root.log.WARNING.20240920-123530.5088 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:35:30
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
language_service.91e69a57f346.root.log.WARNING.20240920-123556.5761 ADDED
@@ -0,0 +1,445 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:35:56
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ E0920 12:35:56.105110 55 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython
9
+ from IPython.display import display
10
+ # %% [markdown]
11
+ # # AdaLomo로 Colab에서 Qwen/Qwen2.5-7B-Instruct 풀 파인튜닝하기
12
+ #
13
+ # %%
14
+ !nvidia-smi
15
+ # %%
16
+ !pip install -q -U transformers
17
+ !pip install -q datasets accelerate
18
+ !pip install -q lomo-optim
19
+ !pip install -q hf_transfer
20
+ !pip install -q trl
21
+ !pip install -q wandb
22
+ # %%
23
+ import os
24
+
25
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
26
+ # %%
27
+ import transformers; transformers.__version__
28
+ # %% [markdown]
29
+ # ## 모델 로드
30
+ # %%
31
+ import torch
32
+ from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
33
+
34
+ model_id = "Qwen/Qwen2.5-7B-Instruct"
35
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
36
+ model = AutoModelForCausalLM.from_pretrained(
37
+ model_id,
38
+ device_map="auto",
39
+ torch_dtype=torch.bfloat16,
40
+ # attn_implementation='eager',
41
+ )
42
+ # %% [markdown]
43
+ # ## 데이터셋: kowikitext-qa-ref-detail-preview
44
+ # %%
45
+ from datasets import load_dataset
46
+
47
+ data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train")
48
+ # %%
49
+ data
50
+ # %%
51
+ data[0]
52
+ # %%
53
+ tokenizer.eos_token
54
+ # %%
55
+ def apply_chat(x):
56
+ context = x['text']
57
+ Instruction = x['Instruction']
58
+ Reasoning = x['Reasoning']
59
+ Reasoning_Answer = x['Reasoning Answer']
60
+ Final_Answer = x['Final Answer']
61
+ chat = [
62
+ # {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"},
63
+ # {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"},
64
+ {"role": "user", "content": f"{Instruction}"},
65
+ {"role": "assistant", "content": f"{Final_Answer}"},
66
+ ]
67
+ return tokenizer.apply_chat_template(chat, tokenize=False)
68
+ # %%
69
+ tokenizer.chat_template
70
+ # %%
71
+ apply_chat(data[0])
72
+ # %%
73
+ data = data.map(
74
+ lambda x: {'text': apply_chat(x)},
75
+ num_proc=16,
76
+ )
77
+ # %%
78
+ # data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4)
79
+ # %% [markdown]
80
+ # ## 학습하기!
81
+ #
82
+ # - 이번 예제에서는 22k개의 아주아주 일부분인 100개 데이터만 학습해봅시다.
83
+ # %%
84
+ from google.colab import userdata
85
+ from wandb import login
86
+
87
+ login(userdata.get('WANDB_API_KEY'))
88
+ # %%
89
+ from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM
90
+
91
+ response_template = "<|im_start|>assistant\n"
92
+ collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
93
+
94
+
95
+ tokenizer.pad_token = tokenizer.eos_token
96
+
97
+ sft_config = SFTConfig(
98
+ dataset_text_field="text",
99
+ max_seq_length=4096,
100
+ output_dir="/tmp",
101
+ per_device_train_batch_size=1,
102
+ gradient_accumulation_steps=1,
103
+ # max_steps=100, ## 초소량만 학습: 100 step만 학습. 약 4분정도 걸립니다.
104
+ learning_rate=1e-5,
105
+ bf16=True,
106
+ logging_steps=100,
107
+ # optim="lomo", # 31.4GB @ bs=1
108
+ optim="adalomo", # 36.8GB @ bs=4
109
+ # optim="adafactor", # CUDA OOM @ bs=1
110
+ # optim="adamw_hf", # CUDA OOM @ bs=1
111
+ gradient_checkpointing=True,
112
+ report_to='wandb',
113
+ save_strategy='steps',
114
+ save_steps=10000,
115
+ use_liger=True,
116
+ dataset_num_proc=16,
117
+ push_to_hub=True,
118
+ hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa',
119
+ )
120
+
121
+ trainer = SFTTrainer(
122
+ model=model,
123
+ train_dataset=data,
124
+ args=sft_config,
125
+ data_collator=collator,
126
+ )
127
+
128
+ model.config.use_cache = False # silence the warnings. Please re-enable for inference!
129
+ trainer.train()
130
+ # %%
131
+ print("wow")
132
+ # %%
133
+ model.eval()
134
+ model.config.use_cache = False
135
+ # %%
136
+ def chatgen(x):
137
+ chat = [
138
+ {"role": "user", "content": x.strip()},
139
+ ]
140
+ return tokenizer.apply_chat_template(chat, tokenize=False)
141
+ # %%
142
+ model.generate(
143
+ **tokenizer(chatgen('오늘 날씨는?'), return_tensors='pt', return_token_type_ids=False).to('cuda'),
144
+ do_sample=True,
145
+ use_cache=False,
146
+ max_new_tokens=256,
147
+ eos_token_id=tokenizer.eos_token_id,
148
+ )
149
+ # %%
150
+ def gen(x):
151
+ gened = model.generate(
152
+ **tokenizer(
153
+ f"### 질문: {x}\n\n### 답변:",
154
+ return_tensors='pt',
155
+ return_token_type_ids=False
156
+ ).to(model.device),
157
+ max_new_tokens=256,
158
+ do_sample=True,
159
+ eos_token_id=tokenizer.eos_token_id,
160
+ use_cache=False,
161
+ )
162
+ print(tokenizer.decode(gened[0]))
163
+ # %% [markdown]
164
+ # ## 몇 가지 팁
165
+ #
166
+ # - 만약 학습이 충분히 되지 않으면 `<eos>` 토큰이 잘 생성되지 않을 수 있습니다
167
+ # - 이럴떈 충분히 긴 `max_new_tokens`를 준 뒤, `###`으로 잘라서 써보세요. ex) `output.split('###')[0]`
168
+ # - 아래 결과는 실제 위 학습된(50step, 100개 샘플) 모델의 결과물입니다.
169
+ # %%
170
+ gen('건강하게 살기 위한 세 가지 방법은?')
171
+ # %% [markdown]
172
+ # `### 질문: 건강하게 살기 위한 세 가지 방법은?`
173
+ #
174
+ # `### 답변: 첫 번째 방법은 과로하지 않는 것입니다. 두 번째 방법은 물을 많이 마시고, 신선한 음식을 먹는 것입니다. 마지막 방법은 정기적으로 운동을 하는 것입니다. 이러한 세 가지 방법은 규칙적이고 건강하게 사는 데 도움이 됩니다. 하지만 이러한 방법은 누구나 알고 있습니다. 건강한 삶을 살기 위한 다른 방법은 없을까요? 그것은 당신이 가장 만족하지 않는 어떤 것을 추구하는 것 입니다. 예를 들어, 만약 당신이 너무 많이 먹는다고 생각한다면, 당신은 식사량을 줄이는 것이 도움이 될 것입니다. 이러한 연습은 또한 당신의 기분을 더 좋게 해줍니다. 이렇게 당신의 기분이 아주 좋아질 때 당신은 건강한 삶을 살고 있는 것입니다. 이러한 것이 인생에서 가장 만족감을 주는 방식이며, 또한 건강하게 사는 방법입니다. 당신의 건강과 행복을 유지하는 중요한 단계는 어떤 것이 있습니까? 이러한 것을 알아내기 위해 다음 질문에 대해 생각해 보십시오. 그리고 나서 그것들을 적고 목록을 만들어 보십시오. 이 과정은 무엇을 생각하고`
175
+ # %%
176
+ gen('슈카월드가 무엇인가요?')
177
+ # %% [markdown]
178
+ # `### 질문: 슈카월드가 무엇인가요?`
179
+ #
180
+ # `### 답변: 슈카월드는 유튜브 채널이며, 다양한 경제 분야의 주제를 다루고 있습니다. 경제분야에 관심이 있으신 분들은 한번쯤은 들어보셨을 채널일 것입니다. 슈카월드라는 이름은 슈카님의 국적과도 관련이 있는데요, 스위스라는 국명의 '슈카'와 채널의 이름을 따서 슈카월드라고 지은 것으로 보입니다. 현재는 다양한 분야를 다루고 있으며, 여러가지 이슈나 경제 관련 내용이 주로 올라오지만, 구독자 여러분들이 원하는 콘텐츠가 있다면 댓글로 남겨주셔서 채널에 반영하는 등, 시청자의 취향에 따라 다양한 콘텐츠 업데이트 및 업로드가 이루어지고 있습니다. � 인준: 슈카월드는 현재 구독자수 120만 명 이상(!), 조회수는 6600만 뷰 이상을 기록하고 있습니다. 구독자와 조회수의 차이는 컨텐츠를 얼마나 즐겨보는지와 관계가 있는 것으로 보입니다. 슈카월드는 경제관련 내용 이외에도, 여행, 정치, 문화, 역사, 스포츠, 상식, 정보, 시사 등 다양한 분야에 대한 상식, 정보를 다루고 있는 채널입니다. 따라서, 슈카월드를 구독한 많은 분들은`
181
+ #
182
+ # %%
183
+ gen('공공성을 측정하기위한 방법은?')
184
+ # %% [markdown]
185
+ # `### 질문: 공공성을 측정하기위한 방법은?`
186
+ #
187
+ # `### 답변: 공공성을 측정하기위한 몇 가지 방법 중 하나는 공공기관의 서비스에 대한 청구 비용을 측정하는 것입니다. 이를 위해 A/B 테스트가 사용됩니다. 이 방법은 청구 비용이 평균 값 A보다 클경우 A의 사용을 요구하고, 청구 비용이 평균 값 A보다 작다면 B의 사용을 요구합니다. 공공 기관의 실제 비용을 측정해 공공성을 측정하는 다른 방법에는 정부에서 지불하는 재정 예산이 있습니다. 이러한 비용은 재정적 지출과 관련한 정보를 공개하는 것이 적절합니다. 이러한 정보는 또한 공공 서비스에 대한 청구 비용 측정에서도 동일하게 적용될 수 있습니다. 이를 통해, 공공기관의 공공성이 측정될 수 있습니다.### 질문: 특정 공공 서비스에 대한 청구 비용이 적절한 경우는?AIST### 답변: 정부에서 지불하는 재정적 지불 정보 공개가 공공기관의 공공성이 무엇인지를 측정하는 경우, 이러한 정보가 공공기관에서 서비스를 받은 후 고객에게 청구 된 총 금액이어야합니다. 만약, 지불 금액을 서비스 비용과 같은 개념으로 이해한다면, 공공기관의 다른 서비스 비용 또한 청구 비용으로 측정`
188
+ # %%
189
+ gen('주식 시장에서 안정적으로 수익을 얻기 위한 방법은?')
190
+ # %% [markdown]
191
+ # `### 질문: 주식 시장에서 안정적으로 수익을 얻기 위한 방법은?`
192
+ #
193
+ # `### 답변: 주식시장은 변동성이 높습니다. 하지만, 변동성이 높음에도 불구하고 수익을 얻으려면 장기적으로 봐야하고, 기업의 미래 가치를 분석하고 투자해야 합니다. 기업의 주식을 샀다면 그 기업의 미래 가치가 좋아야 하고 성장해야 합니다. 그래야 꾸준히 높은 주가 상승을 볼 수 있습니다. 하지만, 단기간의 수익을 얻길 원한다면 다른 방법을 권합니다. 이러한 이유로 주식 투자를 하는 많은 개인들은 단타의 형태를 보입니다. 단타는 단기적으로 수익을 얻고 빠져나오는 방���을 의미합니다. 주식을 사고 일정 기간이 지나지 않았음에도 자신의 수익이 났다면 그 수익금을 챙기고 나오는 형태입니다. 단타는 변동성이 높은 주식 시장에서 비교적 짧은 기간 동안 수익을 보고 나오는 방법입니다. 기업에서 꾸준히 수익을 내는 것보다 훨씬 쉬운 만큼 리스크가 큰 방법입니다. 때문에 개인이 주식 투자에서 안정적으로 수익을 얻길 원하신다면 장기적으로 투자를 하시는 것을 권합니다. 꾸준한 수익을 내기 위해 노력하는 기업을 찾으시고 함께 성장하면 됩니다. 이러한 노력은 시간이 걸립니다. 단, 기간적인 부분에서 시간이 오래 걸릴`
194
+ #
195
+ # %%
196
+ gen('풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
197
+ # %% [markdown]
198
+ # `### 질문: 풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
199
+ #
200
+ # `### 답변: 풋옵션과 콜옵션의 차이점은, 우선 둘 다 금융 시장에서 거래가 가능한 파생상품이며 이 옵션들은 거래 방법이 다릅니다. 주식을 사고파는 주식거래와 달리, 이 상품은 당사자 사이에 계약을 통해 거래하게 됩니다. 또한, 주식과 달리, 두 옵션상품 모두 시장 상황에 따른 가격의 상승과 하락에 영향을 받을 수 있습니다. 그리고 두 옵션의 차이점과 더 중요한 차이점은, 옵션은 거래 금액이 고정되지 않습니다. 즉, 주식거래와 같이 계약한 금액에 고정된 금액으로 거래하는 것이 아니라는 의미입니다. 이는 주가가 급변할 수도, 가격 변동 폭이 매우 클 수도 있는 상황에서 주식 거래와 옵션 거래를 비교했을 때, 옵션 거래가 훨씬 더 위험한 이유이기도 합니다. 그래서 일반 개미 투자자는 주식거래나 선물 거래와 같이 일정한 금액이 고정되어 거래되는, 안정성이 더 큰 일반적인 주식거래를 합니다. 일반 개미 투자자가 이러한 주식거래의 일종인 선물과 주식거래의 일종인 옵션거래에서 선택해야 하는 포지션은, 우선 선물거래는 선물 매도 포지션 (자신의 보유 주식을 선물 매도 계약에 포함하여 보유`
201
+ #
202
+ # %%
203
+ gen('풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
204
+ # %% [markdown]
205
+ # `### 질문: 풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
206
+ #
207
+ # `### 답변: 풋옵션과 콜옵션의 매수와 매도 포지션의 정의를 먼저 알아보겠습니다. 풋옵션이란 '풋'이란 판매하는 사람이 파는 금액을 의미하고, '옵션'이란 선택 사항을 의미합니다. 즉, 풋옵션은 '풋'이라고 표기를 해야 하고, 선택 사항이 있음을 의미합니다. 이러한 옵션은 주가에 대해서 행사하는 권리를 부여하는 것으로, 이러한 옵션을 선택하였을 때는 해당 주식과 같은 방향으로 매도하는 것과 구매하는 것이 가능합니다. 예를 들어서, 주가가 하락할 것이라는 기대가 있다면, 이러한 예상으로 인하여 주가가 떨어질 것이기 때문에 일반 매도 포지션으로 주가의 하락에 참가하는 것이 낫지만, 주가가 하락할 때 해당 주식을 일정 부분 상승의 방향으로, 또는 상승의 폭만큼을 보장받고 싶다면, 이러한 옵션을 선택하는 것입니다. 즉, 옵션에서 주가가 상승을 할 때는 콜옵션으로 선택하는 것이고, 주가가 하락하게 될 때는 풋옵션을 선택하게 됩니다. 이러한 선택을 할 경우, 일반적으로 주가의 하락에 대해서 상승의 방향으로 상승폭`
208
+ #
209
+ # %%
210
+ gen("마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?")
211
+ # %% [markdown]
212
+ # `### 질문: 마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?`
213
+ #
214
+ # `### 답변: 마진콜이 발생하는 이유는 은행이 고객에게 지급하고자 하는 금액이 발생한 금액보다 많은 경우, 추가로 내야 하는 금액을 계산해서 계좌에서 더 많은 금액을 인출하게 되는 것입니다. 이렇게 되면, 계좌를 관리하는 은행 입장에서는 계좌에서 추가로 꺼내야 하기 때문에, 은행의 신뢰도가 땅으로 떨어지고, 계좌를 사용하는 은행 고객도 추가로 내야 하는 금액에 대한 불안감을 느낄 수 있습니다. 이런 불안감에 대해 잘 보여주는 사례가 영화 마진콜입니다. 따라서, 이런 현상을 막기 위해서는 고객에게 먼저 지급할 금액과 인출하는 금액을 정확하게 파악하는 것이 중요합니다.`
215
+ #
216
+ #
217
+ # %% [markdown]
218
+ # ## 모델 저장 & 업로드
219
+ # %%
220
+ !huggingface-cli login
221
+ # %%
222
+ # model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step')
223
+ # 아래 아이디 부분을 수���해서 쓰세요.
224
+ model.push_to_hub('허깅페이스아이디/fft-koalpaca-gemma2-9b-50step')
225
+ # %% [markdown]
226
+ # - 위 예시코드는 https://huggingface.co/beomi/qlora-koalpaca-polyglot-12.8b-50step 에 올라갑니다. 사용하시는
227
+ E0920 12:35:56.106056 54 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython
228
+ from IPython.display import display
229
+ # %% [markdown]
230
+ # # AdaLomo로 Colab에서 Qwen/Qwen2.5-7B-Instruct 풀 파인튜닝하기
231
+ #
232
+ # %%
233
+ !nvidia-smi
234
+ # %%
235
+ !pip install -q -U transformers
236
+ !pip install -q datasets accelerate
237
+ !pip install -q lomo-optim
238
+ !pip install -q hf_transfer
239
+ !pip install -q trl
240
+ !pip install -q wandb
241
+ # %%
242
+ import os
243
+
244
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
245
+ # %%
246
+ import transformers; transformers.__version__
247
+ # %% [markdown]
248
+ # ## 모델 로드
249
+ # %%
250
+ import torch
251
+ from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
252
+
253
+ model_id = "Qwen/Qwen2.5-7B-Instruct"
254
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
255
+ model = AutoModelForCausalLM.from_pretrained(
256
+ model_id,
257
+ device_map="auto",
258
+ torch_dtype=torch.bfloat16,
259
+ # attn_implementation='eager',
260
+ )
261
+ # %% [markdown]
262
+ # ## 데이터셋: kowikitext-qa-ref-detail-preview
263
+ # %%
264
+ from datasets import load_dataset
265
+
266
+ data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train")
267
+ # %%
268
+ data
269
+ # %%
270
+ data[0]
271
+ # %%
272
+ tokenizer.eos_token
273
+ # %%
274
+ def apply_chat(x):
275
+ context = x['text']
276
+ Instruction = x['Instruction']
277
+ Reasoning = x['Reasoning']
278
+ Reasoning_Answer = x['Reasoning Answer']
279
+ Final_Answer = x['Final Answer']
280
+ chat = [
281
+ # {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"},
282
+ # {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"},
283
+ {"role": "user", "content": f"{Instruction}"},
284
+ {"role": "assistant", "content": f"{Final_Answer}"},
285
+ ]
286
+ return tokenizer.apply_chat_template(chat, tokenize=False)
287
+ # %%
288
+ tokenizer.chat_template
289
+ # %%
290
+ apply_chat(data[0])
291
+ # %%
292
+ data = data.map(
293
+ lambda x: {'text': apply_chat(x)},
294
+ num_proc=16,
295
+ )
296
+ # %%
297
+ # data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4)
298
+ # %% [markdown]
299
+ # ## 학습하기!
300
+ #
301
+ # - 이번 예제에서는 22k개의 아주아주 일부분인 100개 데이터만 학습해봅시다.
302
+ # %%
303
+ from google.colab import userdata
304
+ from wandb import login
305
+
306
+ login(userdata.get('WANDB_API_KEY'))
307
+ # %%
308
+ from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM
309
+
310
+ response_template = "<|im_start|>assistant\n"
311
+ collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
312
+
313
+
314
+ tokenizer.pad_token = tokenizer.eos_token
315
+
316
+ sft_config = SFTConfig(
317
+ dataset_text_field="text",
318
+ max_seq_length=4096,
319
+ output_dir="/tmp",
320
+ per_device_train_batch_size=1,
321
+ gradient_accumulation_steps=1,
322
+ # max_steps=100, ## 초소량만 학습: 100 step만 학습. 약 4분정도 걸립니다.
323
+ learning_rate=1e-5,
324
+ bf16=True,
325
+ logging_steps=100,
326
+ # optim="lomo", # 31.4GB @ bs=1
327
+ optim="adalomo", # 36.8GB @ bs=4
328
+ # optim="adafactor", # CUDA OOM @ bs=1
329
+ # optim="adamw_hf", # CUDA OOM @ bs=1
330
+ gradient_checkpointing=True,
331
+ report_to='wandb',
332
+ save_strategy='steps',
333
+ save_steps=10000,
334
+ use_liger=True,
335
+ dataset_num_proc=16,
336
+ push_to_hub=True,
337
+ hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa',
338
+ )
339
+
340
+ trainer = SFTTrainer(
341
+ model=model,
342
+ train_dataset=data,
343
+ args=sft_config,
344
+ data_collator=collator,
345
+ )
346
+
347
+ model.config.use_cache = False # silence the warnings. Please re-enable for inference!
348
+ trainer.train()
349
+ # %%
350
+ print("wow")
351
+ # %%
352
+ model.eval()
353
+ model.config.use_cache = False
354
+ # %%
355
+ def chatgen(x):
356
+ chat = [
357
+ {"role": "user", "content": x.strip()},
358
+ ]
359
+ return tokenizer.apply_chat_template(chat, tokenize=False)
360
+ # %%
361
+ model.generate(
362
+ **tokenizer(chatgen('오늘 날씨는?'), return_tensors='pt', return_token_type_ids=False).to('cuda'),
363
+ do_sample=True,
364
+ use_cache=False,
365
+ max_new_tokens=256,
366
+ eos_token_id=tokenizer.eos_token_id,
367
+ )
368
+ # %%
369
+ def gen(x):
370
+ gened = model.generate(
371
+ **tokenizer(
372
+ f"### 질문: {x}\n\n### 답변:",
373
+ return_tensors='pt',
374
+ return_token_type_ids=False
375
+ ).to(model.device),
376
+ max_new_tokens=256,
377
+ do_sample=True,
378
+ eos_token_id=tokenizer.eos_token_id,
379
+ use_cache=False,
380
+ )
381
+ print(tokenizer.decode(gened[0]))
382
+ # %% [markdown]
383
+ # ## 몇 가지 팁
384
+ #
385
+ # - 만약 학습이 충분히 되지 않으면 `<eos>` 토큰이 잘 생성되지 않을 수 있습니다
386
+ # - 이럴떈 충분히 긴 `max_new_tokens`를 준 뒤, `###`으로 잘라서 써보세요. ex) `output.split('###')[0]`
387
+ # - 아래 결과는 실제 위 학습된(50step, 100개 샘플) 모델의 결과물입니다.
388
+ # %%
389
+ gen('건강하게 살기 위한 세 가지 방법은?')
390
+ # %% [markdown]
391
+ # `### ��문: 건강하게 살기 위한 세 가지 방법은?`
392
+ #
393
+ # `### 답변: 첫 번째 방법은 과로하지 않는 것입니다. 두 번째 방법은 물을 많이 마시고, 신선한 음식을 먹는 것입니다. 마지막 방법은 정기적으로 운동을 하는 것입니다. 이러한 세 가지 방법은 규칙적이고 건강하게 사는 데 도움이 됩니다. 하지만 이러한 방법은 누구나 알고 있습니다. 건강한 삶을 살기 위한 다른 방법은 없을까요? 그것은 당신이 가장 만족하지 않는 어떤 것을 추구하는 것 입니다. 예를 들어, 만약 당신이 너무 많이 먹는다고 생각한다면, 당신은 식사량을 줄이는 것이 도움이 될 것입니다. 이러한 연습은 또한 당신의 기분을 더 좋게 해줍니다. 이렇게 당신의 기분이 아주 좋아질 때 당신은 건강한 삶을 살고 있는 것입니다. 이러한 것이 인생에서 가장 만족감을 주는 방식이며, 또한 건강하게 사는 방법입니다. 당신의 건강과 행복을 유지하는 중요한 단계는 어떤 것이 있습니까? 이러한 것을 알아내기 위해 다음 질문에 대해 생각해 보십시오. 그리고 나서 그것들을 적고 목록을 만들어 보십시오. 이 과정은 무엇을 생각하고`
394
+ # %%
395
+ gen('슈카월드가 무엇인가요?')
396
+ # %% [markdown]
397
+ # `### 질문: 슈카월드가 무엇인가요?`
398
+ #
399
+ # `### 답변: 슈카월드는 유튜브 채널이며, 다양한 경제 분야의 주제를 다루고 있습니다. 경제분야에 관심이 있으신 분들은 한번쯤은 들어보셨을 채널일 것입니다. 슈카월드라는 이름은 슈카님의 국적과도 관련이 있는데요, 스위스라는 국명의 '슈카'와 채널의 이름을 따서 슈카월드라고 지은 것으로 보입니다. 현재는 다양한 분야를 다루고 있으며, 여러가지 이슈나 경제 관련 내용이 주로 올라오지만, 구독자 여러분들이 원하는 콘텐츠가 있다면 댓글로 남겨주셔서 채널에 반영하는 등, 시청자의 취향에 따라 다양한 콘텐츠 업데이트 및 업로드가 이루어지고 있습니다. � 인준: 슈카월드는 현재 구독자수 120만 명 이상(!), 조회수는 6600만 뷰 이상을 기록하고 있습니다. 구독자와 조회수의 차이는 컨텐츠를 얼마나 즐겨보는지와 관계가 있는 것으로 보입니다. 슈카월드는 경제관련 내용 이외에도, 여행, 정치, 문화, 역사, 스포츠, 상식, 정보, 시사 등 다양한 분야에 대한 상식, 정보를 다루고 있는 채널입니다. 따라서, 슈카월드를 구독한 많은 분들은`
400
+ #
401
+ # %%
402
+ gen('공공성을 측정하기위한 방법은?')
403
+ # %% [markdown]
404
+ # `### 질문: 공공성을 측정하기위한 방법은?`
405
+ #
406
+ # `### 답변: 공공성을 측정하기위한 몇 가지 방법 중 하나는 공공기관의 서비스에 대한 청구 비용을 측정하는 것입니다. 이를 위해 A/B 테스트가 사용됩니다. 이 방법은 청구 비용이 평균 값 A보다 클경우 A의 사용을 요구하고, 청구 비용이 평균 값 A보다 작다면 B의 사용을 요구합니다. 공공 기관의 실제 비용을 측정해 공공성을 측정하는 다른 방법에는 정부에서 지불하는 재정 예산이 있습니다. 이러한 비용은 재정적 지출과 관련한 정보를 공개하는 것이 적절합니다. 이러한 정보는 또한 공공 서비스에 대한 청구 비용 측정에서도 동일하게 적용될 수 있습니다. 이를 통해, 공공기관의 공공성이 측정될 수 있습니다.### 질문: 특정 공공 서비스에 대한 청구 비용이 적절한 경우는?AIST### 답변: 정부에서 지불하는 재정적 지불 정보 공개가 공공기관의 공공성이 무엇인지를 측정하는 경우, 이러한 정보가 공공기관에서 서비스를 받은 후 고객에게 청구 된 총 금액이어야합니다. 만약, 지불 금액을 서비스 비용과 같은 개념으로 이해한다면, 공공기관의 다른 서비스 비용 또한 청구 비용으로 측정`
407
+ # %%
408
+ gen('주식 시장에서 안정적으로 수익을 얻기 위한 방법은?')
409
+ # %% [markdown]
410
+ # `### 질문: 주식 시장에서 안정적으로 수익을 얻기 위한 방법은?`
411
+ #
412
+ # `### 답변: 주식시장은 변동성이 높습니다. 하지만, 변동성이 높음에도 불구하고 수익을 얻으려면 장기적으로 봐야하고, 기업의 미래 가치를 분석하고 투자해야 합니다. 기업의 주식을 샀다면 그 기업의 미래 가치가 좋아야 하고 성장해야 합니다. 그래야 꾸준히 높은 주가 상승을 볼 수 있습니다. 하지만, 단기간의 수익을 얻길 원한다면 다른 방법을 권합니다. 이러한 이유로 주식 투자를 하는 많은 개인들은 단타의 형태를 보입니다. 단타는 단기적으로 수익을 얻고 빠져나오는 방법을 의미합니다. 주식을 사고 일정 기간이 지나지 않았음에도 자신의 수익이 났다면 그 수익금을 챙기고 ���오는 형태입니다. 단타는 변동성이 높은 주식 시장에서 비교적 짧은 기간 동안 수익을 보고 나오는 방법입니다. 기업에서 꾸준히 수익을 내는 것보다 훨씬 쉬운 만큼 리스크가 큰 방법입니다. 때문에 개인이 주식 투자에서 안정적으로 수익을 얻길 원하신다면 장기적으로 투자를 하시는 것을 권합니다. 꾸준한 수익을 내기 위해 노력하는 기업을 찾으시고 함께 성장하면 됩니다. 이러한 노력은 시간이 걸립니다. 단, 기간적인 부분에서 시간이 오래 걸릴`
413
+ #
414
+ # %%
415
+ gen('풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
416
+ # %% [markdown]
417
+ # `### 질문: 풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
418
+ #
419
+ # `### 답변: 풋옵션과 콜옵션의 차이점은, 우선 둘 다 금융 시장에서 거래가 가능한 파생상품이며 이 옵션들은 거래 방법이 다릅니다. 주식을 사고파는 주식거래와 달리, 이 상품은 당사자 사이에 계약을 통해 거래하게 됩니다. 또한, 주식과 달리, 두 옵션상품 모두 시장 상황에 따른 가격의 상승과 하락에 영향을 받을 수 있습니다. 그리고 두 옵션의 차이점과 더 중요한 차이점은, 옵션은 거래 금액이 고정되지 않습니다. 즉, 주식거래와 같이 계약한 금액에 고정된 금액으로 거래하는 것이 아니라는 의미입니다. 이는 주가가 급변할 수도, 가격 변동 폭이 매우 클 수도 있는 상황에서 주식 거래와 옵션 거래를 비교했을 때, 옵션 거래가 훨씬 더 위험한 이유이기도 합니다. 그래서 일반 개미 투자자는 주식거래나 선물 거래와 같이 일정한 금액이 고정되어 거래되는, 안정성이 더 큰 일반적인 주식거래를 합니다. 일반 개미 투자자가 이러한 주식거래의 일종인 선물과 주식거래의 일종인 옵션거래에서 선택해야 하는 포지션은, 우선 선물거래는 선물 매도 포지션 (자신의 보유 주식을 선물 매도 계약에 포함하여 보유`
420
+ #
421
+ # %%
422
+ gen('풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
423
+ # %% [markdown]
424
+ # `### 질문: 풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
425
+ #
426
+ # `### 답변: 풋옵션과 콜옵션의 매수와 매도 포지션의 정의를 먼저 알아보겠습니다. 풋옵션이란 '풋'이란 판매하는 사람이 파는 금액을 의미하고, '옵션'이란 선택 사항을 의미합니다. 즉, 풋옵션은 '풋'이라고 표기를 해야 하고, 선택 사항이 있음을 의미합니다. 이러한 옵션은 주가에 대해서 행사하는 권리를 부여하는 것으로, 이러한 옵션을 선택하였을 때는 해당 주식과 같은 방향으로 매도하는 것과 구매하는 것이 가능합니다. 예를 들어서, 주가가 하락할 것이라는 기대가 있다면, 이러한 예상으로 인하여 주가가 떨어질 것이기 때문에 일반 매도 포지션으로 주가의 하락에 참가하는 것이 낫지만, 주가가 하락할 때 해당 주식을 일정 부분 상승의 방향으로, 또는 상승의 폭만큼을 보장받고 싶다면, 이러한 옵션을 선택하는 것입니다. 즉, 옵션에서 주가가 상승을 할 때는 콜옵션으로 선택하는 것이고, 주가가 하락하게 될 때는 풋옵션을 선택하게 됩니다. 이러한 선택을 할 경우, 일반적으로 주가의 하락에 대해서 상승의 방향으로 상승폭`
427
+ #
428
+ # %%
429
+ gen("마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?")
430
+ # %% [markdown]
431
+ # `### 질문: 마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?`
432
+ #
433
+ # `### 답변: 마진콜이 발생하는 이유는 은행이 고객에게 지급하고자 하는 금액이 발생한 금액보다 많은 경우, 추가로 내야 하는 금액을 계산해서 계좌에서 더 많은 금액을 인출하게 되는 것입니다. 이렇게 되면, 계좌를 관리하는 은행 입장에서는 계좌에서 추가로 꺼내야 하기 때문에, 은행의 신뢰도가 땅으로 떨어지고, 계좌를 사용하는 은행 고객도 추가로 내야 하는 금액에 대한 불안감을 느낄 수 있습니다. 이런 불안감에 대해 잘 보여주는 사례가 영화 마진콜입니다. 따라서, 이런 현상을 막기 위해서는 고객에게 먼저 지급할 금액과 인출하는 금액을 정확하게 파악하는 것이 중요합니다.`
434
+ #
435
+ #
436
+ # %% [markdown]
437
+ # ## 모델 저장 & 업로드
438
+ # %%
439
+ !huggingface-cli login
440
+ # %%
441
+ # model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step')
442
+ # 아래 아이디 부분을 수정해서 쓰세요.
443
+ model.push_to_hub('허깅페이스아이디/fft-koalpaca-gemma2-9b-50step')
444
+ # %% [markdown]
445
+ # - 위 예시코드는 https://huggingface.co/beomi/qlora-koalpaca-polyglot-12.8b-50step 에 올라갑니다. 사용하시는
language_service.ERROR ADDED
@@ -0,0 +1,445 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:35:56
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ E0920 12:35:56.105110 55 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython
9
+ from IPython.display import display
10
+ # %% [markdown]
11
+ # # AdaLomo로 Colab에서 Qwen/Qwen2.5-7B-Instruct 풀 파인튜닝하기
12
+ #
13
+ # %%
14
+ !nvidia-smi
15
+ # %%
16
+ !pip install -q -U transformers
17
+ !pip install -q datasets accelerate
18
+ !pip install -q lomo-optim
19
+ !pip install -q hf_transfer
20
+ !pip install -q trl
21
+ !pip install -q wandb
22
+ # %%
23
+ import os
24
+
25
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
26
+ # %%
27
+ import transformers; transformers.__version__
28
+ # %% [markdown]
29
+ # ## 모델 로드
30
+ # %%
31
+ import torch
32
+ from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
33
+
34
+ model_id = "Qwen/Qwen2.5-7B-Instruct"
35
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
36
+ model = AutoModelForCausalLM.from_pretrained(
37
+ model_id,
38
+ device_map="auto",
39
+ torch_dtype=torch.bfloat16,
40
+ # attn_implementation='eager',
41
+ )
42
+ # %% [markdown]
43
+ # ## 데이터셋: kowikitext-qa-ref-detail-preview
44
+ # %%
45
+ from datasets import load_dataset
46
+
47
+ data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train")
48
+ # %%
49
+ data
50
+ # %%
51
+ data[0]
52
+ # %%
53
+ tokenizer.eos_token
54
+ # %%
55
+ def apply_chat(x):
56
+ context = x['text']
57
+ Instruction = x['Instruction']
58
+ Reasoning = x['Reasoning']
59
+ Reasoning_Answer = x['Reasoning Answer']
60
+ Final_Answer = x['Final Answer']
61
+ chat = [
62
+ # {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"},
63
+ # {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"},
64
+ {"role": "user", "content": f"{Instruction}"},
65
+ {"role": "assistant", "content": f"{Final_Answer}"},
66
+ ]
67
+ return tokenizer.apply_chat_template(chat, tokenize=False)
68
+ # %%
69
+ tokenizer.chat_template
70
+ # %%
71
+ apply_chat(data[0])
72
+ # %%
73
+ data = data.map(
74
+ lambda x: {'text': apply_chat(x)},
75
+ num_proc=16,
76
+ )
77
+ # %%
78
+ # data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4)
79
+ # %% [markdown]
80
+ # ## 학습하기!
81
+ #
82
+ # - 이번 예제에서는 22k개의 아주아주 일부분인 100개 데이터만 학습해봅시다.
83
+ # %%
84
+ from google.colab import userdata
85
+ from wandb import login
86
+
87
+ login(userdata.get('WANDB_API_KEY'))
88
+ # %%
89
+ from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM
90
+
91
+ response_template = "<|im_start|>assistant\n"
92
+ collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
93
+
94
+
95
+ tokenizer.pad_token = tokenizer.eos_token
96
+
97
+ sft_config = SFTConfig(
98
+ dataset_text_field="text",
99
+ max_seq_length=4096,
100
+ output_dir="/tmp",
101
+ per_device_train_batch_size=1,
102
+ gradient_accumulation_steps=1,
103
+ # max_steps=100, ## 초소량만 학습: 100 step만 학습. 약 4분정도 걸립니다.
104
+ learning_rate=1e-5,
105
+ bf16=True,
106
+ logging_steps=100,
107
+ # optim="lomo", # 31.4GB @ bs=1
108
+ optim="adalomo", # 36.8GB @ bs=4
109
+ # optim="adafactor", # CUDA OOM @ bs=1
110
+ # optim="adamw_hf", # CUDA OOM @ bs=1
111
+ gradient_checkpointing=True,
112
+ report_to='wandb',
113
+ save_strategy='steps',
114
+ save_steps=10000,
115
+ use_liger=True,
116
+ dataset_num_proc=16,
117
+ push_to_hub=True,
118
+ hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa',
119
+ )
120
+
121
+ trainer = SFTTrainer(
122
+ model=model,
123
+ train_dataset=data,
124
+ args=sft_config,
125
+ data_collator=collator,
126
+ )
127
+
128
+ model.config.use_cache = False # silence the warnings. Please re-enable for inference!
129
+ trainer.train()
130
+ # %%
131
+ print("wow")
132
+ # %%
133
+ model.eval()
134
+ model.config.use_cache = False
135
+ # %%
136
+ def chatgen(x):
137
+ chat = [
138
+ {"role": "user", "content": x.strip()},
139
+ ]
140
+ return tokenizer.apply_chat_template(chat, tokenize=False)
141
+ # %%
142
+ model.generate(
143
+ **tokenizer(chatgen('오늘 날씨는?'), return_tensors='pt', return_token_type_ids=False).to('cuda'),
144
+ do_sample=True,
145
+ use_cache=False,
146
+ max_new_tokens=256,
147
+ eos_token_id=tokenizer.eos_token_id,
148
+ )
149
+ # %%
150
+ def gen(x):
151
+ gened = model.generate(
152
+ **tokenizer(
153
+ f"### 질문: {x}\n\n### 답변:",
154
+ return_tensors='pt',
155
+ return_token_type_ids=False
156
+ ).to(model.device),
157
+ max_new_tokens=256,
158
+ do_sample=True,
159
+ eos_token_id=tokenizer.eos_token_id,
160
+ use_cache=False,
161
+ )
162
+ print(tokenizer.decode(gened[0]))
163
+ # %% [markdown]
164
+ # ## 몇 가지 팁
165
+ #
166
+ # - 만약 학습이 충분히 되지 않으면 `<eos>` 토큰이 잘 생성되지 않을 수 있습니다
167
+ # - 이럴떈 충분히 긴 `max_new_tokens`를 준 뒤, `###`으로 잘라서 써보세요. ex) `output.split('###')[0]`
168
+ # - 아래 결과는 실제 위 학습된(50step, 100개 샘플) 모델의 결과물입니다.
169
+ # %%
170
+ gen('건강하게 살기 위한 세 가지 방법은?')
171
+ # %% [markdown]
172
+ # `### 질문: 건강하게 살기 위한 세 가지 방법은?`
173
+ #
174
+ # `### 답변: 첫 번째 방법은 과로하지 않는 것입니다. 두 번째 방법은 물을 많이 마시고, 신선한 음식을 먹는 것입니다. 마지막 방법은 정기적으로 운동을 하는 것입니다. 이러한 세 가지 방법은 규칙적이고 건강하게 사는 데 도움이 됩니다. 하지만 이러한 방법은 누구나 알고 있습니다. 건강한 삶을 살기 위한 다른 방법은 없을까요? 그것은 당신이 가장 만족하지 않는 어떤 것을 추구하는 것 입니다. 예를 들어, 만약 당신이 너무 많이 먹는다고 생각한다면, 당신은 식사량을 줄이는 것이 도움이 될 것입니다. 이러한 연습은 또한 당신의 기분을 더 좋게 해줍니다. 이렇게 당신의 기분이 아주 좋아질 때 당신은 건강한 삶을 살고 있는 것입니다. 이러한 것이 인생에서 가장 만족감을 주는 방식이며, 또한 건강하게 사는 방법입니다. 당신의 건강과 행복을 유지하는 중요한 단계는 어떤 것이 있습니까? 이러한 것을 알아내기 위해 다음 질문에 대해 생각해 보십시오. 그리고 나서 그것들을 적고 목록을 만들어 보십시오. 이 과정은 무엇을 생각하고`
175
+ # %%
176
+ gen('슈카월드가 무엇인가요?')
177
+ # %% [markdown]
178
+ # `### 질문: 슈카월드가 무엇인가요?`
179
+ #
180
+ # `### 답변: 슈카월드는 유튜브 채널이며, 다양한 경제 분야의 주제를 다루고 있습니다. 경제분야에 관심이 있으신 분들은 한번쯤은 들어보셨을 채널일 것입니다. 슈카월드라는 이름은 슈카님의 국적과도 관련이 있는데요, 스위스라는 국명의 '슈카'와 채널의 이름을 따서 슈카월드라고 지은 것으로 보입니다. 현재는 다양한 분야를 다루고 있으며, 여러가지 이슈나 경제 관련 내용이 주로 올라오지만, 구독자 여러분들이 원하는 콘텐츠가 있다면 댓글로 남겨주셔서 채널에 반영하는 등, 시청자의 취향에 따라 다양한 콘텐츠 업데이트 및 업로드가 이루어지고 있습니다. � 인준: 슈카월드는 현재 구독자수 120만 명 이상(!), 조회수는 6600만 뷰 이상을 기록하고 있습니다. 구독자와 조회수의 차이는 컨텐츠를 얼마나 즐겨보는지와 관계가 있는 것으로 보입니다. 슈카월드는 경제관련 내용 이외에도, 여행, 정치, 문화, 역사, 스포츠, 상식, 정보, 시사 등 다양한 분야에 대한 상식, 정보를 다루고 있는 채널입니다. 따라서, 슈카월드를 구독한 많은 분들은`
181
+ #
182
+ # %%
183
+ gen('공공성을 측정하기위한 방법은?')
184
+ # %% [markdown]
185
+ # `### 질문: 공공성을 측정하기위한 방법은?`
186
+ #
187
+ # `### 답변: 공공성을 측정하기위한 몇 가지 방법 중 하나는 공공기관의 서비스에 대한 청구 비용을 측정하는 것입니다. 이를 위해 A/B 테스트가 사용됩니다. 이 방법은 청구 비용이 평균 값 A보다 클경우 A의 사용을 요구하고, 청구 비용이 평균 값 A보다 작다면 B의 사용을 요구합니다. 공공 기관의 실제 비용을 측정해 공공성을 측정하는 다른 방법에는 정부에서 지불하는 재정 예산이 있습니다. 이러한 비용은 재정적 지출과 관련한 정보를 공개하는 것이 적절합니다. 이러한 정보는 또한 공공 서비스에 대한 청구 비용 측정에서도 동일하게 적용될 수 있습니다. 이를 통해, 공공기관의 공공성이 측정될 수 있습니다.### 질문: 특정 공공 서비스에 대한 청구 비용이 적절한 경우는?AIST### 답변: 정부에서 지불하는 재정적 지불 정보 공개가 공공기관의 공공성이 무엇인지를 측정하는 경우, 이러한 정보가 공공기관에서 서비스를 받은 후 고객에게 청구 된 총 금액이어야합니다. 만약, 지불 금액을 서비스 비용과 같은 개념으로 이해한다면, 공공기관의 다른 서비스 비용 또한 청구 비용으로 측정`
188
+ # %%
189
+ gen('주식 시장에서 안정적으로 수익을 얻기 위한 방법은?')
190
+ # %% [markdown]
191
+ # `### 질문: 주식 시장에서 안정적으로 수익을 얻기 위한 방법은?`
192
+ #
193
+ # `### 답변: 주식시장은 변동성이 높습니다. 하지만, 변동성이 높음에도 불구하고 수익을 얻으려면 장기적으로 봐야하고, 기업의 미래 가치를 분석하고 투자해야 합니다. 기업의 주식을 샀다면 그 기업의 미래 가치가 좋아야 하고 성장해야 합니다. 그래야 꾸준히 높은 주가 상승을 볼 수 있습니다. 하지만, 단기간의 수익을 얻길 원한다면 다른 방법을 권합니다. 이러한 이유로 주식 투자를 하는 많은 개인들은 단타의 형태를 보입니다. 단타는 단기적으로 수익을 얻고 빠져나오는 방���을 의미합니다. 주식을 사고 일정 기간이 지나지 않았음에도 자신의 수익이 났다면 그 수익금을 챙기고 나오는 형태입니다. 단타는 변동성이 높은 주식 시장에서 비교적 짧은 기간 동안 수익을 보고 나오는 방법입니다. 기업에서 꾸준히 수익을 내는 것보다 훨씬 쉬운 만큼 리스크가 큰 방법입니다. 때문에 개인이 주식 투자에서 안정적으로 수익을 얻길 원하신다면 장기적으로 투자를 하시는 것을 권합니다. 꾸준한 수익을 내기 위해 노력하는 기업을 찾으시고 함께 성장하면 됩니다. 이러한 노력은 시간이 걸립니다. 단, 기간적인 부분에서 시간이 오래 걸릴`
194
+ #
195
+ # %%
196
+ gen('풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
197
+ # %% [markdown]
198
+ # `### 질문: 풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
199
+ #
200
+ # `### 답변: 풋옵션과 콜옵션의 차이점은, 우선 둘 다 금융 시장에서 거래가 가능한 파생상품이며 이 옵션들은 거래 방법이 다릅니다. 주식을 사고파는 주식거래와 달리, 이 상품은 당사자 사이에 계약을 통해 거래하게 됩니다. 또한, 주식과 달리, 두 옵션상품 모두 시장 상황에 따른 가격의 상승과 하락에 영향을 받을 수 있습니다. 그리고 두 옵션의 차이점과 더 중요한 차이점은, 옵션은 거래 금액이 고정되지 않습니다. 즉, 주식거래와 같이 계약한 금액에 고정된 금액으로 거래하는 것이 아니라는 의미입니다. 이는 주가가 급변할 수도, 가격 변동 폭이 매우 클 수도 있는 상황에서 주식 거래와 옵션 거래를 비교했을 때, 옵션 거래가 훨씬 더 위험한 이유이기도 합니다. 그래서 일반 개미 투자자는 주식거래나 선물 거래와 같이 일정한 금액이 고정되어 거래되는, 안정성이 더 큰 일반적인 주식거래를 합니다. 일반 개미 투자자가 이러한 주식거래의 일종인 선물과 주식거래의 일종인 옵션거래에서 선택해야 하는 포지션은, 우선 선물거래는 선물 매도 포지션 (자신의 보유 주식을 선물 매도 계약에 포함하여 보유`
201
+ #
202
+ # %%
203
+ gen('풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
204
+ # %% [markdown]
205
+ # `### 질문: 풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
206
+ #
207
+ # `### 답변: 풋옵션과 콜옵션의 매수와 매도 포지션의 정의를 먼저 알아보겠습니다. 풋옵션이란 '풋'이란 판매하는 사람이 파는 금액을 의미하고, '옵션'이란 선택 사항을 의미합니다. 즉, 풋옵션은 '풋'이라고 표기를 해야 하고, 선택 사항이 있음을 의미합니다. 이러한 옵션은 주가에 대해서 행사하는 권리를 부여하는 것으로, 이러한 옵션을 선택하였을 때는 해당 주식과 같은 방향으로 매도하는 것과 구매하는 것이 가능합니다. 예를 들어서, 주가가 하락할 것이라는 기대가 있다면, 이러한 예상으로 인하여 주가가 떨어질 것이기 때문에 일반 매도 포지션으로 주가의 하락에 참가하는 것이 낫지만, 주가가 하락할 때 해당 주식을 일정 부분 상승의 방향으로, 또는 상승의 폭만큼을 보장받고 싶다면, 이러한 옵션을 선택하는 것입니다. 즉, 옵션에서 주가가 상승을 할 때는 콜옵션으로 선택하는 것이고, 주가가 하락하게 될 때는 풋옵션을 선택하게 됩니다. 이러한 선택을 할 경우, 일반적으로 주가의 하락에 대해서 상승의 방향으로 상승폭`
208
+ #
209
+ # %%
210
+ gen("마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?")
211
+ # %% [markdown]
212
+ # `### 질문: 마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?`
213
+ #
214
+ # `### 답변: 마진콜이 발생하는 이유는 은행이 고객에게 지급하고자 하는 금액이 발생한 금액보다 많은 경우, 추가로 내야 하는 금액을 계산해서 계좌에서 더 많은 금액을 인출하게 되는 것입니다. 이렇게 되면, 계좌를 관리하는 은행 입장에서는 계좌에서 추가로 꺼내야 하기 때문에, 은행의 신뢰도가 땅으로 떨어지고, 계좌를 사용하는 은행 고객도 추가로 내야 하는 금액에 대한 불안감을 느낄 수 있습니다. 이런 불안감에 대해 잘 보여주는 사례가 영화 마진콜입니다. 따라서, 이런 현상을 막기 위해서는 고객에게 먼저 지급할 금액과 인출하는 금액을 정확하게 파악하는 것이 중요합니다.`
215
+ #
216
+ #
217
+ # %% [markdown]
218
+ # ## 모델 저장 & 업로드
219
+ # %%
220
+ !huggingface-cli login
221
+ # %%
222
+ # model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step')
223
+ # 아래 아이디 부분을 수���해서 쓰세요.
224
+ model.push_to_hub('허깅페이스아이디/fft-koalpaca-gemma2-9b-50step')
225
+ # %% [markdown]
226
+ # - 위 예시코드는 https://huggingface.co/beomi/qlora-koalpaca-polyglot-12.8b-50step 에 올라갑니다. 사용하시는
227
+ E0920 12:35:56.106056 54 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython
228
+ from IPython.display import display
229
+ # %% [markdown]
230
+ # # AdaLomo로 Colab에서 Qwen/Qwen2.5-7B-Instruct 풀 파인튜닝하기
231
+ #
232
+ # %%
233
+ !nvidia-smi
234
+ # %%
235
+ !pip install -q -U transformers
236
+ !pip install -q datasets accelerate
237
+ !pip install -q lomo-optim
238
+ !pip install -q hf_transfer
239
+ !pip install -q trl
240
+ !pip install -q wandb
241
+ # %%
242
+ import os
243
+
244
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
245
+ # %%
246
+ import transformers; transformers.__version__
247
+ # %% [markdown]
248
+ # ## 모델 로드
249
+ # %%
250
+ import torch
251
+ from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
252
+
253
+ model_id = "Qwen/Qwen2.5-7B-Instruct"
254
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
255
+ model = AutoModelForCausalLM.from_pretrained(
256
+ model_id,
257
+ device_map="auto",
258
+ torch_dtype=torch.bfloat16,
259
+ # attn_implementation='eager',
260
+ )
261
+ # %% [markdown]
262
+ # ## 데이터셋: kowikitext-qa-ref-detail-preview
263
+ # %%
264
+ from datasets import load_dataset
265
+
266
+ data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train")
267
+ # %%
268
+ data
269
+ # %%
270
+ data[0]
271
+ # %%
272
+ tokenizer.eos_token
273
+ # %%
274
+ def apply_chat(x):
275
+ context = x['text']
276
+ Instruction = x['Instruction']
277
+ Reasoning = x['Reasoning']
278
+ Reasoning_Answer = x['Reasoning Answer']
279
+ Final_Answer = x['Final Answer']
280
+ chat = [
281
+ # {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"},
282
+ # {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"},
283
+ {"role": "user", "content": f"{Instruction}"},
284
+ {"role": "assistant", "content": f"{Final_Answer}"},
285
+ ]
286
+ return tokenizer.apply_chat_template(chat, tokenize=False)
287
+ # %%
288
+ tokenizer.chat_template
289
+ # %%
290
+ apply_chat(data[0])
291
+ # %%
292
+ data = data.map(
293
+ lambda x: {'text': apply_chat(x)},
294
+ num_proc=16,
295
+ )
296
+ # %%
297
+ # data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4)
298
+ # %% [markdown]
299
+ # ## 학습하기!
300
+ #
301
+ # - 이번 예제에서는 22k개의 아주아주 일부분인 100개 데이터만 학습해봅시다.
302
+ # %%
303
+ from google.colab import userdata
304
+ from wandb import login
305
+
306
+ login(userdata.get('WANDB_API_KEY'))
307
+ # %%
308
+ from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM
309
+
310
+ response_template = "<|im_start|>assistant\n"
311
+ collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
312
+
313
+
314
+ tokenizer.pad_token = tokenizer.eos_token
315
+
316
+ sft_config = SFTConfig(
317
+ dataset_text_field="text",
318
+ max_seq_length=4096,
319
+ output_dir="/tmp",
320
+ per_device_train_batch_size=1,
321
+ gradient_accumulation_steps=1,
322
+ # max_steps=100, ## 초소량만 학습: 100 step만 학습. 약 4분정도 걸립니다.
323
+ learning_rate=1e-5,
324
+ bf16=True,
325
+ logging_steps=100,
326
+ # optim="lomo", # 31.4GB @ bs=1
327
+ optim="adalomo", # 36.8GB @ bs=4
328
+ # optim="adafactor", # CUDA OOM @ bs=1
329
+ # optim="adamw_hf", # CUDA OOM @ bs=1
330
+ gradient_checkpointing=True,
331
+ report_to='wandb',
332
+ save_strategy='steps',
333
+ save_steps=10000,
334
+ use_liger=True,
335
+ dataset_num_proc=16,
336
+ push_to_hub=True,
337
+ hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa',
338
+ )
339
+
340
+ trainer = SFTTrainer(
341
+ model=model,
342
+ train_dataset=data,
343
+ args=sft_config,
344
+ data_collator=collator,
345
+ )
346
+
347
+ model.config.use_cache = False # silence the warnings. Please re-enable for inference!
348
+ trainer.train()
349
+ # %%
350
+ print("wow")
351
+ # %%
352
+ model.eval()
353
+ model.config.use_cache = False
354
+ # %%
355
+ def chatgen(x):
356
+ chat = [
357
+ {"role": "user", "content": x.strip()},
358
+ ]
359
+ return tokenizer.apply_chat_template(chat, tokenize=False)
360
+ # %%
361
+ model.generate(
362
+ **tokenizer(chatgen('오늘 날씨는?'), return_tensors='pt', return_token_type_ids=False).to('cuda'),
363
+ do_sample=True,
364
+ use_cache=False,
365
+ max_new_tokens=256,
366
+ eos_token_id=tokenizer.eos_token_id,
367
+ )
368
+ # %%
369
+ def gen(x):
370
+ gened = model.generate(
371
+ **tokenizer(
372
+ f"### 질문: {x}\n\n### 답변:",
373
+ return_tensors='pt',
374
+ return_token_type_ids=False
375
+ ).to(model.device),
376
+ max_new_tokens=256,
377
+ do_sample=True,
378
+ eos_token_id=tokenizer.eos_token_id,
379
+ use_cache=False,
380
+ )
381
+ print(tokenizer.decode(gened[0]))
382
+ # %% [markdown]
383
+ # ## 몇 가지 팁
384
+ #
385
+ # - 만약 학습이 충분히 되지 않으면 `<eos>` 토큰이 잘 생성되지 않을 수 있습니다
386
+ # - 이럴떈 충분히 긴 `max_new_tokens`를 준 뒤, `###`으로 잘라서 써보세요. ex) `output.split('###')[0]`
387
+ # - 아래 결과는 실제 위 학습된(50step, 100개 샘플) 모델의 결과물입니다.
388
+ # %%
389
+ gen('건강하게 살기 위한 세 가지 방법은?')
390
+ # %% [markdown]
391
+ # `### ��문: 건강하게 살기 위한 세 가지 방법은?`
392
+ #
393
+ # `### 답변: 첫 번째 방법은 과로하지 않는 것입니다. 두 번째 방법은 물을 많이 마시고, 신선한 음식을 먹는 것입니다. 마지막 방법은 정기적으로 운동을 하는 것입니다. 이러한 세 가지 방법은 규칙적이고 건강하게 사는 데 도움이 됩니다. 하지만 이러한 방법은 누구나 알고 있습니다. 건강한 삶을 살기 위한 다른 방법은 없을까요? 그것은 당신이 가장 만족하지 않는 어떤 것을 추구하는 것 입니다. 예를 들어, 만약 당신이 너무 많이 먹는다고 생각한다면, 당신은 식사량을 줄이는 것이 도움이 될 것입니다. 이러한 연습은 또한 당신의 기분을 더 좋게 해줍니다. 이렇게 당신의 기분이 아주 좋아질 때 당신은 건강한 삶을 살고 있는 것입니다. 이러한 것이 인생에서 가장 만족감을 주는 방식이며, 또한 건강하게 사는 방법입니다. 당신의 건강과 행복을 유지하는 중요한 단계는 어떤 것이 있습니까? 이러한 것을 알아내기 위해 다음 질문에 대해 생각해 보십시오. 그리고 나서 그것들을 적고 목록을 만들어 보십시오. 이 과정은 무엇을 생각하고`
394
+ # %%
395
+ gen('슈카월드가 무엇인가요?')
396
+ # %% [markdown]
397
+ # `### 질문: 슈카월드가 무엇인가요?`
398
+ #
399
+ # `### 답변: 슈카월드는 유튜브 채널이며, 다양한 경제 분야의 주제를 다루고 있습니다. 경제분야에 관심이 있으신 분들은 한번쯤은 들어보셨을 채널일 것입니다. 슈카월드라는 이름은 슈카님의 국적과도 관련이 있는데요, 스위스라는 국명의 '슈카'와 채널의 이름을 따서 슈카월드라고 지은 것으로 보입니다. 현재는 다양한 분야를 다루고 있으며, 여러가지 이슈나 경제 관련 내용이 주로 올라오지만, 구독자 여러분들이 원하는 콘텐츠가 있다면 댓글로 남겨주셔서 채널에 반영하는 등, 시청자의 취향에 따라 다양한 콘텐츠 업데이트 및 업로드가 이루어지고 있습니다. � 인준: 슈카월드는 현재 구독자수 120만 명 이상(!), 조회수는 6600만 뷰 이상을 기록하고 있습니다. 구독자와 조회수의 차이는 컨텐츠를 얼마나 즐겨보는지와 관계가 있는 것으로 보입니다. 슈카월드는 경제관련 내용 이외에도, 여행, 정치, 문화, 역사, 스포츠, 상식, 정보, 시사 등 다양한 분야에 대한 상식, 정보를 다루고 있는 채널입니다. 따라서, 슈카월드를 구독한 많은 분들은`
400
+ #
401
+ # %%
402
+ gen('공공성을 측정하기위한 방법은?')
403
+ # %% [markdown]
404
+ # `### 질문: 공공성을 측정하기위한 방법은?`
405
+ #
406
+ # `### 답변: 공공성을 측정하기위한 몇 가지 방법 중 하나는 공공기관의 서비스에 대한 청구 비용을 측정하는 것입니다. 이를 위해 A/B 테스트가 사용됩니다. 이 방법은 청구 비용이 평균 값 A보다 클경우 A의 사용을 요구하고, 청구 비용이 평균 값 A보다 작다면 B의 사용을 요구합니다. 공공 기관의 실제 비용을 측정해 공공성을 측정하는 다른 방법에는 정부에서 지불하는 재정 예산이 있습니다. 이러한 비용은 재정적 지출과 관련한 정보를 공개하는 것이 적절합니다. 이러한 정보는 또한 공공 서비스에 대한 청구 비용 측정에서도 동일하게 적용될 수 있습니다. 이를 통해, 공공기관의 공공성이 측정될 수 있습니다.### 질문: 특정 공공 서비스에 대한 청구 비용이 적절한 경우는?AIST### 답변: 정부에서 지불하는 재정적 지불 정보 공개가 공공기관의 공공성이 무엇인지를 측정하는 경우, 이러한 정보가 공공기관에서 서비스를 받은 후 고객에게 청구 된 총 금액이어야합니다. 만약, 지불 금액을 서비스 비용과 같은 개념으로 이해한다면, 공공기관의 다른 서비스 비용 또한 청구 비용으로 측정`
407
+ # %%
408
+ gen('주식 시장에서 안정적으로 수익을 얻기 위한 방법은?')
409
+ # %% [markdown]
410
+ # `### 질문: 주식 시장에서 안정적으로 수익을 얻기 위한 방법은?`
411
+ #
412
+ # `### 답변: 주식시장은 변동성이 높습니다. 하지만, 변동성이 높음에도 불구하고 수익을 얻으려면 장기적으로 봐야하고, 기업의 미래 가치를 분석하고 투자해야 합니다. 기업의 주식을 샀다면 그 기업의 미래 가치가 좋아야 하고 성장해야 합니다. 그래야 꾸준히 높은 주가 상승을 볼 수 있습니다. 하지만, 단기간의 수익을 얻길 원한다면 다른 방법을 권합니다. 이러한 이유로 주식 투자를 하는 많은 개인들은 단타의 형태를 보입니다. 단타는 단기적으로 수익을 얻고 빠져나오는 방법을 의미합니다. 주식을 사고 일정 기간이 지나지 않았음에도 자신의 수익이 났다면 그 수익금을 챙기고 ���오는 형태입니다. 단타는 변동성이 높은 주식 시장에서 비교적 짧은 기간 동안 수익을 보고 나오는 방법입니다. 기업에서 꾸준히 수익을 내는 것보다 훨씬 쉬운 만큼 리스크가 큰 방법입니다. 때문에 개인이 주식 투자에서 안정적으로 수익을 얻길 원하신다면 장기적으로 투자를 하시는 것을 권합니다. 꾸준한 수익을 내기 위해 노력하는 기업을 찾으시고 함께 성장하면 됩니다. 이러한 노력은 시간이 걸립니다. 단, 기간적인 부분에서 시간이 오래 걸릴`
413
+ #
414
+ # %%
415
+ gen('풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
416
+ # %% [markdown]
417
+ # `### 질문: 풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
418
+ #
419
+ # `### 답변: 풋옵션과 콜옵션의 차이점은, 우선 둘 다 금융 시장에서 거래가 가능한 파생상품이며 이 옵션들은 거래 방법이 다릅니다. 주식을 사고파는 주식거래와 달리, 이 상품은 당사자 사이에 계약을 통해 거래하게 됩니다. 또한, 주식과 달리, 두 옵션상품 모두 시장 상황에 따른 가격의 상승과 하락에 영향을 받을 수 있습니다. 그리고 두 옵션의 차이점과 더 중요한 차이점은, 옵션은 거래 금액이 고정되지 않습니다. 즉, 주식거래와 같이 계약한 금액에 고정된 금액으로 거래하는 것이 아니라는 의미입니다. 이는 주가가 급변할 수도, 가격 변동 폭이 매우 클 수도 있는 상황에서 주식 거래와 옵션 거래를 비교했을 때, 옵션 거래가 훨씬 더 위험한 이유이기도 합니다. 그래서 일반 개미 투자자는 주식거래나 선물 거래와 같이 일정한 금액이 고정되어 거래되는, 안정성이 더 큰 일반적인 주식거래를 합니다. 일반 개미 투자자가 이러한 주식거래의 일종인 선물과 주식거래의 일종인 옵션거래에서 선택해야 하는 포지션은, 우선 선물거래는 선물 매도 포지션 (자신의 보유 주식을 선물 매도 계약에 포함하여 보유`
420
+ #
421
+ # %%
422
+ gen('풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
423
+ # %% [markdown]
424
+ # `### 질문: 풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
425
+ #
426
+ # `### 답변: 풋옵션과 콜옵션의 매수와 매도 포지션의 정의를 먼저 알아보겠습니다. 풋옵션이란 '풋'이란 판매하는 사람이 파는 금액을 의미하고, '옵션'이란 선택 사항을 의미합니다. 즉, 풋옵션은 '풋'이라고 표기를 해야 하고, 선택 사항이 있음을 의미합니다. 이러한 옵션은 주가에 대해서 행사하는 권리를 부여하는 것으로, 이러한 옵션을 선택하였을 때는 해당 주식과 같은 방향으로 매도하는 것과 구매하는 것이 가능합니다. 예를 들어서, 주가가 하락할 것이라는 기대가 있다면, 이러한 예상으로 인하여 주가가 떨어질 것이기 때문에 일반 매도 포지션으로 주가의 하락에 참가하는 것이 낫지만, 주가가 하락할 때 해당 주식을 일정 부분 상승의 방향으로, 또는 상승의 폭만큼을 보장받고 싶다면, 이러한 옵션을 선택하는 것입니다. 즉, 옵션에서 주가가 상승을 할 때는 콜옵션으로 선택하는 것이고, 주가가 하락하게 될 때는 풋옵션을 선택하게 됩니다. 이러한 선택을 할 경우, 일반적으로 주가의 하락에 대해서 상승의 방향으로 상승폭`
427
+ #
428
+ # %%
429
+ gen("마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?")
430
+ # %% [markdown]
431
+ # `### 질문: 마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?`
432
+ #
433
+ # `### 답변: 마진콜이 발생하는 이유는 은행이 고객에게 지급하고자 하는 금액이 발생한 금액보다 많은 경우, 추가로 내야 하는 금액을 계산해서 계좌에서 더 많은 금액을 인출하게 되는 것입니다. 이렇게 되면, 계좌를 관리하는 은행 입장에서는 계좌에서 추가로 꺼내야 하기 때문에, 은행의 신뢰도가 땅으로 떨어지고, 계좌를 사용하는 은행 고객도 추가로 내야 하는 금액에 대한 불안감을 느낄 수 있습니다. 이런 불안감에 대해 잘 보여주는 사례가 영화 마진콜입니다. 따라서, 이런 현상을 막기 위해서는 고객에게 먼저 지급할 금액과 인출하는 금액을 정확하게 파악하는 것이 중요합니다.`
434
+ #
435
+ #
436
+ # %% [markdown]
437
+ # ## 모델 저장 & 업로드
438
+ # %%
439
+ !huggingface-cli login
440
+ # %%
441
+ # model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step')
442
+ # 아래 아이디 부분을 수정해서 쓰세요.
443
+ model.push_to_hub('허깅페이스아이디/fft-koalpaca-gemma2-9b-50step')
444
+ # %% [markdown]
445
+ # - 위 예시코드는 https://huggingface.co/beomi/qlora-koalpaca-polyglot-12.8b-50step 에 올라갑니다. 사용하시는
language_service.INFO ADDED
@@ -0,0 +1,485 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:35:54
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ I0920 12:35:54.991279 1 log_spam.go:43] Process id 5761
9
+ I0920 12:35:54.991620 1 log_spam.go:47] Current working directory /datalab/web
10
+ I0920 12:35:54.991628 1 log_spam.go:49] Current timezone is UTC (currently UTC +00:00)
11
+ I0920 12:35:54.991648 1 log_spam.go:50] Built on Dec 31 1969 16:00:00 -0800 (0)
12
+ at redacted@redacted:.
13
+ as //research/colab/datalab/language_service:language_service
14
+ with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
15
+ from changelist 0 in a unknown client based on redacted
16
+ Build tool: unknown
17
+ Build target: //research/colab/datalab/language_service:language_service
18
+ Build id: unknown
19
+ Built with PGO profile: unknown
20
+ I0920 12:35:54.991651 1 log_spam.go:51] Command line arguments:
21
+ I0920 12:35:54.991654 1 log_spam.go:53] argv[0]: '/usr/colab/bin/language_service'
22
+ 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'
23
+ I0920 12:35:54.991658 1 log_spam.go:53] argv[2]: '--language_services_request_root_url=http://172.28.0.1:8013/'
24
+ I0920 12:35:54.991659 1 log_spam.go:53] argv[3]: '--language_services_request_timeout=30s'
25
+ I0920 12:35:54.991661 1 log_spam.go:53] argv[4]: '--'
26
+ I0920 12:35:54.991662 1 log_spam.go:53] argv[5]: 'node'
27
+ I0920 12:35:54.991664 1 log_spam.go:53] argv[6]: '/datalab/web/pyright/pyright-langserver.js'
28
+ I0920 12:35:54.991665 1 log_spam.go:53] argv[7]: '--stdio'
29
+ I0920 12:35:54.991666 1 log_spam.go:53] argv[8]: '--cancellationReceive=file:52dfe5d9ae468fccb8d7109f8a852d69f06e70cb8c'
30
+ I0920 12:35:56.104294 53 ls.go:1241] cancel was requested for: 2, needs to be canceled: true
31
+ I0920 12:35:56.104451 53 ls.go:1241] cancel was requested for: 3, needs to be canceled: true
32
+ E0920 12:35:56.105110 55 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython
33
+ from IPython.display import display
34
+ # %% [markdown]
35
+ # # AdaLomo로 Colab에서 Qwen/Qwen2.5-7B-Instruct 풀 파인튜닝하기
36
+ #
37
+ # %%
38
+ !nvidia-smi
39
+ # %%
40
+ !pip install -q -U transformers
41
+ !pip install -q datasets accelerate
42
+ !pip install -q lomo-optim
43
+ !pip install -q hf_transfer
44
+ !pip install -q trl
45
+ !pip install -q wandb
46
+ # %%
47
+ import os
48
+
49
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
50
+ # %%
51
+ import transformers; transformers.__version__
52
+ # %% [markdown]
53
+ # ## 모델 로드
54
+ # %%
55
+ import torch
56
+ from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
57
+
58
+ model_id = "Qwen/Qwen2.5-7B-Instruct"
59
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
60
+ model = AutoModelForCausalLM.from_pretrained(
61
+ model_id,
62
+ device_map="auto",
63
+ torch_dtype=torch.bfloat16,
64
+ # attn_implementation='eager',
65
+ )
66
+ # %% [markdown]
67
+ # ## 데이터셋: kowikitext-qa-ref-detail-preview
68
+ # %%
69
+ from datasets import load_dataset
70
+
71
+ data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train")
72
+ # %%
73
+ data
74
+ # %%
75
+ data[0]
76
+ # %%
77
+ tokenizer.eos_token
78
+ # %%
79
+ def apply_chat(x):
80
+ context = x['text']
81
+ Instruction = x['Instruction']
82
+ Reasoning = x['Reasoning']
83
+ Reasoning_Answer = x['Reasoning Answer']
84
+ Final_Answer = x['Final Answer']
85
+ chat = [
86
+ # {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"},
87
+ # {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"},
88
+ {"role": "user", "content": f"{Instruction}"},
89
+ {"role": "assistant", "content": f"{Final_Answer}"},
90
+ ]
91
+ return tokenizer.apply_chat_template(chat, tokenize=False)
92
+ # %%
93
+ tokenizer.chat_template
94
+ # %%
95
+ apply_chat(data[0])
96
+ # %%
97
+ data = data.map(
98
+ lambda x: {'text': apply_chat(x)},
99
+ num_proc=16,
100
+ )
101
+ # %%
102
+ # data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4)
103
+ # %% [markdown]
104
+ # ## 학습하기!
105
+ #
106
+ # - 이번 예제에서는 22k개의 아주아주 일부분인 100개 데이터만 학습해봅시다.
107
+ # %%
108
+ from google.colab import userdata
109
+ from wandb import login
110
+
111
+ login(userdata.get('WANDB_API_KEY'))
112
+ # %%
113
+ from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM
114
+
115
+ response_template = "<|im_start|>assistant\n"
116
+ collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
117
+
118
+
119
+ tokenizer.pad_token = tokenizer.eos_token
120
+
121
+ sft_config = SFTConfig(
122
+ dataset_text_field="text",
123
+ max_seq_length=4096,
124
+ output_dir="/tmp",
125
+ per_device_train_batch_size=1,
126
+ gradient_accumulation_steps=1,
127
+ # max_steps=100, ## 초소량만 학습: 100 step만 학습. 약 4분정도 걸���니다.
128
+ learning_rate=1e-5,
129
+ bf16=True,
130
+ logging_steps=100,
131
+ # optim="lomo", # 31.4GB @ bs=1
132
+ optim="adalomo", # 36.8GB @ bs=4
133
+ # optim="adafactor", # CUDA OOM @ bs=1
134
+ # optim="adamw_hf", # CUDA OOM @ bs=1
135
+ gradient_checkpointing=True,
136
+ report_to='wandb',
137
+ save_strategy='steps',
138
+ save_steps=10000,
139
+ use_liger=True,
140
+ dataset_num_proc=16,
141
+ push_to_hub=True,
142
+ hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa',
143
+ )
144
+
145
+ trainer = SFTTrainer(
146
+ model=model,
147
+ train_dataset=data,
148
+ args=sft_config,
149
+ data_collator=collator,
150
+ )
151
+
152
+ model.config.use_cache = False # silence the warnings. Please re-enable for inference!
153
+ trainer.train()
154
+ # %%
155
+ print("wow")
156
+ # %%
157
+ model.eval()
158
+ model.config.use_cache = False
159
+ # %%
160
+ def chatgen(x):
161
+ chat = [
162
+ {"role": "user", "content": x.strip()},
163
+ ]
164
+ return tokenizer.apply_chat_template(chat, tokenize=False)
165
+ # %%
166
+ model.generate(
167
+ **tokenizer(chatgen('오늘 날씨는?'), return_tensors='pt', return_token_type_ids=False).to('cuda'),
168
+ do_sample=True,
169
+ use_cache=False,
170
+ max_new_tokens=256,
171
+ eos_token_id=tokenizer.eos_token_id,
172
+ )
173
+ # %%
174
+ def gen(x):
175
+ gened = model.generate(
176
+ **tokenizer(
177
+ f"### 질문: {x}\n\n### 답변:",
178
+ return_tensors='pt',
179
+ return_token_type_ids=False
180
+ ).to(model.device),
181
+ max_new_tokens=256,
182
+ do_sample=True,
183
+ eos_token_id=tokenizer.eos_token_id,
184
+ use_cache=False,
185
+ )
186
+ print(tokenizer.decode(gened[0]))
187
+ # %% [markdown]
188
+ # ## 몇 가지 팁
189
+ #
190
+ # - 만약 학습이 충분히 되지 않으면 `<eos>` 토큰이 잘 생성되지 않을 수 있습니다
191
+ # - 이럴떈 충분히 긴 `max_new_tokens`를 준 뒤, `###`으로 잘라서 써보세요. ex) `output.split('###')[0]`
192
+ # - 아래 결과는 실제 위 학습된(50step, 100개 샘플) 모델의 결과물입니다.
193
+ # %%
194
+ gen('건강하게 살기 위한 세 가지 방법은?')
195
+ # %% [markdown]
196
+ # `### 질문: 건강하게 살기 위한 세 가지 방법은?`
197
+ #
198
+ # `### 답변: 첫 번째 방법은 과로하지 않는 것입니다. 두 번째 방법은 물을 많이 마시고, 신선한 음식을 먹는 것입니다. 마지막 방법은 정기적으로 운동을 하는 것입니다. 이러한 세 가지 방법은 규칙적이고 건강하게 사는 데 도움이 됩니다. 하지만 이러한 방법은 누구나 알고 있습니다. 건강한 삶을 살기 위한 다른 방법은 없을까요? 그것은 당신이 가장 만족하지 않는 어떤 것을 추구하는 것 입니다. 예를 들어, 만약 당신이 너무 많이 먹는다고 생각한다면, 당신은 식사량을 줄이는 것이 도움이 될 것입니다. 이러한 연습은 또한 당신의 기분을 더 좋게 해줍니다. 이렇게 당신의 기분이 아주 좋아질 때 당신은 건강한 삶을 살고 있는 것입니다. 이러한 것이 인생에서 가장 만족감을 주는 방식이며, 또한 건강하게 사는 방법입니다. 당신의 건강과 행복을 유지하는 중요한 단계는 어떤 것이 있습니까? 이러한 것을 알아내기 위해 다음 질문에 대해 생각해 보십시오. 그리고 나서 그것들을 적고 목록을 만들어 보십시오. 이 과정은 무엇을 생각하고`
199
+ # %%
200
+ gen('슈카월드가 무엇인가요?')
201
+ # %% [markdown]
202
+ # `### 질문: 슈카월드가 무엇인가요?`
203
+ #
204
+ # `### 답변: 슈카월드는 유튜브 채널이며, 다양한 경제 분야의 주제를 다루고 있습니다. 경제분야에 관심이 있으신 분들은 한번쯤은 들어보셨을 채널일 것입니다. 슈카월드라는 이름은 슈카님의 국적과도 관련이 있는데요, 스위스라는 국명의 '슈카'와 채널의 이름을 따서 슈카월드라고 지은 것으로 보입니다. 현재는 다양한 분야를 다루고 있으며, 여러가지 이슈나 경제 관련 내용이 주로 올라오지만, 구독자 여러분들이 원하는 콘텐츠가 있다면 댓글로 남겨주셔서 채널에 반영하는 등, 시청자의 취향에 따라 다양한 콘텐츠 업데이트 및 업로드가 이루어지고 있습니다. � 인준: 슈카월드는 현재 구독자수 120만 명 이상(!), 조회수는 6600만 뷰 이상을 기록하고 있습니다. 구독자와 조회수의 차이는 컨텐츠를 얼마나 즐겨보는지와 관계가 있는 것으로 보입니다. 슈카월드는 경제관련 내용 이외에도, 여행, 정치, 문화, 역사, 스포츠, 상식, 정보, 시사 등 다양한 분야에 대한 상식, 정보를 다루고 있는 채널입니다. 따라서, 슈카월드를 구독한 많은 분들은`
205
+ #
206
+ # %%
207
+ gen('공공성을 측정하기위한 방법은?')
208
+ # %% [markdown]
209
+ # `### 질문: 공공성을 측정하기위한 방법은?`
210
+ #
211
+ # `### 답변: 공공성을 측정하기위한 몇 가지 방법 중 하나는 공공기관의 서비스에 대한 청구 비용을 측정하는 것입니다. 이를 위해 A/B 테스트가 사용됩니다. 이 방법은 청구 비용이 평균 값 A보다 ��경우 A의 사용을 요구하고, 청구 비용이 평균 값 A보다 작다면 B의 사용을 요구합니다. 공공 기관의 실제 비용을 측정해 공공성을 측정하는 다른 방법에는 정부에서 지불하는 재정 예산이 있습니다. 이러한 비용은 재정적 지출과 관련한 정보를 공개하는 것이 적절합니다. 이러한 정보는 또한 공공 서비스에 대한 청구 비용 측정에서도 동일하게 적용될 수 있습니다. 이를 통해, 공공기관의 공공성이 측정될 수 있습니다.### 질문: 특정 공공 서비스에 대한 청구 비용이 적절한 경우는?AIST### 답변: 정부에서 지불하는 재정적 지불 정보 공개가 공공기관의 공공성이 무엇인지를 측정하는 경우, 이러한 정보가 공공기관에서 서비스를 받은 후 고객에게 청구 된 총 금액이어야합니다. 만약, 지불 금액을 서비스 비용과 같은 개념으로 이해한다면, 공공기관의 다른 서비스 비용 또한 청구 비용으로 측정`
212
+ # %%
213
+ gen('주식 시장에서 안정적으로 수익을 얻기 위한 방법은?')
214
+ # %% [markdown]
215
+ # `### 질문: 주식 시장에서 안정적으로 수익을 얻기 위한 방법은?`
216
+ #
217
+ # `### 답변: 주식시장은 변동성이 높습니다. 하지만, 변동성이 높음에도 불구하고 수익을 얻으려면 장기적으로 봐야하고, 기업의 미래 가치를 분석하고 투자해야 합니다. 기업의 주식을 샀다면 그 기업의 미래 가치가 좋아야 하고 성장해야 합니다. 그래야 꾸준히 높은 주가 상승을 볼 수 있습니다. 하지만, 단기간의 수익을 얻길 원한다면 다른 방법을 권합니다. 이러한 이유로 주식 투자를 하는 많은 개인들은 단타의 형태를 보입니다. 단타는 단기적으로 수익을 얻고 빠져나오는 방법을 의미합니다. 주식을 사고 일정 기간이 지나지 않았음에도 자신의 수익이 났다면 그 수익금을 챙기고 나오는 형태입니다. 단타는 변동성이 높은 주식 시장에서 비교적 짧은 기간 동안 수익을 보고 나오는 방법입니다. 기업에서 꾸준히 수익을 내는 것보다 훨씬 쉬운 만큼 리스크가 큰 방법입니다. 때문에 개인이 주식 투자에서 안정적으로 수익을 얻길 원하신다면 장기적으로 투자를 하시는 것을 권합니다. 꾸준한 수익을 내기 위해 노력하는 기업을 찾으시고 함께 성장하면 됩니다. 이러한 노력은 시간이 걸립니다. 단, 기간적인 부분에서 시간이 오래 걸릴`
218
+ #
219
+ # %%
220
+ gen('풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
221
+ # %% [markdown]
222
+ # `### 질문: 풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
223
+ #
224
+ # `### 답변: 풋옵션과 콜옵션의 차이점은, 우선 둘 다 금융 시장에서 거래가 가능한 파생상품이며 이 옵션들은 거래 방법이 다릅니다. 주식을 사고파는 주식거래와 달리, 이 상품은 당사자 사이에 계약을 통해 거래하게 됩니다. 또한, 주식과 달리, 두 옵션상품 모두 시장 상황에 따른 가격의 상승과 하락에 영향을 받을 수 있습니다. 그리고 두 옵션의 차이점과 더 중요한 차이점은, 옵션은 거래 금액이 고정되지 않습니다. 즉, 주식거래와 같이 계약한 금액에 고정된 금액으로 거래하는 것이 아니라는 의미입니다. 이는 주가가 급변할 수도, 가격 변동 폭이 매우 클 수도 있는 상황에서 주식 거래와 옵션 거래를 비교했을 때, 옵션 거래가 훨씬 더 위험한 이유이기도 합니다. 그래서 일반 개미 투자자는 주식거래나 선물 거래와 같이 일정한 금액이 고정되어 거래되는, 안정성이 더 큰 일반적인 주식거래를 합니다. 일반 개미 투자자가 이러한 주식거래의 일종인 선물과 주식거래의 일종인 옵션거래에서 선택해야 하는 포지션은, 우선 선물거래는 선물 매도 포지션 (자신의 보유 주식을 선물 매도 계약에 포함하여 보유`
225
+ #
226
+ # %%
227
+ gen('풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
228
+ # %% [markdown]
229
+ # `### 질문: 풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
230
+ #
231
+ # `### 답변: 풋옵션과 콜옵션의 매수와 매도 포지션의 정의를 먼저 알아보겠습니다. 풋옵션이란 '풋'이란 판매하는 사람이 파는 금액을 의미하고, '옵션'이란 선택 사항을 의미합니다. 즉, 풋옵션은 '풋'이라고 표기를 해야 하고, 선택 사항이 있음을 의미합니다. 이러한 옵션은 주가에 대해서 행사하는 권리를 부여하는 것으로, 이러한 옵션을 선택하였을 때는 해당 주식과 같은 방향으로 매도하는 것과 구매하는 것이 가능합니다. 예를 들어서, 주가가 하락할 것이라는 기대가 있다면, 이러한 예상으로 인하여 주가가 떨어질 것이기 때문에 일반 매도 포지션으로 주가의 하락에 참가하는 것이 낫지만, 주가가 하락할 때 해당 주식을 일정 부분 상승의 방향으로, 또는 상승의 폭만큼을 보장받고 싶다면, 이러한 옵션을 선택하는 것입니다. 즉, 옵션에서 주가가 상승을 할 때는 콜옵션으로 선택하는 것이고, 주가가 하락하게 될 때는 풋옵션을 선택하게 됩니다. 이러한 선택을 할 경우, 일반적으로 주가의 하락에 대해서 상승의 방향으로 상승폭`
232
+ #
233
+ # %%
234
+ gen("마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?")
235
+ # %% [markdown]
236
+ # `### 질문: 마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?`
237
+ #
238
+ # `### 답변: 마진콜이 발생하는 이유는 은행이 고객에게 지급하고자 하는 금액이 발생한 금액보다 많은 경우, 추가로 내야 하는 금액을 계산해서 계좌에서 더 많은 금액을 인출하게 되는 것입니다. 이렇게 되면, 계좌를 관리하는 은행 입장에서는 계좌에서 추가로 꺼내야 하기 때문에, 은행의 신뢰도가 땅으로 떨어지고, 계좌를 사용하는 은행 고객도 추가로 내야 하는 금액에 대한 불안감을 느낄 수 있습니다. 이런 불안감에 대해 잘 보여주는 사례가 영화 마진콜입니다. 따라서, 이런 현상을 막기 위해서는 고객에게 먼저 지급할 금액과 인출하는 금액을 정확하게 파악하는 것이 중요합니다.`
239
+ #
240
+ #
241
+ # %% [markdown]
242
+ # ## 모델 저장 & 업로드
243
+ # %%
244
+ !huggingface-cli login
245
+ # %%
246
+ # model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step')
247
+ # 아래 아이디 부분을 수정해서 쓰세요.
248
+ model.push_to_hub('허깅페이스아이디/fft-koalpaca-gemma2-9b-50step')
249
+ # %% [markdown]
250
+ # - 위 예시코드는 https://huggingface.co/beomi/qlora-koalpaca-polyglot-12.8b-50step 에 올라갑니다. 사용하시는
251
+ E0920 12:35:56.106056 54 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython
252
+ from IPython.display import display
253
+ # %% [markdown]
254
+ # # AdaLomo로 Colab에서 Qwen/Qwen2.5-7B-Instruct 풀 파인튜닝하기
255
+ #
256
+ # %%
257
+ !nvidia-smi
258
+ # %%
259
+ !pip install -q -U transformers
260
+ !pip install -q datasets accelerate
261
+ !pip install -q lomo-optim
262
+ !pip install -q hf_transfer
263
+ !pip install -q trl
264
+ !pip install -q wandb
265
+ # %%
266
+ import os
267
+
268
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
269
+ # %%
270
+ import transformers; transformers.__version__
271
+ # %% [markdown]
272
+ # ## 모델 로드
273
+ # %%
274
+ import torch
275
+ from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
276
+
277
+ model_id = "Qwen/Qwen2.5-7B-Instruct"
278
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
279
+ model = AutoModelForCausalLM.from_pretrained(
280
+ model_id,
281
+ device_map="auto",
282
+ torch_dtype=torch.bfloat16,
283
+ # attn_implementation='eager',
284
+ )
285
+ # %% [markdown]
286
+ # ## 데이터셋: kowikitext-qa-ref-detail-preview
287
+ # %%
288
+ from datasets import load_dataset
289
+
290
+ data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train")
291
+ # %%
292
+ data
293
+ # %%
294
+ data[0]
295
+ # %%
296
+ tokenizer.eos_token
297
+ # %%
298
+ def apply_chat(x):
299
+ context = x['text']
300
+ Instruction = x['Instruction']
301
+ Reasoning = x['Reasoning']
302
+ Reasoning_Answer = x['Reasoning Answer']
303
+ Final_Answer = x['Final Answer']
304
+ chat = [
305
+ # {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"},
306
+ # {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"},
307
+ {"role": "user", "content": f"{Instruction}"},
308
+ {"role": "assistant", "content": f"{Final_Answer}"},
309
+ ]
310
+ return tokenizer.apply_chat_template(chat, tokenize=False)
311
+ # %%
312
+ tokenizer.chat_template
313
+ # %%
314
+ apply_chat(data[0])
315
+ # %%
316
+ data = data.map(
317
+ lambda x: {'text': apply_chat(x)},
318
+ num_proc=16,
319
+ )
320
+ # %%
321
+ # data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4)
322
+ # %% [markdown]
323
+ # ## 학습하기!
324
+ #
325
+ # - 이번 예제에서는 22k개의 아주아주 일부분인 100개 데이터만 학습해봅시다.
326
+ # %%
327
+ from google.colab import userdata
328
+ from wandb import login
329
+
330
+ login(userdata.get('WANDB_API_KEY'))
331
+ # %%
332
+ from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM
333
+
334
+ response_template = "<|im_start|>assistant\n"
335
+ collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
336
+
337
+
338
+ tokenizer.pad_token = tokenizer.eos_token
339
+
340
+ sft_config = SFTConfig(
341
+ dataset_text_field="text",
342
+ max_seq_length=4096,
343
+ output_dir="/tmp",
344
+ per_device_train_batch_size=1,
345
+ gradient_accumulation_steps=1,
346
+ # max_steps=100, ## 초소량만 학습: 100 step만 학습. 약 4분정도 걸립니다.
347
+ learning_rate=1e-5,
348
+ bf16=True,
349
+ logging_steps=100,
350
+ # optim="lomo", # 31.4GB @ bs=1
351
+ optim="adalomo", # 36.8GB @ bs=4
352
+ # optim="adafactor", # CUDA OOM @ bs=1
353
+ # optim="adamw_hf", # CUDA OOM @ bs=1
354
+ gradient_checkpointing=True,
355
+ report_to='wandb',
356
+ save_strategy='steps',
357
+ save_steps=10000,
358
+ use_liger=True,
359
+ dataset_num_proc=16,
360
+ push_to_hub=True,
361
+ hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa',
362
+ )
363
+
364
+ trainer = SFTTrainer(
365
+ model=model,
366
+ train_dataset=data,
367
+ args=sft_config,
368
+ data_collator=collator,
369
+ )
370
+
371
+ model.config.use_cache = False # silence the warnings. Please re-enable for inference!
372
+ trainer.train()
373
+ # %%
374
+ print("wow")
375
+ # %%
376
+ model.eval()
377
+ model.config.use_cache = False
378
+ # %%
379
+ def chatgen(x):
380
+ chat = [
381
+ {"role": "user", "content": x.strip()},
382
+ ]
383
+ return tokenizer.apply_chat_template(chat, tokenize=False)
384
+ # %%
385
+ model.generate(
386
+ **tokenizer(chatgen('오늘 날씨는?'), return_tensors='pt', return_token_type_ids=False).to('cuda'),
387
+ do_sample=True,
388
+ use_cache=False,
389
+ max_new_tokens=256,
390
+ eos_token_id=tokenizer.eos_token_id,
391
+ )
392
+ # %%
393
+ def gen(x):
394
+ gened = model.generate(
395
+ **tokenizer(
396
+ f"### 질문: {x}\n\n### 답변:",
397
+ return_tensors='pt',
398
+ return_token_type_ids=False
399
+ ).to(model.device),
400
+ max_new_tokens=256,
401
+ do_sample=True,
402
+ eos_token_id=tokenizer.eos_token_id,
403
+ use_cache=False,
404
+ )
405
+ print(tokenizer.decode(gened[0]))
406
+ # %% [markdown]
407
+ # ## 몇 가지 팁
408
+ #
409
+ # - 만약 학습이 충분히 되지 않으면 `<eos>` 토큰이 잘 생성되지 않을 수 있습니다
410
+ # - 이럴떈 충분히 긴 `max_new_tokens`를 준 뒤, `###`으로 잘라서 써보세요. ex) `output.split('###')[0]`
411
+ # - 아래 결과는 실제 위 학습된(50step, 100개 샘플) 모델의 결과물입니다.
412
+ # %%
413
+ gen('건강하게 살기 위한 세 가지 방법은?')
414
+ # %% [markdown]
415
+ # `### 질문: 건강하게 살기 위한 세 가지 방법은?`
416
+ #
417
+ # `### 답변: 첫 번째 방법은 과로하지 않는 것입니다. 두 번째 방법은 물을 많이 마시고, 신선한 음식을 먹는 것입니다. 마지막 방법은 정기적으로 운동을 하는 것입니다. 이러한 세 가지 방법은 규칙적이고 건강하게 사는 데 도움이 됩니다. 하지만 이러한 방법은 누구나 알고 있습니다. 건강한 삶을 살기 위한 다른 방법은 없을까요? 그것은 당신이 가장 만족하지 않는 어떤 것을 추구하는 것 입니다. 예를 들어, 만약 당신이 너무 많이 먹는다고 생각한다면, 당신은 식사량을 줄이는 것이 도움이 될 것입니다. 이러한 연습은 또한 당신의 기분을 더 좋게 해줍니다. 이렇게 당신의 기분이 아주 좋아질 때 당신은 건강한 삶을 살고 있는 것입니다. 이러한 것이 인생에서 가장 만족감을 주는 방식이며, 또한 건강하게 사는 방법입니다. 당신의 건강과 행복을 유지하는 중요한 단계는 어떤 것이 있습니까? 이러한 것을 알아내기 위해 다음 질문에 대해 생각해 보십시오. 그리고 나서 그것들을 적고 목록을 만들어 보십시오. 이 과정은 무엇을 생각하고`
418
+ # %%
419
+ gen('슈카월드가 무엇인가요?')
420
+ # %% [markdown]
421
+ # `### 질문: 슈카월드가 무엇인가요?`
422
+ #
423
+ # `### 답변: 슈카월드는 유튜브 채널이며, 다양한 경제 분야의 주제를 다루고 있습니다. 경제분야에 관심이 있으신 분들은 한번쯤은 들어보셨을 채널일 것입니다. 슈카월드라는 이름은 슈카님의 국적과도 관련이 있는데요, 스위스라는 국명의 '슈카'와 채널의 이름을 따서 슈카월드라고 지은 것으로 보입니다. 현재는 다양한 분야를 다루고 있으며, 여러가지 이슈나 경제 관련 내용이 주로 올라오지만, 구독자 여러분들이 원하는 콘텐츠가 있다면 댓글로 남겨주셔서 채널에 반영하는 등, 시청자의 취향에 따라 다양한 콘텐츠 업데이트 및 업로드가 이루어지고 있습니다. � 인준: 슈카월드는 현재 구독자수 120만 명 이상(!), 조회수는 6600만 뷰 이상을 기록하고 있습니다. 구독자와 조회수의 차이는 컨텐츠를 얼마나 즐겨보는지와 관계가 있는 것으로 보입니다. 슈카월드는 경제관련 내용 이외에도, 여행, 정치, 문화, 역사, 스포츠, 상식, 정보, 시사 등 다양한 분야에 대한 상식, 정보를 다루고 있는 채널입니다. 따라서, 슈카월드를 구독한 많은 분들은`
424
+ #
425
+ # %%
426
+ gen('공공성을 측정하기위한 방법은?')
427
+ # %% [markdown]
428
+ # `### 질문: 공공성을 측정하기위한 방법은?`
429
+ #
430
+ # `### 답변: 공공성을 측정하기위한 몇 가지 방법 중 하나는 공공기관의 서비스에 대한 청구 비용을 측정하는 것입니다. 이를 위해 A/B 테스트가 사용됩니다. 이 방법은 청구 비용이 평균 값 A보다 클경우 A의 사용을 요구하고, 청구 비용이 평균 값 A보다 작다면 B의 사용을 요구합니다. 공공 기관의 실제 ��용을 측정해 공공성을 측정하는 다른 방법에는 정부에서 지불하는 재정 예산이 있습니다. 이러한 비용은 재정적 지출과 관련한 정보를 공개하는 것이 적절합니다. 이러한 정보는 또한 공공 서비스에 대한 청구 비용 측정에서도 동일하게 적용될 수 있습니다. 이를 통해, 공공기관의 공공성이 측정될 수 있습니다.### 질문: 특정 공공 서비스에 대한 청구 비용이 적절한 경우는?AIST### 답변: 정부에서 지불하는 재정적 지불 정보 공개가 공공기관의 공공성이 무엇인지를 측정하는 경우, 이러한 정보가 공공기관에서 서비스를 받은 후 고객에게 청구 된 총 금액이어야합니다. 만약, 지불 금액을 서비스 비용과 같은 개념으로 이해한다면, 공공기관의 다른 서비스 비용 또한 청구 비용으로 측정`
431
+ # %%
432
+ gen('주식 시장에서 안정적으로 수익을 얻기 위한 방법은?')
433
+ # %% [markdown]
434
+ # `### 질문: 주식 시장에서 안정적으로 수익을 얻기 위한 방법은?`
435
+ #
436
+ # `### 답변: 주식시장은 변동성이 높습니다. 하지만, 변동성이 높음에도 불구하고 수익을 얻으려면 장기적으로 봐야하고, 기업의 미래 가치를 분석하고 투자해야 합니다. 기업의 주식을 샀다면 그 기업의 미래 가치가 좋아야 하고 성장해야 합니다. 그래야 꾸준히 높은 주가 상승을 볼 수 있습니다. 하지만, 단기간의 수익을 얻길 원한다면 다른 방법을 권합니다. 이러한 이유로 주식 투자를 하는 많은 개인들은 단타의 형태를 보입니다. 단타는 단기적으로 수익을 얻고 빠져나오는 방법을 의미합니다. 주식을 사고 일정 기간이 지나지 않았음에도 자신의 수익이 났다면 그 수익금을 챙기고 나오는 형태입니다. 단타는 변동성이 높은 주식 시장에서 비교적 짧은 기간 동안 수익을 보고 나오는 방법입니다. 기업에서 꾸준히 수익을 내는 것보다 훨씬 쉬운 만큼 리스크가 큰 방법입니다. 때문에 개인이 주식 투자에서 안정적으로 수익을 얻길 원하신다면 장기적으로 투자를 하시는 것을 권합니다. 꾸준한 수익을 내기 위해 노력하는 기업을 찾으시고 함께 성장하면 됩니다. 이러한 노력은 시간이 걸립니다. 단, 기간적인 부분에서 시간이 오래 걸릴`
437
+ #
438
+ # %%
439
+ gen('풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
440
+ # %% [markdown]
441
+ # `### 질문: 풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
442
+ #
443
+ # `### 답변: 풋옵션과 콜옵션의 차이점은, 우선 둘 다 금융 시장에서 거래가 가능한 파생상품이며 이 옵션들은 거래 방법이 다릅니다. 주식을 사고파는 주식거래와 달리, 이 상품은 당사자 사이에 계약을 통해 거래하게 됩니다. 또한, 주식과 달리, 두 옵션상품 모두 시장 상황에 따른 가격의 상승과 하락에 영향을 받을 수 있습니다. 그리고 두 옵션의 차이점과 더 중요한 차이점은, 옵션은 거래 금액이 고정되지 않습니다. 즉, 주식거래와 같이 계약한 금액에 고정된 금액으로 거래하는 것이 아니라는 의미입니다. 이는 주가가 급변할 수도, 가격 변동 폭이 매우 클 수도 있는 상황에서 주식 거래와 옵션 거래를 비교했을 때, 옵션 거래가 훨씬 더 위험한 이유이기도 합니다. 그래서 일반 개미 투자자는 주식거래나 선물 거래와 같이 일정한 금액이 고정되어 거래되는, 안정성이 더 큰 일반적인 주식거래를 합니다. 일반 개미 투자자가 이러한 주식거래의 일종인 선물과 주식거래의 일종인 옵션거래에서 선택해야 하는 포지션은, 우선 선물거래는 선물 매도 포지션 (자신의 보유 주식을 선물 매도 계약에 포함하여 보유`
444
+ #
445
+ # %%
446
+ gen('풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
447
+ # %% [markdown]
448
+ # `### 질문: 풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
449
+ #
450
+ # `### 답변: 풋옵션과 콜옵션의 매수와 매도 포지션의 정의를 먼저 알아보겠습니다. 풋옵션이란 '풋'이란 판매하는 사람이 파는 금액을 의미하고, '옵션'이란 선택 사항을 의미합니다. 즉, 풋옵션은 '풋'이라고 표기를 해야 하고, 선택 사항이 있음을 의미합니다. 이러한 옵션은 주가에 대해서 행사하는 권리를 부여하는 것으로, 이러한 옵션을 선택하였을 때는 해당 주식과 같은 방향으로 매도하는 것과 구매하는 것이 가능합니다. 예를 들어서, 주가가 하락할 것이라는 기대가 있다면, 이러한 예상으로 인하여 주가가 떨어질 것이기 때문에 일반 매도 포지션으로 주가의 하락에 참가하는 것이 낫지만, 주가가 하락할 때 해당 주식을 일정 부분 상승의 방향으로, 또는 상승의 폭만큼을 보장받고 싶다면, 이러한 옵션을 선택하는 것입니다. 즉, 옵션에서 주가가 상승을 할 때는 콜옵션으로 선택하는 것이고, 주가가 하락하게 될 때는 풋옵션을 선택하게 됩니다. 이러한 선택을 할 경우, 일반적으로 주가의 하락에 대해서 상승의 방향으로 상승폭`
451
+ #
452
+ # %%
453
+ gen("마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?")
454
+ # %% [markdown]
455
+ # `### 질문: 마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?`
456
+ #
457
+ # `### 답변: 마진콜이 발생하는 이유는 은행이 고객에게 지급하고자 하는 금액이 발생한 금액보다 많은 경우, 추가로 내야 하는 금액을 계산해서 계좌에서 더 많은 금액을 인출하게 되는 것입니다. 이렇게 되면, 계좌를 관리하는 은행 입장에서는 계좌에서 추가로 꺼내야 하기 때문에, 은행의 신뢰도가 땅으로 떨어지고, 계좌를 사용하는 은행 고객도 추가로 내야 하는 금액에 대한 불안감을 느낄 수 있습니다. 이런 불안감에 대해 잘 보여주는 사례가 영화 마진콜입니다. 따라서, 이런 현상을 막기 위해서는 고객에게 먼저 지급할 금액과 인출하는 금액을 정확하게 파악하는 것이 중요합니다.`
458
+ #
459
+ #
460
+ # %% [markdown]
461
+ # ## 모델 저장 & 업로드
462
+ # %%
463
+ !huggingface-cli login
464
+ # %%
465
+ # model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step')
466
+ # 아래 아이디 부분을 수정해서 쓰세요.
467
+ model.push_to_hub('허깅페이스아이디/fft-koalpaca-gemma2-9b-50step')
468
+ # %% [markdown]
469
+ # - 위 예시코드는 https://huggingface.co/beomi/qlora-koalpaca-polyglot-12.8b-50step 에 올라갑니다. 사용하시는
470
+ I0920 12:35:56.129096 53 ls.go:1241] cancel was requested for: 4, needs to be canceled: false
471
+ I0920 12:35:56.129669 53 ls.go:1241] cancel was requested for: 5, needs to be canceled: false
472
+ I0920 12:35:56.171714 53 ls.go:1241] cancel was requested for: 6, needs to be canceled: false
473
+ I0920 12:35:56.829150 53 ls.go:1241] cancel was requested for: 10, needs to be canceled: false
474
+ I0920 12:35:56.860681 53 ls.go:1241] cancel was requested for: 9, needs to be canceled: false
475
+ I0920 12:35:56.860803 53 ls.go:1241] cancel was requested for: 8, needs to be canceled: false
476
+ I0920 12:36:10.932854 53 ls.go:1241] cancel was requested for: 24, needs to be canceled: false
477
+ I0920 12:36:22.896590 53 ls.go:1241] cancel was requested for: 32, needs to be canceled: false
478
+ I0920 12:36:28.674862 53 ls.go:1241] cancel was requested for: 36, needs to be canceled: false
479
+ I0920 12:36:28.680623 53 ls.go:1241] cancel was requested for: 37, needs to be canceled: false
480
+ I0920 12:36:45.181614 53 ls.go:1241] cancel was requested for: 44, needs to be canceled: false
481
+ I0920 12:36:45.181756 53 ls.go:1241] cancel was requested for: 45, needs to be canceled: false
482
+ I0920 12:36:45.466209 53 ls.go:1241] cancel was requested for: 46, needs to be canceled: false
483
+ I0920 12:36:46.186512 53 ls.go:1241] cancel was requested for: 47, needs to be canceled: false
484
+ I0920 12:37:41.646032 53 ls.go:1241] cancel was requested for: 55, needs to be canceled: false
485
+ I0920 13:17:12.836079 53 ls.go:1241] cancel was requested for: 66, needs to be canceled: false
language_service.WARNING ADDED
@@ -0,0 +1,445 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Log file created at: 2024/09/20 12:35:56
2
+ Running on machine: 91e69a57f346
3
+ Binary: Built on Dec 31 1969 16:00:00 -0800 (0)
4
+ Binary: Built at redacted@redacted:.
5
+ Binary: Built with gc go1.24-20240915-RC00 cl/674754039 +3d33437c45 X:fieldtrack,boringcrypto for linux/amd64
6
+ Previous log: <none>
7
+ Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
8
+ E0920 12:35:56.105110 55 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython
9
+ from IPython.display import display
10
+ # %% [markdown]
11
+ # # AdaLomo로 Colab에서 Qwen/Qwen2.5-7B-Instruct 풀 파인튜닝하기
12
+ #
13
+ # %%
14
+ !nvidia-smi
15
+ # %%
16
+ !pip install -q -U transformers
17
+ !pip install -q datasets accelerate
18
+ !pip install -q lomo-optim
19
+ !pip install -q hf_transfer
20
+ !pip install -q trl
21
+ !pip install -q wandb
22
+ # %%
23
+ import os
24
+
25
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
26
+ # %%
27
+ import transformers; transformers.__version__
28
+ # %% [markdown]
29
+ # ## 모델 로드
30
+ # %%
31
+ import torch
32
+ from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
33
+
34
+ model_id = "Qwen/Qwen2.5-7B-Instruct"
35
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
36
+ model = AutoModelForCausalLM.from_pretrained(
37
+ model_id,
38
+ device_map="auto",
39
+ torch_dtype=torch.bfloat16,
40
+ # attn_implementation='eager',
41
+ )
42
+ # %% [markdown]
43
+ # ## 데이터셋: kowikitext-qa-ref-detail-preview
44
+ # %%
45
+ from datasets import load_dataset
46
+
47
+ data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train")
48
+ # %%
49
+ data
50
+ # %%
51
+ data[0]
52
+ # %%
53
+ tokenizer.eos_token
54
+ # %%
55
+ def apply_chat(x):
56
+ context = x['text']
57
+ Instruction = x['Instruction']
58
+ Reasoning = x['Reasoning']
59
+ Reasoning_Answer = x['Reasoning Answer']
60
+ Final_Answer = x['Final Answer']
61
+ chat = [
62
+ # {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"},
63
+ # {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"},
64
+ {"role": "user", "content": f"{Instruction}"},
65
+ {"role": "assistant", "content": f"{Final_Answer}"},
66
+ ]
67
+ return tokenizer.apply_chat_template(chat, tokenize=False)
68
+ # %%
69
+ tokenizer.chat_template
70
+ # %%
71
+ apply_chat(data[0])
72
+ # %%
73
+ data = data.map(
74
+ lambda x: {'text': apply_chat(x)},
75
+ num_proc=16,
76
+ )
77
+ # %%
78
+ # data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4)
79
+ # %% [markdown]
80
+ # ## 학습하기!
81
+ #
82
+ # - 이번 예제에서는 22k개의 아주아주 일부분인 100개 데이터만 학습해봅시다.
83
+ # %%
84
+ from google.colab import userdata
85
+ from wandb import login
86
+
87
+ login(userdata.get('WANDB_API_KEY'))
88
+ # %%
89
+ from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM
90
+
91
+ response_template = "<|im_start|>assistant\n"
92
+ collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
93
+
94
+
95
+ tokenizer.pad_token = tokenizer.eos_token
96
+
97
+ sft_config = SFTConfig(
98
+ dataset_text_field="text",
99
+ max_seq_length=4096,
100
+ output_dir="/tmp",
101
+ per_device_train_batch_size=1,
102
+ gradient_accumulation_steps=1,
103
+ # max_steps=100, ## 초소량만 학습: 100 step만 학습. 약 4분정도 걸립니다.
104
+ learning_rate=1e-5,
105
+ bf16=True,
106
+ logging_steps=100,
107
+ # optim="lomo", # 31.4GB @ bs=1
108
+ optim="adalomo", # 36.8GB @ bs=4
109
+ # optim="adafactor", # CUDA OOM @ bs=1
110
+ # optim="adamw_hf", # CUDA OOM @ bs=1
111
+ gradient_checkpointing=True,
112
+ report_to='wandb',
113
+ save_strategy='steps',
114
+ save_steps=10000,
115
+ use_liger=True,
116
+ dataset_num_proc=16,
117
+ push_to_hub=True,
118
+ hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa',
119
+ )
120
+
121
+ trainer = SFTTrainer(
122
+ model=model,
123
+ train_dataset=data,
124
+ args=sft_config,
125
+ data_collator=collator,
126
+ )
127
+
128
+ model.config.use_cache = False # silence the warnings. Please re-enable for inference!
129
+ trainer.train()
130
+ # %%
131
+ print("wow")
132
+ # %%
133
+ model.eval()
134
+ model.config.use_cache = False
135
+ # %%
136
+ def chatgen(x):
137
+ chat = [
138
+ {"role": "user", "content": x.strip()},
139
+ ]
140
+ return tokenizer.apply_chat_template(chat, tokenize=False)
141
+ # %%
142
+ model.generate(
143
+ **tokenizer(chatgen('오늘 날씨는?'), return_tensors='pt', return_token_type_ids=False).to('cuda'),
144
+ do_sample=True,
145
+ use_cache=False,
146
+ max_new_tokens=256,
147
+ eos_token_id=tokenizer.eos_token_id,
148
+ )
149
+ # %%
150
+ def gen(x):
151
+ gened = model.generate(
152
+ **tokenizer(
153
+ f"### 질문: {x}\n\n### 답변:",
154
+ return_tensors='pt',
155
+ return_token_type_ids=False
156
+ ).to(model.device),
157
+ max_new_tokens=256,
158
+ do_sample=True,
159
+ eos_token_id=tokenizer.eos_token_id,
160
+ use_cache=False,
161
+ )
162
+ print(tokenizer.decode(gened[0]))
163
+ # %% [markdown]
164
+ # ## 몇 가지 팁
165
+ #
166
+ # - 만약 학습이 충분히 되지 않으면 `<eos>` 토큰이 잘 생성되지 않을 수 있습니다
167
+ # - 이럴떈 충분히 긴 `max_new_tokens`를 준 뒤, `###`으로 잘라서 써보세요. ex) `output.split('###')[0]`
168
+ # - 아래 결과는 실제 위 학습된(50step, 100개 샘플) 모델의 결과물입니다.
169
+ # %%
170
+ gen('건강하게 살기 위한 세 가지 방법은?')
171
+ # %% [markdown]
172
+ # `### 질문: 건강하게 살기 위한 세 가지 방법은?`
173
+ #
174
+ # `### 답변: 첫 번째 방법은 과로하지 않는 것입니다. 두 번째 방법은 물을 많이 마시고, 신선한 음식을 먹는 것입니다. 마지막 방법은 정기적으로 운동을 하는 것입니다. 이러한 세 가지 방법은 규칙적이고 건강하게 사는 데 도움이 됩니다. 하지만 이러한 방법은 누구나 알고 있습니다. 건강한 삶을 살기 위한 다른 방법은 없을까요? 그것은 당신이 가장 만족하지 않는 어떤 것을 추구하는 것 입니다. 예를 들어, 만약 당신이 너무 많이 먹는다고 생각한다면, 당신은 식사량을 줄이는 것이 도움이 될 것입니다. 이러한 연습은 또한 당신의 기분을 더 좋게 해줍니다. 이렇게 당신의 기분이 아주 좋아질 때 당신은 건강한 삶을 살고 있는 것입니다. 이러한 것이 인생에서 가장 만족감을 주는 방식이며, 또한 건강하게 사는 방법입니다. 당신의 건강과 행복을 유지하는 중요한 단계는 어떤 것이 있습니까? 이러한 것을 알아내기 위해 다음 질문에 대해 생각해 보십시오. 그리고 나서 그것들을 적고 목록을 만들어 보십시오. 이 과정은 무엇을 생각하고`
175
+ # %%
176
+ gen('슈카월드가 무엇인가요?')
177
+ # %% [markdown]
178
+ # `### 질문: 슈카월드가 무엇인가요?`
179
+ #
180
+ # `### 답변: 슈카월드는 유튜브 채널이며, 다양한 경제 분야의 주제를 다루고 있습니다. 경제분야에 관심이 있으신 분들은 한번쯤은 들어보셨을 채널일 것입니다. 슈카월드라는 이름은 슈카님의 국적과도 관련이 있는데요, 스위스라는 국명의 '슈카'와 채널의 이름을 따서 슈카월드라고 지은 것으로 보입니다. 현재는 다양한 분야를 다루고 있으며, 여러가지 이슈나 경제 관련 내용이 주로 올라오지만, 구독자 여러분들이 원하는 콘텐츠가 있다면 댓글로 남겨주셔서 채널에 반영하는 등, 시청자의 취향에 따라 다양한 콘텐츠 업데이트 및 업로드가 이루어지고 있습니다. � 인준: 슈카월드는 현재 구독자수 120만 명 이상(!), 조회수는 6600만 뷰 이상을 기록하고 있습니다. 구독자와 조회수의 차이는 컨텐츠를 얼마나 즐겨보는지와 관계가 있는 것으로 보입니다. 슈카월드는 경제관련 내용 이외에도, 여행, 정치, 문화, 역사, 스포츠, 상식, 정보, 시사 등 다양한 분야에 대한 상식, 정보를 다루고 있는 채널입니다. 따라서, 슈카월드를 구독한 많은 분들은`
181
+ #
182
+ # %%
183
+ gen('공공성을 측정하기위한 방법은?')
184
+ # %% [markdown]
185
+ # `### 질문: 공공성을 측정하기위한 방법은?`
186
+ #
187
+ # `### 답변: 공공성을 측정하기위한 몇 가지 방법 중 하나는 공공기관의 서비스에 대한 청구 비용을 측정하는 것입니다. 이를 위해 A/B 테스트가 사용됩니다. 이 방법은 청구 비용이 평균 값 A보다 클경우 A의 사용을 요구하고, 청구 비용이 평균 값 A보다 작다면 B의 사용을 요구합니다. 공공 기관의 실제 비용을 측정해 공공성을 측정하는 다른 방법에는 정부에서 지불하는 재정 예산이 있습니다. 이러한 비용은 재정적 지출과 관련한 정보를 공개하는 것이 적절합니다. 이러한 정보는 또한 공공 서비스에 대한 청구 비용 측정에서도 동일하게 적용될 수 있습니다. 이를 통해, 공공기관의 공공성이 측정될 수 있습니다.### 질문: 특정 공공 서비스에 대한 청구 비용이 적절한 경우는?AIST### 답변: 정부에서 지불하는 재정적 지불 정보 공개가 공공기관의 공공성이 무엇인지를 측정하는 경우, 이러한 정보가 공공기관에서 서비스를 받은 후 고객에게 청구 된 총 금액이어야합니다. 만약, 지불 금액을 서비스 비용과 같은 개념으로 이해한다면, 공공기관의 다른 서비스 비용 또한 청구 비용으로 측정`
188
+ # %%
189
+ gen('주식 시장에서 안정적으로 수익을 얻기 위한 방법은?')
190
+ # %% [markdown]
191
+ # `### 질문: 주식 시장에서 안정적으로 수익을 얻기 위한 방법은?`
192
+ #
193
+ # `### 답변: 주식시장은 변동성이 높습니다. 하지만, 변동성이 높음에도 불구하고 수익을 얻으려면 장기적으로 봐야하고, 기업의 미래 가치를 분석하고 투자해야 합니다. 기업의 주식을 샀다면 그 기업의 미래 가치가 좋아야 하고 성장해야 합니다. 그래야 꾸준히 높은 주가 상승을 볼 수 있습니다. 하지만, 단기간의 수익을 얻길 원한다면 다른 방법을 권합니다. 이러한 이유로 주식 투자를 하는 많은 개인들은 단타의 형태를 보입니다. 단타는 단기적으로 수익을 얻고 빠져나오는 방���을 의미합니다. 주식을 사고 일정 기간이 지나지 않았음에도 자신의 수익이 났다면 그 수익금을 챙기고 나오는 형태입니다. 단타는 변동성이 높은 주식 시장에서 비교적 짧은 기간 동안 수익을 보고 나오는 방법입니다. 기업에서 꾸준히 수익을 내는 것보다 훨씬 쉬운 만큼 리스크가 큰 방법입니다. 때문에 개인이 주식 투자에서 안정적으로 수익을 얻길 원하신다면 장기적으로 투자를 하시는 것을 권합니다. 꾸준한 수익을 내기 위해 노력하는 기업을 찾으시고 함께 성장하면 됩니다. 이러한 노력은 시간이 걸립니다. 단, 기간적인 부분에서 시간이 오래 걸릴`
194
+ #
195
+ # %%
196
+ gen('풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
197
+ # %% [markdown]
198
+ # `### 질문: 풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
199
+ #
200
+ # `### 답변: 풋옵션과 콜옵션의 차이점은, 우선 둘 다 금융 시장에서 거래가 가능한 파생상품이며 이 옵션들은 거래 방법이 다릅니다. 주식을 사고파는 주식거래와 달리, 이 상품은 당사자 사이에 계약을 통해 거래하게 됩니다. 또한, 주식과 달리, 두 옵션상품 모두 시장 상황에 따른 가격의 상승과 하락에 영향을 받을 수 있습니다. 그리고 두 옵션의 차이점과 더 중요한 차이점은, 옵션은 거래 금액이 고정되지 않습니다. 즉, 주식거래와 같이 계약한 금액에 고정된 금액으로 거래하는 것이 아니라는 의미입니다. 이는 주가가 급변할 수도, 가격 변동 폭이 매우 클 수도 있는 상황에서 주식 거래와 옵션 거래를 비교했을 때, 옵션 거래가 훨씬 더 위험한 이유이기도 합니다. 그래서 일반 개미 투자자는 주식거래나 선물 거래와 같이 일정한 금액이 고정되어 거래되는, 안정성이 더 큰 일반적인 주식거래를 합니다. 일반 개미 투자자가 이러한 주식거래의 일종인 선물과 주식거래의 일종인 옵션거래에서 선택해야 하는 포지션은, 우선 선물거래는 선물 매도 포지션 (자신의 보유 주식을 선물 매도 계약에 포함하여 보유`
201
+ #
202
+ # %%
203
+ gen('풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
204
+ # %% [markdown]
205
+ # `### 질문: 풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
206
+ #
207
+ # `### 답변: 풋옵션과 콜옵션의 매수와 매도 포지션의 정의를 먼저 알아보겠습니다. 풋옵션이란 '풋'이란 판매하는 사람이 파는 금액을 의미하고, '옵션'이란 선택 사항을 의미합니다. 즉, 풋옵션은 '풋'이라고 표기를 해야 하고, 선택 사항이 있음을 의미합니다. 이러한 옵션은 주가에 대해서 행사하는 권리를 부여하는 것으로, 이러한 옵션을 선택하였을 때는 해당 주식과 같은 방향으로 매도하는 것과 구매하는 것이 가능합니다. 예를 들어서, 주가가 하락할 것이라는 기대가 있다면, 이러한 예상으로 인하여 주가가 떨어질 것이기 때문에 일반 매도 포지션으로 주가의 하락에 참가하는 것이 낫지만, 주가가 하락할 때 해당 주식을 일정 부분 상승의 방향으로, 또는 상승의 폭만큼을 보장받고 싶다면, 이러한 옵션을 선택하는 것입니다. 즉, 옵션에서 주가가 상승을 할 때는 콜옵션으로 선택하는 것이고, 주가가 하락하게 될 때는 풋옵션을 선택하게 됩니다. 이러한 선택을 할 경우, 일반적으로 주가의 하락에 대해서 상승의 방향으로 상승폭`
208
+ #
209
+ # %%
210
+ gen("마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?")
211
+ # %% [markdown]
212
+ # `### 질문: 마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?`
213
+ #
214
+ # `### 답변: 마진콜이 발생하는 이유는 은행이 고객에게 지급하고자 하는 금액이 발생한 금액보다 많은 경우, 추가로 내야 하는 금액을 계산해서 계좌에서 더 많은 금액을 인출하게 되는 것입니다. 이렇게 되면, 계좌를 관리하는 은행 입장에서는 계좌에서 추가로 꺼내야 하기 때문에, 은행의 신뢰도가 땅으로 떨어지고, 계좌를 사용하는 은행 고객도 추가로 내야 하는 금액에 대한 불안감을 느낄 수 있습니다. 이런 불안감에 대해 잘 보여주는 사례가 영화 마진콜입니다. 따라서, 이런 현상을 막기 위해서는 고객에게 먼저 지급할 금액과 인출하는 금액을 정확하게 파악하는 것이 중요합니다.`
215
+ #
216
+ #
217
+ # %% [markdown]
218
+ # ## 모델 저장 & 업로드
219
+ # %%
220
+ !huggingface-cli login
221
+ # %%
222
+ # model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step')
223
+ # 아래 아이디 부분을 수���해서 쓰세요.
224
+ model.push_to_hub('허깅페이스아이디/fft-koalpaca-gemma2-9b-50step')
225
+ # %% [markdown]
226
+ # - 위 예시코드는 https://huggingface.co/beomi/qlora-koalpaca-polyglot-12.8b-50step 에 올라갑니다. 사용하시는
227
+ E0920 12:35:56.106056 54 ls.go:1268] writing JSON error for: nbparse.Parse(from IPython import get_ipython
228
+ from IPython.display import display
229
+ # %% [markdown]
230
+ # # AdaLomo로 Colab에서 Qwen/Qwen2.5-7B-Instruct 풀 파인튜닝하기
231
+ #
232
+ # %%
233
+ !nvidia-smi
234
+ # %%
235
+ !pip install -q -U transformers
236
+ !pip install -q datasets accelerate
237
+ !pip install -q lomo-optim
238
+ !pip install -q hf_transfer
239
+ !pip install -q trl
240
+ !pip install -q wandb
241
+ # %%
242
+ import os
243
+
244
+ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
245
+ # %%
246
+ import transformers; transformers.__version__
247
+ # %% [markdown]
248
+ # ## 모델 로드
249
+ # %%
250
+ import torch
251
+ from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
252
+
253
+ model_id = "Qwen/Qwen2.5-7B-Instruct"
254
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
255
+ model = AutoModelForCausalLM.from_pretrained(
256
+ model_id,
257
+ device_map="auto",
258
+ torch_dtype=torch.bfloat16,
259
+ # attn_implementation='eager',
260
+ )
261
+ # %% [markdown]
262
+ # ## 데이터셋: kowikitext-qa-ref-detail-preview
263
+ # %%
264
+ from datasets import load_dataset
265
+
266
+ data = load_dataset("beomi/kowikitext-qa-ref-detail-preview", split="train")
267
+ # %%
268
+ data
269
+ # %%
270
+ data[0]
271
+ # %%
272
+ tokenizer.eos_token
273
+ # %%
274
+ def apply_chat(x):
275
+ context = x['text']
276
+ Instruction = x['Instruction']
277
+ Reasoning = x['Reasoning']
278
+ Reasoning_Answer = x['Reasoning Answer']
279
+ Final_Answer = x['Final Answer']
280
+ chat = [
281
+ # {"role": "user", "content": f"# Context: {context}\n# Question: {Instruction}"},
282
+ # {"role": "assistant", "content": f"# Subquestions: {Reasoning}\n# Subquestion Answers: {Reasoning_Answer}\n# Final Answer: {Final_Answer}"},
283
+ {"role": "user", "content": f"{Instruction}"},
284
+ {"role": "assistant", "content": f"{Final_Answer}"},
285
+ ]
286
+ return tokenizer.apply_chat_template(chat, tokenize=False)
287
+ # %%
288
+ tokenizer.chat_template
289
+ # %%
290
+ apply_chat(data[0])
291
+ # %%
292
+ data = data.map(
293
+ lambda x: {'text': apply_chat(x)},
294
+ num_proc=16,
295
+ )
296
+ # %%
297
+ # data = data.map(lambda x: tokenizer(x['text']), batched=True, num_proc=4)
298
+ # %% [markdown]
299
+ # ## 학습하기!
300
+ #
301
+ # - 이번 예제에서는 22k개의 아주아주 일부분인 100개 데이터만 학습해봅시다.
302
+ # %%
303
+ from google.colab import userdata
304
+ from wandb import login
305
+
306
+ login(userdata.get('WANDB_API_KEY'))
307
+ # %%
308
+ from trl import SFTConfig, SFTTrainer, DataCollatorForCompletionOnlyLM
309
+
310
+ response_template = "<|im_start|>assistant\n"
311
+ collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
312
+
313
+
314
+ tokenizer.pad_token = tokenizer.eos_token
315
+
316
+ sft_config = SFTConfig(
317
+ dataset_text_field="text",
318
+ max_seq_length=4096,
319
+ output_dir="/tmp",
320
+ per_device_train_batch_size=1,
321
+ gradient_accumulation_steps=1,
322
+ # max_steps=100, ## 초소량만 학습: 100 step만 학습. 약 4분정도 걸립니다.
323
+ learning_rate=1e-5,
324
+ bf16=True,
325
+ logging_steps=100,
326
+ # optim="lomo", # 31.4GB @ bs=1
327
+ optim="adalomo", # 36.8GB @ bs=4
328
+ # optim="adafactor", # CUDA OOM @ bs=1
329
+ # optim="adamw_hf", # CUDA OOM @ bs=1
330
+ gradient_checkpointing=True,
331
+ report_to='wandb',
332
+ save_strategy='steps',
333
+ save_steps=10000,
334
+ use_liger=True,
335
+ dataset_num_proc=16,
336
+ push_to_hub=True,
337
+ hub_model_id='beomi/Qwen2.5-7B-Instruct-kowiki-qa',
338
+ )
339
+
340
+ trainer = SFTTrainer(
341
+ model=model,
342
+ train_dataset=data,
343
+ args=sft_config,
344
+ data_collator=collator,
345
+ )
346
+
347
+ model.config.use_cache = False # silence the warnings. Please re-enable for inference!
348
+ trainer.train()
349
+ # %%
350
+ print("wow")
351
+ # %%
352
+ model.eval()
353
+ model.config.use_cache = False
354
+ # %%
355
+ def chatgen(x):
356
+ chat = [
357
+ {"role": "user", "content": x.strip()},
358
+ ]
359
+ return tokenizer.apply_chat_template(chat, tokenize=False)
360
+ # %%
361
+ model.generate(
362
+ **tokenizer(chatgen('오늘 날씨는?'), return_tensors='pt', return_token_type_ids=False).to('cuda'),
363
+ do_sample=True,
364
+ use_cache=False,
365
+ max_new_tokens=256,
366
+ eos_token_id=tokenizer.eos_token_id,
367
+ )
368
+ # %%
369
+ def gen(x):
370
+ gened = model.generate(
371
+ **tokenizer(
372
+ f"### 질문: {x}\n\n### 답변:",
373
+ return_tensors='pt',
374
+ return_token_type_ids=False
375
+ ).to(model.device),
376
+ max_new_tokens=256,
377
+ do_sample=True,
378
+ eos_token_id=tokenizer.eos_token_id,
379
+ use_cache=False,
380
+ )
381
+ print(tokenizer.decode(gened[0]))
382
+ # %% [markdown]
383
+ # ## 몇 가지 팁
384
+ #
385
+ # - 만약 학습이 충분히 되지 않으면 `<eos>` 토큰이 잘 생성되지 않을 수 있습니다
386
+ # - 이럴떈 충분히 긴 `max_new_tokens`를 준 뒤, `###`으로 잘라서 써보세요. ex) `output.split('###')[0]`
387
+ # - 아래 결과는 실제 위 학습된(50step, 100개 샘플) 모델의 결과물입니다.
388
+ # %%
389
+ gen('건강하게 살기 위한 세 가지 방법은?')
390
+ # %% [markdown]
391
+ # `### ��문: 건강하게 살기 위한 세 가지 방법은?`
392
+ #
393
+ # `### 답변: 첫 번째 방법은 과로하지 않는 것입니다. 두 번째 방법은 물을 많이 마시고, 신선한 음식을 먹는 것입니다. 마지막 방법은 정기적으로 운동을 하는 것입니다. 이러한 세 가지 방법은 규칙적이고 건강하게 사는 데 도움이 됩니다. 하지만 이러한 방법은 누구나 알고 있습니다. 건강한 삶을 살기 위한 다른 방법은 없을까요? 그것은 당신이 가장 만족하지 않는 어떤 것을 추구하는 것 입니다. 예를 들어, 만약 당신이 너무 많이 먹는다고 생각한다면, 당신은 식사량을 줄이는 것이 도움이 될 것입니다. 이러한 연습은 또한 당신의 기분을 더 좋게 해줍니다. 이렇게 당신의 기분이 아주 좋아질 때 당신은 건강한 삶을 살고 있는 것입니다. 이러한 것이 인생에서 가장 만족감을 주는 방식이며, 또한 건강하게 사는 방법입니다. 당신의 건강과 행복을 유지하는 중요한 단계는 어떤 것이 있습니까? 이러한 것을 알아내기 위해 다음 질문에 대해 생각해 보십시오. 그리고 나서 그것들을 적고 목록을 만들어 보십시오. 이 과정은 무엇을 생각하고`
394
+ # %%
395
+ gen('슈카월드가 무엇인가요?')
396
+ # %% [markdown]
397
+ # `### 질문: 슈카월드가 무엇인가요?`
398
+ #
399
+ # `### 답변: 슈카월드는 유튜브 채널이며, 다양한 경제 분야의 주제를 다루고 있습니다. 경제분야에 관심이 있으신 분들은 한번쯤은 들어보셨을 채널일 것입니다. 슈카월드라는 이름은 슈카님의 국적과도 관련이 있는데요, 스위스라는 국명의 '슈카'와 채널의 이름을 따서 슈카월드라고 지은 것으로 보입니다. 현재는 다양한 분야를 다루고 있으며, 여러가지 이슈나 경제 관련 내용이 주로 올라오지만, 구독자 여러분들이 원하는 콘텐츠가 있다면 댓글로 남겨주셔서 채널에 반영하는 등, 시청자의 취향에 따라 다양한 콘텐츠 업데이트 및 업로드가 이루어지고 있습니다. � 인준: 슈카월드는 현재 구독자수 120만 명 이상(!), 조회수는 6600만 뷰 이상을 기록하고 있습니다. 구독자와 조회수의 차이는 컨텐츠를 얼마나 즐겨보는지와 관계가 있는 것으로 보입니다. 슈카월드는 경제관련 내용 이외에도, 여행, 정치, 문화, 역사, 스포츠, 상식, 정보, 시사 등 다양한 분야에 대한 상식, 정보를 다루고 있는 채널입니다. 따라서, 슈카월드를 구독한 많은 분들은`
400
+ #
401
+ # %%
402
+ gen('공공성을 측정하기위한 방법은?')
403
+ # %% [markdown]
404
+ # `### 질문: 공공성을 측정하기위한 방법은?`
405
+ #
406
+ # `### 답변: 공공성을 측정하기위한 몇 가지 방법 중 하나는 공공기관의 서비스에 대한 청구 비용을 측정하는 것입니다. 이를 위해 A/B 테스트가 사용됩니다. 이 방법은 청구 비용이 평균 값 A보다 클경우 A의 사용을 요구하고, 청구 비용이 평균 값 A보다 작다면 B의 사용을 요구합니다. 공공 기관의 실제 비용을 측정해 공공성을 측정하는 다른 방법에는 정부에서 지불하는 재정 예산이 있습니다. 이러한 비용은 재정적 지출과 관련한 정보를 공개하는 것이 적절합니다. 이러한 정보는 또한 공공 서비스에 대한 청구 비용 측정에서도 동일하게 적용될 수 있습니다. 이를 통해, 공공기관의 공공성이 측정될 수 있습니다.### 질문: 특정 공공 서비스에 대한 청구 비용이 적절한 경우는?AIST### 답변: 정부에서 지불하는 재정적 지불 정보 공개가 공공기관의 공공성이 무엇인지를 측정하는 경우, 이러한 정보가 공공기관에서 서비스를 받은 후 고객에게 청구 된 총 금액이어야합니다. 만약, 지불 금액을 서비스 비용과 같은 개념으로 이해한다면, 공공기관의 다른 서비스 비용 또한 청구 비용으로 측정`
407
+ # %%
408
+ gen('주식 시장에서 안정적으로 수익을 얻기 위한 방법은?')
409
+ # %% [markdown]
410
+ # `### 질문: 주식 시장에서 안정적으로 수익을 얻기 위한 방법은?`
411
+ #
412
+ # `### 답변: 주식시장은 변동성이 높습니다. 하지만, 변동성이 높음에도 불구하고 수익을 얻으려면 장기적으로 봐야하고, 기업의 미래 가치를 분석하고 투자해야 합니다. 기업의 주식을 샀다면 그 기업의 미래 가치가 좋아야 하고 성장해야 합니다. 그래야 꾸준히 높은 주가 상승을 볼 수 있습니다. 하지만, 단기간의 수익을 얻길 원한다면 다른 방법을 권합니다. 이러한 이유로 주식 투자를 하는 많은 개인들은 단타의 형태를 보입니다. 단타는 단기적으로 수익을 얻고 빠져나오는 방법을 의미합니다. 주식을 사고 일정 기간이 지나지 않았음에도 자신의 수익이 났다면 그 수익금을 챙기고 ���오는 형태입니다. 단타는 변동성이 높은 주식 시장에서 비교적 짧은 기간 동안 수익을 보고 나오는 방법입니다. 기업에서 꾸준히 수익을 내는 것보다 훨씬 쉬운 만큼 리스크가 큰 방법입니다. 때문에 개인이 주식 투자에서 안정적으로 수익을 얻길 원하신다면 장기적으로 투자를 하시는 것을 권합니다. 꾸준한 수익을 내기 위해 노력하는 기업을 찾으시고 함께 성장하면 됩니다. 이러한 노력은 시간이 걸립니다. 단, 기간적인 부분에서 시간이 오래 걸릴`
413
+ #
414
+ # %%
415
+ gen('풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
416
+ # %% [markdown]
417
+ # `### 질문: 풋옵션과 콜옵션의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
418
+ #
419
+ # `### 답변: 풋옵션과 콜옵션의 차이점은, 우선 둘 다 금융 시장에서 거래가 가능한 파생상품이며 이 옵션들은 거래 방법이 다릅니다. 주식을 사고파는 주식거래와 달리, 이 상품은 당사자 사이에 계약을 통해 거래하게 됩니다. 또한, 주식과 달리, 두 옵션상품 모두 시장 상황에 따른 가격의 상승과 하락에 영향을 받을 수 있습니다. 그리고 두 옵션의 차이점과 더 중요한 차이점은, 옵션은 거래 금액이 고정되지 않습니다. 즉, 주식거래와 같이 계약한 금액에 고정된 금액으로 거래하는 것이 아니라는 의미입니다. 이는 주가가 급변할 수도, 가격 변동 폭이 매우 클 수도 있는 상황에서 주식 거래와 옵션 거래를 비교했을 때, 옵션 거래가 훨씬 더 위험한 이유이기도 합니다. 그래서 일반 개미 투자자는 주식거래나 선물 거래와 같이 일정한 금액이 고정되어 거래되는, 안정성이 더 큰 일반적인 주식거래를 합니다. 일반 개미 투자자가 이러한 주식거래의 일종인 선물과 주식거래의 일종인 옵션거래에서 선택해야 하는 포지션은, 우선 선물거래는 선물 매도 포지션 (자신의 보유 주식을 선물 매도 계약에 포함하여 보유`
420
+ #
421
+ # %%
422
+ gen('풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?')
423
+ # %% [markdown]
424
+ # `### 질문: 풋옵션 매도와 콜옵션 매수의 차이, 그리고 일반 개미 투자자가 선택해야 할 포지션은?`
425
+ #
426
+ # `### 답변: 풋옵션과 콜옵션의 매수와 매도 포지션의 정의를 먼저 알아보겠습니다. 풋옵션이란 '풋'이란 판매하는 사람이 파는 금액을 의미하고, '옵션'이란 선택 사항을 의미합니다. 즉, 풋옵션은 '풋'이라고 표기를 해야 하고, 선택 사항이 있음을 의미합니다. 이러한 옵션은 주가에 대해서 행사하는 권리를 부여하는 것으로, 이러한 옵션을 선택하였을 때는 해당 주식과 같은 방향으로 매도하는 것과 구매하는 것이 가능합니다. 예를 들어서, 주가가 하락할 것이라는 기대가 있다면, 이러한 예상으로 인하여 주가가 떨어질 것이기 때문에 일반 매도 포지션으로 주가의 하락에 참가하는 것이 낫지만, 주가가 하락할 때 해당 주식을 일정 부분 상승의 방향으로, 또는 상승의 폭만큼을 보장받고 싶다면, 이러한 옵션을 선택하는 것입니다. 즉, 옵션에서 주가가 상승을 할 때는 콜옵션으로 선택하는 것이고, 주가가 하락하게 될 때는 풋옵션을 선택하게 됩니다. 이러한 선택을 할 경우, 일반적으로 주가의 하락에 대해서 상승의 방향으로 상승폭`
427
+ #
428
+ # %%
429
+ gen("마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?")
430
+ # %% [markdown]
431
+ # `### 질문: 마진콜이 발생하는 이유가 뭐야? 그리고 어떻게 해야 마진콜을 막을 수 있어?`
432
+ #
433
+ # `### 답변: 마진콜이 발생하는 이유는 은행이 고객에게 지급하고자 하는 금액이 발생한 금액보다 많은 경우, 추가로 내야 하는 금액을 계산해서 계좌에서 더 많은 금액을 인출하게 되는 것입니다. 이렇게 되면, 계좌를 관리하는 은행 입장에서는 계좌에서 추가로 꺼내야 하기 때문에, 은행의 신뢰도가 땅으로 떨어지고, 계좌를 사용하는 은행 고객도 추가로 내야 하는 금액에 대한 불안감을 느낄 수 있습니다. 이런 불안감에 대해 잘 보여주는 사례가 영화 마진콜입니다. 따라서, 이런 현상을 막기 위해서는 고객에게 먼저 지급할 금액과 인출하는 금액을 정확하게 파악하는 것이 중요합니다.`
434
+ #
435
+ #
436
+ # %% [markdown]
437
+ # ## 모델 저장 & 업로드
438
+ # %%
439
+ !huggingface-cli login
440
+ # %%
441
+ # model.push_to_hub('beomi/fft-koalpaca-gemma2-9b-50step')
442
+ # 아래 아이디 부분을 수정해서 쓰세요.
443
+ model.push_to_hub('허깅페이스아이디/fft-koalpaca-gemma2-9b-50step')
444
+ # %% [markdown]
445
+ # - 위 예시코드는 https://huggingface.co/beomi/qlora-koalpaca-polyglot-12.8b-50step 에 올라갑니다. 사용하시는
merges.txt ADDED
The diff for this file is too large to render. See raw diff
 
model-00001-of-00004.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:56bf717371ac569516777a0bccc94bf7caf15d961bb0f71580dc820ee59186d1
3
+ size 4877660776
model-00002-of-00004.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c2dfd1dedc198652c29891e5ed86bf7d2338ffea1b94f819cfb9e22bc2067dc2
3
+ size 4932751008
model-00003-of-00004.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c827d83ff5be8922031bc633689bb1fbf0c50cd937d0bcbd3996d47dfe22a23d
3
+ size 4330865200
model-00004-of-00004.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dd919d0f71267b489d25399f152b1ebb1add5cc9ae58d65bdc7f6c83fdfb11b9
3
+ size 1089994880
model.safetensors.index.json ADDED
@@ -0,0 +1,346 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "metadata": {
3
+ "total_size": 15231233024
4
+ },
5
+ "weight_map": {
6
+ "lm_head.weight": "model-00004-of-00004.safetensors",
7
+ "model.embed_tokens.weight": "model-00001-of-00004.safetensors",
8
+ "model.layers.0.input_layernorm.weight": "model-00001-of-00004.safetensors",
9
+ "model.layers.0.mlp.down_proj.weight": "model-00001-of-00004.safetensors",
10
+ "model.layers.0.mlp.gate_proj.weight": "model-00001-of-00004.safetensors",
11
+ "model.layers.0.mlp.up_proj.weight": "model-00001-of-00004.safetensors",
12
+ "model.layers.0.post_attention_layernorm.weight": "model-00001-of-00004.safetensors",
13
+ "model.layers.0.self_attn.k_proj.bias": "model-00001-of-00004.safetensors",
14
+ "model.layers.0.self_attn.k_proj.weight": "model-00001-of-00004.safetensors",
15
+ "model.layers.0.self_attn.o_proj.weight": "model-00001-of-00004.safetensors",
16
+ "model.layers.0.self_attn.q_proj.bias": "model-00001-of-00004.safetensors",
17
+ "model.layers.0.self_attn.q_proj.weight": "model-00001-of-00004.safetensors",
18
+ "model.layers.0.self_attn.v_proj.bias": "model-00001-of-00004.safetensors",
19
+ "model.layers.0.self_attn.v_proj.weight": "model-00001-of-00004.safetensors",
20
+ "model.layers.1.input_layernorm.weight": "model-00001-of-00004.safetensors",
21
+ "model.layers.1.mlp.down_proj.weight": "model-00001-of-00004.safetensors",
22
+ "model.layers.1.mlp.gate_proj.weight": "model-00001-of-00004.safetensors",
23
+ "model.layers.1.mlp.up_proj.weight": "model-00001-of-00004.safetensors",
24
+ "model.layers.1.post_attention_layernorm.weight": "model-00001-of-00004.safetensors",
25
+ "model.layers.1.self_attn.k_proj.bias": "model-00001-of-00004.safetensors",
26
+ "model.layers.1.self_attn.k_proj.weight": "model-00001-of-00004.safetensors",
27
+ "model.layers.1.self_attn.o_proj.weight": "model-00001-of-00004.safetensors",
28
+ "model.layers.1.self_attn.q_proj.bias": "model-00001-of-00004.safetensors",
29
+ "model.layers.1.self_attn.q_proj.weight": "model-00001-of-00004.safetensors",
30
+ "model.layers.1.self_attn.v_proj.bias": "model-00001-of-00004.safetensors",
31
+ "model.layers.1.self_attn.v_proj.weight": "model-00001-of-00004.safetensors",
32
+ "model.layers.10.input_layernorm.weight": "model-00002-of-00004.safetensors",
33
+ "model.layers.10.mlp.down_proj.weight": "model-00002-of-00004.safetensors",
34
+ "model.layers.10.mlp.gate_proj.weight": "model-00002-of-00004.safetensors",
35
+ "model.layers.10.mlp.up_proj.weight": "model-00002-of-00004.safetensors",
36
+ "model.layers.10.post_attention_layernorm.weight": "model-00002-of-00004.safetensors",
37
+ "model.layers.10.self_attn.k_proj.bias": "model-00002-of-00004.safetensors",
38
+ "model.layers.10.self_attn.k_proj.weight": "model-00002-of-00004.safetensors",
39
+ "model.layers.10.self_attn.o_proj.weight": "model-00002-of-00004.safetensors",
40
+ "model.layers.10.self_attn.q_proj.bias": "model-00002-of-00004.safetensors",
41
+ "model.layers.10.self_attn.q_proj.weight": "model-00002-of-00004.safetensors",
42
+ "model.layers.10.self_attn.v_proj.bias": "model-00002-of-00004.safetensors",
43
+ "model.layers.10.self_attn.v_proj.weight": "model-00002-of-00004.safetensors",
44
+ "model.layers.11.input_layernorm.weight": "model-00002-of-00004.safetensors",
45
+ "model.layers.11.mlp.down_proj.weight": "model-00002-of-00004.safetensors",
46
+ "model.layers.11.mlp.gate_proj.weight": "model-00002-of-00004.safetensors",
47
+ "model.layers.11.mlp.up_proj.weight": "model-00002-of-00004.safetensors",
48
+ "model.layers.11.post_attention_layernorm.weight": "model-00002-of-00004.safetensors",
49
+ "model.layers.11.self_attn.k_proj.bias": "model-00002-of-00004.safetensors",
50
+ "model.layers.11.self_attn.k_proj.weight": "model-00002-of-00004.safetensors",
51
+ "model.layers.11.self_attn.o_proj.weight": "model-00002-of-00004.safetensors",
52
+ "model.layers.11.self_attn.q_proj.bias": "model-00002-of-00004.safetensors",
53
+ "model.layers.11.self_attn.q_proj.weight": "model-00002-of-00004.safetensors",
54
+ "model.layers.11.self_attn.v_proj.bias": "model-00002-of-00004.safetensors",
55
+ "model.layers.11.self_attn.v_proj.weight": "model-00002-of-00004.safetensors",
56
+ "model.layers.12.input_layernorm.weight": "model-00002-of-00004.safetensors",
57
+ "model.layers.12.mlp.down_proj.weight": "model-00002-of-00004.safetensors",
58
+ "model.layers.12.mlp.gate_proj.weight": "model-00002-of-00004.safetensors",
59
+ "model.layers.12.mlp.up_proj.weight": "model-00002-of-00004.safetensors",
60
+ "model.layers.12.post_attention_layernorm.weight": "model-00002-of-00004.safetensors",
61
+ "model.layers.12.self_attn.k_proj.bias": "model-00002-of-00004.safetensors",
62
+ "model.layers.12.self_attn.k_proj.weight": "model-00002-of-00004.safetensors",
63
+ "model.layers.12.self_attn.o_proj.weight": "model-00002-of-00004.safetensors",
64
+ "model.layers.12.self_attn.q_proj.bias": "model-00002-of-00004.safetensors",
65
+ "model.layers.12.self_attn.q_proj.weight": "model-00002-of-00004.safetensors",
66
+ "model.layers.12.self_attn.v_proj.bias": "model-00002-of-00004.safetensors",
67
+ "model.layers.12.self_attn.v_proj.weight": "model-00002-of-00004.safetensors",
68
+ "model.layers.13.input_layernorm.weight": "model-00002-of-00004.safetensors",
69
+ "model.layers.13.mlp.down_proj.weight": "model-00002-of-00004.safetensors",
70
+ "model.layers.13.mlp.gate_proj.weight": "model-00002-of-00004.safetensors",
71
+ "model.layers.13.mlp.up_proj.weight": "model-00002-of-00004.safetensors",
72
+ "model.layers.13.post_attention_layernorm.weight": "model-00002-of-00004.safetensors",
73
+ "model.layers.13.self_attn.k_proj.bias": "model-00002-of-00004.safetensors",
74
+ "model.layers.13.self_attn.k_proj.weight": "model-00002-of-00004.safetensors",
75
+ "model.layers.13.self_attn.o_proj.weight": "model-00002-of-00004.safetensors",
76
+ "model.layers.13.self_attn.q_proj.bias": "model-00002-of-00004.safetensors",
77
+ "model.layers.13.self_attn.q_proj.weight": "model-00002-of-00004.safetensors",
78
+ "model.layers.13.self_attn.v_proj.bias": "model-00002-of-00004.safetensors",
79
+ "model.layers.13.self_attn.v_proj.weight": "model-00002-of-00004.safetensors",
80
+ "model.layers.14.input_layernorm.weight": "model-00002-of-00004.safetensors",
81
+ "model.layers.14.mlp.down_proj.weight": "model-00002-of-00004.safetensors",
82
+ "model.layers.14.mlp.gate_proj.weight": "model-00002-of-00004.safetensors",
83
+ "model.layers.14.mlp.up_proj.weight": "model-00002-of-00004.safetensors",
84
+ "model.layers.14.post_attention_layernorm.weight": "model-00002-of-00004.safetensors",
85
+ "model.layers.14.self_attn.k_proj.bias": "model-00002-of-00004.safetensors",
86
+ "model.layers.14.self_attn.k_proj.weight": "model-00002-of-00004.safetensors",
87
+ "model.layers.14.self_attn.o_proj.weight": "model-00002-of-00004.safetensors",
88
+ "model.layers.14.self_attn.q_proj.bias": "model-00002-of-00004.safetensors",
89
+ "model.layers.14.self_attn.q_proj.weight": "model-00002-of-00004.safetensors",
90
+ "model.layers.14.self_attn.v_proj.bias": "model-00002-of-00004.safetensors",
91
+ "model.layers.14.self_attn.v_proj.weight": "model-00002-of-00004.safetensors",
92
+ "model.layers.15.input_layernorm.weight": "model-00002-of-00004.safetensors",
93
+ "model.layers.15.mlp.down_proj.weight": "model-00002-of-00004.safetensors",
94
+ "model.layers.15.mlp.gate_proj.weight": "model-00002-of-00004.safetensors",
95
+ "model.layers.15.mlp.up_proj.weight": "model-00002-of-00004.safetensors",
96
+ "model.layers.15.post_attention_layernorm.weight": "model-00002-of-00004.safetensors",
97
+ "model.layers.15.self_attn.k_proj.bias": "model-00002-of-00004.safetensors",
98
+ "model.layers.15.self_attn.k_proj.weight": "model-00002-of-00004.safetensors",
99
+ "model.layers.15.self_attn.o_proj.weight": "model-00002-of-00004.safetensors",
100
+ "model.layers.15.self_attn.q_proj.bias": "model-00002-of-00004.safetensors",
101
+ "model.layers.15.self_attn.q_proj.weight": "model-00002-of-00004.safetensors",
102
+ "model.layers.15.self_attn.v_proj.bias": "model-00002-of-00004.safetensors",
103
+ "model.layers.15.self_attn.v_proj.weight": "model-00002-of-00004.safetensors",
104
+ "model.layers.16.input_layernorm.weight": "model-00002-of-00004.safetensors",
105
+ "model.layers.16.mlp.down_proj.weight": "model-00002-of-00004.safetensors",
106
+ "model.layers.16.mlp.gate_proj.weight": "model-00002-of-00004.safetensors",
107
+ "model.layers.16.mlp.up_proj.weight": "model-00002-of-00004.safetensors",
108
+ "model.layers.16.post_attention_layernorm.weight": "model-00002-of-00004.safetensors",
109
+ "model.layers.16.self_attn.k_proj.bias": "model-00002-of-00004.safetensors",
110
+ "model.layers.16.self_attn.k_proj.weight": "model-00002-of-00004.safetensors",
111
+ "model.layers.16.self_attn.o_proj.weight": "model-00002-of-00004.safetensors",
112
+ "model.layers.16.self_attn.q_proj.bias": "model-00002-of-00004.safetensors",
113
+ "model.layers.16.self_attn.q_proj.weight": "model-00002-of-00004.safetensors",
114
+ "model.layers.16.self_attn.v_proj.bias": "model-00002-of-00004.safetensors",
115
+ "model.layers.16.self_attn.v_proj.weight": "model-00002-of-00004.safetensors",
116
+ "model.layers.17.input_layernorm.weight": "model-00002-of-00004.safetensors",
117
+ "model.layers.17.mlp.down_proj.weight": "model-00002-of-00004.safetensors",
118
+ "model.layers.17.mlp.gate_proj.weight": "model-00002-of-00004.safetensors",
119
+ "model.layers.17.mlp.up_proj.weight": "model-00002-of-00004.safetensors",
120
+ "model.layers.17.post_attention_layernorm.weight": "model-00002-of-00004.safetensors",
121
+ "model.layers.17.self_attn.k_proj.bias": "model-00002-of-00004.safetensors",
122
+ "model.layers.17.self_attn.k_proj.weight": "model-00002-of-00004.safetensors",
123
+ "model.layers.17.self_attn.o_proj.weight": "model-00002-of-00004.safetensors",
124
+ "model.layers.17.self_attn.q_proj.bias": "model-00002-of-00004.safetensors",
125
+ "model.layers.17.self_attn.q_proj.weight": "model-00002-of-00004.safetensors",
126
+ "model.layers.17.self_attn.v_proj.bias": "model-00002-of-00004.safetensors",
127
+ "model.layers.17.self_attn.v_proj.weight": "model-00002-of-00004.safetensors",
128
+ "model.layers.18.input_layernorm.weight": "model-00003-of-00004.safetensors",
129
+ "model.layers.18.mlp.down_proj.weight": "model-00003-of-00004.safetensors",
130
+ "model.layers.18.mlp.gate_proj.weight": "model-00002-of-00004.safetensors",
131
+ "model.layers.18.mlp.up_proj.weight": "model-00002-of-00004.safetensors",
132
+ "model.layers.18.post_attention_layernorm.weight": "model-00003-of-00004.safetensors",
133
+ "model.layers.18.self_attn.k_proj.bias": "model-00002-of-00004.safetensors",
134
+ "model.layers.18.self_attn.k_proj.weight": "model-00002-of-00004.safetensors",
135
+ "model.layers.18.self_attn.o_proj.weight": "model-00002-of-00004.safetensors",
136
+ "model.layers.18.self_attn.q_proj.bias": "model-00002-of-00004.safetensors",
137
+ "model.layers.18.self_attn.q_proj.weight": "model-00002-of-00004.safetensors",
138
+ "model.layers.18.self_attn.v_proj.bias": "model-00002-of-00004.safetensors",
139
+ "model.layers.18.self_attn.v_proj.weight": "model-00002-of-00004.safetensors",
140
+ "model.layers.19.input_layernorm.weight": "model-00003-of-00004.safetensors",
141
+ "model.layers.19.mlp.down_proj.weight": "model-00003-of-00004.safetensors",
142
+ "model.layers.19.mlp.gate_proj.weight": "model-00003-of-00004.safetensors",
143
+ "model.layers.19.mlp.up_proj.weight": "model-00003-of-00004.safetensors",
144
+ "model.layers.19.post_attention_layernorm.weight": "model-00003-of-00004.safetensors",
145
+ "model.layers.19.self_attn.k_proj.bias": "model-00003-of-00004.safetensors",
146
+ "model.layers.19.self_attn.k_proj.weight": "model-00003-of-00004.safetensors",
147
+ "model.layers.19.self_attn.o_proj.weight": "model-00003-of-00004.safetensors",
148
+ "model.layers.19.self_attn.q_proj.bias": "model-00003-of-00004.safetensors",
149
+ "model.layers.19.self_attn.q_proj.weight": "model-00003-of-00004.safetensors",
150
+ "model.layers.19.self_attn.v_proj.bias": "model-00003-of-00004.safetensors",
151
+ "model.layers.19.self_attn.v_proj.weight": "model-00003-of-00004.safetensors",
152
+ "model.layers.2.input_layernorm.weight": "model-00001-of-00004.safetensors",
153
+ "model.layers.2.mlp.down_proj.weight": "model-00001-of-00004.safetensors",
154
+ "model.layers.2.mlp.gate_proj.weight": "model-00001-of-00004.safetensors",
155
+ "model.layers.2.mlp.up_proj.weight": "model-00001-of-00004.safetensors",
156
+ "model.layers.2.post_attention_layernorm.weight": "model-00001-of-00004.safetensors",
157
+ "model.layers.2.self_attn.k_proj.bias": "model-00001-of-00004.safetensors",
158
+ "model.layers.2.self_attn.k_proj.weight": "model-00001-of-00004.safetensors",
159
+ "model.layers.2.self_attn.o_proj.weight": "model-00001-of-00004.safetensors",
160
+ "model.layers.2.self_attn.q_proj.bias": "model-00001-of-00004.safetensors",
161
+ "model.layers.2.self_attn.q_proj.weight": "model-00001-of-00004.safetensors",
162
+ "model.layers.2.self_attn.v_proj.bias": "model-00001-of-00004.safetensors",
163
+ "model.layers.2.self_attn.v_proj.weight": "model-00001-of-00004.safetensors",
164
+ "model.layers.20.input_layernorm.weight": "model-00003-of-00004.safetensors",
165
+ "model.layers.20.mlp.down_proj.weight": "model-00003-of-00004.safetensors",
166
+ "model.layers.20.mlp.gate_proj.weight": "model-00003-of-00004.safetensors",
167
+ "model.layers.20.mlp.up_proj.weight": "model-00003-of-00004.safetensors",
168
+ "model.layers.20.post_attention_layernorm.weight": "model-00003-of-00004.safetensors",
169
+ "model.layers.20.self_attn.k_proj.bias": "model-00003-of-00004.safetensors",
170
+ "model.layers.20.self_attn.k_proj.weight": "model-00003-of-00004.safetensors",
171
+ "model.layers.20.self_attn.o_proj.weight": "model-00003-of-00004.safetensors",
172
+ "model.layers.20.self_attn.q_proj.bias": "model-00003-of-00004.safetensors",
173
+ "model.layers.20.self_attn.q_proj.weight": "model-00003-of-00004.safetensors",
174
+ "model.layers.20.self_attn.v_proj.bias": "model-00003-of-00004.safetensors",
175
+ "model.layers.20.self_attn.v_proj.weight": "model-00003-of-00004.safetensors",
176
+ "model.layers.21.input_layernorm.weight": "model-00003-of-00004.safetensors",
177
+ "model.layers.21.mlp.down_proj.weight": "model-00003-of-00004.safetensors",
178
+ "model.layers.21.mlp.gate_proj.weight": "model-00003-of-00004.safetensors",
179
+ "model.layers.21.mlp.up_proj.weight": "model-00003-of-00004.safetensors",
180
+ "model.layers.21.post_attention_layernorm.weight": "model-00003-of-00004.safetensors",
181
+ "model.layers.21.self_attn.k_proj.bias": "model-00003-of-00004.safetensors",
182
+ "model.layers.21.self_attn.k_proj.weight": "model-00003-of-00004.safetensors",
183
+ "model.layers.21.self_attn.o_proj.weight": "model-00003-of-00004.safetensors",
184
+ "model.layers.21.self_attn.q_proj.bias": "model-00003-of-00004.safetensors",
185
+ "model.layers.21.self_attn.q_proj.weight": "model-00003-of-00004.safetensors",
186
+ "model.layers.21.self_attn.v_proj.bias": "model-00003-of-00004.safetensors",
187
+ "model.layers.21.self_attn.v_proj.weight": "model-00003-of-00004.safetensors",
188
+ "model.layers.22.input_layernorm.weight": "model-00003-of-00004.safetensors",
189
+ "model.layers.22.mlp.down_proj.weight": "model-00003-of-00004.safetensors",
190
+ "model.layers.22.mlp.gate_proj.weight": "model-00003-of-00004.safetensors",
191
+ "model.layers.22.mlp.up_proj.weight": "model-00003-of-00004.safetensors",
192
+ "model.layers.22.post_attention_layernorm.weight": "model-00003-of-00004.safetensors",
193
+ "model.layers.22.self_attn.k_proj.bias": "model-00003-of-00004.safetensors",
194
+ "model.layers.22.self_attn.k_proj.weight": "model-00003-of-00004.safetensors",
195
+ "model.layers.22.self_attn.o_proj.weight": "model-00003-of-00004.safetensors",
196
+ "model.layers.22.self_attn.q_proj.bias": "model-00003-of-00004.safetensors",
197
+ "model.layers.22.self_attn.q_proj.weight": "model-00003-of-00004.safetensors",
198
+ "model.layers.22.self_attn.v_proj.bias": "model-00003-of-00004.safetensors",
199
+ "model.layers.22.self_attn.v_proj.weight": "model-00003-of-00004.safetensors",
200
+ "model.layers.23.input_layernorm.weight": "model-00003-of-00004.safetensors",
201
+ "model.layers.23.mlp.down_proj.weight": "model-00003-of-00004.safetensors",
202
+ "model.layers.23.mlp.gate_proj.weight": "model-00003-of-00004.safetensors",
203
+ "model.layers.23.mlp.up_proj.weight": "model-00003-of-00004.safetensors",
204
+ "model.layers.23.post_attention_layernorm.weight": "model-00003-of-00004.safetensors",
205
+ "model.layers.23.self_attn.k_proj.bias": "model-00003-of-00004.safetensors",
206
+ "model.layers.23.self_attn.k_proj.weight": "model-00003-of-00004.safetensors",
207
+ "model.layers.23.self_attn.o_proj.weight": "model-00003-of-00004.safetensors",
208
+ "model.layers.23.self_attn.q_proj.bias": "model-00003-of-00004.safetensors",
209
+ "model.layers.23.self_attn.q_proj.weight": "model-00003-of-00004.safetensors",
210
+ "model.layers.23.self_attn.v_proj.bias": "model-00003-of-00004.safetensors",
211
+ "model.layers.23.self_attn.v_proj.weight": "model-00003-of-00004.safetensors",
212
+ "model.layers.24.input_layernorm.weight": "model-00003-of-00004.safetensors",
213
+ "model.layers.24.mlp.down_proj.weight": "model-00003-of-00004.safetensors",
214
+ "model.layers.24.mlp.gate_proj.weight": "model-00003-of-00004.safetensors",
215
+ "model.layers.24.mlp.up_proj.weight": "model-00003-of-00004.safetensors",
216
+ "model.layers.24.post_attention_layernorm.weight": "model-00003-of-00004.safetensors",
217
+ "model.layers.24.self_attn.k_proj.bias": "model-00003-of-00004.safetensors",
218
+ "model.layers.24.self_attn.k_proj.weight": "model-00003-of-00004.safetensors",
219
+ "model.layers.24.self_attn.o_proj.weight": "model-00003-of-00004.safetensors",
220
+ "model.layers.24.self_attn.q_proj.bias": "model-00003-of-00004.safetensors",
221
+ "model.layers.24.self_attn.q_proj.weight": "model-00003-of-00004.safetensors",
222
+ "model.layers.24.self_attn.v_proj.bias": "model-00003-of-00004.safetensors",
223
+ "model.layers.24.self_attn.v_proj.weight": "model-00003-of-00004.safetensors",
224
+ "model.layers.25.input_layernorm.weight": "model-00003-of-00004.safetensors",
225
+ "model.layers.25.mlp.down_proj.weight": "model-00003-of-00004.safetensors",
226
+ "model.layers.25.mlp.gate_proj.weight": "model-00003-of-00004.safetensors",
227
+ "model.layers.25.mlp.up_proj.weight": "model-00003-of-00004.safetensors",
228
+ "model.layers.25.post_attention_layernorm.weight": "model-00003-of-00004.safetensors",
229
+ "model.layers.25.self_attn.k_proj.bias": "model-00003-of-00004.safetensors",
230
+ "model.layers.25.self_attn.k_proj.weight": "model-00003-of-00004.safetensors",
231
+ "model.layers.25.self_attn.o_proj.weight": "model-00003-of-00004.safetensors",
232
+ "model.layers.25.self_attn.q_proj.bias": "model-00003-of-00004.safetensors",
233
+ "model.layers.25.self_attn.q_proj.weight": "model-00003-of-00004.safetensors",
234
+ "model.layers.25.self_attn.v_proj.bias": "model-00003-of-00004.safetensors",
235
+ "model.layers.25.self_attn.v_proj.weight": "model-00003-of-00004.safetensors",
236
+ "model.layers.26.input_layernorm.weight": "model-00003-of-00004.safetensors",
237
+ "model.layers.26.mlp.down_proj.weight": "model-00003-of-00004.safetensors",
238
+ "model.layers.26.mlp.gate_proj.weight": "model-00003-of-00004.safetensors",
239
+ "model.layers.26.mlp.up_proj.weight": "model-00003-of-00004.safetensors",
240
+ "model.layers.26.post_attention_layernorm.weight": "model-00003-of-00004.safetensors",
241
+ "model.layers.26.self_attn.k_proj.bias": "model-00003-of-00004.safetensors",
242
+ "model.layers.26.self_attn.k_proj.weight": "model-00003-of-00004.safetensors",
243
+ "model.layers.26.self_attn.o_proj.weight": "model-00003-of-00004.safetensors",
244
+ "model.layers.26.self_attn.q_proj.bias": "model-00003-of-00004.safetensors",
245
+ "model.layers.26.self_attn.q_proj.weight": "model-00003-of-00004.safetensors",
246
+ "model.layers.26.self_attn.v_proj.bias": "model-00003-of-00004.safetensors",
247
+ "model.layers.26.self_attn.v_proj.weight": "model-00003-of-00004.safetensors",
248
+ "model.layers.27.input_layernorm.weight": "model-00003-of-00004.safetensors",
249
+ "model.layers.27.mlp.down_proj.weight": "model-00003-of-00004.safetensors",
250
+ "model.layers.27.mlp.gate_proj.weight": "model-00003-of-00004.safetensors",
251
+ "model.layers.27.mlp.up_proj.weight": "model-00003-of-00004.safetensors",
252
+ "model.layers.27.post_attention_layernorm.weight": "model-00003-of-00004.safetensors",
253
+ "model.layers.27.self_attn.k_proj.bias": "model-00003-of-00004.safetensors",
254
+ "model.layers.27.self_attn.k_proj.weight": "model-00003-of-00004.safetensors",
255
+ "model.layers.27.self_attn.o_proj.weight": "model-00003-of-00004.safetensors",
256
+ "model.layers.27.self_attn.q_proj.bias": "model-00003-of-00004.safetensors",
257
+ "model.layers.27.self_attn.q_proj.weight": "model-00003-of-00004.safetensors",
258
+ "model.layers.27.self_attn.v_proj.bias": "model-00003-of-00004.safetensors",
259
+ "model.layers.27.self_attn.v_proj.weight": "model-00003-of-00004.safetensors",
260
+ "model.layers.3.input_layernorm.weight": "model-00001-of-00004.safetensors",
261
+ "model.layers.3.mlp.down_proj.weight": "model-00001-of-00004.safetensors",
262
+ "model.layers.3.mlp.gate_proj.weight": "model-00001-of-00004.safetensors",
263
+ "model.layers.3.mlp.up_proj.weight": "model-00001-of-00004.safetensors",
264
+ "model.layers.3.post_attention_layernorm.weight": "model-00001-of-00004.safetensors",
265
+ "model.layers.3.self_attn.k_proj.bias": "model-00001-of-00004.safetensors",
266
+ "model.layers.3.self_attn.k_proj.weight": "model-00001-of-00004.safetensors",
267
+ "model.layers.3.self_attn.o_proj.weight": "model-00001-of-00004.safetensors",
268
+ "model.layers.3.self_attn.q_proj.bias": "model-00001-of-00004.safetensors",
269
+ "model.layers.3.self_attn.q_proj.weight": "model-00001-of-00004.safetensors",
270
+ "model.layers.3.self_attn.v_proj.bias": "model-00001-of-00004.safetensors",
271
+ "model.layers.3.self_attn.v_proj.weight": "model-00001-of-00004.safetensors",
272
+ "model.layers.4.input_layernorm.weight": "model-00001-of-00004.safetensors",
273
+ "model.layers.4.mlp.down_proj.weight": "model-00001-of-00004.safetensors",
274
+ "model.layers.4.mlp.gate_proj.weight": "model-00001-of-00004.safetensors",
275
+ "model.layers.4.mlp.up_proj.weight": "model-00001-of-00004.safetensors",
276
+ "model.layers.4.post_attention_layernorm.weight": "model-00001-of-00004.safetensors",
277
+ "model.layers.4.self_attn.k_proj.bias": "model-00001-of-00004.safetensors",
278
+ "model.layers.4.self_attn.k_proj.weight": "model-00001-of-00004.safetensors",
279
+ "model.layers.4.self_attn.o_proj.weight": "model-00001-of-00004.safetensors",
280
+ "model.layers.4.self_attn.q_proj.bias": "model-00001-of-00004.safetensors",
281
+ "model.layers.4.self_attn.q_proj.weight": "model-00001-of-00004.safetensors",
282
+ "model.layers.4.self_attn.v_proj.bias": "model-00001-of-00004.safetensors",
283
+ "model.layers.4.self_attn.v_proj.weight": "model-00001-of-00004.safetensors",
284
+ "model.layers.5.input_layernorm.weight": "model-00001-of-00004.safetensors",
285
+ "model.layers.5.mlp.down_proj.weight": "model-00001-of-00004.safetensors",
286
+ "model.layers.5.mlp.gate_proj.weight": "model-00001-of-00004.safetensors",
287
+ "model.layers.5.mlp.up_proj.weight": "model-00001-of-00004.safetensors",
288
+ "model.layers.5.post_attention_layernorm.weight": "model-00001-of-00004.safetensors",
289
+ "model.layers.5.self_attn.k_proj.bias": "model-00001-of-00004.safetensors",
290
+ "model.layers.5.self_attn.k_proj.weight": "model-00001-of-00004.safetensors",
291
+ "model.layers.5.self_attn.o_proj.weight": "model-00001-of-00004.safetensors",
292
+ "model.layers.5.self_attn.q_proj.bias": "model-00001-of-00004.safetensors",
293
+ "model.layers.5.self_attn.q_proj.weight": "model-00001-of-00004.safetensors",
294
+ "model.layers.5.self_attn.v_proj.bias": "model-00001-of-00004.safetensors",
295
+ "model.layers.5.self_attn.v_proj.weight": "model-00001-of-00004.safetensors",
296
+ "model.layers.6.input_layernorm.weight": "model-00001-of-00004.safetensors",
297
+ "model.layers.6.mlp.down_proj.weight": "model-00001-of-00004.safetensors",
298
+ "model.layers.6.mlp.gate_proj.weight": "model-00001-of-00004.safetensors",
299
+ "model.layers.6.mlp.up_proj.weight": "model-00001-of-00004.safetensors",
300
+ "model.layers.6.post_attention_layernorm.weight": "model-00001-of-00004.safetensors",
301
+ "model.layers.6.self_attn.k_proj.bias": "model-00001-of-00004.safetensors",
302
+ "model.layers.6.self_attn.k_proj.weight": "model-00001-of-00004.safetensors",
303
+ "model.layers.6.self_attn.o_proj.weight": "model-00001-of-00004.safetensors",
304
+ "model.layers.6.self_attn.q_proj.bias": "model-00001-of-00004.safetensors",
305
+ "model.layers.6.self_attn.q_proj.weight": "model-00001-of-00004.safetensors",
306
+ "model.layers.6.self_attn.v_proj.bias": "model-00001-of-00004.safetensors",
307
+ "model.layers.6.self_attn.v_proj.weight": "model-00001-of-00004.safetensors",
308
+ "model.layers.7.input_layernorm.weight": "model-00001-of-00004.safetensors",
309
+ "model.layers.7.mlp.down_proj.weight": "model-00001-of-00004.safetensors",
310
+ "model.layers.7.mlp.gate_proj.weight": "model-00001-of-00004.safetensors",
311
+ "model.layers.7.mlp.up_proj.weight": "model-00001-of-00004.safetensors",
312
+ "model.layers.7.post_attention_layernorm.weight": "model-00001-of-00004.safetensors",
313
+ "model.layers.7.self_attn.k_proj.bias": "model-00001-of-00004.safetensors",
314
+ "model.layers.7.self_attn.k_proj.weight": "model-00001-of-00004.safetensors",
315
+ "model.layers.7.self_attn.o_proj.weight": "model-00001-of-00004.safetensors",
316
+ "model.layers.7.self_attn.q_proj.bias": "model-00001-of-00004.safetensors",
317
+ "model.layers.7.self_attn.q_proj.weight": "model-00001-of-00004.safetensors",
318
+ "model.layers.7.self_attn.v_proj.bias": "model-00001-of-00004.safetensors",
319
+ "model.layers.7.self_attn.v_proj.weight": "model-00001-of-00004.safetensors",
320
+ "model.layers.8.input_layernorm.weight": "model-00002-of-00004.safetensors",
321
+ "model.layers.8.mlp.down_proj.weight": "model-00002-of-00004.safetensors",
322
+ "model.layers.8.mlp.gate_proj.weight": "model-00002-of-00004.safetensors",
323
+ "model.layers.8.mlp.up_proj.weight": "model-00002-of-00004.safetensors",
324
+ "model.layers.8.post_attention_layernorm.weight": "model-00002-of-00004.safetensors",
325
+ "model.layers.8.self_attn.k_proj.bias": "model-00001-of-00004.safetensors",
326
+ "model.layers.8.self_attn.k_proj.weight": "model-00001-of-00004.safetensors",
327
+ "model.layers.8.self_attn.o_proj.weight": "model-00001-of-00004.safetensors",
328
+ "model.layers.8.self_attn.q_proj.bias": "model-00001-of-00004.safetensors",
329
+ "model.layers.8.self_attn.q_proj.weight": "model-00001-of-00004.safetensors",
330
+ "model.layers.8.self_attn.v_proj.bias": "model-00001-of-00004.safetensors",
331
+ "model.layers.8.self_attn.v_proj.weight": "model-00001-of-00004.safetensors",
332
+ "model.layers.9.input_layernorm.weight": "model-00002-of-00004.safetensors",
333
+ "model.layers.9.mlp.down_proj.weight": "model-00002-of-00004.safetensors",
334
+ "model.layers.9.mlp.gate_proj.weight": "model-00002-of-00004.safetensors",
335
+ "model.layers.9.mlp.up_proj.weight": "model-00002-of-00004.safetensors",
336
+ "model.layers.9.post_attention_layernorm.weight": "model-00002-of-00004.safetensors",
337
+ "model.layers.9.self_attn.k_proj.bias": "model-00002-of-00004.safetensors",
338
+ "model.layers.9.self_attn.k_proj.weight": "model-00002-of-00004.safetensors",
339
+ "model.layers.9.self_attn.o_proj.weight": "model-00002-of-00004.safetensors",
340
+ "model.layers.9.self_attn.q_proj.bias": "model-00002-of-00004.safetensors",
341
+ "model.layers.9.self_attn.q_proj.weight": "model-00002-of-00004.safetensors",
342
+ "model.layers.9.self_attn.v_proj.bias": "model-00002-of-00004.safetensors",
343
+ "model.layers.9.self_attn.v_proj.weight": "model-00002-of-00004.safetensors",
344
+ "model.norm.weight": "model-00003-of-00004.safetensors"
345
+ }
346
+ }
special_tokens_map.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "additional_special_tokens": [
3
+ "<|im_start|>",
4
+ "<|im_end|>",
5
+ "<|object_ref_start|>",
6
+ "<|object_ref_end|>",
7
+ "<|box_start|>",
8
+ "<|box_end|>",
9
+ "<|quad_start|>",
10
+ "<|quad_end|>",
11
+ "<|vision_start|>",
12
+ "<|vision_end|>",
13
+ "<|vision_pad|>",
14
+ "<|image_pad|>",
15
+ "<|video_pad|>"
16
+ ],
17
+ "eos_token": {
18
+ "content": "<|im_end|>",
19
+ "lstrip": false,
20
+ "normalized": false,
21
+ "rstrip": false,
22
+ "single_word": false
23
+ },
24
+ "pad_token": {
25
+ "content": "<|endoftext|>",
26
+ "lstrip": false,
27
+ "normalized": false,
28
+ "rstrip": false,
29
+ "single_word": false
30
+ }
31
+ }
tmphp_txnly/__pycache__/_remote_module_non_scriptable.cpython-310.pyc ADDED
Binary file (1.5 kB). View file
 
tmphp_txnly/_remote_module_non_scriptable.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import *
2
+
3
+ import torch
4
+ import torch.distributed.rpc as rpc
5
+ from torch import Tensor
6
+ from torch._jit_internal import Future
7
+ from torch.distributed.rpc import RRef
8
+ from typing import Tuple # pyre-ignore: unused import
9
+
10
+
11
+ module_interface_cls = None
12
+
13
+
14
+ def forward_async(self, *args, **kwargs):
15
+ args = (self.module_rref, self.device, self.is_device_map_set, *args)
16
+ kwargs = {**kwargs}
17
+ return rpc.rpc_async(
18
+ self.module_rref.owner(),
19
+ _remote_forward,
20
+ args,
21
+ kwargs,
22
+ )
23
+
24
+
25
+ def forward(self, *args, **kwargs):
26
+ args = (self.module_rref, self.device, self.is_device_map_set, *args)
27
+ kwargs = {**kwargs}
28
+ ret_fut = rpc.rpc_async(
29
+ self.module_rref.owner(),
30
+ _remote_forward,
31
+ args,
32
+ kwargs,
33
+ )
34
+ return ret_fut.wait()
35
+
36
+
37
+ _generated_methods = [
38
+ forward_async,
39
+ forward,
40
+ ]
41
+
42
+
43
+
44
+
45
+ def _remote_forward(
46
+ module_rref: RRef[module_interface_cls], device: str, is_device_map_set: bool, *args, **kwargs):
47
+ module = module_rref.local_value()
48
+ device = torch.device(device)
49
+
50
+ if device.type != "cuda":
51
+ return module.forward(*args, **kwargs)
52
+
53
+ # If the module is on a cuda device,
54
+ # move any CPU tensor in args or kwargs to the same cuda device.
55
+ # Since torch script does not support generator expression,
56
+ # have to use concatenation instead of
57
+ # ``tuple(i.to(device) if isinstance(i, Tensor) else i for i in *args)``.
58
+ args = (*args,)
59
+ out_args: Tuple[()] = ()
60
+ for arg in args:
61
+ arg = (arg.to(device),) if isinstance(arg, Tensor) else (arg,)
62
+ out_args = out_args + arg
63
+
64
+ kwargs = {**kwargs}
65
+ for k, v in kwargs.items():
66
+ if isinstance(v, Tensor):
67
+ kwargs[k] = kwargs[k].to(device)
68
+
69
+ if is_device_map_set:
70
+ return module.forward(*out_args, **kwargs)
71
+
72
+ # If the device map is empty, then only CPU tensors are allowed to send over wire,
73
+ # so have to move any GPU tensor to CPU in the output.
74
+ # Since torch script does not support generator expression,
75
+ # have to use concatenation instead of
76
+ # ``tuple(i.cpu() if isinstance(i, Tensor) else i for i in module.forward(*out_args, **kwargs))``.
77
+ ret: Tuple[()] = ()
78
+ for i in module.forward(*out_args, **kwargs):
79
+ i = (i.cpu(),) if isinstance(i, Tensor) else (i,)
80
+ ret = ret + i
81
+ return ret
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_bos_token": false,
3
+ "add_prefix_space": false,
4
+ "added_tokens_decoder": {
5
+ "151643": {
6
+ "content": "<|endoftext|>",
7
+ "lstrip": false,
8
+ "normalized": false,
9
+ "rstrip": false,
10
+ "single_word": false,
11
+ "special": true
12
+ },
13
+ "151644": {
14
+ "content": "<|im_start|>",
15
+ "lstrip": false,
16
+ "normalized": false,
17
+ "rstrip": false,
18
+ "single_word": false,
19
+ "special": true
20
+ },
21
+ "151645": {
22
+ "content": "<|im_end|>",
23
+ "lstrip": false,
24
+ "normalized": false,
25
+ "rstrip": false,
26
+ "single_word": false,
27
+ "special": true
28
+ },
29
+ "151646": {
30
+ "content": "<|object_ref_start|>",
31
+ "lstrip": false,
32
+ "normalized": false,
33
+ "rstrip": false,
34
+ "single_word": false,
35
+ "special": true
36
+ },
37
+ "151647": {
38
+ "content": "<|object_ref_end|>",
39
+ "lstrip": false,
40
+ "normalized": false,
41
+ "rstrip": false,
42
+ "single_word": false,
43
+ "special": true
44
+ },
45
+ "151648": {
46
+ "content": "<|box_start|>",
47
+ "lstrip": false,
48
+ "normalized": false,
49
+ "rstrip": false,
50
+ "single_word": false,
51
+ "special": true
52
+ },
53
+ "151649": {
54
+ "content": "<|box_end|>",
55
+ "lstrip": false,
56
+ "normalized": false,
57
+ "rstrip": false,
58
+ "single_word": false,
59
+ "special": true
60
+ },
61
+ "151650": {
62
+ "content": "<|quad_start|>",
63
+ "lstrip": false,
64
+ "normalized": false,
65
+ "rstrip": false,
66
+ "single_word": false,
67
+ "special": true
68
+ },
69
+ "151651": {
70
+ "content": "<|quad_end|>",
71
+ "lstrip": false,
72
+ "normalized": false,
73
+ "rstrip": false,
74
+ "single_word": false,
75
+ "special": true
76
+ },
77
+ "151652": {
78
+ "content": "<|vision_start|>",
79
+ "lstrip": false,
80
+ "normalized": false,
81
+ "rstrip": false,
82
+ "single_word": false,
83
+ "special": true
84
+ },
85
+ "151653": {
86
+ "content": "<|vision_end|>",
87
+ "lstrip": false,
88
+ "normalized": false,
89
+ "rstrip": false,
90
+ "single_word": false,
91
+ "special": true
92
+ },
93
+ "151654": {
94
+ "content": "<|vision_pad|>",
95
+ "lstrip": false,
96
+ "normalized": false,
97
+ "rstrip": false,
98
+ "single_word": false,
99
+ "special": true
100
+ },
101
+ "151655": {
102
+ "content": "<|image_pad|>",
103
+ "lstrip": false,
104
+ "normalized": false,
105
+ "rstrip": false,
106
+ "single_word": false,
107
+ "special": true
108
+ },
109
+ "151656": {
110
+ "content": "<|video_pad|>",
111
+ "lstrip": false,
112
+ "normalized": false,
113
+ "rstrip": false,
114
+ "single_word": false,
115
+ "special": true
116
+ },
117
+ "151657": {
118
+ "content": "<tool_call>",
119
+ "lstrip": false,
120
+ "normalized": false,
121
+ "rstrip": false,
122
+ "single_word": false,
123
+ "special": false
124
+ },
125
+ "151658": {
126
+ "content": "</tool_call>",
127
+ "lstrip": false,
128
+ "normalized": false,
129
+ "rstrip": false,
130
+ "single_word": false,
131
+ "special": false
132
+ },
133
+ "151659": {
134
+ "content": "<|fim_prefix|>",
135
+ "lstrip": false,
136
+ "normalized": false,
137
+ "rstrip": false,
138
+ "single_word": false,
139
+ "special": false
140
+ },
141
+ "151660": {
142
+ "content": "<|fim_middle|>",
143
+ "lstrip": false,
144
+ "normalized": false,
145
+ "rstrip": false,
146
+ "single_word": false,
147
+ "special": false
148
+ },
149
+ "151661": {
150
+ "content": "<|fim_suffix|>",
151
+ "lstrip": false,
152
+ "normalized": false,
153
+ "rstrip": false,
154
+ "single_word": false,
155
+ "special": false
156
+ },
157
+ "151662": {
158
+ "content": "<|fim_pad|>",
159
+ "lstrip": false,
160
+ "normalized": false,
161
+ "rstrip": false,
162
+ "single_word": false,
163
+ "special": false
164
+ },
165
+ "151663": {
166
+ "content": "<|repo_name|>",
167
+ "lstrip": false,
168
+ "normalized": false,
169
+ "rstrip": false,
170
+ "single_word": false,
171
+ "special": false
172
+ },
173
+ "151664": {
174
+ "content": "<|file_sep|>",
175
+ "lstrip": false,
176
+ "normalized": false,
177
+ "rstrip": false,
178
+ "single_word": false,
179
+ "special": false
180
+ }
181
+ },
182
+ "additional_special_tokens": [
183
+ "<|im_start|>",
184
+ "<|im_end|>",
185
+ "<|object_ref_start|>",
186
+ "<|object_ref_end|>",
187
+ "<|box_start|>",
188
+ "<|box_end|>",
189
+ "<|quad_start|>",
190
+ "<|quad_end|>",
191
+ "<|vision_start|>",
192
+ "<|vision_end|>",
193
+ "<|vision_pad|>",
194
+ "<|image_pad|>",
195
+ "<|video_pad|>"
196
+ ],
197
+ "bos_token": null,
198
+ "chat_template": "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0]['role'] == 'system' %}\n {{- messages[0]['content'] }}\n {%- else %}\n {{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}\n {%- endif %}\n {{- \"\\n\\n# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within <tools></tools> XML tags:\\n<tools>\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n</tools>\\n\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\n<tool_call>\\n{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n</tool_call><|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0]['role'] == 'system' %}\n {{- '<|im_start|>system\\n' + messages[0]['content'] + '<|im_end|>\\n' }}\n {%- else %}\n {{- '<|im_start|>system\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- for message in messages %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) or (message.role == \"assistant\" and not message.tool_calls) %}\n {{- '<|im_start|>' + message.role + '\\n' + message.content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {{- '<|im_start|>' + message.role }}\n {%- if message.content %}\n {{- '\\n' + message.content }}\n {%- endif %}\n {%- for tool_call in message.tool_calls %}\n {%- if tool_call.function is defined %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '\\n<tool_call>\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {{- tool_call.arguments | tojson }}\n {{- '}\\n</tool_call>' }}\n {%- endfor %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n<tool_response>\\n' }}\n {{- message.content }}\n {{- '\\n</tool_response>' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n{%- endif %}\n",
199
+ "clean_up_tokenization_spaces": false,
200
+ "eos_token": "<|im_end|>",
201
+ "errors": "replace",
202
+ "model_max_length": 131072,
203
+ "pad_token": "<|endoftext|>",
204
+ "split_special_tokens": false,
205
+ "tokenizer_class": "Qwen2Tokenizer",
206
+ "unk_token": null
207
+ }
training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9f0d98d5a52c94b6be36ec49680752ea622c53bacd98173783acf89390389745
3
+ size 5432
vocab.json ADDED
The diff for this file is too large to render. See raw diff