minmingzhu02 commited on
Commit
7684115
1 Parent(s): 0e193e0

Upload folder using huggingface_hub

Browse files
Files changed (43) hide show
  1. README.md +9 -0
  2. adapter_config.json +23 -0
  3. adapter_model.safetensors +3 -0
  4. all_results.json +17 -0
  5. checkpoint-1000/README.md +9 -0
  6. checkpoint-1000/adapter_config.json +23 -0
  7. checkpoint-1000/adapter_model.safetensors +3 -0
  8. checkpoint-1000/gaudi_config.json +10 -0
  9. checkpoint-1000/global_step1000/bf16_zero_pp_rank_0_mp_rank_00_optim_states.pt +3 -0
  10. checkpoint-1000/global_step1000/bf16_zero_pp_rank_1_mp_rank_00_optim_states.pt +3 -0
  11. checkpoint-1000/global_step1000/bf16_zero_pp_rank_2_mp_rank_00_optim_states.pt +3 -0
  12. checkpoint-1000/global_step1000/bf16_zero_pp_rank_3_mp_rank_00_optim_states.pt +3 -0
  13. checkpoint-1000/global_step1000/bf16_zero_pp_rank_4_mp_rank_00_optim_states.pt +3 -0
  14. checkpoint-1000/global_step1000/bf16_zero_pp_rank_5_mp_rank_00_optim_states.pt +3 -0
  15. checkpoint-1000/global_step1000/bf16_zero_pp_rank_6_mp_rank_00_optim_states.pt +3 -0
  16. checkpoint-1000/global_step1000/bf16_zero_pp_rank_7_mp_rank_00_optim_states.pt +3 -0
  17. checkpoint-1000/global_step1000/mp_rank_00_model_states.pt +3 -0
  18. checkpoint-1000/latest +1 -0
  19. checkpoint-1000/rng_state_0.pth +3 -0
  20. checkpoint-1000/rng_state_1.pth +3 -0
  21. checkpoint-1000/rng_state_2.pth +3 -0
  22. checkpoint-1000/rng_state_3.pth +3 -0
  23. checkpoint-1000/rng_state_4.pth +3 -0
  24. checkpoint-1000/rng_state_5.pth +3 -0
  25. checkpoint-1000/rng_state_6.pth +3 -0
  26. checkpoint-1000/rng_state_7.pth +3 -0
  27. checkpoint-1000/special_tokens_map.json +12 -0
  28. checkpoint-1000/tokenizer.json +0 -0
  29. checkpoint-1000/tokenizer.model +3 -0
  30. checkpoint-1000/tokenizer_config.json +42 -0
  31. checkpoint-1000/trainer_state.json +1021 -0
  32. checkpoint-1000/training_args.bin +3 -0
  33. checkpoint-1000/zero_to_fp32.py +592 -0
  34. eval_results.json +13 -0
  35. gaudi_config.json +10 -0
  36. runs/Jun05_07-58-02_9d340316bc35/events.out.tfevents.1717575602.9d340316bc35.8309.0 +3 -0
  37. runs/Jun05_07-58-02_9d340316bc35/events.out.tfevents.1717581859.9d340316bc35.8309.1 +3 -0
  38. special_tokens_map.json +12 -0
  39. tokenizer.json +0 -0
  40. tokenizer.model +3 -0
  41. tokenizer_config.json +42 -0
  42. train_results.json +10 -0
  43. training_args.bin +3 -0
README.md ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ library_name: peft
3
+ ---
4
+ ## Training procedure
5
+
6
+ ### Framework versions
7
+
8
+
9
+ - PEFT 0.4.0
adapter_config.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "auto_mapping": null,
3
+ "base_model_name_or_path": "mistralai/Mistral-7B-v0.1",
4
+ "bias": "none",
5
+ "fan_in_fan_out": false,
6
+ "inference_mode": true,
7
+ "init_lora_weights": true,
8
+ "layers_pattern": null,
9
+ "layers_to_transform": null,
10
+ "lora_alpha": 16,
11
+ "lora_dropout": 0.05,
12
+ "modules_to_save": null,
13
+ "peft_type": "LORA",
14
+ "r": 8,
15
+ "revision": null,
16
+ "target_modules": [
17
+ "q_proj",
18
+ "v_proj",
19
+ "o_proj",
20
+ "k_proj"
21
+ ],
22
+ "task_type": "CAUSAL_LM"
23
+ }
adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5ea5492a2629a41a3834cf2de2d413d3c30977c44b370a4bdc94bfa086eb6f04
3
+ size 13665592
all_results.json ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "epoch": 2.0,
3
+ "eval_accuracy": 0.4599820966423157,
4
+ "eval_loss": 1.1161718368530273,
5
+ "eval_runtime": 166.5715,
6
+ "eval_samples": 25899,
7
+ "eval_samples_per_second": 160.844,
8
+ "eval_steps_per_second": 2.515,
9
+ "max_memory_allocated (GB)": 91.87,
10
+ "memory_allocated (GB)": 24.39,
11
+ "perplexity": 3.0531438702149534,
12
+ "total_memory_available (GB)": 94.62,
13
+ "train_loss": 1.0469276263736165,
14
+ "train_runtime": 6085.8982,
15
+ "train_samples_per_second": 162.542,
16
+ "train_steps_per_second": 0.317
17
+ }
checkpoint-1000/README.md ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ library_name: peft
3
+ ---
4
+ ## Training procedure
5
+
6
+ ### Framework versions
7
+
8
+
9
+ - PEFT 0.4.0
checkpoint-1000/adapter_config.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "auto_mapping": null,
3
+ "base_model_name_or_path": "mistralai/Mistral-7B-v0.1",
4
+ "bias": "none",
5
+ "fan_in_fan_out": false,
6
+ "inference_mode": true,
7
+ "init_lora_weights": true,
8
+ "layers_pattern": null,
9
+ "layers_to_transform": null,
10
+ "lora_alpha": 16,
11
+ "lora_dropout": 0.05,
12
+ "modules_to_save": null,
13
+ "peft_type": "LORA",
14
+ "r": 8,
15
+ "revision": null,
16
+ "target_modules": [
17
+ "q_proj",
18
+ "v_proj",
19
+ "o_proj",
20
+ "k_proj"
21
+ ],
22
+ "task_type": "CAUSAL_LM"
23
+ }
checkpoint-1000/adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:81c901e3a02306c80837c992a65b028aa5720bd76546736f6b293eb7dfc7140c
3
+ size 13665592
checkpoint-1000/gaudi_config.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "autocast_bf16_ops": null,
3
+ "autocast_fp32_ops": null,
4
+ "optimum_version": "1.20.0",
5
+ "transformers_version": "4.38.2",
6
+ "use_dynamic_shapes": false,
7
+ "use_fused_adam": true,
8
+ "use_fused_clip_norm": true,
9
+ "use_torch_autocast": false
10
+ }
checkpoint-1000/global_step1000/bf16_zero_pp_rank_0_mp_rank_00_optim_states.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fbcc1217cb0120aeb98ec1de36b0d9911840455125d2ac021d411340695b0e41
3
+ size 10229904
checkpoint-1000/global_step1000/bf16_zero_pp_rank_1_mp_rank_00_optim_states.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b97ccb06cab86f7787aa54118479ed5365ea36124fa165035de40978981d7d90
3
+ size 10229904
checkpoint-1000/global_step1000/bf16_zero_pp_rank_2_mp_rank_00_optim_states.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0e88a8703d82aca1a49db083c3389258661948ca907ccc2e9cb111b1551ca4b4
3
+ size 10229904
checkpoint-1000/global_step1000/bf16_zero_pp_rank_3_mp_rank_00_optim_states.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e427e683a4b2c0eaf3f92eeb4d17130f2db3cf91beb49cdec09db31cd03bc5d0
3
+ size 10229904
checkpoint-1000/global_step1000/bf16_zero_pp_rank_4_mp_rank_00_optim_states.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:447bcfa260f2ca4e01eab0355a25bc057c887425ee46599c03014702139424e9
3
+ size 10229904
checkpoint-1000/global_step1000/bf16_zero_pp_rank_5_mp_rank_00_optim_states.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2f82c584aafdcfd6f83b4a382b39b2a21a1c6d328e15b598c757f0bbd57d7f40
3
+ size 10229904
checkpoint-1000/global_step1000/bf16_zero_pp_rank_6_mp_rank_00_optim_states.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ed340b57ccacdb58d19cb98548194affef267ef083941da271ddb8bda6982c71
3
+ size 10229904
checkpoint-1000/global_step1000/bf16_zero_pp_rank_7_mp_rank_00_optim_states.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4e1108862ec93ac55212f8e0a1b8f3e51f7907e476768c008d36049e3882d3c6
3
+ size 10229904
checkpoint-1000/global_step1000/mp_rank_00_model_states.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f7eaa5aa673d8036fda2b25512f384ce627430c73f15341bdbc6c9ea4bbcccca
3
+ size 13740018
checkpoint-1000/latest ADDED
@@ -0,0 +1 @@
 
 
1
+ global_step1000
checkpoint-1000/rng_state_0.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:da3853db45e30a134bde6283db65f4d2e12b4f06b534a780433dd598db8504cb
3
+ size 18032
checkpoint-1000/rng_state_1.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d0664a5f5d0f31c8412dfa2b9c211689c20cc952d4ce4660ee1761e2ec10776d
3
+ size 18032
checkpoint-1000/rng_state_2.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8418b1622ae3a1586b0d267b3c8c1d9d5d403a56cc73434016d717b501b2c0fd
3
+ size 18032
checkpoint-1000/rng_state_3.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:51d300bdb34d5407f13acbfb278589f1a2907891fba4e020420c6053746cf8e2
3
+ size 18032
checkpoint-1000/rng_state_4.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9d597fad31002fa89ec1fd8aefe8f76311a32275c74a84439354f630b9b001a4
3
+ size 18032
checkpoint-1000/rng_state_5.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1fbf5d648175322bc9d62f67af45fa2e710bdc93b49adb768d8df629d2b0347f
3
+ size 18032
checkpoint-1000/rng_state_6.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fcfd1907de0ce290b15c0e3cda02ca34b46efde1a255be0c9b8e383cbf93e363
3
+ size 18032
checkpoint-1000/rng_state_7.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6a4d45767ae6a4db5ed86b012add567287d0976c731678dabe7dedeb253ea63b
3
+ size 18032
checkpoint-1000/special_tokens_map.json ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token": "<s>",
3
+ "eos_token": "</s>",
4
+ "pad_token": "</s>",
5
+ "unk_token": {
6
+ "content": "<unk>",
7
+ "lstrip": false,
8
+ "normalized": false,
9
+ "rstrip": false,
10
+ "single_word": false
11
+ }
12
+ }
checkpoint-1000/tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
checkpoint-1000/tokenizer.model ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dadfd56d766715c61d2ef780a525ab43b8e6da4de6865bda3d95fdef5e134055
3
+ size 493443
checkpoint-1000/tokenizer_config.json ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_bos_token": true,
3
+ "add_eos_token": false,
4
+ "added_tokens_decoder": {
5
+ "0": {
6
+ "content": "<unk>",
7
+ "lstrip": false,
8
+ "normalized": false,
9
+ "rstrip": false,
10
+ "single_word": false,
11
+ "special": true
12
+ },
13
+ "1": {
14
+ "content": "<s>",
15
+ "lstrip": false,
16
+ "normalized": false,
17
+ "rstrip": false,
18
+ "single_word": false,
19
+ "special": true
20
+ },
21
+ "2": {
22
+ "content": "</s>",
23
+ "lstrip": false,
24
+ "normalized": false,
25
+ "rstrip": false,
26
+ "single_word": false,
27
+ "special": true
28
+ }
29
+ },
30
+ "additional_special_tokens": [],
31
+ "bos_token": "<s>",
32
+ "clean_up_tokenization_spaces": false,
33
+ "eos_token": "</s>",
34
+ "legacy": true,
35
+ "model_max_length": 1000000000000000019884624838656,
36
+ "pad_token": "</s>",
37
+ "sp_model_kwargs": {},
38
+ "spaces_between_special_tokens": false,
39
+ "tokenizer_class": "LlamaTokenizer",
40
+ "unk_token": "<unk>",
41
+ "use_default_system_prompt": false
42
+ }
checkpoint-1000/trainer_state.json ADDED
@@ -0,0 +1,1021 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "best_metric": null,
3
+ "best_model_checkpoint": null,
4
+ "epoch": 1.0404473923787227,
5
+ "eval_steps": 500,
6
+ "global_step": 1000,
7
+ "is_hyper_param_search": false,
8
+ "is_local_process_zero": true,
9
+ "is_world_process_zero": true,
10
+ "log_history": [
11
+ {
12
+ "epoch": 0.01,
13
+ "grad_norm": 0.8564500212669373,
14
+ "learning_rate": 5.670773083167062e-05,
15
+ "loss": 1.7378,
16
+ "max_memory_allocated (GB)": 91.86,
17
+ "memory_allocated (GB)": 24.39,
18
+ "step": 10,
19
+ "total_memory_available (GB)": 94.62
20
+ },
21
+ {
22
+ "epoch": 0.02,
23
+ "grad_norm": 0.9088606238365173,
24
+ "learning_rate": 7.377845879804262e-05,
25
+ "loss": 1.5183,
26
+ "max_memory_allocated (GB)": 91.86,
27
+ "memory_allocated (GB)": 24.39,
28
+ "step": 20,
29
+ "total_memory_available (GB)": 94.62
30
+ },
31
+ {
32
+ "epoch": 0.03,
33
+ "grad_norm": 0.396087646484375,
34
+ "learning_rate": 8.376419451838216e-05,
35
+ "loss": 1.3578,
36
+ "max_memory_allocated (GB)": 91.86,
37
+ "memory_allocated (GB)": 24.39,
38
+ "step": 30,
39
+ "total_memory_available (GB)": 94.62
40
+ },
41
+ {
42
+ "epoch": 0.04,
43
+ "grad_norm": 0.2860943078994751,
44
+ "learning_rate": 9.084918676441463e-05,
45
+ "loss": 1.2832,
46
+ "max_memory_allocated (GB)": 91.86,
47
+ "memory_allocated (GB)": 24.39,
48
+ "step": 40,
49
+ "total_memory_available (GB)": 94.62
50
+ },
51
+ {
52
+ "epoch": 0.05,
53
+ "grad_norm": 0.2048167884349823,
54
+ "learning_rate": 9.634473369696918e-05,
55
+ "loss": 1.2717,
56
+ "max_memory_allocated (GB)": 91.86,
57
+ "memory_allocated (GB)": 24.39,
58
+ "step": 50,
59
+ "total_memory_available (GB)": 94.62
60
+ },
61
+ {
62
+ "epoch": 0.06,
63
+ "grad_norm": 0.2355910986661911,
64
+ "learning_rate": 9.994635193133047e-05,
65
+ "loss": 1.2359,
66
+ "max_memory_allocated (GB)": 91.86,
67
+ "memory_allocated (GB)": 24.39,
68
+ "step": 60,
69
+ "total_memory_available (GB)": 94.62
70
+ },
71
+ {
72
+ "epoch": 0.07,
73
+ "grad_norm": 0.25649788975715637,
74
+ "learning_rate": 9.94098712446352e-05,
75
+ "loss": 1.2202,
76
+ "max_memory_allocated (GB)": 91.86,
77
+ "memory_allocated (GB)": 24.39,
78
+ "step": 70,
79
+ "total_memory_available (GB)": 94.62
80
+ },
81
+ {
82
+ "epoch": 0.08,
83
+ "grad_norm": 0.3248240649700165,
84
+ "learning_rate": 9.887339055793991e-05,
85
+ "loss": 1.1928,
86
+ "max_memory_allocated (GB)": 91.86,
87
+ "memory_allocated (GB)": 24.39,
88
+ "step": 80,
89
+ "total_memory_available (GB)": 94.62
90
+ },
91
+ {
92
+ "epoch": 0.09,
93
+ "grad_norm": 0.34330031275749207,
94
+ "learning_rate": 9.833690987124465e-05,
95
+ "loss": 1.1839,
96
+ "max_memory_allocated (GB)": 91.86,
97
+ "memory_allocated (GB)": 24.39,
98
+ "step": 90,
99
+ "total_memory_available (GB)": 94.62
100
+ },
101
+ {
102
+ "epoch": 0.1,
103
+ "grad_norm": 0.481341689825058,
104
+ "learning_rate": 9.780042918454936e-05,
105
+ "loss": 1.1682,
106
+ "max_memory_allocated (GB)": 91.86,
107
+ "memory_allocated (GB)": 24.39,
108
+ "step": 100,
109
+ "total_memory_available (GB)": 94.62
110
+ },
111
+ {
112
+ "epoch": 0.11,
113
+ "grad_norm": 0.33835262060165405,
114
+ "learning_rate": 9.726394849785409e-05,
115
+ "loss": 1.1528,
116
+ "max_memory_allocated (GB)": 91.86,
117
+ "memory_allocated (GB)": 24.39,
118
+ "step": 110,
119
+ "total_memory_available (GB)": 94.62
120
+ },
121
+ {
122
+ "epoch": 0.12,
123
+ "grad_norm": 0.5484705567359924,
124
+ "learning_rate": 9.67274678111588e-05,
125
+ "loss": 1.1511,
126
+ "max_memory_allocated (GB)": 91.86,
127
+ "memory_allocated (GB)": 24.39,
128
+ "step": 120,
129
+ "total_memory_available (GB)": 94.62
130
+ },
131
+ {
132
+ "epoch": 0.14,
133
+ "grad_norm": 0.3785193860530853,
134
+ "learning_rate": 9.619098712446352e-05,
135
+ "loss": 1.152,
136
+ "max_memory_allocated (GB)": 91.86,
137
+ "memory_allocated (GB)": 24.39,
138
+ "step": 130,
139
+ "total_memory_available (GB)": 94.62
140
+ },
141
+ {
142
+ "epoch": 0.15,
143
+ "grad_norm": 0.36997660994529724,
144
+ "learning_rate": 9.565450643776824e-05,
145
+ "loss": 1.1489,
146
+ "max_memory_allocated (GB)": 91.86,
147
+ "memory_allocated (GB)": 24.39,
148
+ "step": 140,
149
+ "total_memory_available (GB)": 94.62
150
+ },
151
+ {
152
+ "epoch": 0.16,
153
+ "grad_norm": 0.5300387144088745,
154
+ "learning_rate": 9.511802575107297e-05,
155
+ "loss": 1.1326,
156
+ "max_memory_allocated (GB)": 91.86,
157
+ "memory_allocated (GB)": 24.39,
158
+ "step": 150,
159
+ "total_memory_available (GB)": 94.62
160
+ },
161
+ {
162
+ "epoch": 0.17,
163
+ "grad_norm": 0.5168531537055969,
164
+ "learning_rate": 9.458154506437769e-05,
165
+ "loss": 1.1253,
166
+ "max_memory_allocated (GB)": 91.86,
167
+ "memory_allocated (GB)": 24.39,
168
+ "step": 160,
169
+ "total_memory_available (GB)": 94.62
170
+ },
171
+ {
172
+ "epoch": 0.18,
173
+ "grad_norm": 0.48498621582984924,
174
+ "learning_rate": 9.404506437768241e-05,
175
+ "loss": 1.1079,
176
+ "max_memory_allocated (GB)": 91.86,
177
+ "memory_allocated (GB)": 24.39,
178
+ "step": 170,
179
+ "total_memory_available (GB)": 94.62
180
+ },
181
+ {
182
+ "epoch": 0.19,
183
+ "grad_norm": 0.4298243522644043,
184
+ "learning_rate": 9.350858369098713e-05,
185
+ "loss": 1.0987,
186
+ "max_memory_allocated (GB)": 91.86,
187
+ "memory_allocated (GB)": 24.39,
188
+ "step": 180,
189
+ "total_memory_available (GB)": 94.62
190
+ },
191
+ {
192
+ "epoch": 0.2,
193
+ "grad_norm": 0.4342297315597534,
194
+ "learning_rate": 9.297210300429185e-05,
195
+ "loss": 1.0975,
196
+ "max_memory_allocated (GB)": 91.86,
197
+ "memory_allocated (GB)": 24.39,
198
+ "step": 190,
199
+ "total_memory_available (GB)": 94.62
200
+ },
201
+ {
202
+ "epoch": 0.21,
203
+ "grad_norm": 0.5405712127685547,
204
+ "learning_rate": 9.243562231759658e-05,
205
+ "loss": 1.1084,
206
+ "max_memory_allocated (GB)": 91.86,
207
+ "memory_allocated (GB)": 24.39,
208
+ "step": 200,
209
+ "total_memory_available (GB)": 94.62
210
+ },
211
+ {
212
+ "epoch": 0.22,
213
+ "grad_norm": 0.4317038655281067,
214
+ "learning_rate": 9.189914163090128e-05,
215
+ "loss": 1.0969,
216
+ "max_memory_allocated (GB)": 91.86,
217
+ "memory_allocated (GB)": 24.39,
218
+ "step": 210,
219
+ "total_memory_available (GB)": 94.62
220
+ },
221
+ {
222
+ "epoch": 0.23,
223
+ "grad_norm": 0.41190406680107117,
224
+ "learning_rate": 9.136266094420602e-05,
225
+ "loss": 1.0992,
226
+ "max_memory_allocated (GB)": 91.86,
227
+ "memory_allocated (GB)": 24.39,
228
+ "step": 220,
229
+ "total_memory_available (GB)": 94.62
230
+ },
231
+ {
232
+ "epoch": 0.24,
233
+ "grad_norm": 0.5093066692352295,
234
+ "learning_rate": 9.082618025751073e-05,
235
+ "loss": 1.0875,
236
+ "max_memory_allocated (GB)": 91.86,
237
+ "memory_allocated (GB)": 24.39,
238
+ "step": 230,
239
+ "total_memory_available (GB)": 94.62
240
+ },
241
+ {
242
+ "epoch": 0.25,
243
+ "grad_norm": 0.40610459446907043,
244
+ "learning_rate": 9.028969957081545e-05,
245
+ "loss": 1.0886,
246
+ "max_memory_allocated (GB)": 91.86,
247
+ "memory_allocated (GB)": 24.39,
248
+ "step": 240,
249
+ "total_memory_available (GB)": 94.62
250
+ },
251
+ {
252
+ "epoch": 0.26,
253
+ "grad_norm": 0.38791623711586,
254
+ "learning_rate": 8.975321888412017e-05,
255
+ "loss": 1.0783,
256
+ "max_memory_allocated (GB)": 91.86,
257
+ "memory_allocated (GB)": 24.39,
258
+ "step": 250,
259
+ "total_memory_available (GB)": 94.62
260
+ },
261
+ {
262
+ "epoch": 0.27,
263
+ "grad_norm": 0.3828742206096649,
264
+ "learning_rate": 8.92167381974249e-05,
265
+ "loss": 1.0816,
266
+ "max_memory_allocated (GB)": 91.86,
267
+ "memory_allocated (GB)": 24.39,
268
+ "step": 260,
269
+ "total_memory_available (GB)": 94.62
270
+ },
271
+ {
272
+ "epoch": 0.28,
273
+ "grad_norm": 0.5216621160507202,
274
+ "learning_rate": 8.868025751072962e-05,
275
+ "loss": 1.0731,
276
+ "max_memory_allocated (GB)": 91.86,
277
+ "memory_allocated (GB)": 24.39,
278
+ "step": 270,
279
+ "total_memory_available (GB)": 94.62
280
+ },
281
+ {
282
+ "epoch": 0.29,
283
+ "grad_norm": 0.43531420826911926,
284
+ "learning_rate": 8.814377682403434e-05,
285
+ "loss": 1.0804,
286
+ "max_memory_allocated (GB)": 91.86,
287
+ "memory_allocated (GB)": 24.39,
288
+ "step": 280,
289
+ "total_memory_available (GB)": 94.62
290
+ },
291
+ {
292
+ "epoch": 0.3,
293
+ "grad_norm": 0.41790470480918884,
294
+ "learning_rate": 8.760729613733906e-05,
295
+ "loss": 1.0785,
296
+ "max_memory_allocated (GB)": 91.86,
297
+ "memory_allocated (GB)": 24.39,
298
+ "step": 290,
299
+ "total_memory_available (GB)": 94.62
300
+ },
301
+ {
302
+ "epoch": 0.31,
303
+ "grad_norm": 0.456264466047287,
304
+ "learning_rate": 8.707081545064378e-05,
305
+ "loss": 1.0708,
306
+ "max_memory_allocated (GB)": 91.86,
307
+ "memory_allocated (GB)": 24.39,
308
+ "step": 300,
309
+ "total_memory_available (GB)": 94.62
310
+ },
311
+ {
312
+ "epoch": 0.32,
313
+ "grad_norm": 0.3793538212776184,
314
+ "learning_rate": 8.65343347639485e-05,
315
+ "loss": 1.0818,
316
+ "max_memory_allocated (GB)": 91.86,
317
+ "memory_allocated (GB)": 24.39,
318
+ "step": 310,
319
+ "total_memory_available (GB)": 94.62
320
+ },
321
+ {
322
+ "epoch": 0.33,
323
+ "grad_norm": 0.37741824984550476,
324
+ "learning_rate": 8.599785407725323e-05,
325
+ "loss": 1.0669,
326
+ "max_memory_allocated (GB)": 91.86,
327
+ "memory_allocated (GB)": 24.39,
328
+ "step": 320,
329
+ "total_memory_available (GB)": 94.62
330
+ },
331
+ {
332
+ "epoch": 0.34,
333
+ "grad_norm": 0.3576098084449768,
334
+ "learning_rate": 8.546137339055795e-05,
335
+ "loss": 1.0678,
336
+ "max_memory_allocated (GB)": 91.86,
337
+ "memory_allocated (GB)": 24.39,
338
+ "step": 330,
339
+ "total_memory_available (GB)": 94.62
340
+ },
341
+ {
342
+ "epoch": 0.35,
343
+ "grad_norm": 0.4295920133590698,
344
+ "learning_rate": 8.492489270386267e-05,
345
+ "loss": 1.0571,
346
+ "max_memory_allocated (GB)": 91.86,
347
+ "memory_allocated (GB)": 24.39,
348
+ "step": 340,
349
+ "total_memory_available (GB)": 94.62
350
+ },
351
+ {
352
+ "epoch": 0.36,
353
+ "grad_norm": 0.38484010100364685,
354
+ "learning_rate": 8.438841201716738e-05,
355
+ "loss": 1.0697,
356
+ "max_memory_allocated (GB)": 91.86,
357
+ "memory_allocated (GB)": 24.39,
358
+ "step": 350,
359
+ "total_memory_available (GB)": 94.62
360
+ },
361
+ {
362
+ "epoch": 0.37,
363
+ "grad_norm": 0.3806072175502777,
364
+ "learning_rate": 8.385193133047211e-05,
365
+ "loss": 1.0652,
366
+ "max_memory_allocated (GB)": 91.86,
367
+ "memory_allocated (GB)": 24.39,
368
+ "step": 360,
369
+ "total_memory_available (GB)": 94.62
370
+ },
371
+ {
372
+ "epoch": 0.38,
373
+ "grad_norm": 0.3507857918739319,
374
+ "learning_rate": 8.331545064377682e-05,
375
+ "loss": 1.061,
376
+ "max_memory_allocated (GB)": 91.86,
377
+ "memory_allocated (GB)": 24.39,
378
+ "step": 370,
379
+ "total_memory_available (GB)": 94.62
380
+ },
381
+ {
382
+ "epoch": 0.4,
383
+ "grad_norm": 0.3869009017944336,
384
+ "learning_rate": 8.277896995708156e-05,
385
+ "loss": 1.0622,
386
+ "max_memory_allocated (GB)": 91.86,
387
+ "memory_allocated (GB)": 24.39,
388
+ "step": 380,
389
+ "total_memory_available (GB)": 94.62
390
+ },
391
+ {
392
+ "epoch": 0.41,
393
+ "grad_norm": 0.3941822648048401,
394
+ "learning_rate": 8.224248927038627e-05,
395
+ "loss": 1.0629,
396
+ "max_memory_allocated (GB)": 91.86,
397
+ "memory_allocated (GB)": 24.39,
398
+ "step": 390,
399
+ "total_memory_available (GB)": 94.62
400
+ },
401
+ {
402
+ "epoch": 0.42,
403
+ "grad_norm": 0.3660201132297516,
404
+ "learning_rate": 8.1706008583691e-05,
405
+ "loss": 1.0589,
406
+ "max_memory_allocated (GB)": 91.86,
407
+ "memory_allocated (GB)": 24.39,
408
+ "step": 400,
409
+ "total_memory_available (GB)": 94.62
410
+ },
411
+ {
412
+ "epoch": 0.43,
413
+ "grad_norm": 0.3641981780529022,
414
+ "learning_rate": 8.116952789699571e-05,
415
+ "loss": 1.0611,
416
+ "max_memory_allocated (GB)": 91.86,
417
+ "memory_allocated (GB)": 24.39,
418
+ "step": 410,
419
+ "total_memory_available (GB)": 94.62
420
+ },
421
+ {
422
+ "epoch": 0.44,
423
+ "grad_norm": 0.38291656970977783,
424
+ "learning_rate": 8.063304721030043e-05,
425
+ "loss": 1.0554,
426
+ "max_memory_allocated (GB)": 91.86,
427
+ "memory_allocated (GB)": 24.39,
428
+ "step": 420,
429
+ "total_memory_available (GB)": 94.62
430
+ },
431
+ {
432
+ "epoch": 0.45,
433
+ "grad_norm": 0.3162360191345215,
434
+ "learning_rate": 8.009656652360515e-05,
435
+ "loss": 1.0504,
436
+ "max_memory_allocated (GB)": 91.86,
437
+ "memory_allocated (GB)": 24.39,
438
+ "step": 430,
439
+ "total_memory_available (GB)": 94.62
440
+ },
441
+ {
442
+ "epoch": 0.46,
443
+ "grad_norm": 0.3741254508495331,
444
+ "learning_rate": 7.956008583690988e-05,
445
+ "loss": 1.0525,
446
+ "max_memory_allocated (GB)": 91.86,
447
+ "memory_allocated (GB)": 24.39,
448
+ "step": 440,
449
+ "total_memory_available (GB)": 94.62
450
+ },
451
+ {
452
+ "epoch": 0.47,
453
+ "grad_norm": 0.3503776788711548,
454
+ "learning_rate": 7.90236051502146e-05,
455
+ "loss": 1.0554,
456
+ "max_memory_allocated (GB)": 91.86,
457
+ "memory_allocated (GB)": 24.39,
458
+ "step": 450,
459
+ "total_memory_available (GB)": 94.62
460
+ },
461
+ {
462
+ "epoch": 0.48,
463
+ "grad_norm": 0.3659127652645111,
464
+ "learning_rate": 7.848712446351931e-05,
465
+ "loss": 1.0464,
466
+ "max_memory_allocated (GB)": 91.86,
467
+ "memory_allocated (GB)": 24.39,
468
+ "step": 460,
469
+ "total_memory_available (GB)": 94.62
470
+ },
471
+ {
472
+ "epoch": 0.49,
473
+ "grad_norm": 0.3401431143283844,
474
+ "learning_rate": 7.795064377682404e-05,
475
+ "loss": 1.0596,
476
+ "max_memory_allocated (GB)": 91.86,
477
+ "memory_allocated (GB)": 24.39,
478
+ "step": 470,
479
+ "total_memory_available (GB)": 94.62
480
+ },
481
+ {
482
+ "epoch": 0.5,
483
+ "grad_norm": 0.33970314264297485,
484
+ "learning_rate": 7.741416309012875e-05,
485
+ "loss": 1.0659,
486
+ "max_memory_allocated (GB)": 91.86,
487
+ "memory_allocated (GB)": 24.39,
488
+ "step": 480,
489
+ "total_memory_available (GB)": 94.62
490
+ },
491
+ {
492
+ "epoch": 0.51,
493
+ "grad_norm": 0.40222179889678955,
494
+ "learning_rate": 7.687768240343349e-05,
495
+ "loss": 1.0485,
496
+ "max_memory_allocated (GB)": 91.86,
497
+ "memory_allocated (GB)": 24.39,
498
+ "step": 490,
499
+ "total_memory_available (GB)": 94.62
500
+ },
501
+ {
502
+ "epoch": 0.52,
503
+ "grad_norm": 0.3137299716472626,
504
+ "learning_rate": 7.63412017167382e-05,
505
+ "loss": 1.0506,
506
+ "max_memory_allocated (GB)": 91.86,
507
+ "memory_allocated (GB)": 24.39,
508
+ "step": 500,
509
+ "total_memory_available (GB)": 94.62
510
+ },
511
+ {
512
+ "epoch": 0.53,
513
+ "grad_norm": 0.3413981795310974,
514
+ "learning_rate": 7.580472103004293e-05,
515
+ "loss": 1.0466,
516
+ "max_memory_allocated (GB)": 91.86,
517
+ "memory_allocated (GB)": 24.39,
518
+ "step": 510,
519
+ "total_memory_available (GB)": 94.62
520
+ },
521
+ {
522
+ "epoch": 0.54,
523
+ "grad_norm": 0.3440905511379242,
524
+ "learning_rate": 7.526824034334764e-05,
525
+ "loss": 1.0503,
526
+ "max_memory_allocated (GB)": 91.86,
527
+ "memory_allocated (GB)": 24.39,
528
+ "step": 520,
529
+ "total_memory_available (GB)": 94.62
530
+ },
531
+ {
532
+ "epoch": 0.55,
533
+ "grad_norm": 0.367201030254364,
534
+ "learning_rate": 7.473175965665236e-05,
535
+ "loss": 1.0449,
536
+ "max_memory_allocated (GB)": 91.86,
537
+ "memory_allocated (GB)": 24.39,
538
+ "step": 530,
539
+ "total_memory_available (GB)": 94.62
540
+ },
541
+ {
542
+ "epoch": 0.56,
543
+ "grad_norm": 0.37777239084243774,
544
+ "learning_rate": 7.419527896995708e-05,
545
+ "loss": 1.0514,
546
+ "max_memory_allocated (GB)": 91.86,
547
+ "memory_allocated (GB)": 24.39,
548
+ "step": 540,
549
+ "total_memory_available (GB)": 94.62
550
+ },
551
+ {
552
+ "epoch": 0.57,
553
+ "grad_norm": 0.355307936668396,
554
+ "learning_rate": 7.36587982832618e-05,
555
+ "loss": 1.0458,
556
+ "max_memory_allocated (GB)": 91.86,
557
+ "memory_allocated (GB)": 24.39,
558
+ "step": 550,
559
+ "total_memory_available (GB)": 94.62
560
+ },
561
+ {
562
+ "epoch": 0.58,
563
+ "grad_norm": 0.43950700759887695,
564
+ "learning_rate": 7.312231759656653e-05,
565
+ "loss": 1.0426,
566
+ "max_memory_allocated (GB)": 91.86,
567
+ "memory_allocated (GB)": 24.39,
568
+ "step": 560,
569
+ "total_memory_available (GB)": 94.62
570
+ },
571
+ {
572
+ "epoch": 0.59,
573
+ "grad_norm": 0.31208208203315735,
574
+ "learning_rate": 7.258583690987125e-05,
575
+ "loss": 1.0432,
576
+ "max_memory_allocated (GB)": 91.86,
577
+ "memory_allocated (GB)": 24.39,
578
+ "step": 570,
579
+ "total_memory_available (GB)": 94.62
580
+ },
581
+ {
582
+ "epoch": 0.6,
583
+ "grad_norm": 0.3358898460865021,
584
+ "learning_rate": 7.204935622317597e-05,
585
+ "loss": 1.0563,
586
+ "max_memory_allocated (GB)": 91.86,
587
+ "memory_allocated (GB)": 24.39,
588
+ "step": 580,
589
+ "total_memory_available (GB)": 94.62
590
+ },
591
+ {
592
+ "epoch": 0.61,
593
+ "grad_norm": 0.3219963610172272,
594
+ "learning_rate": 7.15128755364807e-05,
595
+ "loss": 1.0402,
596
+ "max_memory_allocated (GB)": 91.86,
597
+ "memory_allocated (GB)": 24.39,
598
+ "step": 590,
599
+ "total_memory_available (GB)": 94.62
600
+ },
601
+ {
602
+ "epoch": 0.62,
603
+ "grad_norm": 0.3409494161605835,
604
+ "learning_rate": 7.097639484978542e-05,
605
+ "loss": 1.0452,
606
+ "max_memory_allocated (GB)": 91.86,
607
+ "memory_allocated (GB)": 24.39,
608
+ "step": 600,
609
+ "total_memory_available (GB)": 94.62
610
+ },
611
+ {
612
+ "epoch": 0.63,
613
+ "grad_norm": 0.3917517364025116,
614
+ "learning_rate": 7.043991416309014e-05,
615
+ "loss": 1.0358,
616
+ "max_memory_allocated (GB)": 91.86,
617
+ "memory_allocated (GB)": 24.39,
618
+ "step": 610,
619
+ "total_memory_available (GB)": 94.62
620
+ },
621
+ {
622
+ "epoch": 0.65,
623
+ "grad_norm": 0.36202436685562134,
624
+ "learning_rate": 6.990343347639486e-05,
625
+ "loss": 1.0421,
626
+ "max_memory_allocated (GB)": 91.86,
627
+ "memory_allocated (GB)": 24.39,
628
+ "step": 620,
629
+ "total_memory_available (GB)": 94.62
630
+ },
631
+ {
632
+ "epoch": 0.66,
633
+ "grad_norm": 0.34764185547828674,
634
+ "learning_rate": 6.936695278969958e-05,
635
+ "loss": 1.0414,
636
+ "max_memory_allocated (GB)": 91.86,
637
+ "memory_allocated (GB)": 24.39,
638
+ "step": 630,
639
+ "total_memory_available (GB)": 94.62
640
+ },
641
+ {
642
+ "epoch": 0.67,
643
+ "grad_norm": 0.3368031084537506,
644
+ "learning_rate": 6.883047210300429e-05,
645
+ "loss": 1.0328,
646
+ "max_memory_allocated (GB)": 91.86,
647
+ "memory_allocated (GB)": 24.39,
648
+ "step": 640,
649
+ "total_memory_available (GB)": 94.62
650
+ },
651
+ {
652
+ "epoch": 0.68,
653
+ "grad_norm": 0.3216454088687897,
654
+ "learning_rate": 6.829399141630901e-05,
655
+ "loss": 1.0368,
656
+ "max_memory_allocated (GB)": 91.86,
657
+ "memory_allocated (GB)": 24.39,
658
+ "step": 650,
659
+ "total_memory_available (GB)": 94.62
660
+ },
661
+ {
662
+ "epoch": 0.69,
663
+ "grad_norm": 0.36135369539260864,
664
+ "learning_rate": 6.775751072961373e-05,
665
+ "loss": 1.0375,
666
+ "max_memory_allocated (GB)": 91.86,
667
+ "memory_allocated (GB)": 24.39,
668
+ "step": 660,
669
+ "total_memory_available (GB)": 94.62
670
+ },
671
+ {
672
+ "epoch": 0.7,
673
+ "grad_norm": 0.3772068917751312,
674
+ "learning_rate": 6.722103004291846e-05,
675
+ "loss": 1.0384,
676
+ "max_memory_allocated (GB)": 91.86,
677
+ "memory_allocated (GB)": 24.39,
678
+ "step": 670,
679
+ "total_memory_available (GB)": 94.62
680
+ },
681
+ {
682
+ "epoch": 0.71,
683
+ "grad_norm": 0.352990984916687,
684
+ "learning_rate": 6.668454935622318e-05,
685
+ "loss": 1.0347,
686
+ "max_memory_allocated (GB)": 91.86,
687
+ "memory_allocated (GB)": 24.39,
688
+ "step": 680,
689
+ "total_memory_available (GB)": 94.62
690
+ },
691
+ {
692
+ "epoch": 0.72,
693
+ "grad_norm": 0.38070163130760193,
694
+ "learning_rate": 6.61480686695279e-05,
695
+ "loss": 1.0414,
696
+ "max_memory_allocated (GB)": 91.86,
697
+ "memory_allocated (GB)": 24.39,
698
+ "step": 690,
699
+ "total_memory_available (GB)": 94.62
700
+ },
701
+ {
702
+ "epoch": 0.73,
703
+ "grad_norm": 0.3262191414833069,
704
+ "learning_rate": 6.561158798283262e-05,
705
+ "loss": 1.0427,
706
+ "max_memory_allocated (GB)": 91.86,
707
+ "memory_allocated (GB)": 24.39,
708
+ "step": 700,
709
+ "total_memory_available (GB)": 94.62
710
+ },
711
+ {
712
+ "epoch": 0.74,
713
+ "grad_norm": 0.37472084164619446,
714
+ "learning_rate": 6.507510729613734e-05,
715
+ "loss": 1.035,
716
+ "max_memory_allocated (GB)": 91.86,
717
+ "memory_allocated (GB)": 24.39,
718
+ "step": 710,
719
+ "total_memory_available (GB)": 94.62
720
+ },
721
+ {
722
+ "epoch": 0.75,
723
+ "grad_norm": 0.3830932676792145,
724
+ "learning_rate": 6.453862660944207e-05,
725
+ "loss": 1.0329,
726
+ "max_memory_allocated (GB)": 91.86,
727
+ "memory_allocated (GB)": 24.39,
728
+ "step": 720,
729
+ "total_memory_available (GB)": 94.62
730
+ },
731
+ {
732
+ "epoch": 0.76,
733
+ "grad_norm": 0.33351582288742065,
734
+ "learning_rate": 6.400214592274679e-05,
735
+ "loss": 1.0338,
736
+ "max_memory_allocated (GB)": 91.86,
737
+ "memory_allocated (GB)": 24.39,
738
+ "step": 730,
739
+ "total_memory_available (GB)": 94.62
740
+ },
741
+ {
742
+ "epoch": 0.77,
743
+ "grad_norm": 0.30762043595314026,
744
+ "learning_rate": 6.346566523605151e-05,
745
+ "loss": 1.0452,
746
+ "max_memory_allocated (GB)": 91.86,
747
+ "memory_allocated (GB)": 24.39,
748
+ "step": 740,
749
+ "total_memory_available (GB)": 94.62
750
+ },
751
+ {
752
+ "epoch": 0.78,
753
+ "grad_norm": 0.3884871006011963,
754
+ "learning_rate": 6.292918454935622e-05,
755
+ "loss": 1.0387,
756
+ "max_memory_allocated (GB)": 91.86,
757
+ "memory_allocated (GB)": 24.39,
758
+ "step": 750,
759
+ "total_memory_available (GB)": 94.62
760
+ },
761
+ {
762
+ "epoch": 0.79,
763
+ "grad_norm": 0.34226515889167786,
764
+ "learning_rate": 6.239270386266095e-05,
765
+ "loss": 1.0282,
766
+ "max_memory_allocated (GB)": 91.86,
767
+ "memory_allocated (GB)": 24.39,
768
+ "step": 760,
769
+ "total_memory_available (GB)": 94.62
770
+ },
771
+ {
772
+ "epoch": 0.8,
773
+ "grad_norm": 0.3282904624938965,
774
+ "learning_rate": 6.185622317596566e-05,
775
+ "loss": 1.0266,
776
+ "max_memory_allocated (GB)": 91.86,
777
+ "memory_allocated (GB)": 24.39,
778
+ "step": 770,
779
+ "total_memory_available (GB)": 94.62
780
+ },
781
+ {
782
+ "epoch": 0.81,
783
+ "grad_norm": 0.34865814447402954,
784
+ "learning_rate": 6.13197424892704e-05,
785
+ "loss": 1.0369,
786
+ "max_memory_allocated (GB)": 91.86,
787
+ "memory_allocated (GB)": 24.39,
788
+ "step": 780,
789
+ "total_memory_available (GB)": 94.62
790
+ },
791
+ {
792
+ "epoch": 0.82,
793
+ "grad_norm": 0.34097954630851746,
794
+ "learning_rate": 6.0783261802575106e-05,
795
+ "loss": 1.0241,
796
+ "max_memory_allocated (GB)": 91.86,
797
+ "memory_allocated (GB)": 24.39,
798
+ "step": 790,
799
+ "total_memory_available (GB)": 94.62
800
+ },
801
+ {
802
+ "epoch": 0.83,
803
+ "grad_norm": 0.342785120010376,
804
+ "learning_rate": 6.0246781115879835e-05,
805
+ "loss": 1.0289,
806
+ "max_memory_allocated (GB)": 91.86,
807
+ "memory_allocated (GB)": 24.39,
808
+ "step": 800,
809
+ "total_memory_available (GB)": 94.62
810
+ },
811
+ {
812
+ "epoch": 0.84,
813
+ "grad_norm": 0.33090144395828247,
814
+ "learning_rate": 5.971030042918455e-05,
815
+ "loss": 1.0335,
816
+ "max_memory_allocated (GB)": 91.86,
817
+ "memory_allocated (GB)": 24.39,
818
+ "step": 810,
819
+ "total_memory_available (GB)": 94.62
820
+ },
821
+ {
822
+ "epoch": 0.85,
823
+ "grad_norm": 0.38638409972190857,
824
+ "learning_rate": 5.917381974248928e-05,
825
+ "loss": 1.0272,
826
+ "max_memory_allocated (GB)": 91.86,
827
+ "memory_allocated (GB)": 24.39,
828
+ "step": 820,
829
+ "total_memory_available (GB)": 94.62
830
+ },
831
+ {
832
+ "epoch": 0.86,
833
+ "grad_norm": 0.34252798557281494,
834
+ "learning_rate": 5.8637339055793994e-05,
835
+ "loss": 1.0284,
836
+ "max_memory_allocated (GB)": 91.86,
837
+ "memory_allocated (GB)": 24.39,
838
+ "step": 830,
839
+ "total_memory_available (GB)": 94.62
840
+ },
841
+ {
842
+ "epoch": 0.87,
843
+ "grad_norm": 0.3451687693595886,
844
+ "learning_rate": 5.810085836909872e-05,
845
+ "loss": 1.0212,
846
+ "max_memory_allocated (GB)": 91.86,
847
+ "memory_allocated (GB)": 24.39,
848
+ "step": 840,
849
+ "total_memory_available (GB)": 94.62
850
+ },
851
+ {
852
+ "epoch": 0.88,
853
+ "grad_norm": 0.384164422750473,
854
+ "learning_rate": 5.756437768240344e-05,
855
+ "loss": 1.0347,
856
+ "max_memory_allocated (GB)": 91.86,
857
+ "memory_allocated (GB)": 24.39,
858
+ "step": 850,
859
+ "total_memory_available (GB)": 94.62
860
+ },
861
+ {
862
+ "epoch": 0.89,
863
+ "grad_norm": 0.3310836851596832,
864
+ "learning_rate": 5.7027896995708154e-05,
865
+ "loss": 1.0153,
866
+ "max_memory_allocated (GB)": 91.86,
867
+ "memory_allocated (GB)": 24.39,
868
+ "step": 860,
869
+ "total_memory_available (GB)": 94.62
870
+ },
871
+ {
872
+ "epoch": 0.91,
873
+ "grad_norm": 0.3287970721721649,
874
+ "learning_rate": 5.6491416309012876e-05,
875
+ "loss": 1.0386,
876
+ "max_memory_allocated (GB)": 91.86,
877
+ "memory_allocated (GB)": 24.39,
878
+ "step": 870,
879
+ "total_memory_available (GB)": 94.62
880
+ },
881
+ {
882
+ "epoch": 0.92,
883
+ "grad_norm": 0.3661152720451355,
884
+ "learning_rate": 5.59549356223176e-05,
885
+ "loss": 1.0195,
886
+ "max_memory_allocated (GB)": 91.86,
887
+ "memory_allocated (GB)": 24.39,
888
+ "step": 880,
889
+ "total_memory_available (GB)": 94.62
890
+ },
891
+ {
892
+ "epoch": 0.93,
893
+ "grad_norm": 0.39101266860961914,
894
+ "learning_rate": 5.541845493562232e-05,
895
+ "loss": 1.0285,
896
+ "max_memory_allocated (GB)": 91.86,
897
+ "memory_allocated (GB)": 24.39,
898
+ "step": 890,
899
+ "total_memory_available (GB)": 94.62
900
+ },
901
+ {
902
+ "epoch": 0.94,
903
+ "grad_norm": 0.38129398226737976,
904
+ "learning_rate": 5.4881974248927035e-05,
905
+ "loss": 1.0375,
906
+ "max_memory_allocated (GB)": 91.86,
907
+ "memory_allocated (GB)": 24.39,
908
+ "step": 900,
909
+ "total_memory_available (GB)": 94.62
910
+ },
911
+ {
912
+ "epoch": 0.95,
913
+ "grad_norm": 0.32832667231559753,
914
+ "learning_rate": 5.4345493562231764e-05,
915
+ "loss": 1.0229,
916
+ "max_memory_allocated (GB)": 91.86,
917
+ "memory_allocated (GB)": 24.39,
918
+ "step": 910,
919
+ "total_memory_available (GB)": 94.62
920
+ },
921
+ {
922
+ "epoch": 0.96,
923
+ "grad_norm": 0.35413920879364014,
924
+ "learning_rate": 5.380901287553648e-05,
925
+ "loss": 1.024,
926
+ "max_memory_allocated (GB)": 91.86,
927
+ "memory_allocated (GB)": 24.39,
928
+ "step": 920,
929
+ "total_memory_available (GB)": 94.62
930
+ },
931
+ {
932
+ "epoch": 0.97,
933
+ "grad_norm": 0.3270743787288666,
934
+ "learning_rate": 5.327253218884121e-05,
935
+ "loss": 1.0319,
936
+ "max_memory_allocated (GB)": 91.86,
937
+ "memory_allocated (GB)": 24.39,
938
+ "step": 930,
939
+ "total_memory_available (GB)": 94.62
940
+ },
941
+ {
942
+ "epoch": 0.98,
943
+ "grad_norm": 0.33611926436424255,
944
+ "learning_rate": 5.273605150214592e-05,
945
+ "loss": 1.0198,
946
+ "max_memory_allocated (GB)": 91.86,
947
+ "memory_allocated (GB)": 24.39,
948
+ "step": 940,
949
+ "total_memory_available (GB)": 94.62
950
+ },
951
+ {
952
+ "epoch": 0.99,
953
+ "grad_norm": 0.34108686447143555,
954
+ "learning_rate": 5.219957081545065e-05,
955
+ "loss": 1.0294,
956
+ "max_memory_allocated (GB)": 91.86,
957
+ "memory_allocated (GB)": 24.39,
958
+ "step": 950,
959
+ "total_memory_available (GB)": 94.62
960
+ },
961
+ {
962
+ "epoch": 1.0,
963
+ "grad_norm": 0.3304935395717621,
964
+ "learning_rate": 5.166309012875537e-05,
965
+ "loss": 1.0264,
966
+ "max_memory_allocated (GB)": 91.86,
967
+ "memory_allocated (GB)": 24.39,
968
+ "step": 960,
969
+ "total_memory_available (GB)": 94.62
970
+ },
971
+ {
972
+ "epoch": 1.01,
973
+ "grad_norm": 0.3912031054496765,
974
+ "learning_rate": 5.112660944206009e-05,
975
+ "loss": 1.0192,
976
+ "max_memory_allocated (GB)": 91.87,
977
+ "memory_allocated (GB)": 24.39,
978
+ "step": 970,
979
+ "total_memory_available (GB)": 94.62
980
+ },
981
+ {
982
+ "epoch": 1.02,
983
+ "grad_norm": 0.33931615948677063,
984
+ "learning_rate": 5.0590128755364804e-05,
985
+ "loss": 1.0242,
986
+ "max_memory_allocated (GB)": 91.87,
987
+ "memory_allocated (GB)": 24.39,
988
+ "step": 980,
989
+ "total_memory_available (GB)": 94.62
990
+ },
991
+ {
992
+ "epoch": 1.03,
993
+ "grad_norm": 0.3690173923969269,
994
+ "learning_rate": 5.005364806866953e-05,
995
+ "loss": 1.0202,
996
+ "max_memory_allocated (GB)": 91.87,
997
+ "memory_allocated (GB)": 24.39,
998
+ "step": 990,
999
+ "total_memory_available (GB)": 94.62
1000
+ },
1001
+ {
1002
+ "epoch": 1.04,
1003
+ "grad_norm": 0.35189080238342285,
1004
+ "learning_rate": 4.951716738197425e-05,
1005
+ "loss": 1.0206,
1006
+ "max_memory_allocated (GB)": 91.87,
1007
+ "memory_allocated (GB)": 24.39,
1008
+ "step": 1000,
1009
+ "total_memory_available (GB)": 94.62
1010
+ }
1011
+ ],
1012
+ "logging_steps": 10,
1013
+ "max_steps": 1922,
1014
+ "num_input_tokens_seen": 0,
1015
+ "num_train_epochs": 2,
1016
+ "save_steps": 1000,
1017
+ "total_flos": 1.119482194910249e+19,
1018
+ "train_batch_size": 8,
1019
+ "trial_name": null,
1020
+ "trial_params": null
1021
+ }
checkpoint-1000/training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:93e2964507a7ee2a283815dc99898c3c891ee7684ce7926ce108452bc498151d
3
+ size 5944
checkpoint-1000/zero_to_fp32.py ADDED
@@ -0,0 +1,592 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+
3
+ # Copyright (c) Microsoft Corporation.
4
+ # SPDX-License-Identifier: Apache-2.0
5
+
6
+ # DeepSpeed Team
7
+
8
+ # This script extracts fp32 consolidated weights from a zero 1, 2 and 3 DeepSpeed checkpoints. It gets
9
+ # copied into the top level checkpoint dir, so the user can easily do the conversion at any point in
10
+ # the future. Once extracted, the weights don't require DeepSpeed and can be used in any
11
+ # application.
12
+ #
13
+ # example: python zero_to_fp32.py . pytorch_model.bin
14
+
15
+ import argparse
16
+ import torch
17
+ import glob
18
+ import math
19
+ import os
20
+ import re
21
+ from collections import OrderedDict
22
+ from dataclasses import dataclass
23
+
24
+ # while this script doesn't use deepspeed to recover data, since the checkpoints are pickled with
25
+ # DeepSpeed data structures it has to be available in the current python environment.
26
+ from deepspeed.utils import logger
27
+ from deepspeed.checkpoint.constants import (DS_VERSION, OPTIMIZER_STATE_DICT, SINGLE_PARTITION_OF_FP32_GROUPS,
28
+ FP32_FLAT_GROUPS, ZERO_STAGE, PARTITION_COUNT, PARAM_SHAPES, BUFFER_NAMES,
29
+ FROZEN_PARAM_SHAPES, FROZEN_PARAM_FRAGMENTS)
30
+
31
+
32
+ @dataclass
33
+ class zero_model_state:
34
+ buffers: dict()
35
+ param_shapes: dict()
36
+ shared_params: list
37
+ ds_version: int
38
+ frozen_param_shapes: dict()
39
+ frozen_param_fragments: dict()
40
+
41
+
42
+ debug = 0
43
+
44
+ # load to cpu
45
+ device = torch.device('cpu')
46
+
47
+
48
+ def atoi(text):
49
+ return int(text) if text.isdigit() else text
50
+
51
+
52
+ def natural_keys(text):
53
+ '''
54
+ alist.sort(key=natural_keys) sorts in human order
55
+ http://nedbatchelder.com/blog/200712/human_sorting.html
56
+ (See Toothy's implementation in the comments)
57
+ '''
58
+ return [atoi(c) for c in re.split(r'(\d+)', text)]
59
+
60
+
61
+ def get_model_state_file(checkpoint_dir, zero_stage):
62
+ if not os.path.isdir(checkpoint_dir):
63
+ raise FileNotFoundError(f"Directory '{checkpoint_dir}' doesn't exist")
64
+
65
+ # there should be only one file
66
+ if zero_stage <= 2:
67
+ file = os.path.join(checkpoint_dir, "mp_rank_00_model_states.pt")
68
+ elif zero_stage == 3:
69
+ file = os.path.join(checkpoint_dir, "zero_pp_rank_0_mp_rank_00_model_states.pt")
70
+
71
+ if not os.path.exists(file):
72
+ raise FileNotFoundError(f"can't find model states file at '{file}'")
73
+
74
+ return file
75
+
76
+
77
+ def get_checkpoint_files(checkpoint_dir, glob_pattern):
78
+ # XXX: need to test that this simple glob rule works for multi-node setup too
79
+ ckpt_files = sorted(glob.glob(os.path.join(checkpoint_dir, glob_pattern)), key=natural_keys)
80
+
81
+ if len(ckpt_files) == 0:
82
+ raise FileNotFoundError(f"can't find {glob_pattern} files in directory '{checkpoint_dir}'")
83
+
84
+ return ckpt_files
85
+
86
+
87
+ def get_optim_files(checkpoint_dir):
88
+ return get_checkpoint_files(checkpoint_dir, "*_optim_states.pt")
89
+
90
+
91
+ def get_model_state_files(checkpoint_dir):
92
+ return get_checkpoint_files(checkpoint_dir, "*_model_states.pt")
93
+
94
+
95
+ def parse_model_states(files):
96
+ zero_model_states = []
97
+ for file in files:
98
+ state_dict = torch.load(file, map_location=device)
99
+
100
+ if BUFFER_NAMES not in state_dict:
101
+ raise ValueError(f"{file} is not a model state checkpoint")
102
+ buffer_names = state_dict[BUFFER_NAMES]
103
+ if debug:
104
+ print("Found buffers:", buffer_names)
105
+
106
+ # recover just the buffers while restoring them to fp32 if they were saved in fp16
107
+ buffers = {k: v.float() for k, v in state_dict["module"].items() if k in buffer_names}
108
+ param_shapes = state_dict[PARAM_SHAPES]
109
+
110
+ # collect parameters that are included in param_shapes
111
+ param_names = []
112
+ for s in param_shapes:
113
+ for name in s.keys():
114
+ param_names.append(name)
115
+
116
+ # update with frozen parameters
117
+ frozen_param_shapes = state_dict.get(FROZEN_PARAM_SHAPES, None)
118
+ if frozen_param_shapes is not None:
119
+ if debug:
120
+ print(f"Found frozen_param_shapes: {frozen_param_shapes}")
121
+ param_names += list(frozen_param_shapes.keys())
122
+
123
+ # handle shared params
124
+ shared_params = [[k, v] for k, v in state_dict["shared_params"].items()]
125
+
126
+ ds_version = state_dict.get(DS_VERSION, None)
127
+
128
+ frozen_param_fragments = state_dict.get(FROZEN_PARAM_FRAGMENTS, None)
129
+
130
+ z_model_state = zero_model_state(buffers=buffers,
131
+ param_shapes=param_shapes,
132
+ shared_params=shared_params,
133
+ ds_version=ds_version,
134
+ frozen_param_shapes=frozen_param_shapes,
135
+ frozen_param_fragments=frozen_param_fragments)
136
+ zero_model_states.append(z_model_state)
137
+
138
+ return zero_model_states
139
+
140
+
141
+ def parse_optim_states(files, ds_checkpoint_dir):
142
+
143
+ total_files = len(files)
144
+ state_dicts = []
145
+ for f in files:
146
+ state_dict = torch.load(f, map_location=device)
147
+ # immediately discard the potentially huge 2 optimizer states as we only care for fp32 master weights
148
+ # and also handle the case where it was already removed by another helper script
149
+ state_dict["optimizer_state_dict"].pop("optimizer_state_dict", None)
150
+ state_dicts.append(state_dict)
151
+
152
+ if not ZERO_STAGE in state_dicts[0][OPTIMIZER_STATE_DICT]:
153
+ raise ValueError(f"{files[0]} is not a zero checkpoint")
154
+ zero_stage = state_dicts[0][OPTIMIZER_STATE_DICT][ZERO_STAGE]
155
+ world_size = state_dicts[0][OPTIMIZER_STATE_DICT][PARTITION_COUNT]
156
+
157
+ # For ZeRO-2 each param group can have different partition_count as data parallelism for expert
158
+ # parameters can be different from data parallelism for non-expert parameters. So we can just
159
+ # use the max of the partition_count to get the dp world_size.
160
+
161
+ if type(world_size) is list:
162
+ world_size = max(world_size)
163
+
164
+ if world_size != total_files:
165
+ raise ValueError(
166
+ f"Expected {world_size} of '*_optim_states.pt' under '{ds_checkpoint_dir}' but found {total_files} files. "
167
+ "Possibly due to an overwrite of an old checkpoint, or a checkpoint didn't get saved by one or more processes."
168
+ )
169
+
170
+ # the groups are named differently in each stage
171
+ if zero_stage <= 2:
172
+ fp32_groups_key = SINGLE_PARTITION_OF_FP32_GROUPS
173
+ elif zero_stage == 3:
174
+ fp32_groups_key = FP32_FLAT_GROUPS
175
+ else:
176
+ raise ValueError(f"unknown zero stage {zero_stage}")
177
+
178
+ if zero_stage <= 2:
179
+ fp32_flat_groups = [state_dicts[i][OPTIMIZER_STATE_DICT][fp32_groups_key] for i in range(len(state_dicts))]
180
+ elif zero_stage == 3:
181
+ # if there is more than one param group, there will be multiple flattened tensors - one
182
+ # flattened tensor per group - for simplicity merge them into a single tensor
183
+ #
184
+ # XXX: could make the script more memory efficient for when there are multiple groups - it
185
+ # will require matching the sub-lists of param_shapes for each param group flattened tensor
186
+
187
+ fp32_flat_groups = [
188
+ torch.cat(state_dicts[i][OPTIMIZER_STATE_DICT][fp32_groups_key], 0) for i in range(len(state_dicts))
189
+ ]
190
+
191
+ return zero_stage, world_size, fp32_flat_groups
192
+
193
+
194
+ def _get_fp32_state_dict_from_zero_checkpoint(ds_checkpoint_dir):
195
+ """
196
+ Returns fp32 state_dict reconstructed from ds checkpoint
197
+
198
+ Args:
199
+ - ``ds_checkpoint_dir``: path to the deepspeed checkpoint folder (where the optimizer files are)
200
+
201
+ """
202
+ print(f"Processing zero checkpoint '{ds_checkpoint_dir}'")
203
+
204
+ optim_files = get_optim_files(ds_checkpoint_dir)
205
+ zero_stage, world_size, fp32_flat_groups = parse_optim_states(optim_files, ds_checkpoint_dir)
206
+ print(f"Detected checkpoint of type zero stage {zero_stage}, world_size: {world_size}")
207
+
208
+ model_files = get_model_state_files(ds_checkpoint_dir)
209
+
210
+ zero_model_states = parse_model_states(model_files)
211
+ print(f'Parsing checkpoint created by deepspeed=={zero_model_states[0].ds_version}')
212
+
213
+ if zero_stage <= 2:
214
+ return _get_fp32_state_dict_from_zero2_checkpoint(world_size, fp32_flat_groups, zero_model_states)
215
+ elif zero_stage == 3:
216
+ return _get_fp32_state_dict_from_zero3_checkpoint(world_size, fp32_flat_groups, zero_model_states)
217
+
218
+
219
+ def _zero2_merge_frozen_params(state_dict, zero_model_states):
220
+ if zero_model_states[0].frozen_param_shapes is None or len(zero_model_states[0].frozen_param_shapes) == 0:
221
+ return
222
+
223
+ frozen_param_shapes = zero_model_states[0].frozen_param_shapes
224
+ frozen_param_fragments = zero_model_states[0].frozen_param_fragments
225
+
226
+ if debug:
227
+ num_elem = sum(s.numel() for s in frozen_param_shapes.values())
228
+ print(f'rank 0: {FROZEN_PARAM_SHAPES}.numel = {num_elem}')
229
+
230
+ wanted_params = len(frozen_param_shapes)
231
+ wanted_numel = sum(s.numel() for s in frozen_param_shapes.values())
232
+ avail_numel = sum([p.numel() for p in frozen_param_fragments.values()])
233
+ print(f'Frozen params: Have {avail_numel} numels to process.')
234
+ print(f'Frozen params: Need {wanted_numel} numels in {wanted_params} params')
235
+
236
+ total_params = 0
237
+ total_numel = 0
238
+ for name, shape in frozen_param_shapes.items():
239
+ total_params += 1
240
+ unpartitioned_numel = shape.numel()
241
+ total_numel += unpartitioned_numel
242
+
243
+ state_dict[name] = frozen_param_fragments[name]
244
+
245
+ if debug:
246
+ print(f"{name} full shape: {shape} unpartitioned numel {unpartitioned_numel} ")
247
+
248
+ print(f"Reconstructed Frozen fp32 state dict with {total_params} params {total_numel} elements")
249
+
250
+
251
+ def _has_callable(obj, fn):
252
+ attr = getattr(obj, fn, None)
253
+ return callable(attr)
254
+
255
+
256
+ def _zero2_merge_trainable_params(state_dict, world_size, fp32_flat_groups, zero_model_states):
257
+ param_shapes = zero_model_states[0].param_shapes
258
+
259
+ # Reconstruction protocol:
260
+ #
261
+ # XXX: document this
262
+
263
+ if debug:
264
+ for i in range(world_size):
265
+ for j in range(len(fp32_flat_groups[0])):
266
+ print(f"{FP32_FLAT_GROUPS}[{i}][{j}].shape={fp32_flat_groups[i][j].shape}")
267
+
268
+ # XXX: memory usage doubles here (zero2)
269
+ num_param_groups = len(fp32_flat_groups[0])
270
+ merged_single_partition_of_fp32_groups = []
271
+ for i in range(num_param_groups):
272
+ merged_partitions = [sd[i] for sd in fp32_flat_groups]
273
+ full_single_fp32_vector = torch.cat(merged_partitions, 0)
274
+ merged_single_partition_of_fp32_groups.append(full_single_fp32_vector)
275
+ avail_numel = sum(
276
+ [full_single_fp32_vector.numel() for full_single_fp32_vector in merged_single_partition_of_fp32_groups])
277
+
278
+ if debug:
279
+ wanted_params = sum([len(shapes) for shapes in param_shapes])
280
+ wanted_numel = sum([sum(shape.numel() for shape in shapes.values()) for shapes in param_shapes])
281
+ # not asserting if there is a mismatch due to possible padding
282
+ print(f"Have {avail_numel} numels to process.")
283
+ print(f"Need {wanted_numel} numels in {wanted_params} params.")
284
+
285
+ # params
286
+ # XXX: for huge models that can't fit into the host's RAM we will have to recode this to support
287
+ # out-of-core computing solution
288
+ total_numel = 0
289
+ total_params = 0
290
+ for shapes, full_single_fp32_vector in zip(param_shapes, merged_single_partition_of_fp32_groups):
291
+ offset = 0
292
+ avail_numel = full_single_fp32_vector.numel()
293
+ for name, shape in shapes.items():
294
+
295
+ unpartitioned_numel = shape.numel() if _has_callable(shape, 'numel') else math.prod(shape)
296
+ total_numel += unpartitioned_numel
297
+ total_params += 1
298
+
299
+ if debug:
300
+ print(f"{name} full shape: {shape} unpartitioned numel {unpartitioned_numel} ")
301
+ state_dict[name] = full_single_fp32_vector.narrow(0, offset, unpartitioned_numel).view(shape)
302
+ offset += unpartitioned_numel
303
+
304
+ # Z2 started to align to 2*world_size to improve nccl performance. Therefore both offset and
305
+ # avail_numel can differ by anywhere between 0..2*world_size. Due to two unrelated complex
306
+ # paddings performed in the code it's almost impossible to predict the exact numbers w/o the
307
+ # live optimizer object, so we are checking that the numbers are within the right range
308
+ align_to = 2 * world_size
309
+
310
+ def zero2_align(x):
311
+ return align_to * math.ceil(x / align_to)
312
+
313
+ if debug:
314
+ print(f"original offset={offset}, avail_numel={avail_numel}")
315
+
316
+ offset = zero2_align(offset)
317
+ avail_numel = zero2_align(avail_numel)
318
+
319
+ if debug:
320
+ print(f"aligned offset={offset}, avail_numel={avail_numel}")
321
+
322
+ # Sanity check
323
+ if offset != avail_numel:
324
+ raise ValueError(f"consumed {offset} numels out of {avail_numel} - something is wrong")
325
+
326
+ print(f"Reconstructed fp32 state dict with {total_params} params {total_numel} elements")
327
+
328
+
329
+ def _get_fp32_state_dict_from_zero2_checkpoint(world_size, fp32_flat_groups, zero_model_states):
330
+ state_dict = OrderedDict()
331
+
332
+ # buffers
333
+ buffers = zero_model_states[0].buffers
334
+ state_dict.update(buffers)
335
+ if debug:
336
+ print(f"added {len(buffers)} buffers")
337
+
338
+ _zero2_merge_frozen_params(state_dict, zero_model_states)
339
+
340
+ _zero2_merge_trainable_params(state_dict, world_size, fp32_flat_groups, zero_model_states)
341
+
342
+ # recover shared parameters
343
+ for pair in zero_model_states[0].shared_params:
344
+ if pair[1] in state_dict:
345
+ state_dict[pair[0]] = state_dict[pair[1]]
346
+
347
+ return state_dict
348
+
349
+
350
+ def zero3_partitioned_param_info(unpartitioned_numel, world_size):
351
+ remainder = unpartitioned_numel % world_size
352
+ padding_numel = (world_size - remainder) if remainder else 0
353
+ partitioned_numel = math.ceil(unpartitioned_numel / world_size)
354
+ return partitioned_numel, padding_numel
355
+
356
+
357
+ def _zero3_merge_frozen_params(state_dict, world_size, zero_model_states):
358
+ if zero_model_states[0].frozen_param_shapes is None or len(zero_model_states[0].frozen_param_shapes) == 0:
359
+ return
360
+
361
+ if debug:
362
+ for i in range(world_size):
363
+ num_elem = sum(s.numel() for s in zero_model_states[i].frozen_param_fragments.values())
364
+ print(f'rank {i}: {FROZEN_PARAM_SHAPES}.numel = {num_elem}')
365
+
366
+ frozen_param_shapes = zero_model_states[0].frozen_param_shapes
367
+ wanted_params = len(frozen_param_shapes)
368
+ wanted_numel = sum(s.numel() for s in frozen_param_shapes.values())
369
+ avail_numel = sum([p.numel() for p in zero_model_states[0].frozen_param_fragments.values()]) * world_size
370
+ print(f'Frozen params: Have {avail_numel} numels to process.')
371
+ print(f'Frozen params: Need {wanted_numel} numels in {wanted_params} params')
372
+
373
+ total_params = 0
374
+ total_numel = 0
375
+ for name, shape in zero_model_states[0].frozen_param_shapes.items():
376
+ total_params += 1
377
+ unpartitioned_numel = shape.numel()
378
+ total_numel += unpartitioned_numel
379
+
380
+ param_frags = tuple(model_state.frozen_param_fragments[name] for model_state in zero_model_states)
381
+ state_dict[name] = torch.cat(param_frags, 0).narrow(0, 0, unpartitioned_numel).view(shape)
382
+
383
+ partitioned_numel, partitioned_padding_numel = zero3_partitioned_param_info(unpartitioned_numel, world_size)
384
+
385
+ if debug:
386
+ print(
387
+ f"Frozen params: {total_params} {name} full shape: {shape} partition0 numel={partitioned_numel} partitioned_padding_numel={partitioned_padding_numel}"
388
+ )
389
+
390
+ print(f"Reconstructed Frozen fp32 state dict with {total_params} params {total_numel} elements")
391
+
392
+
393
+ def _zero3_merge_trainable_params(state_dict, world_size, fp32_flat_groups, zero_model_states):
394
+ param_shapes = zero_model_states[0].param_shapes
395
+ avail_numel = fp32_flat_groups[0].numel() * world_size
396
+ # Reconstruction protocol: For zero3 we need to zip the partitions together at boundary of each
397
+ # param, re-consolidating each param, while dealing with padding if any
398
+
399
+ # merge list of dicts, preserving order
400
+ param_shapes = {k: v for d in param_shapes for k, v in d.items()}
401
+
402
+ if debug:
403
+ for i in range(world_size):
404
+ print(f"{FP32_FLAT_GROUPS}[{i}].shape={fp32_flat_groups[i].shape}")
405
+
406
+ wanted_params = len(param_shapes)
407
+ wanted_numel = sum(shape.numel() for shape in param_shapes.values())
408
+ # not asserting if there is a mismatch due to possible padding
409
+ avail_numel = fp32_flat_groups[0].numel() * world_size
410
+ print(f"Trainable params: Have {avail_numel} numels to process.")
411
+ print(f"Trainable params: Need {wanted_numel} numels in {wanted_params} params.")
412
+
413
+ # params
414
+ # XXX: for huge models that can't fit into the host's RAM we will have to recode this to support
415
+ # out-of-core computing solution
416
+ offset = 0
417
+ total_numel = 0
418
+ total_params = 0
419
+ for name, shape in param_shapes.items():
420
+
421
+ unpartitioned_numel = shape.numel()
422
+ total_numel += unpartitioned_numel
423
+ total_params += 1
424
+
425
+ partitioned_numel, partitioned_padding_numel = zero3_partitioned_param_info(unpartitioned_numel, world_size)
426
+
427
+ if debug:
428
+ print(
429
+ f"Trainable params: {total_params} {name} full shape: {shape} partition0 numel={partitioned_numel} partitioned_padding_numel={partitioned_padding_numel}"
430
+ )
431
+
432
+ # XXX: memory usage doubles here
433
+ state_dict[name] = torch.cat(
434
+ tuple(fp32_flat_groups[i].narrow(0, offset, partitioned_numel) for i in range(world_size)),
435
+ 0).narrow(0, 0, unpartitioned_numel).view(shape)
436
+ offset += partitioned_numel
437
+
438
+ offset *= world_size
439
+
440
+ # Sanity check
441
+ if offset != avail_numel:
442
+ raise ValueError(f"consumed {offset} numels out of {avail_numel} - something is wrong")
443
+
444
+ print(f"Reconstructed Trainable fp32 state dict with {total_params} params {total_numel} elements")
445
+
446
+
447
+ def _get_fp32_state_dict_from_zero3_checkpoint(world_size, fp32_flat_groups, zero_model_states):
448
+ state_dict = OrderedDict()
449
+
450
+ # buffers
451
+ buffers = zero_model_states[0].buffers
452
+ state_dict.update(buffers)
453
+ if debug:
454
+ print(f"added {len(buffers)} buffers")
455
+
456
+ _zero3_merge_frozen_params(state_dict, world_size, zero_model_states)
457
+
458
+ _zero3_merge_trainable_params(state_dict, world_size, fp32_flat_groups, zero_model_states)
459
+
460
+ # recover shared parameters
461
+ for pair in zero_model_states[0].shared_params:
462
+ if pair[1] in state_dict:
463
+ state_dict[pair[0]] = state_dict[pair[1]]
464
+
465
+ return state_dict
466
+
467
+
468
+ def get_fp32_state_dict_from_zero_checkpoint(checkpoint_dir, tag=None):
469
+ """
470
+ Convert ZeRO 2 or 3 checkpoint into a single fp32 consolidated state_dict that can be loaded with
471
+ ``load_state_dict()`` and used for training without DeepSpeed or shared with others, for example
472
+ via a model hub.
473
+
474
+ Args:
475
+ - ``checkpoint_dir``: path to the desired checkpoint folder
476
+ - ``tag``: checkpoint tag used as a unique identifier for checkpoint. If not provided will attempt to load tag in 'latest' file. e.g., ``global_step14``
477
+
478
+ Returns:
479
+ - pytorch ``state_dict``
480
+
481
+ Note: this approach may not work if your application doesn't have sufficient free CPU memory and
482
+ you may need to use the offline approach using the ``zero_to_fp32.py`` script that is saved with
483
+ the checkpoint.
484
+
485
+ A typical usage might be ::
486
+
487
+ from deepspeed.utils.zero_to_fp32 import get_fp32_state_dict_from_zero_checkpoint
488
+ # do the training and checkpoint saving
489
+ state_dict = get_fp32_state_dict_from_zero_checkpoint(checkpoint_dir) # already on cpu
490
+ model = model.cpu() # move to cpu
491
+ model.load_state_dict(state_dict)
492
+ # submit to model hub or save the model to share with others
493
+
494
+ In this example the ``model`` will no longer be usable in the deepspeed context of the same
495
+ application. i.e. you will need to re-initialize the deepspeed engine, since
496
+ ``model.load_state_dict(state_dict)`` will remove all the deepspeed magic from it.
497
+
498
+ If you want it all done for you, use ``load_state_dict_from_zero_checkpoint`` instead.
499
+
500
+ """
501
+ if tag is None:
502
+ latest_path = os.path.join(checkpoint_dir, 'latest')
503
+ if os.path.isfile(latest_path):
504
+ with open(latest_path, 'r') as fd:
505
+ tag = fd.read().strip()
506
+ else:
507
+ raise ValueError(f"Unable to find 'latest' file at {latest_path}")
508
+
509
+ ds_checkpoint_dir = os.path.join(checkpoint_dir, tag)
510
+
511
+ if not os.path.isdir(ds_checkpoint_dir):
512
+ raise FileNotFoundError(f"Directory '{ds_checkpoint_dir}' doesn't exist")
513
+
514
+ return _get_fp32_state_dict_from_zero_checkpoint(ds_checkpoint_dir)
515
+
516
+
517
+ def convert_zero_checkpoint_to_fp32_state_dict(checkpoint_dir, output_file, tag=None):
518
+ """
519
+ Convert ZeRO 2 or 3 checkpoint into a single fp32 consolidated ``state_dict`` file that can be
520
+ loaded with ``torch.load(file)`` + ``load_state_dict()`` and used for training without DeepSpeed.
521
+
522
+ Args:
523
+ - ``checkpoint_dir``: path to the desired checkpoint folder. (one that contains the tag-folder, like ``global_step14``)
524
+ - ``output_file``: path to the pytorch fp32 state_dict output file (e.g. path/pytorch_model.bin)
525
+ - ``tag``: checkpoint tag used as a unique identifier for checkpoint. If not provided will attempt to load tag in the file named ``latest`` in the checkpoint folder, e.g., ``global_step14``
526
+ """
527
+
528
+ state_dict = get_fp32_state_dict_from_zero_checkpoint(checkpoint_dir, tag)
529
+ print(f"Saving fp32 state dict to {output_file}")
530
+ torch.save(state_dict, output_file)
531
+
532
+
533
+ def load_state_dict_from_zero_checkpoint(model, checkpoint_dir, tag=None):
534
+ """
535
+ 1. Put the provided model to cpu
536
+ 2. Convert ZeRO 2 or 3 checkpoint into a single fp32 consolidated ``state_dict``
537
+ 3. Load it into the provided model
538
+
539
+ Args:
540
+ - ``model``: the model object to update
541
+ - ``checkpoint_dir``: path to the desired checkpoint folder. (one that contains the tag-folder, like ``global_step14``)
542
+ - ``tag``: checkpoint tag used as a unique identifier for checkpoint. If not provided will attempt to load tag in the file named ``latest`` in the checkpoint folder, e.g., ``global_step14``
543
+
544
+ Returns:
545
+ - ``model`: modified model
546
+
547
+ Make sure you have plenty of CPU memory available before you call this function. If you don't
548
+ have enough use the ``zero_to_fp32.py`` utility to do the conversion. You will find it
549
+ conveniently placed for you in the checkpoint folder.
550
+
551
+ A typical usage might be ::
552
+
553
+ from deepspeed.utils.zero_to_fp32 import load_state_dict_from_zero_checkpoint
554
+ model = load_state_dict_from_zero_checkpoint(trainer.model, checkpoint_dir)
555
+ # submit to model hub or save the model to share with others
556
+
557
+ Note, that once this was run, the ``model`` will no longer be usable in the deepspeed context
558
+ of the same application. i.e. you will need to re-initialize the deepspeed engine, since
559
+ ``model.load_state_dict(state_dict)`` will remove all the deepspeed magic from it.
560
+
561
+ """
562
+ logger.info(f"Extracting fp32 weights")
563
+ state_dict = get_fp32_state_dict_from_zero_checkpoint(checkpoint_dir, tag)
564
+
565
+ logger.info(f"Overwriting model with fp32 weights")
566
+ model = model.cpu()
567
+ model.load_state_dict(state_dict, strict=False)
568
+
569
+ return model
570
+
571
+
572
+ if __name__ == "__main__":
573
+
574
+ parser = argparse.ArgumentParser()
575
+ parser.add_argument("checkpoint_dir",
576
+ type=str,
577
+ help="path to the desired checkpoint folder, e.g., path/checkpoint-12")
578
+ parser.add_argument(
579
+ "output_file",
580
+ type=str,
581
+ help="path to the pytorch fp32 state_dict output file (e.g. path/checkpoint-12/pytorch_model.bin)")
582
+ parser.add_argument("-t",
583
+ "--tag",
584
+ type=str,
585
+ default=None,
586
+ help="checkpoint tag used as a unique identifier for checkpoint. e.g., global_step1")
587
+ parser.add_argument("-d", "--debug", action='store_true', help="enable debug")
588
+ args = parser.parse_args()
589
+
590
+ debug = args.debug
591
+
592
+ convert_zero_checkpoint_to_fp32_state_dict(args.checkpoint_dir, args.output_file, tag=args.tag)
eval_results.json ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "epoch": 2.0,
3
+ "eval_accuracy": 0.4599820966423157,
4
+ "eval_loss": 1.1161718368530273,
5
+ "eval_runtime": 166.5715,
6
+ "eval_samples": 25899,
7
+ "eval_samples_per_second": 160.844,
8
+ "eval_steps_per_second": 2.515,
9
+ "max_memory_allocated (GB)": 91.87,
10
+ "memory_allocated (GB)": 24.39,
11
+ "perplexity": 3.0531438702149534,
12
+ "total_memory_available (GB)": 94.62
13
+ }
gaudi_config.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "autocast_bf16_ops": null,
3
+ "autocast_fp32_ops": null,
4
+ "optimum_version": "1.20.0",
5
+ "transformers_version": "4.38.2",
6
+ "use_dynamic_shapes": false,
7
+ "use_fused_adam": true,
8
+ "use_fused_clip_norm": true,
9
+ "use_torch_autocast": false
10
+ }
runs/Jun05_07-58-02_9d340316bc35/events.out.tfevents.1717575602.9d340316bc35.8309.0 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6ae36d7bcc6640b59f3d4f68d7c9d3fd9e8aeca0d698e1c1395fcf20116990ba
3
+ size 86156
runs/Jun05_07-58-02_9d340316bc35/events.out.tfevents.1717581859.9d340316bc35.8309.1 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1a04411d16d99535d15091abd35936d8b2137ef416514bccd267ef8fcba0f6e9
3
+ size 571
special_tokens_map.json ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token": "<s>",
3
+ "eos_token": "</s>",
4
+ "pad_token": "</s>",
5
+ "unk_token": {
6
+ "content": "<unk>",
7
+ "lstrip": false,
8
+ "normalized": false,
9
+ "rstrip": false,
10
+ "single_word": false
11
+ }
12
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer.model ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dadfd56d766715c61d2ef780a525ab43b8e6da4de6865bda3d95fdef5e134055
3
+ size 493443
tokenizer_config.json ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_bos_token": true,
3
+ "add_eos_token": false,
4
+ "added_tokens_decoder": {
5
+ "0": {
6
+ "content": "<unk>",
7
+ "lstrip": false,
8
+ "normalized": false,
9
+ "rstrip": false,
10
+ "single_word": false,
11
+ "special": true
12
+ },
13
+ "1": {
14
+ "content": "<s>",
15
+ "lstrip": false,
16
+ "normalized": false,
17
+ "rstrip": false,
18
+ "single_word": false,
19
+ "special": true
20
+ },
21
+ "2": {
22
+ "content": "</s>",
23
+ "lstrip": false,
24
+ "normalized": false,
25
+ "rstrip": false,
26
+ "single_word": false,
27
+ "special": true
28
+ }
29
+ },
30
+ "additional_special_tokens": [],
31
+ "bos_token": "<s>",
32
+ "clean_up_tokenization_spaces": false,
33
+ "eos_token": "</s>",
34
+ "legacy": true,
35
+ "model_max_length": 1000000000000000019884624838656,
36
+ "pad_token": "</s>",
37
+ "sp_model_kwargs": {},
38
+ "spaces_between_special_tokens": false,
39
+ "tokenizer_class": "LlamaTokenizer",
40
+ "unk_token": "<unk>",
41
+ "use_default_system_prompt": false
42
+ }
train_results.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "epoch": 2.0,
3
+ "max_memory_allocated (GB)": 91.87,
4
+ "memory_allocated (GB)": 24.39,
5
+ "total_memory_available (GB)": 94.62,
6
+ "train_loss": 1.0469276263736165,
7
+ "train_runtime": 6085.8982,
8
+ "train_samples_per_second": 162.542,
9
+ "train_steps_per_second": 0.317
10
+ }
training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:93e2964507a7ee2a283815dc99898c3c891ee7684ce7926ce108452bc498151d
3
+ size 5944