nvasko commited on
Commit
cb1259d
·
verified ·
1 Parent(s): 71a9edc

First Push

Browse files
README.md ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ library_name: ml-agents
3
+ tags:
4
+ - SnowballTarget
5
+ - deep-reinforcement-learning
6
+ - reinforcement-learning
7
+ - ML-Agents-SnowballTarget
8
+ ---
9
+
10
+ # **ppo** Agent playing **SnowballTarget**
11
+ This is a trained model of a **ppo** agent playing **SnowballTarget**
12
+ using the [Unity ML-Agents Library](https://github.com/Unity-Technologies/ml-agents).
13
+
14
+ ## Usage (with ML-Agents)
15
+ The Documentation: https://unity-technologies.github.io/ml-agents/ML-Agents-Toolkit-Documentation/
16
+
17
+ We wrote a complete tutorial to learn to train your first agent using ML-Agents and publish it to the Hub:
18
+ - A *short tutorial* where you teach Huggy the Dog 🐶 to fetch the stick and then play with him directly in your
19
+ browser: https://huggingface.co/learn/deep-rl-course/unitbonus1/introduction
20
+ - A *longer tutorial* to understand how works ML-Agents:
21
+ https://huggingface.co/learn/deep-rl-course/unit5/introduction
22
+
23
+ ### Resume the training
24
+ ```bash
25
+ mlagents-learn <your_configuration_file_path.yaml> --run-id=<run_id> --resume
26
+ ```
27
+
28
+ ### Watch your Agent play
29
+ You can watch your agent **playing directly in your browser**
30
+
31
+ 1. If the environment is part of ML-Agents official environments, go to https://huggingface.co/unity
32
+ 2. Step 1: Find your model_id: nvasko/ppo-SnowballTarget
33
+ 3. Step 2: Select your *.nn /*.onnx file
34
+ 4. Click on Watch the agent play 👀
35
+
SnowballTarget.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:024b61efdf43be9ebbac8f0ad16d62d8506d6d41acbd4bf8579e68aa70216af7
3
+ size 650646
SnowballTarget/SnowballTarget-149984.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:06eb61fe238e9f49a5b8ad18bbb5e2b8c6c9b874e3375a79a8c58c10256c7e91
3
+ size 650646
SnowballTarget/SnowballTarget-149984.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:34a765d09046d14e7bb3eaae75bc0169dfd2d79df78f6f8e96bb5cbe8f369865
3
+ size 3850075
SnowballTarget/SnowballTarget-199984.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:024b61efdf43be9ebbac8f0ad16d62d8506d6d41acbd4bf8579e68aa70216af7
3
+ size 650646
SnowballTarget/SnowballTarget-199984.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9dd44c856919ff048859eab03077d452e5bd1622d7254ae637b4dc05acea8acf
3
+ size 3850075
SnowballTarget/SnowballTarget-200112.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:024b61efdf43be9ebbac8f0ad16d62d8506d6d41acbd4bf8579e68aa70216af7
3
+ size 650646
SnowballTarget/SnowballTarget-200112.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:824b42deb58392d26d0a017a0fbe1b034381f33053331e1fdfd6630366ccb562
3
+ size 3850075
SnowballTarget/SnowballTarget-49936.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0381a29afe6603fe22687af69a795d1ec7e46d02ede884ef59bf8d1ddeb00826
3
+ size 650646
SnowballTarget/SnowballTarget-49936.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aa927eee255e48177e6a850aa88d3adaf706293b367eb812ac4ce81192596155
3
+ size 3850000
SnowballTarget/SnowballTarget-99960.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ecc09bc95edeb6508c8b1ca857ed8a5c0760f49d37d28a112a5e058e9de7d9d8
3
+ size 650646
SnowballTarget/SnowballTarget-99960.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:122c5123ac4cda6955557f24bdada70766c872dd8bdf257b8ee1888d4c88fffe
3
+ size 3850000
SnowballTarget/checkpoint.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b5236577bd1ba52b65fc35c7a8aa599c38af0e1e345de28981dfb21853a1a5a4
3
+ size 3849250
SnowballTarget/events.out.tfevents.1713973544.nick-gpu.7246.0 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:66348e5e202fc5362cd4e3cd290f6c3111ea2d93f406fc3d8d4322108ce34256
3
+ size 23638
config.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"default_settings": null, "behaviors": {"SnowballTarget": {"trainer_type": "ppo", "hyperparameters": {"batch_size": 128, "buffer_size": 2048, "learning_rate": 0.0003, "beta": 0.005, "epsilon": 0.2, "lambd": 0.95, "num_epoch": 3, "shared_critic": false, "learning_rate_schedule": "linear", "beta_schedule": "linear", "epsilon_schedule": "linear"}, "checkpoint_interval": 50000, "network_settings": {"normalize": false, "hidden_units": 256, "num_layers": 2, "vis_encode_type": "simple", "memory": null, "goal_conditioning_type": "hyper", "deterministic": false}, "reward_signals": {"extrinsic": {"gamma": 0.99, "strength": 1.0, "network_settings": {"normalize": false, "hidden_units": 128, "num_layers": 2, "vis_encode_type": "simple", "memory": null, "goal_conditioning_type": "hyper", "deterministic": false}}}, "init_path": null, "keep_checkpoints": 10, "even_checkpoints": false, "max_steps": 200000, "time_horizon": 64, "summary_freq": 10000, "threaded": true, "self_play": null, "behavioral_cloning": null}}, "env_settings": {"env_path": "./training-envs-executables/linux/SnowballTarget/SnowballTarget", "env_args": null, "base_port": 5005, "num_envs": 1, "num_areas": 1, "timeout_wait": 60, "seed": -1, "max_lifetime_restarts": 10, "restarts_rate_limit_n": 1, "restarts_rate_limit_period_s": 60}, "engine_settings": {"width": 84, "height": 84, "quality_level": 5, "time_scale": 20, "target_frame_rate": -1, "capture_frame_rate": 60, "no_graphics": true, "no_graphics_monitor": false}, "environment_parameters": null, "checkpoint_settings": {"run_id": "SnowballTarget1", "initialize_from": null, "load_model": false, "resume": false, "force": true, "train_model": false, "inference": false, "results_dir": "results"}, "torch_settings": {"device": null}, "debug": false}
configuration.yaml ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ default_settings: null
2
+ behaviors:
3
+ SnowballTarget:
4
+ trainer_type: ppo
5
+ hyperparameters:
6
+ batch_size: 128
7
+ buffer_size: 2048
8
+ learning_rate: 0.0003
9
+ beta: 0.005
10
+ epsilon: 0.2
11
+ lambd: 0.95
12
+ num_epoch: 3
13
+ shared_critic: false
14
+ learning_rate_schedule: linear
15
+ beta_schedule: linear
16
+ epsilon_schedule: linear
17
+ checkpoint_interval: 50000
18
+ network_settings:
19
+ normalize: false
20
+ hidden_units: 256
21
+ num_layers: 2
22
+ vis_encode_type: simple
23
+ memory: null
24
+ goal_conditioning_type: hyper
25
+ deterministic: false
26
+ reward_signals:
27
+ extrinsic:
28
+ gamma: 0.99
29
+ strength: 1.0
30
+ network_settings:
31
+ normalize: false
32
+ hidden_units: 128
33
+ num_layers: 2
34
+ vis_encode_type: simple
35
+ memory: null
36
+ goal_conditioning_type: hyper
37
+ deterministic: false
38
+ init_path: null
39
+ keep_checkpoints: 10
40
+ even_checkpoints: false
41
+ max_steps: 200000
42
+ time_horizon: 64
43
+ summary_freq: 10000
44
+ threaded: true
45
+ self_play: null
46
+ behavioral_cloning: null
47
+ env_settings:
48
+ env_path: ./training-envs-executables/linux/SnowballTarget/SnowballTarget
49
+ env_args: null
50
+ base_port: 5005
51
+ num_envs: 1
52
+ num_areas: 1
53
+ timeout_wait: 60
54
+ seed: -1
55
+ max_lifetime_restarts: 10
56
+ restarts_rate_limit_n: 1
57
+ restarts_rate_limit_period_s: 60
58
+ engine_settings:
59
+ width: 84
60
+ height: 84
61
+ quality_level: 5
62
+ time_scale: 20
63
+ target_frame_rate: -1
64
+ capture_frame_rate: 60
65
+ no_graphics: true
66
+ no_graphics_monitor: false
67
+ environment_parameters: null
68
+ checkpoint_settings:
69
+ run_id: SnowballTarget1
70
+ initialize_from: null
71
+ load_model: false
72
+ resume: false
73
+ force: true
74
+ train_model: false
75
+ inference: false
76
+ results_dir: results
77
+ torch_settings:
78
+ device: null
79
+ debug: false
run_logs/Player-0.log ADDED
@@ -0,0 +1,352 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Mono path[0] = '/home/nick/projects/gym/ml-agents/training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/Managed'
2
+ Mono config path = '/home/nick/projects/gym/ml-agents/training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/MonoBleedingEdge/etc'
3
+ Preloaded 'lib_burst_generated.so'
4
+ Preloaded 'libgrpc_csharp_ext.x64.so'
5
+ PlayerPrefs - Creating folder: /home/nick/.config/unity3d/Hugging Face
6
+ PlayerPrefs - Creating folder: /home/nick/.config/unity3d/Hugging Face/SnowballTarget
7
+ Unable to load player prefs
8
+ Initialize engine version: 2021.3.14f1 (eee1884e7226)
9
+ [Subsystems] Discovering subsystems at path /home/nick/projects/gym/ml-agents/training-envs-executables/linux/SnowballTarget/SnowballTarget_Data/UnitySubsystems
10
+ Forcing GfxDevice: Null
11
+ GfxDevice: creating device client; threaded=0; jobified=0
12
+ NullGfxDevice:
13
+ Version: NULL 1.0 [1.0]
14
+ Renderer: Null Device
15
+ Vendor: Unity Technologies
16
+ Begin MonoManager ReloadAssembly
17
+ - Completed reload, in 0.039 seconds
18
+ ERROR: Shader Sprites/Default shader is not supported on this GPU (none of subshaders/fallbacks are suitable)
19
+ ERROR: Shader Sprites/Mask shader is not supported on this GPU (none of subshaders/fallbacks are suitable)
20
+ ERROR: Shader Legacy Shaders/VertexLit shader is not supported on this GPU (none of subshaders/fallbacks are suitable)
21
+ WARNING: Shader Unsupported: 'Standard' - All subshaders removed
22
+ WARNING: Shader Did you use #pragma only_renderers and omit this platform?
23
+ WARNING: Shader If subshaders removal was intentional, you may have forgotten turning Fallback off?
24
+ ERROR: Shader Standard shader is not supported on this GPU (none of subshaders/fallbacks are suitable)
25
+ WARNING: Shader Unsupported: 'Standard' - All subshaders removed
26
+ WARNING: Shader Did you use #pragma only_renderers and omit this platform?
27
+ WARNING: Shader If subshaders removal was intentional, you may have forgotten turning Fallback off?
28
+ UnloadTime: 0.325470 ms
29
+ ERROR: Shader UI/Default shader is not supported on this GPU (none of subshaders/fallbacks are suitable)
30
+ requesting resize 84 x 84
31
+ Setting up 12 worker threads for Enlighten.
32
+ Memory Statistics:
33
+ [ALLOC_TEMP_TLS] TLS Allocator
34
+ StackAllocators :
35
+ [ALLOC_TEMP_MAIN]
36
+ Peak usage frame count: [8.0 KB-16.0 KB]: 5369 frames, [16.0 KB-32.0 KB]: 91 frames, [2.0 MB-4.0 MB]: 1 frames
37
+ Initial Block Size 4.0 MB
38
+ Current Block Size 4.0 MB
39
+ Peak Allocated Bytes 2.0 MB
40
+ Overflow Count 0
41
+ [ALLOC_TEMP_Job.Worker 18]
42
+ Initial Block Size 256.0 KB
43
+ Current Block Size 256.0 KB
44
+ Peak Allocated Bytes 3.6 KB
45
+ Overflow Count 0
46
+ [ALLOC_TEMP_Loading.PreloadManager]
47
+ Initial Block Size 256.0 KB
48
+ Current Block Size 304.0 KB
49
+ Peak Allocated Bytes 228.9 KB
50
+ Overflow Count 4
51
+ [ALLOC_TEMP_Background Job.Worker 8]
52
+ Initial Block Size 32.0 KB
53
+ Current Block Size 32.0 KB
54
+ Peak Allocated Bytes 0 B
55
+ Overflow Count 0
56
+ [ALLOC_TEMP_Background Job.Worker 10]
57
+ Initial Block Size 32.0 KB
58
+ Current Block Size 32.0 KB
59
+ Peak Allocated Bytes 0 B
60
+ Overflow Count 0
61
+ [ALLOC_TEMP_Job.Worker 16]
62
+ Initial Block Size 256.0 KB
63
+ Current Block Size 256.0 KB
64
+ Peak Allocated Bytes 3.6 KB
65
+ Overflow Count 0
66
+ [ALLOC_TEMP_Background Job.Worker 6]
67
+ Initial Block Size 32.0 KB
68
+ Current Block Size 32.0 KB
69
+ Peak Allocated Bytes 0 B
70
+ Overflow Count 0
71
+ [ALLOC_TEMP_Job.Worker 4]
72
+ Initial Block Size 256.0 KB
73
+ Current Block Size 256.0 KB
74
+ Peak Allocated Bytes 3.6 KB
75
+ Overflow Count 0
76
+ [ALLOC_TEMP_Job.Worker 17]
77
+ Initial Block Size 256.0 KB
78
+ Current Block Size 256.0 KB
79
+ Peak Allocated Bytes 3.6 KB
80
+ Overflow Count 0
81
+ [ALLOC_TEMP_Job.Worker 14]
82
+ Initial Block Size 256.0 KB
83
+ Current Block Size 256.0 KB
84
+ Peak Allocated Bytes 3.6 KB
85
+ Overflow Count 0
86
+ [ALLOC_TEMP_Job.Worker 3]
87
+ Initial Block Size 256.0 KB
88
+ Current Block Size 256.0 KB
89
+ Peak Allocated Bytes 3.6 KB
90
+ Overflow Count 0
91
+ [ALLOC_TEMP_Background Job.Worker 12]
92
+ Initial Block Size 32.0 KB
93
+ Current Block Size 32.0 KB
94
+ Peak Allocated Bytes 0 B
95
+ Overflow Count 0
96
+ [ALLOC_TEMP_Background Job.Worker 1]
97
+ Initial Block Size 32.0 KB
98
+ Current Block Size 32.0 KB
99
+ Peak Allocated Bytes 0 B
100
+ Overflow Count 0
101
+ [ALLOC_TEMP_AssetGarbageCollectorHelper] x 23
102
+ Initial Block Size 64.0 KB
103
+ Current Block Size 64.0 KB
104
+ Peak Allocated Bytes 0 B
105
+ Overflow Count 0
106
+ [ALLOC_TEMP_Background Job.Worker 5]
107
+ Initial Block Size 32.0 KB
108
+ Current Block Size 32.0 KB
109
+ Peak Allocated Bytes 0 B
110
+ Overflow Count 0
111
+ [ALLOC_TEMP_Background Job.Worker 13]
112
+ Initial Block Size 32.0 KB
113
+ Current Block Size 32.0 KB
114
+ Peak Allocated Bytes 0 B
115
+ Overflow Count 0
116
+ [ALLOC_TEMP_Background Job.Worker 11]
117
+ Initial Block Size 32.0 KB
118
+ Current Block Size 32.0 KB
119
+ Peak Allocated Bytes 0 B
120
+ Overflow Count 0
121
+ [ALLOC_TEMP_Job.Worker 2]
122
+ Initial Block Size 256.0 KB
123
+ Current Block Size 256.0 KB
124
+ Peak Allocated Bytes 3.6 KB
125
+ Overflow Count 0
126
+ [ALLOC_TEMP_Background Job.Worker 3]
127
+ Initial Block Size 32.0 KB
128
+ Current Block Size 32.0 KB
129
+ Peak Allocated Bytes 0 B
130
+ Overflow Count 0
131
+ [ALLOC_TEMP_Background Job.Worker 0]
132
+ Initial Block Size 32.0 KB
133
+ Current Block Size 32.0 KB
134
+ Peak Allocated Bytes 0 B
135
+ Overflow Count 0
136
+ [ALLOC_TEMP_Job.Worker 20]
137
+ Initial Block Size 256.0 KB
138
+ Current Block Size 256.0 KB
139
+ Peak Allocated Bytes 3.6 KB
140
+ Overflow Count 0
141
+ [ALLOC_TEMP_Job.Worker 11]
142
+ Initial Block Size 256.0 KB
143
+ Current Block Size 256.0 KB
144
+ Peak Allocated Bytes 3.6 KB
145
+ Overflow Count 0
146
+ [ALLOC_TEMP_Background Job.Worker 4]
147
+ Initial Block Size 32.0 KB
148
+ Current Block Size 32.0 KB
149
+ Peak Allocated Bytes 0 B
150
+ Overflow Count 0
151
+ [ALLOC_TEMP_BatchDeleteObjects]
152
+ Initial Block Size 64.0 KB
153
+ Current Block Size 64.0 KB
154
+ Peak Allocated Bytes 0 B
155
+ Overflow Count 0
156
+ [ALLOC_TEMP_Job.Worker 6]
157
+ Initial Block Size 256.0 KB
158
+ Current Block Size 256.0 KB
159
+ Peak Allocated Bytes 3.6 KB
160
+ Overflow Count 0
161
+ [ALLOC_TEMP_Job.Worker 0]
162
+ Initial Block Size 256.0 KB
163
+ Current Block Size 256.0 KB
164
+ Peak Allocated Bytes 3.6 KB
165
+ Overflow Count 0
166
+ [ALLOC_TEMP_Job.Worker 21]
167
+ Initial Block Size 256.0 KB
168
+ Current Block Size 256.0 KB
169
+ Peak Allocated Bytes 3.6 KB
170
+ Overflow Count 0
171
+ [ALLOC_TEMP_Job.Worker 5]
172
+ Initial Block Size 256.0 KB
173
+ Current Block Size 256.0 KB
174
+ Peak Allocated Bytes 3.6 KB
175
+ Overflow Count 0
176
+ [ALLOC_TEMP_Background Job.Worker 9]
177
+ Initial Block Size 32.0 KB
178
+ Current Block Size 32.0 KB
179
+ Peak Allocated Bytes 0 B
180
+ Overflow Count 0
181
+ [ALLOC_TEMP_Background Job.Worker 14]
182
+ Initial Block Size 32.0 KB
183
+ Current Block Size 32.0 KB
184
+ Peak Allocated Bytes 0 B
185
+ Overflow Count 0
186
+ [ALLOC_TEMP_Job.Worker 13]
187
+ Initial Block Size 256.0 KB
188
+ Current Block Size 256.0 KB
189
+ Peak Allocated Bytes 3.6 KB
190
+ Overflow Count 0
191
+ [ALLOC_TEMP_EnlightenWorker] x 12
192
+ Initial Block Size 64.0 KB
193
+ Current Block Size 64.0 KB
194
+ Peak Allocated Bytes 0 B
195
+ Overflow Count 0
196
+ [ALLOC_TEMP_Background Job.Worker 15]
197
+ Initial Block Size 32.0 KB
198
+ Current Block Size 32.0 KB
199
+ Peak Allocated Bytes 0 B
200
+ Overflow Count 0
201
+ [ALLOC_TEMP_Background Job.Worker 2]
202
+ Initial Block Size 32.0 KB
203
+ Current Block Size 32.0 KB
204
+ Peak Allocated Bytes 0 B
205
+ Overflow Count 0
206
+ [ALLOC_TEMP_Background Job.Worker 7]
207
+ Initial Block Size 32.0 KB
208
+ Current Block Size 32.0 KB
209
+ Peak Allocated Bytes 0 B
210
+ Overflow Count 0
211
+ [ALLOC_TEMP_Job.Worker 22]
212
+ Initial Block Size 256.0 KB
213
+ Current Block Size 256.0 KB
214
+ Peak Allocated Bytes 3.6 KB
215
+ Overflow Count 0
216
+ [ALLOC_TEMP_Job.Worker 9]
217
+ Initial Block Size 256.0 KB
218
+ Current Block Size 256.0 KB
219
+ Peak Allocated Bytes 3.6 KB
220
+ Overflow Count 0
221
+ [ALLOC_TEMP_Job.Worker 8]
222
+ Initial Block Size 256.0 KB
223
+ Current Block Size 256.0 KB
224
+ Peak Allocated Bytes 3.6 KB
225
+ Overflow Count 0
226
+ [ALLOC_TEMP_Job.Worker 7]
227
+ Initial Block Size 256.0 KB
228
+ Current Block Size 256.0 KB
229
+ Peak Allocated Bytes 3.6 KB
230
+ Overflow Count 0
231
+ [ALLOC_TEMP_Job.Worker 1]
232
+ Initial Block Size 256.0 KB
233
+ Current Block Size 256.0 KB
234
+ Peak Allocated Bytes 3.6 KB
235
+ Overflow Count 0
236
+ [ALLOC_TEMP_Job.Worker 10]
237
+ Initial Block Size 256.0 KB
238
+ Current Block Size 256.0 KB
239
+ Peak Allocated Bytes 3.6 KB
240
+ Overflow Count 0
241
+ [ALLOC_TEMP_Job.Worker 15]
242
+ Initial Block Size 256.0 KB
243
+ Current Block Size 256.0 KB
244
+ Peak Allocated Bytes 3.6 KB
245
+ Overflow Count 0
246
+ [ALLOC_TEMP_Job.Worker 12]
247
+ Initial Block Size 256.0 KB
248
+ Current Block Size 256.0 KB
249
+ Peak Allocated Bytes 3.6 KB
250
+ Overflow Count 0
251
+ [ALLOC_TEMP_Job.Worker 19]
252
+ Initial Block Size 256.0 KB
253
+ Current Block Size 256.0 KB
254
+ Peak Allocated Bytes 3.6 KB
255
+ Overflow Count 0
256
+ [ALLOC_TEMP_Loading.AsyncRead]
257
+ Initial Block Size 64.0 KB
258
+ Current Block Size 64.0 KB
259
+ Peak Allocated Bytes 228 B
260
+ Overflow Count 0
261
+ [ALLOC_DEFAULT] Dual Thread Allocator
262
+ Peak main deferred allocation count 36
263
+ [ALLOC_BUCKET]
264
+ Large Block size 4.0 MB
265
+ Used Block count 1
266
+ Peak Allocated bytes 1.0 MB
267
+ [ALLOC_DEFAULT_MAIN]
268
+ Peak usage frame count: [4.0 MB-8.0 MB]: 5461 frames
269
+ Requested Block Size 16.0 MB
270
+ Peak Block count 1
271
+ Peak Allocated memory 7.1 MB
272
+ Peak Large allocation bytes 0 B
273
+ [ALLOC_DEFAULT_THREAD]
274
+ Peak usage frame count: [16.0 MB-32.0 MB]: 5461 frames
275
+ Requested Block Size 16.0 MB
276
+ Peak Block count 1
277
+ Peak Allocated memory 17.3 MB
278
+ Peak Large allocation bytes 16.0 MB
279
+ [ALLOC_TEMP_JOB_1_FRAME]
280
+ Initial Block Size 2.0 MB
281
+ Used Block Count 1
282
+ Overflow Count (too large) 0
283
+ Overflow Count (full) 0
284
+ [ALLOC_TEMP_JOB_2_FRAMES]
285
+ Initial Block Size 2.0 MB
286
+ Used Block Count 1
287
+ Overflow Count (too large) 0
288
+ Overflow Count (full) 0
289
+ [ALLOC_TEMP_JOB_4_FRAMES (JobTemp)]
290
+ Initial Block Size 2.0 MB
291
+ Used Block Count 2
292
+ Overflow Count (too large) 0
293
+ Overflow Count (full) 0
294
+ [ALLOC_TEMP_JOB_ASYNC (Background)]
295
+ Initial Block Size 1.0 MB
296
+ Used Block Count 3
297
+ Overflow Count (too large) 0
298
+ Overflow Count (full) 0
299
+ [ALLOC_GFX] Dual Thread Allocator
300
+ Peak main deferred allocation count 0
301
+ [ALLOC_BUCKET]
302
+ Large Block size 4.0 MB
303
+ Used Block count 1
304
+ Peak Allocated bytes 1.0 MB
305
+ [ALLOC_GFX_MAIN]
306
+ Peak usage frame count: [32.0 KB-64.0 KB]: 5174 frames, [64.0 KB-128.0 KB]: 287 frames
307
+ Requested Block Size 16.0 MB
308
+ Peak Block count 1
309
+ Peak Allocated memory 66.4 KB
310
+ Peak Large allocation bytes 0 B
311
+ [ALLOC_GFX_THREAD]
312
+ Peak usage frame count: [32.0 KB-64.0 KB]: 5461 frames
313
+ Requested Block Size 16.0 MB
314
+ Peak Block count 1
315
+ Peak Allocated memory 39.6 KB
316
+ Peak Large allocation bytes 0 B
317
+ [ALLOC_CACHEOBJECTS] Dual Thread Allocator
318
+ Peak main deferred allocation count 0
319
+ [ALLOC_BUCKET]
320
+ Large Block size 4.0 MB
321
+ Used Block count 1
322
+ Peak Allocated bytes 1.0 MB
323
+ [ALLOC_CACHEOBJECTS_MAIN]
324
+ Peak usage frame count: [0.5 MB-1.0 MB]: 5461 frames
325
+ Requested Block Size 4.0 MB
326
+ Peak Block count 1
327
+ Peak Allocated memory 0.6 MB
328
+ Peak Large allocation bytes 0 B
329
+ [ALLOC_CACHEOBJECTS_THREAD]
330
+ Peak usage frame count: [0.5 MB-1.0 MB]: 5460 frames, [2.0 MB-4.0 MB]: 1 frames
331
+ Requested Block Size 4.0 MB
332
+ Peak Block count 1
333
+ Peak Allocated memory 2.2 MB
334
+ Peak Large allocation bytes 0 B
335
+ [ALLOC_TYPETREE] Dual Thread Allocator
336
+ Peak main deferred allocation count 0
337
+ [ALLOC_BUCKET]
338
+ Large Block size 4.0 MB
339
+ Used Block count 1
340
+ Peak Allocated bytes 1.0 MB
341
+ [ALLOC_TYPETREE_MAIN]
342
+ Peak usage frame count: [0-1.0 KB]: 5461 frames
343
+ Requested Block Size 2.0 MB
344
+ Peak Block count 1
345
+ Peak Allocated memory 1.0 KB
346
+ Peak Large allocation bytes 0 B
347
+ [ALLOC_TYPETREE_THREAD]
348
+ Peak usage frame count: [1.0 KB-2.0 KB]: 5461 frames
349
+ Requested Block Size 2.0 MB
350
+ Peak Block count 1
351
+ Peak Allocated memory 1.7 KB
352
+ Peak Large allocation bytes 0 B
run_logs/timers.json ADDED
@@ -0,0 +1,377 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "root",
3
+ "gauges": {
4
+ "SnowballTarget.Policy.Entropy.mean": {
5
+ "value": 1.0279080867767334,
6
+ "min": 1.0279080867767334,
7
+ "max": 2.873427629470825,
8
+ "count": 20
9
+ },
10
+ "SnowballTarget.Policy.Entropy.sum": {
11
+ "value": 9837.080078125,
12
+ "min": 9837.080078125,
13
+ "max": 29458.37890625,
14
+ "count": 20
15
+ },
16
+ "SnowballTarget.Step.mean": {
17
+ "value": 199984.0,
18
+ "min": 9952.0,
19
+ "max": 199984.0,
20
+ "count": 20
21
+ },
22
+ "SnowballTarget.Step.sum": {
23
+ "value": 199984.0,
24
+ "min": 9952.0,
25
+ "max": 199984.0,
26
+ "count": 20
27
+ },
28
+ "SnowballTarget.Policy.ExtrinsicValueEstimate.mean": {
29
+ "value": 13.07370376586914,
30
+ "min": 0.4750111401081085,
31
+ "max": 13.07370376586914,
32
+ "count": 20
33
+ },
34
+ "SnowballTarget.Policy.ExtrinsicValueEstimate.sum": {
35
+ "value": 2549.372314453125,
36
+ "min": 92.15216064453125,
37
+ "max": 2654.71044921875,
38
+ "count": 20
39
+ },
40
+ "SnowballTarget.Environment.EpisodeLength.mean": {
41
+ "value": 199.0,
42
+ "min": 199.0,
43
+ "max": 199.0,
44
+ "count": 20
45
+ },
46
+ "SnowballTarget.Environment.EpisodeLength.sum": {
47
+ "value": 8756.0,
48
+ "min": 8756.0,
49
+ "max": 10945.0,
50
+ "count": 20
51
+ },
52
+ "SnowballTarget.Losses.PolicyLoss.mean": {
53
+ "value": 0.06840276309815761,
54
+ "min": 0.0616864821574435,
55
+ "max": 0.07666115616003105,
56
+ "count": 20
57
+ },
58
+ "SnowballTarget.Losses.PolicyLoss.sum": {
59
+ "value": 0.27361105239263045,
60
+ "min": 0.246745928629774,
61
+ "max": 0.37193352447973343,
62
+ "count": 20
63
+ },
64
+ "SnowballTarget.Losses.ValueLoss.mean": {
65
+ "value": 0.19507976307296288,
66
+ "min": 0.11193190101652825,
67
+ "max": 0.3281939890893067,
68
+ "count": 20
69
+ },
70
+ "SnowballTarget.Losses.ValueLoss.sum": {
71
+ "value": 0.7803190522918515,
72
+ "min": 0.447727604066113,
73
+ "max": 1.4698766019998812,
74
+ "count": 20
75
+ },
76
+ "SnowballTarget.Policy.LearningRate.mean": {
77
+ "value": 8.082097306000005e-06,
78
+ "min": 8.082097306000005e-06,
79
+ "max": 0.000291882002706,
80
+ "count": 20
81
+ },
82
+ "SnowballTarget.Policy.LearningRate.sum": {
83
+ "value": 3.232838922400002e-05,
84
+ "min": 3.232838922400002e-05,
85
+ "max": 0.00138516003828,
86
+ "count": 20
87
+ },
88
+ "SnowballTarget.Policy.Epsilon.mean": {
89
+ "value": 0.10269400000000001,
90
+ "min": 0.10269400000000001,
91
+ "max": 0.19729400000000002,
92
+ "count": 20
93
+ },
94
+ "SnowballTarget.Policy.Epsilon.sum": {
95
+ "value": 0.41077600000000003,
96
+ "min": 0.41077600000000003,
97
+ "max": 0.96172,
98
+ "count": 20
99
+ },
100
+ "SnowballTarget.Policy.Beta.mean": {
101
+ "value": 0.0001444306000000001,
102
+ "min": 0.0001444306000000001,
103
+ "max": 0.0048649706,
104
+ "count": 20
105
+ },
106
+ "SnowballTarget.Policy.Beta.sum": {
107
+ "value": 0.0005777224000000004,
108
+ "min": 0.0005777224000000004,
109
+ "max": 0.023089828,
110
+ "count": 20
111
+ },
112
+ "SnowballTarget.Environment.CumulativeReward.mean": {
113
+ "value": 25.75,
114
+ "min": 3.3181818181818183,
115
+ "max": 26.022727272727273,
116
+ "count": 20
117
+ },
118
+ "SnowballTarget.Environment.CumulativeReward.sum": {
119
+ "value": 1133.0,
120
+ "min": 146.0,
121
+ "max": 1400.0,
122
+ "count": 20
123
+ },
124
+ "SnowballTarget.Policy.ExtrinsicReward.mean": {
125
+ "value": 25.75,
126
+ "min": 3.3181818181818183,
127
+ "max": 26.022727272727273,
128
+ "count": 20
129
+ },
130
+ "SnowballTarget.Policy.ExtrinsicReward.sum": {
131
+ "value": 1133.0,
132
+ "min": 146.0,
133
+ "max": 1400.0,
134
+ "count": 20
135
+ },
136
+ "SnowballTarget.IsTraining.mean": {
137
+ "value": 1.0,
138
+ "min": 1.0,
139
+ "max": 1.0,
140
+ "count": 20
141
+ },
142
+ "SnowballTarget.IsTraining.sum": {
143
+ "value": 1.0,
144
+ "min": 1.0,
145
+ "max": 1.0,
146
+ "count": 20
147
+ }
148
+ },
149
+ "metadata": {
150
+ "timer_format_version": "0.1.0",
151
+ "start_time_seconds": "1713973543",
152
+ "python_version": "3.10.12 (main, Jul 5 2023, 18:54:27) [GCC 11.2.0]",
153
+ "command_line_arguments": "/home/nick/anaconda3/envs/unity/bin/mlagents-learn ./config/ppo/SnowballTarget.yaml --env=./training-envs-executables/linux/SnowballTarget/SnowballTarget --run-id=SnowballTarget1 --no-graphics --force",
154
+ "mlagents_version": "1.1.0.dev0",
155
+ "mlagents_envs_version": "1.1.0.dev0",
156
+ "communication_protocol_version": "1.5.0",
157
+ "pytorch_version": "2.2.2+cu121",
158
+ "numpy_version": "1.23.5",
159
+ "end_time_seconds": "1713973669"
160
+ },
161
+ "total": 125.6005154049999,
162
+ "count": 1,
163
+ "self": 0.16618930800086673,
164
+ "children": {
165
+ "run_training.setup": {
166
+ "total": 0.008449310999822046,
167
+ "count": 1,
168
+ "self": 0.008449310999822046
169
+ },
170
+ "TrainerController.start_learning": {
171
+ "total": 125.42587678599921,
172
+ "count": 1,
173
+ "self": 0.1477726100538348,
174
+ "children": {
175
+ "TrainerController._reset_env": {
176
+ "total": 0.8832965419996981,
177
+ "count": 1,
178
+ "self": 0.8832965419996981
179
+ },
180
+ "TrainerController.advance": {
181
+ "total": 124.36291995994634,
182
+ "count": 18202,
183
+ "self": 0.06801515589813789,
184
+ "children": {
185
+ "env_step": {
186
+ "total": 124.2949048040482,
187
+ "count": 18202,
188
+ "self": 84.09620455490767,
189
+ "children": {
190
+ "SubprocessEnvManager._take_step": {
191
+ "total": 40.11900456807598,
192
+ "count": 18202,
193
+ "self": 0.41862983804094256,
194
+ "children": {
195
+ "TorchPolicy.evaluate": {
196
+ "total": 39.70037473003504,
197
+ "count": 18202,
198
+ "self": 39.70037473003504
199
+ }
200
+ }
201
+ },
202
+ "workers": {
203
+ "total": 0.07969568106454972,
204
+ "count": 18202,
205
+ "self": 0.0,
206
+ "children": {
207
+ "worker_root": {
208
+ "total": 125.21100454802126,
209
+ "count": 18202,
210
+ "is_parallel": true,
211
+ "self": 62.868135345034716,
212
+ "children": {
213
+ "run_training.setup": {
214
+ "total": 0.0,
215
+ "count": 0,
216
+ "is_parallel": true,
217
+ "self": 0.0,
218
+ "children": {
219
+ "steps_from_proto": {
220
+ "total": 0.0006623240005865227,
221
+ "count": 1,
222
+ "is_parallel": true,
223
+ "self": 0.00017769899932318367,
224
+ "children": {
225
+ "_process_rank_one_or_two_observation": {
226
+ "total": 0.00048462500126333907,
227
+ "count": 10,
228
+ "is_parallel": true,
229
+ "self": 0.00048462500126333907
230
+ }
231
+ }
232
+ },
233
+ "UnityEnvironment.step": {
234
+ "total": 0.011078775999521895,
235
+ "count": 1,
236
+ "is_parallel": true,
237
+ "self": 0.00013484799910656875,
238
+ "children": {
239
+ "UnityEnvironment._generate_step_input": {
240
+ "total": 0.00014969899984862423,
241
+ "count": 1,
242
+ "is_parallel": true,
243
+ "self": 0.00014969899984862423
244
+ },
245
+ "communicator.exchange": {
246
+ "total": 0.01038668300043355,
247
+ "count": 1,
248
+ "is_parallel": true,
249
+ "self": 0.01038668300043355
250
+ },
251
+ "steps_from_proto": {
252
+ "total": 0.0004075460001331521,
253
+ "count": 1,
254
+ "is_parallel": true,
255
+ "self": 9.097900056076469e-05,
256
+ "children": {
257
+ "_process_rank_one_or_two_observation": {
258
+ "total": 0.00031656699957238743,
259
+ "count": 10,
260
+ "is_parallel": true,
261
+ "self": 0.00031656699957238743
262
+ }
263
+ }
264
+ }
265
+ }
266
+ }
267
+ }
268
+ },
269
+ "UnityEnvironment.step": {
270
+ "total": 62.34286920298655,
271
+ "count": 18201,
272
+ "is_parallel": true,
273
+ "self": 2.2226856311281153,
274
+ "children": {
275
+ "UnityEnvironment._generate_step_input": {
276
+ "total": 1.3646497539593838,
277
+ "count": 18201,
278
+ "is_parallel": true,
279
+ "self": 1.3646497539593838
280
+ },
281
+ "communicator.exchange": {
282
+ "total": 52.11964459495357,
283
+ "count": 18201,
284
+ "is_parallel": true,
285
+ "self": 52.11964459495357
286
+ },
287
+ "steps_from_proto": {
288
+ "total": 6.63588922294548,
289
+ "count": 18201,
290
+ "is_parallel": true,
291
+ "self": 1.1875822969050205,
292
+ "children": {
293
+ "_process_rank_one_or_two_observation": {
294
+ "total": 5.448306926040459,
295
+ "count": 182010,
296
+ "is_parallel": true,
297
+ "self": 5.448306926040459
298
+ }
299
+ }
300
+ }
301
+ }
302
+ }
303
+ }
304
+ }
305
+ }
306
+ }
307
+ }
308
+ }
309
+ }
310
+ },
311
+ "trainer_threads": {
312
+ "total": 4.191900006844662e-05,
313
+ "count": 1,
314
+ "self": 4.191900006844662e-05,
315
+ "children": {
316
+ "thread_root": {
317
+ "total": 0.0,
318
+ "count": 0,
319
+ "is_parallel": true,
320
+ "self": 0.0,
321
+ "children": {
322
+ "trainer_advance": {
323
+ "total": 124.21884909101391,
324
+ "count": 130507,
325
+ "is_parallel": true,
326
+ "self": 0.6949725897929966,
327
+ "children": {
328
+ "process_trajectory": {
329
+ "total": 67.78964515421194,
330
+ "count": 130507,
331
+ "is_parallel": true,
332
+ "self": 67.6061274572121,
333
+ "children": {
334
+ "RLTrainer._checkpoint": {
335
+ "total": 0.18351769699984288,
336
+ "count": 4,
337
+ "is_parallel": true,
338
+ "self": 0.18351769699984288
339
+ }
340
+ }
341
+ },
342
+ "_update_policy": {
343
+ "total": 55.73423134700897,
344
+ "count": 90,
345
+ "is_parallel": true,
346
+ "self": 13.799572558010368,
347
+ "children": {
348
+ "TorchPPOOptimizer.update": {
349
+ "total": 41.934658788998604,
350
+ "count": 4587,
351
+ "is_parallel": true,
352
+ "self": 41.934658788998604
353
+ }
354
+ }
355
+ }
356
+ }
357
+ }
358
+ }
359
+ }
360
+ }
361
+ },
362
+ "TrainerController._save_models": {
363
+ "total": 0.03184575499926723,
364
+ "count": 1,
365
+ "self": 0.0005701949985450483,
366
+ "children": {
367
+ "RLTrainer._checkpoint": {
368
+ "total": 0.03127556000072218,
369
+ "count": 1,
370
+ "self": 0.03127556000072218
371
+ }
372
+ }
373
+ }
374
+ }
375
+ }
376
+ }
377
+ }
run_logs/training_status.json ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "SnowballTarget": {
3
+ "checkpoints": [
4
+ {
5
+ "steps": 49936,
6
+ "file_path": "results/SnowballTarget1/SnowballTarget/SnowballTarget-49936.onnx",
7
+ "reward": 13.545454545454545,
8
+ "creation_time": 1713973575.788643,
9
+ "auxillary_file_paths": [
10
+ "results/SnowballTarget1/SnowballTarget/SnowballTarget-49936.pt"
11
+ ]
12
+ },
13
+ {
14
+ "steps": 99960,
15
+ "file_path": "results/SnowballTarget1/SnowballTarget/SnowballTarget-99960.onnx",
16
+ "reward": 21.90909090909091,
17
+ "creation_time": 1713973607.036243,
18
+ "auxillary_file_paths": [
19
+ "results/SnowballTarget1/SnowballTarget/SnowballTarget-99960.pt"
20
+ ]
21
+ },
22
+ {
23
+ "steps": 149984,
24
+ "file_path": "results/SnowballTarget1/SnowballTarget/SnowballTarget-149984.onnx",
25
+ "reward": 24.363636363636363,
26
+ "creation_time": 1713973638.328275,
27
+ "auxillary_file_paths": [
28
+ "results/SnowballTarget1/SnowballTarget/SnowballTarget-149984.pt"
29
+ ]
30
+ },
31
+ {
32
+ "steps": 199984,
33
+ "file_path": "results/SnowballTarget1/SnowballTarget/SnowballTarget-199984.onnx",
34
+ "reward": 25.818181818181817,
35
+ "creation_time": 1713973669.021052,
36
+ "auxillary_file_paths": [
37
+ "results/SnowballTarget1/SnowballTarget/SnowballTarget-199984.pt"
38
+ ]
39
+ },
40
+ {
41
+ "steps": 200112,
42
+ "file_path": "results/SnowballTarget1/SnowballTarget/SnowballTarget-200112.onnx",
43
+ "reward": 25.818181818181817,
44
+ "creation_time": 1713973669.060458,
45
+ "auxillary_file_paths": [
46
+ "results/SnowballTarget1/SnowballTarget/SnowballTarget-200112.pt"
47
+ ]
48
+ }
49
+ ],
50
+ "final_checkpoint": {
51
+ "steps": 200112,
52
+ "file_path": "results/SnowballTarget1/SnowballTarget.onnx",
53
+ "reward": 25.818181818181817,
54
+ "creation_time": 1713973669.060458,
55
+ "auxillary_file_paths": [
56
+ "results/SnowballTarget1/SnowballTarget/SnowballTarget-200112.pt"
57
+ ]
58
+ }
59
+ },
60
+ "metadata": {
61
+ "stats_format_version": "0.3.0",
62
+ "mlagents_version": "1.1.0.dev0",
63
+ "torch_version": "2.2.2+cu121"
64
+ }
65
+ }