Training in progress, step 10000
Browse files- added_tokens.json +24 -0
- config.json +28 -0
- dap_multiplexer.91e69a57f346.root.log.INFO.20240920-122212.137 +22 -0
- dap_multiplexer.INFO +22 -0
- initgoogle_syslog_dir.0/__research_colab_dap_multiplexer:dap_multiplexer +0 -0
- initgoogle_syslog_dir.0/__research_colab_datalab_kernel_manager_proxy:kernel_manager_proxy +0 -0
- initgoogle_syslog_dir.0/__research_colab_datalab_language_service:language_service +0 -0
- language_service.91e69a57f346.root.log.ERROR.20240920-123530.5088 +28 -0
- language_service.91e69a57f346.root.log.ERROR.20240920-123556.5761 +445 -0
- language_service.91e69a57f346.root.log.INFO.20240920-122323.552 +30 -0
- language_service.91e69a57f346.root.log.INFO.20240920-122334.695 +7 -0
- language_service.91e69a57f346.root.log.INFO.20240920-122336.725 +7 -0
- language_service.91e69a57f346.root.log.INFO.20240920-122336.752 +52 -0
- language_service.91e69a57f346.root.log.INFO.20240920-122643.1606 +29 -0
- language_service.91e69a57f346.root.log.INFO.20240920-122703.1749 +29 -0
- language_service.91e69a57f346.root.log.INFO.20240920-122707.1790 +29 -0
- language_service.91e69a57f346.root.log.INFO.20240920-123200.4177 +29 -0
- language_service.91e69a57f346.root.log.INFO.20240920-123220.4321 +7 -0
- language_service.91e69a57f346.root.log.INFO.20240920-123222.4358 +32 -0
- language_service.91e69a57f346.root.log.INFO.20240920-123357.4928 +29 -0
- language_service.91e69a57f346.root.log.INFO.20240920-123414.5050 +7 -0
- language_service.91e69a57f346.root.log.INFO.20240920-123416.5088 +35 -0
- language_service.91e69a57f346.root.log.INFO.20240920-123536.5599 +29 -0
- language_service.91e69a57f346.root.log.INFO.20240920-123552.5729 +7 -0
- language_service.91e69a57f346.root.log.INFO.20240920-123554.5761 +485 -0
- language_service.91e69a57f346.root.log.WARNING.20240920-123530.5088 +7 -0
- language_service.91e69a57f346.root.log.WARNING.20240920-123556.5761 +445 -0
- language_service.ERROR +445 -0
- language_service.INFO +485 -0
- language_service.WARNING +445 -0
- merges.txt +0 -0
- model-00001-of-00004.safetensors +3 -0
- model-00002-of-00004.safetensors +3 -0
- model-00003-of-00004.safetensors +3 -0
- model-00004-of-00004.safetensors +3 -0
- model.safetensors.index.json +346 -0
- special_tokens_map.json +31 -0
- tmphp_txnly/__pycache__/_remote_module_non_scriptable.cpython-310.pyc +0 -0
- tmphp_txnly/_remote_module_non_scriptable.py +81 -0
- tokenizer.json +0 -0
- tokenizer_config.json +207 -0
- training_args.bin +3 -0
- 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
|
|