yqi19 commited on
Commit
790883f
·
verified ·
1 Parent(s): 9869532

VIPER reproduction: code, mini VIPER-19K pipeline, qualitative comparisons and eval

Browse files
.gitattributes CHANGED
@@ -96,3 +96,7 @@ results/comparison/00001970__00001206/grid.mp4 filter=lfs diff=lfs merge=lfs -te
96
  results/comparison/00001970__00001206/reference.mp4 filter=lfs diff=lfs merge=lfs -text
97
  results/comparison/00001970__00001206/target_gt.mp4 filter=lfs diff=lfs merge=lfs -text
98
  results/comparison/00001970__00001206/viper.mp4 filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
96
  results/comparison/00001970__00001206/reference.mp4 filter=lfs diff=lfs merge=lfs -text
97
  results/comparison/00001970__00001206/target_gt.mp4 filter=lfs diff=lfs merge=lfs -text
98
  results/comparison/00001970__00001206/viper.mp4 filter=lfs diff=lfs merge=lfs -text
99
+ data/annotated.jsonl filter=lfs diff=lfs merge=lfs -text
100
+ data/clips_train.jsonl filter=lfs diff=lfs merge=lfs -text
101
+ data/filtered_clips.jsonl filter=lfs diff=lfs merge=lfs -text
102
+ data/pairs_candidates.jsonl filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -75,15 +75,29 @@ them is attributable to the reference stream alone.
75
  | `results/eval_loss_stage1.json` | Paired conditioning ablation: flow-matching loss with reference tokens vs zeroed, same sample/noise/timestep (36 measurements) |
76
  | `results/comparison_manifest.jsonl` | Index feeding `viper.eval` |
77
 
78
- ### The mini VIPER-19K dataset
79
-
80
- | Path | Rows | Stage of the pipeline |
81
- |---|---|---|
82
- | `data/filtered_clips.jsonl` | 523 | after clip filtering (from 2000) |
83
- | `data/annotated.jsonl` | 523 | after 3-axis physics annotation |
84
- | `data/pairs_candidates.jsonl` | 996 | after label bucketing |
85
- | `data/pairs.jsonl` | 64 | after Qwen3-VL-32B transferability filtering |
86
- | `data/pairs_train.jsonl` / `pairs_val.jsonl` | 23 / 9 | video-disjoint split |
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
 
88
  ### Logs
89
 
 
75
  | `results/eval_loss_stage1.json` | Paired conditioning ablation: flow-matching loss with reference tokens vs zeroed, same sample/noise/timestep (36 measurements) |
76
  | `results/comparison_manifest.jsonl` | Index feeding `viper.eval` |
77
 
78
+ ### Our VIPER-19K rebuild
79
+
80
+ Built from the full `csusupergear/WISA-80K-wan480p-16fps-81f` subset (276 shards,
81
+ 27543 clips) via `scripts/fetch_wisa.py` + `scripts/scaleup_{1,2,3}_*.sbatch`.
82
+ The pilot column is the earlier 20-shard run, kept for reference.
83
+
84
+ | Path | Pilot | Full | Stage of the pipeline |
85
+ |---|---|---|---|
86
+ | `data/videos/` | 2000 | 27543 | downloaded WISA wan480p clips |
87
+ | `data/filtered_clips.jsonl` | 523 | 7711 | after clip filtering |
88
+ | `data/annotated.jsonl` | 523 | 7693 | after 3-axis physics annotation |
89
+ | `data/pairs_candidates.jsonl` | 996 | 15608 | after label bucketing |
90
+ | `data/pairs.jsonl` | 64 | 934 | after Qwen3-VL-32B transferability filtering |
91
+ | `data/pairs_train.jsonl` / `pairs_val.jsonl` | 23 / 9 | 553 / 74 | video-disjoint split |
92
+ | `data/clips_train.jsonl` | — | 7568 | stage-1 clips minus held-out videos |
93
+
94
+ What the filters cut, at full scale: 14762 near-static (`motion_score < 1.0`),
95
+ 4126 non-mechanical labels, 725 low quality, 219 shot transitions, 0 watermarked.
96
+ The 32B judge kept 934 of ~9600 pairs it got through (9.7%).
97
+
98
+ Only ~9600 of the 15608 candidates were judged: the judge runs at ~6 s/pair/rank
99
+ and the 4h interactive limit cuts it off there. `--deadline_min` makes that stop
100
+ graceful so the split still runs; raise it on a longer partition to judge the rest.
101
 
102
  ### Logs
103
 
data/annotated.jsonl CHANGED
The diff for this file is too large to render. See raw diff
 
data/annotated.pilot2k.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
data/clips_train.jsonl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:14ad8db9f5bc7618f7570cca39047baf5175610c4f90f8ba353ca3f0547e6d66
3
+ size 13748928
data/filtered_clips.jsonl CHANGED
The diff for this file is too large to render. See raw diff
 
data/filtered_clips.pilot2k.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
data/pairs.jsonl CHANGED
The diff for this file is too large to render. See raw diff
 
data/pairs_candidates.jsonl CHANGED
The diff for this file is too large to render. See raw diff
 
data/pairs_train.jsonl CHANGED
The diff for this file is too large to render. See raw diff
 
data/pairs_val.jsonl CHANGED
The diff for this file is too large to render. See raw diff
 
logs/fetch_wisa.log ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 10/276 shards (skip 000010)
2
+ 20/276 shards (skip 000016)
3
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/scripts/fetch_wisa.py:37: DeprecationWarning: Python 3.14 will, by default, filter extracted tar archives and reject files or modify their metadata. Use the filter argument to control this behavior.
4
+ tf.extractall(vdir)
5
+ 30/276 shards (ok 000022)
6
+ 40/276 shards (ok 000041)
7
+ 50/276 shards (ok 000048)
8
+ 60/276 shards (ok 000059)
9
+ 70/276 shards (ok 000069)
10
+ 80/276 shards (ok 000081)
11
+ 90/276 shards (ok 000090)
12
+ 100/276 shards (ok 000099)
13
+ 110/276 shards (ok 000108)
14
+ 120/276 shards (ok 000119)
15
+ 130/276 shards (ok 000130)
16
+ 140/276 shards (ok 000139)
17
+ 150/276 shards (ok 000150)
18
+ 160/276 shards (ok 000159)
19
+ 170/276 shards (ok 000170)
20
+ 180/276 shards (ok 000180)
21
+ 190/276 shards (ok 000188)
22
+ 200/276 shards (ok 000199)
23
+ 210/276 shards (ok 000209)
24
+ 220/276 shards (ok 000219)
25
+ 230/276 shards (ok 000229)
26
+ 240/276 shards (ok 000239)
27
+ 250/276 shards (ok 000250)
28
+ 260/276 shards (ok 000259)
29
+ 270/276 shards (ok 000269)
30
+ DONE shards=276 errors=0 clips=27543
logs/probe_31601035.log ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ batch-block7-00514
2
+ GPU 0: NVIDIA A100-SXM4-80GB (UUID: GPU-efd9139e-b868-c723-1de6-d706dba2b434)
3
+ GPU 1: NVIDIA A100-SXM4-80GB (UUID: GPU-b3fa51a5-71af-7f75-33f0-0f8d4bbf252c)
4
+ GPU 2: NVIDIA A100-SXM4-80GB (UUID: GPU-4d14e0f1-134f-3f49-356f-d524ab725b3e)
5
+ GPU 3: NVIDIA A100-SXM4-80GB (UUID: GPU-0e3562b7-2a44-f355-23a1-a3008889daec)
6
+ GPU 4: NVIDIA A100-SXM4-80GB (UUID: GPU-0497d167-8ade-665a-7e59-b495b952c826)
7
+ GPU 5: NVIDIA A100-SXM4-80GB (UUID: GPU-508aea10-2442-a9b1-067b-2940893e958f)
8
+ GPU 6: NVIDIA A100-SXM4-80GB (UUID: GPU-113b3eb8-b4e5-06b6-5a28-93b612864403)
9
+ GPU 7: NVIDIA A100-SXM4-80GB (UUID: GPU-84382381-48e2-9453-5ec9-2e02f83e50a2)
logs/scaleup_1_annotate_31601075.log ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === clip filtering (27543 clips on disk) ===
2
+ 0/27543 kept=1
3
+ 2000/27543 kept=523
4
+ 4000/27543 kept=1139
5
+ 6000/27543 kept=1678
6
+ 8000/27543 kept=2243
7
+ 10000/27543 kept=2768
8
+ 12000/27543 kept=3332
9
+ 14000/27543 kept=3912
10
+ 16000/27543 kept=4499
11
+ 18000/27543 kept=5063
12
+ 20000/27543 kept=5633
13
+ 22000/27543 kept=6187
14
+ 24000/27543 kept=6754
15
+ 26000/27543 kept=7275
16
+ {
17
+ "total": 27543,
18
+ "missing": 0,
19
+ "label": 4126,
20
+ "quality": 725,
21
+ "motion": 14762,
22
+ "text": 0,
23
+ "decode": 0,
24
+ "cuts": 219,
25
+ "kept": 7711
26
+ }
27
+ wrote 7711 clips -> data/filtered_clips.jsonl
28
+ === 3-axis annotation (Qwen3-VL-4B, 8 ranks) ===
29
+ Traceback (most recent call last):
30
+ File "<frozen runpy>", line 198, in _run_module_as_main
31
+ File "<frozen runpy>", line 88, in _run_code
32
+ Traceback (most recent call last):
33
+ File "<frozen runpy>", line 198, in _run_module_as_main
34
+ File "<frozen runpy>", line 88, in _run_code
35
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 147, in <module>
36
+ Traceback (most recent call last):
37
+ File "<frozen runpy>", line 198, in _run_module_as_main
38
+ File "<frozen runpy>", line 88, in _run_code
39
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 147, in <module>
40
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 147, in <module>
41
+ Traceback (most recent call last):
42
+ File "<frozen runpy>", line 198, in _run_module_as_main
43
+ File "<frozen runpy>", line 88, in _run_code
44
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 147, in <module>
45
+ Traceback (most recent call last):
46
+ File "<frozen runpy>", line 198, in _run_module_as_main
47
+ File "<frozen runpy>", line 88, in _run_code
48
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 147, in <module>
49
+ main()
50
+ main()
51
+ main()
52
+ main()
53
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 97, in main
54
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 97, in main
55
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 97, in main
56
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 97, in main
57
+ main()
58
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 97, in main
59
+ model = Qwen3VLForConditionalGeneration.from_pretrained(
60
+ model = Qwen3VLForConditionalGeneration.from_pretrained(
61
+ model = Qwen3VLForConditionalGeneration.from_pretrained(
62
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
63
+ model = Qwen3VLForConditionalGeneration.from_pretrained(
64
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 277, in _wrapper
65
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
66
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 277, in _wrapper
67
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
68
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 277, in _wrapper
69
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
70
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 277, in _wrapper
71
+ model = Qwen3VLForConditionalGeneration.from_pretrained(
72
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
73
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 277, in _wrapper
74
+ Traceback (most recent call last):
75
+ File "<frozen runpy>", line 198, in _run_module_as_main
76
+ File "<frozen runpy>", line 88, in _run_code
77
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 147, in <module>
78
+ return func(*args, **kwargs)
79
+ return func(*args, **kwargs)
80
+ return func(*args, **kwargs)
81
+ return func(*args, **kwargs)
82
+ ^^^^^^^^^^^^^^^^^^^^^
83
+ ^^^^^^^^^^^^^^^^^^^^^
84
+ ^^^^^^^^^^^^^^^^^^^^^
85
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5048, in from_pretrained
86
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5048, in from_pretrained
87
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5048, in from_pretrained
88
+ ^^^^^^^^^^^^^^^^^^^^^
89
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5048, in from_pretrained
90
+ return func(*args, **kwargs)
91
+ ^^^^^^^^^^^^^^^^^^^^^
92
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5048, in from_pretrained
93
+ main()
94
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 97, in main
95
+ ) = cls._load_pretrained_model(
96
+ model = Qwen3VLForConditionalGeneration.from_pretrained(
97
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
98
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5432, in _load_pretrained_model
99
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
100
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 277, in _wrapper
101
+ return func(*args, **kwargs)
102
+ ) = cls._load_pretrained_model(
103
+ ^^^^^^^^^^^^^^^^^^^^^
104
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5048, in from_pretrained
105
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
106
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5432, in _load_pretrained_model
107
+ ) = cls._load_pretrained_model(
108
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
109
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5432, in _load_pretrained_model
110
+ ) = cls._load_pretrained_model(
111
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
112
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5432, in _load_pretrained_model
113
+ ) = cls._load_pretrained_model(
114
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
115
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5432, in _load_pretrained_model
116
+ caching_allocator_warmup(model, expanded_device_map, hf_quantizer)
117
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 6089, in caching_allocator_warmup
118
+ ) = cls._load_pretrained_model(
119
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
120
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5432, in _load_pretrained_model
121
+ caching_allocator_warmup(model, expanded_device_map, hf_quantizer)
122
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 6089, in caching_allocator_warmup
123
+ caching_allocator_warmup(model, expanded_device_map, hf_quantizer)
124
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 6089, in caching_allocator_warmup
125
+ caching_allocator_warmup(model, expanded_device_map, hf_quantizer)
126
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 6089, in caching_allocator_warmup
127
+ caching_allocator_warmup(model, expanded_device_map, hf_quantizer)
128
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 6089, in caching_allocator_warmup
129
+ index = device.index if device.index is not None else torch_accelerator_module.current_device()
130
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
131
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 940, in current_device
132
+ caching_allocator_warmup(model, expanded_device_map, hf_quantizer)
133
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 6089, in caching_allocator_warmup
134
+ index = device.index if device.index is not None else torch_accelerator_module.current_device()
135
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
136
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 940, in current_device
137
+ index = device.index if device.index is not None else torch_accelerator_module.current_device()
138
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
139
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 940, in current_device
140
+ index = device.index if device.index is not None else torch_accelerator_module.current_device()
141
+ index = device.index if device.index is not None else torch_accelerator_module.current_device()
142
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
143
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 940, in current_device
144
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
145
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 940, in current_device
146
+ _lazy_init()
147
+ _lazy_init()
148
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 319, in _lazy_init
149
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 319, in _lazy_init
150
+ _lazy_init()
151
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 319, in _lazy_init
152
+ index = device.index if device.index is not None else torch_accelerator_module.current_device()
153
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
154
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 940, in current_device
155
+ _lazy_init()
156
+ torch._C._cuda_init()
157
+ torch._C._cuda_init()
158
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 319, in _lazy_init
159
+ _lazy_init()
160
+ RuntimeError: No CUDA GPUs are available
161
+ RuntimeError: No CUDA GPUs are available
162
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 319, in _lazy_init
163
+ torch._C._cuda_init()
164
+ RuntimeError: No CUDA GPUs are available
165
+ torch._C._cuda_init()
166
+ RuntimeError: No CUDA GPUs are available
167
+ _lazy_init()
168
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 319, in _lazy_init
169
+ torch._C._cuda_init()
170
+ RuntimeError: No CUDA GPUs are available
171
+ torch._C._cuda_init()
172
+ RuntimeError: No CUDA GPUs are available
173
+ Traceback (most recent call last):
174
+ File "<frozen runpy>", line 198, in _run_module_as_main
175
+ File "<frozen runpy>", line 88, in _run_code
176
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 147, in <module>
177
+ main()
178
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/viper/data/annotate.py", line 97, in main
179
+ model = Qwen3VLForConditionalGeneration.from_pretrained(
180
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
181
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 277, in _wrapper
182
+ return func(*args, **kwargs)
183
+ ^^^^^^^^^^^^^^^^^^^^^
184
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5048, in from_pretrained
185
+ ) = cls._load_pretrained_model(
186
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
187
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 5432, in _load_pretrained_model
188
+ caching_allocator_warmup(model, expanded_device_map, hf_quantizer)
189
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/transformers/modeling_utils.py", line 6089, in caching_allocator_warmup
190
+ index = device.index if device.index is not None else torch_accelerator_module.current_device()
191
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
192
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 940, in current_device
193
+ _lazy_init()
194
+ File "/lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/.venv/lib/python3.12/site-packages/torch/cuda/__init__.py", line 319, in _lazy_init
195
+ torch._C._cuda_init()
196
+ RuntimeError: No CUDA GPUs are available
197
+ srun: error: batch-block5-03408: tasks 1-7: Exited with exit code 1
198
+ srun: Terminating StepId=31601075.0
199
+
200
+ srun: error: batch-block5-03408: task 0: Terminated
201
+ srun: Force Terminated StepId=31601075.0
logs/scaleup_1_annotate_31601197.log ADDED
@@ -0,0 +1,365 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === clip filtering: reusing 7711 rows ===
2
+ === 3-axis annotation (Qwen3-VL-4B, 8 ranks) ===
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+ Asked to sample `fps` frames per second but no video metadata was provided which is required when sampling with `fps`. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.
12
+ Asked to sample `fps` frames per second but no video metadata was provided which is required when sampling with `fps`. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.
13
+ Asked to sample `fps` frames per second but no video metadata was provided which is required when sampling with `fps`. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.
14
+ Asked to sample `fps` frames per second but no video metadata was provided which is required when sampling with `fps`. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.
15
+ Asked to sample `fps` frames per second but no video metadata was provided which is required when sampling with `fps`. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.
16
+ Asked to sample `fps` frames per second but no video metadata was provided which is required when sampling with `fps`. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.
17
+ Asked to sample `fps` frames per second but no video metadata was provided which is required when sampling with `fps`. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.
18
+ Asked to sample `fps` frames per second but no video metadata was provided which is required when sampling with `fps`. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.
19
+ The following generation flags are not valid and may be ignored: ['temperature', 'top_p', 'top_k']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
20
+ The following generation flags are not valid and may be ignored: ['temperature', 'top_p', 'top_k']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
21
+ The following generation flags are not valid and may be ignored: ['temperature', 'top_p', 'top_k']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
22
+ The following generation flags are not valid and may be ignored: ['temperature', 'top_p', 'top_k']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
23
+ The following generation flags are not valid and may be ignored: ['temperature', 'top_p', 'top_k']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
24
+ The following generation flags are not valid and may be ignored: ['temperature', 'top_p', 'top_k']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
25
+ The following generation flags are not valid and may be ignored: ['temperature', 'top_p', 'top_k']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
26
+ The following generation flags are not valid and may be ignored: ['temperature', 'top_p', 'top_k']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
27
+ [1] 0/964 ok=1
28
+ [3] 0/964 ok=1
29
+ [5] 0/964 ok=1
30
+ [7] 0/963 ok=1
31
+ [6] 0/964 ok=1
32
+ [4] 0/964 ok=1
33
+ [0] 0/964 ok=1
34
+ [2] 0/964 ok=1
35
+ [1] 25/964 ok=26
36
+ [7] 25/963 ok=26
37
+ [6] 25/964 ok=26
38
+ [3] 25/964 ok=26
39
+ [4] 25/964 ok=26
40
+ [5] 25/964 ok=26
41
+ [2] 25/964 ok=26
42
+ [0] 25/964 ok=26
43
+ [1] 50/964 ok=51
44
+ [7] 50/963 ok=51
45
+ [6] 50/964 ok=51
46
+ [3] 50/964 ok=51
47
+ [5] 50/964 ok=51
48
+ [4] 50/964 ok=51
49
+ [2] 50/964 ok=51
50
+ [0] 50/964 ok=51
51
+ [skip taxonomy] 00002142: {'material': 'plastic_deformable', 'trajectory': 'collision_impact', 'physical_impact': 'collision_impact', 'physics_summary': 'Two vehicles collide head-on, causing immediate plastic deformation and fragmentation of the impact zones, with debris dispersing outward due to the force of impact.'}
52
+ [7] 75/963 ok=76
53
+ [1] 75/964 ok=75
54
+ [4] 75/964 ok=76
55
+ [6] 75/964 ok=76
56
+ [5] 75/964 ok=76
57
+ [3] 75/964 ok=76
58
+ [0] 75/964 ok=76
59
+ [2] 75/964 ok=76
60
+ [skip taxonomy] 00002787: {'material': 'elastic_deformable', 'trajectory': 'swimming', 'physical_impact': 'splash_dispersal', 'physics_summary': 'A person is submerged underwater, swimming with a paddle, causing bubbles and water displacement as they move through the liquid medium.'}
61
+ [7] 100/963 ok=101
62
+ [1] 100/964 ok=100
63
+ [0] 100/964 ok=100
64
+ [4] 100/964 ok=101
65
+ [3] 100/964 ok=101
66
+ [5] 100/964 ok=101
67
+ [2] 100/964 ok=101
68
+ [6] 100/964 ok=101
69
+ [1] 125/964 ok=125
70
+ [7] 125/963 ok=126
71
+ [0] 125/964 ok=125
72
+ [4] 125/964 ok=126
73
+ [5] 125/964 ok=126
74
+ [3] 125/964 ok=126
75
+ [2] 125/964 ok=126
76
+ [6] 125/964 ok=126
77
+ [1] 150/964 ok=150
78
+ [0] 150/964 ok=150
79
+ [7] 150/963 ok=151
80
+ [3] 150/964 ok=151
81
+ [5] 150/964 ok=151
82
+ [4] 150/964 ok=151
83
+ [6] 150/964 ok=151
84
+ [2] 150/964 ok=151
85
+ [0] 175/964 ok=175
86
+ [1] 175/964 ok=175
87
+ [7] 175/963 ok=176
88
+ [5] 175/964 ok=176
89
+ [3] 175/964 ok=176
90
+ [4] 175/964 ok=176
91
+ [2] 175/964 ok=176
92
+ [6] 175/964 ok=176
93
+ [0] 200/964 ok=200
94
+ [1] 200/964 ok=200
95
+ [7] 200/963 ok=201
96
+ [3] 200/964 ok=201
97
+ [5] 200/964 ok=201
98
+ [4] 200/964 ok=201
99
+ [2] 200/964 ok=201
100
+ [skip taxonomy] 00005828: {'material': 'elastic_deformable', 'trajectory': 'compression_squeeze', 'physical_impact': 'compression_squeeze', 'physics_summary': 'A metallic sphere is compressed downward onto a grid of magnetic cubes, causing the cubes to deform and compress under the applied force.'}
101
+ [6] 200/964 ok=201
102
+ [0] 225/964 ok=224
103
+ [1] 225/964 ok=225
104
+ [7] 225/963 ok=226
105
+ [3] 225/964 ok=226
106
+ [5] 225/964 ok=226
107
+ [4] 225/964 ok=226
108
+ [2] 225/964 ok=226
109
+ [6] 225/964 ok=226
110
+ [0] 250/964 ok=249
111
+ [1] 250/964 ok=250
112
+ [7] 250/963 ok=251
113
+ [3] 250/964 ok=251
114
+ [5] 250/964 ok=251
115
+ [2] 250/964 ok=251
116
+ [4] 250/964 ok=251
117
+ [6] 250/964 ok=251
118
+ [0] 275/964 ok=274
119
+ [1] 275/964 ok=275
120
+ [7] 275/963 ok=276
121
+ [5] 275/964 ok=276
122
+ [3] 275/964 ok=276
123
+ [2] 275/964 ok=276
124
+ [4] 275/964 ok=276
125
+ [6] 275/964 ok=276
126
+ [0] 300/964 ok=299
127
+ [7] 300/963 ok=301
128
+ [1] 300/964 ok=300
129
+ [5] 300/964 ok=301
130
+ [3] 300/964 ok=301
131
+ [4] 300/964 ok=301
132
+ [2] 300/964 ok=301
133
+ [6] 300/964 ok=301
134
+ [skip taxonomy] 00008976: {'material': 'plastic_deformable', 'trajectory': 'compression_squeeze', 'physical_impact': 'compression_squeeze', 'physics_summary': 'A rigid cylindrical press applies downward force to a plastic deformable orange sphere, causing it to compress and flatten under the pressure.'}
135
+ [7] 325/963 ok=326
136
+ [0] 325/964 ok=324
137
+ [1] 325/964 ok=325
138
+ [5] 325/964 ok=326
139
+ [3] 325/964 ok=326
140
+ [4] 325/964 ok=326
141
+ [2] 325/964 ok=325
142
+ [6] 325/964 ok=326
143
+ [0] 350/964 ok=349
144
+ [7] 350/963 ok=351
145
+ [1] 350/964 ok=350
146
+ [5] 350/964 ok=351
147
+ [3] 350/964 ok=351
148
+ [4] 350/964 ok=351
149
+ [2] 350/964 ok=350
150
+ [6] 350/964 ok=351
151
+ [7] 375/963 ok=376
152
+ [0] 375/964 ok=374
153
+ [1] 375/964 ok=375
154
+ [5] 375/964 ok=376
155
+ [4] 375/964 ok=376
156
+ [3] 375/964 ok=376
157
+ [2] 375/964 ok=375
158
+ [6] 375/964 ok=376
159
+ [7] 400/963 ok=401
160
+ [0] 400/964 ok=399
161
+ [1] 400/964 ok=400
162
+ [5] 400/964 ok=401
163
+ [4] 400/964 ok=401
164
+ [3] 400/964 ok=401
165
+ [2] 400/964 ok=400
166
+ [6] 400/964 ok=401
167
+ [skip taxonomy] 00012108: {'material': 'brittle', 'trajectory': 'compression_squeeze', 'physical_impact': 'fracture_shatter', 'physics_summary': 'A brittle walnut shell undergoes rapid compression and fracture under the force of a descending hydraulic press, resulting in its immediate shattering and dispersion of fragments.'}
168
+ [7] 425/963 ok=426
169
+ [0] 425/964 ok=424
170
+ [5] 425/964 ok=426
171
+ [1] 425/964 ok=424
172
+ [4] 425/964 ok=426
173
+ [2] 425/964 ok=425
174
+ [3] 425/964 ok=426
175
+ [6] 425/964 ok=426
176
+ [7] 450/963 ok=451
177
+ [skip taxonomy] 00012725: {'material': 'elastic_deformable', 'trajectory': 'swimming', 'physical_impact': 'splash_dispersal', 'physics_summary': 'The dog moves through the water, creating splashes as it swims, with its body deforming slightly to navigate the flow.'}
178
+ [0] 450/964 ok=449
179
+ [5] 450/964 ok=451
180
+ [1] 450/964 ok=449
181
+ [3] 450/964 ok=450
182
+ [4] 450/964 ok=451
183
+ [2] 450/964 ok=450
184
+ [6] 450/964 ok=451
185
+ [7] 475/963 ok=476
186
+ [0] 475/964 ok=474
187
+ [5] 475/964 ok=476
188
+ [1] 475/964 ok=474
189
+ [3] 475/964 ok=475
190
+ [4] 475/964 ok=476
191
+ [2] 475/964 ok=475
192
+ [6] 475/964 ok=476
193
+ [7] 500/963 ok=501
194
+ [0] 500/964 ok=499
195
+ [1] 500/964 ok=499
196
+ [5] 500/964 ok=501
197
+ [3] 500/964 ok=500
198
+ [4] 500/964 ok=501
199
+ [2] 500/964 ok=500
200
+ [skip taxonomy] 00014456: {'material': 'elastic_deformable', 'trajectory': 'collision_impact', 'physical_impact': 'fracture_shatter', 'physics_summary': "A blue car collides with a barrier, causing its structure to fracture and shatter as the impact force is absorbed and distributed through the vehicle's materials."}
201
+ [6] 500/964 ok=501
202
+ [7] 525/963 ok=526
203
+ [skip taxonomy] 00014782: {'material': 'plastic_deformable', 'trajectory': 'compression_squeeze', 'physical_impact': 'compression_squeeze', 'physics_summary': 'A rigid metallic skull is compressed under a heavy press, causing it to deform plastically as the force is applied from above.'}
204
+ [0] 525/964 ok=524
205
+ [1] 525/964 ok=524
206
+ [5] 525/964 ok=525
207
+ [4] 525/964 ok=525
208
+ [3] 525/964 ok=525
209
+ [2] 525/964 ok=525
210
+ [6] 525/964 ok=526
211
+ [7] 550/963 ok=551
212
+ [0] 550/964 ok=549
213
+ [5] 550/964 ok=550
214
+ [1] 550/964 ok=549
215
+ [4] 550/964 ok=550
216
+ [3] 550/964 ok=550
217
+ [2] 550/964 ok=550
218
+ [6] 550/964 ok=551
219
+ [7] 575/963 ok=576
220
+ [0] 575/964 ok=574
221
+ [1] 575/964 ok=574
222
+ [5] 575/964 ok=575
223
+ [3] 575/964 ok=575
224
+ [4] 575/964 ok=575
225
+ [2] 575/964 ok=575
226
+ [6] 575/964 ok=576
227
+ [7] 600/963 ok=601
228
+ [0] 600/964 ok=599
229
+ [1] 600/964 ok=599
230
+ [5] 600/964 ok=600
231
+ [3] 600/964 ok=600
232
+ [4] 600/964 ok=600
233
+ [2] 600/964 ok=600
234
+ [6] 600/964 ok=601
235
+ [7] 625/963 ok=626
236
+ [0] 625/964 ok=624
237
+ [skip taxonomy] 00017577: {'material': 'elastic_deformable', 'trajectory': 'bounce_rebound', 'physical_impact': 'bounce_rebound', 'physics_summary': 'A tennis ball bounces upward after hitting a surface, exhibiting elastic deformation and rebounding motion due to its elastic properties.'}
238
+ [1] 625/964 ok=624
239
+ [5] 625/964 ok=625
240
+ [skip taxonomy] 00017778: {'material': 'viscous_liquid', 'trajectory': 'splash_dispersal', 'physical_impact': 'splash_dispersal', 'physics_summary': 'A droplet impacts a viscous liquid surface, causing a splash and dispersal of smaller droplets as the liquid deforms and flows outward.'}
241
+ [4] 625/964 ok=624
242
+ [2] 625/964 ok=625
243
+ [6] 625/964 ok=626
244
+ [skip taxonomy] 00018404: {'material': 'plastic_deformable', 'trajectory': 'collision_impact', 'physical_impact': 'collision_impact', 'physics_summary': 'Two vehicles collide head-on, causing immediate plastic deformation and shattering of materials, with fragments dispersing due to the impact force.'}
245
+ [7] 650/963 ok=651
246
+ [0] 650/964 ok=648
247
+ [5] 650/964 ok=650
248
+ [1] 650/964 ok=649
249
+ [3] 650/964 ok=649
250
+ [2] 650/964 ok=650
251
+ [4] 650/964 ok=649
252
+ [6] 650/964 ok=651
253
+ [7] 675/963 ok=676
254
+ [0] 675/964 ok=673
255
+ [1] 675/964 ok=674
256
+ [5] 675/964 ok=675
257
+ [3] 675/964 ok=674
258
+ [2] 675/964 ok=675
259
+ [4] 675/964 ok=674
260
+ [6] 675/964 ok=676
261
+ [7] 700/963 ok=701
262
+ [0] 700/964 ok=698
263
+ [1] 700/964 ok=699
264
+ [5] 700/964 ok=700
265
+ [3] 700/964 ok=699
266
+ [2] 700/964 ok=700
267
+ [4] 700/964 ok=699
268
+ [6] 700/964 ok=701
269
+ [0] 725/964 ok=723
270
+ [7] 725/963 ok=726
271
+ [1] 725/964 ok=724
272
+ [5] 725/964 ok=725
273
+ [3] 725/964 ok=724
274
+ [4] 725/964 ok=724
275
+ [2] 725/964 ok=725
276
+ [skip taxonomy] 00020773: {'material': 'brittle', 'trajectory': 'compression_squeeze', 'physical_impact': 'fracture_shatter', 'physics_summary': 'A rigid metallic press applies compressive force to a brittle rock, causing it to fracture and shatter into smaller fragments under high pressure.'}
277
+ [6] 725/964 ok=726
278
+ [0] 750/964 ok=748
279
+ [7] 750/963 ok=751
280
+ [5] 750/964 ok=750
281
+ [1] 750/964 ok=749
282
+ [skip taxonomy] 00021349: {'material': 'elastic_deformable', 'trajectory': 'swimming', 'physical_impact': 'splash_dispersal', 'physics_summary': 'The object moves through water with splashes dispersing around it, indicating elastic deformation and fluid resistance as it propels forward.'}
283
+ [3] 750/964 ok=747
284
+ [2] 750/964 ok=750
285
+ [4] 750/964 ok=749
286
+ [6] 750/964 ok=751
287
+ [skip taxonomy] 00021639: {'material': 'viscous_liquid', 'trajectory': 'compression_squeeze', 'physical_impact': 'tearing_rupture', 'physics_summary': 'A viscous liquid inside a transparent container is subjected to compression from above, causing it to rupture and disperse outward as the container deforms under pressure.'}
288
+ [skip taxonomy] 00021749: {'material': 'elastic_deformable', 'trajectory': 'swimming', 'physical_impact': 'splash_dispersal', 'physics_summary': 'The bird submerges into the water, creating a splash as it moves through the liquid medium, demonstrating elastic deformation of its body and interaction with the water surface.'}
289
+ [0] 775/964 ok=773
290
+ [7] 775/963 ok=776
291
+ [5] 775/964 ok=775
292
+ [1] 775/964 ok=774
293
+ [3] 775/964 ok=772
294
+ [2] 775/964 ok=774
295
+ [4] 775/964 ok=773
296
+ [6] 775/964 ok=776
297
+ [0] 800/964 ok=798
298
+ [7] 800/963 ok=801
299
+ [5] 800/964 ok=800
300
+ [1] 800/964 ok=799
301
+ [3] 800/964 ok=797
302
+ [2] 800/964 ok=799
303
+ [4] 800/964 ok=798
304
+ [6] 800/964 ok=801
305
+ [0] 825/964 ok=823
306
+ [7] 825/963 ok=826
307
+ [5] 825/964 ok=825
308
+ [skip taxonomy] 00023609: {'material': 'plastic_deformable', 'trajectory': 'collision_impact', 'physical_impact': 'collision_impact', 'physics_summary': 'Two vehicles collide head-on, causing immediate plastic deformation and fragmentation of the impact zones, with debris dispersing outward due to the force of impact.'}
309
+ [1] 825/964 ok=824
310
+ [3] 825/964 ok=822
311
+ [2] 825/964 ok=824
312
+ [4] 825/964 ok=823
313
+ [6] 825/964 ok=826
314
+ [0] 850/964 ok=848
315
+ [7] 850/963 ok=850
316
+ [5] 850/964 ok=850
317
+ [1] 850/964 ok=849
318
+ [3] 850/964 ok=847
319
+ [2] 850/964 ok=849
320
+ [4] 850/964 ok=848
321
+ [6] 850/964 ok=851
322
+ [skip taxonomy] 00024444: {'material': 'elastic_deformable', 'trajectory': 'swimming', 'physical_impact': 'no_impact', 'physics_summary': 'A person swims underwater, moving through the water with fluid motion, their body deforming slightly as they propel themselves forward without significant impact or resistance.'}
323
+ [0] 875/964 ok=873
324
+ [7] 875/963 ok=875
325
+ [5] 875/964 ok=875
326
+ [1] 875/964 ok=874
327
+ [3] 875/964 ok=872
328
+ [2] 875/964 ok=873
329
+ [4] 875/964 ok=873
330
+ [6] 875/964 ok=876
331
+ [skip taxonomy] 00025187: {'material': 'solid', 'trajectory': 'in_place_deformation', 'physical_impact': 'melting_phase_change', 'physics_summary': "Ice cubes in a pan are undergoing a phase change from solid to liquid as they melt due to heat transfer from the pan's surface."}
332
+ [0] 900/964 ok=898
333
+ [7] 900/963 ok=900
334
+ [5] 900/964 ok=900
335
+ [1] 900/964 ok=899
336
+ [3] 900/964 ok=896
337
+ [2] 900/964 ok=898
338
+ [4] 900/964 ok=898
339
+ [6] 900/964 ok=901
340
+ [0] 925/964 ok=923
341
+ [7] 925/963 ok=925
342
+ [5] 925/964 ok=925
343
+ [1] 925/964 ok=924
344
+ [3] 925/964 ok=921
345
+ [2] 925/964 ok=923
346
+ [4] 925/964 ok=923
347
+ [6] 925/964 ok=926
348
+ [0] 950/964 ok=948
349
+ [7] 950/963 ok=950
350
+ [5] 950/964 ok=950
351
+ [1] 950/964 ok=949
352
+ [3] 950/964 ok=946
353
+ [2] 950/964 ok=948
354
+ [0] DONE ok=961/964 -> data/annotated.jsonl.0
355
+ [7] DONE ok=962/963 -> data/annotated.jsonl.7
356
+ [4] 950/964 ok=948
357
+ [6] 950/964 ok=951
358
+ [5] DONE ok=963/964 -> data/annotated.jsonl.5
359
+ [1] DONE ok=962/964 -> data/annotated.jsonl.1
360
+ [3] DONE ok=959/964 -> data/annotated.jsonl.3
361
+ [2] DONE ok=961/964 -> data/annotated.jsonl.2
362
+ [4] DONE ok=961/964 -> data/annotated.jsonl.4
363
+ [6] DONE ok=964/964 -> data/annotated.jsonl.6
364
+ filtered_clips: 7711
365
+ annotated: 7693
logs/scaleup_2_pairs_31601200.log ADDED
@@ -0,0 +1,650 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === candidate pairs (bucketing only, for the record) ===
2
+ candidate pairs: 15608
3
+ {
4
+ "('splash_dispersal', 'free_fall')": 400,
5
+ "('no_impact', 'in_place_deformation')": 400,
6
+ "('splash_dispersal', 'sliding')": 400,
7
+ "('no_impact', 'flowing_pouring')": 400,
8
+ "('splash_dispersal', 'flowing_pouring')": 400,
9
+ "('no_impact', 'expanding_dispersing')": 400,
10
+ "('compression_squeeze', 'in_place_deformation')": 400,
11
+ "('bounce_rebound', 'rolling')": 400,
12
+ "('splash_dispersal', 'expanding_dispersing')": 400,
13
+ "('melting_phase_change', 'in_place_deformation')": 400,
14
+ "('compression_squeeze', 'sliding')": 400,
15
+ "('no_impact', 'rotating_spinning')": 400,
16
+ "('compression_squeeze', 'expanding_dispersing')": 45,
17
+ "('no_impact', 'sliding')": 400,
18
+ "('fracture_shatter', 'sliding')": 400,
19
+ "('bounce_rebound', 'oscillating_vibrating')": 45,
20
+ "('no_impact', 'projectile_arc')": 400,
21
+ "('bounce_rebound', 'projectile_arc')": 400,
22
+ "('no_impact', 'rolling')": 400,
23
+ "('bounce_rebound', 'sliding')": 171,
24
+ "('compression_squeeze', 'free_fall')": 300,
25
+ "('no_impact', 'free_fall')": 400,
26
+ "('collision_impact', 'sliding')": 400,
27
+ "('fracture_shatter', 'rotating_spinning')": 36,
28
+ "('no_impact', 'swinging_pendulum')": 400,
29
+ "('bounce_rebound', 'free_fall')": 400,
30
+ "('melting_phase_change', 'expanding_dispersing')": 136,
31
+ "('collision_impact', 'free_fall')": 400,
32
+ "('no_impact', 'oscillating_vibrating')": 400,
33
+ "('melting_phase_change', 'sliding')": 231,
34
+ "('fracture_shatter', 'free_fall')": 400,
35
+ "('fracture_shatter', 'expanding_dispersing')": 400,
36
+ "('crumbling', 'sliding')": 28,
37
+ "('collision_impact', 'swinging_pendulum')": 120,
38
+ "('collision_impact', 'rolling')": 400,
39
+ "('bounce_rebound', 'rotating_spinning')": 78,
40
+ "('compression_squeeze', 'rolling')": 400,
41
+ "('collision_impact', 'flowing_pouring')": 136,
42
+ "('splash_dispersal', 'projectile_arc')": 400,
43
+ "('fracture_shatter', 'in_place_deformation')": 91,
44
+ "('tearing_rupture', 'sliding')": 400,
45
+ "('tearing_rupture', 'expanding_dispersing')": 45,
46
+ "('crumbling', 'in_place_deformation')": 105,
47
+ "('melting_phase_change', 'flowing_pouring')": 400,
48
+ "('fracture_shatter', 'rolling')": 36,
49
+ "('compression_squeeze', 'oscillating_vibrating')": 36,
50
+ "('splash_dispersal', 'swinging_pendulum')": 28,
51
+ "('tearing_rupture', 'rotating_spinning')": 1,
52
+ "('tearing_rupture', 'in_place_deformation')": 400,
53
+ "('melting_phase_change', 'free_fall')": 91,
54
+ "('tearing_rupture', 'free_fall')": 21,
55
+ "('fracture_shatter', 'flowing_pouring')": 28,
56
+ "('splash_dispersal', 'rolling')": 105,
57
+ "('compression_squeeze', 'rotating_spinning')": 400,
58
+ "('collision_impact', 'projectile_arc')": 400,
59
+ "('crumbling', 'free_fall')": 21,
60
+ "('compression_squeeze', 'flowing_pouring')": 136,
61
+ "('splash_dispersal', 'rotating_spinning')": 36,
62
+ "('collision_impact', 'rotating_spinning')": 10,
63
+ "('fracture_shatter', 'projectile_arc')": 91,
64
+ "('bounce_rebound', 'flowing_pouring')": 6,
65
+ "('collision_impact', 'oscillating_vibrating')": 55,
66
+ "('crumbling', 'expanding_dispersing')": 21,
67
+ "('collision_impact', 'in_place_deformation')": 28,
68
+ "('bounce_rebound', 'swinging_pendulum')": 10,
69
+ "('melting_phase_change', 'projectile_arc')": 10,
70
+ "('dent_deformation', 'sliding')": 55,
71
+ "('splash_dispersal', 'in_place_deformation')": 6,
72
+ "('crumbling', 'rotating_spinning')": 3,
73
+ "('tearing_rupture', 'rolling')": 1,
74
+ "('bounce_rebound', 'expanding_dispersing')": 6
75
+ }
76
+ wrote 15608 unjudged pairs -> data/pairs_candidates.jsonl
77
+ === transferability judging (Qwen3-VL-32B, 4 ranks x 2 GPUs) ===
78
+ candidate pairs: 15608
79
+ {
80
+ "('splash_dispersal', 'free_fall')": 400,
81
+ "('no_impact', 'in_place_deformation')": 400,
82
+ "('splash_dispersal', 'sliding')": 400,
83
+ "('no_impact', 'flowing_pouring')": 400,
84
+ "('splash_dispersal', 'flowing_pouring')": 400,
85
+ "('no_impact', 'expanding_dispersing')": 400,
86
+ "('compression_squeeze', 'in_place_deformation')": 400,
87
+ "('bounce_rebound', 'rolling')": 400,
88
+ "('splash_dispersal', 'expanding_dispersing')": 400,
89
+ "('melting_phase_change', 'in_place_deformation')": 400,
90
+ "('compression_squeeze', 'sliding')": 400,
91
+ "('no_impact', 'rotating_spinning')": 400,
92
+ "('compression_squeeze', 'expanding_dispersing')": 45,
93
+ "('no_impact', 'sliding')": 400,
94
+ "('fracture_shatter', 'sliding')": 400,
95
+ "('bounce_rebound', 'oscillating_vibrating')": 45,
96
+ "('no_impact', 'projectile_arc')": 400,
97
+ "('bounce_rebound', 'projectile_arc')": 400,
98
+ "('no_impact', 'rolling')": 400,
99
+ "('bounce_rebound', 'sliding')": 171,
100
+ "('compression_squeeze', 'free_fall')": 300,
101
+ "('no_impact', 'free_fall')": 400,
102
+ "('collision_impact', 'sliding')": 400,
103
+ "('fracture_shatter', 'rotating_spinning')": 36,
104
+ "('no_impact', 'swinging_pendulum')": 400,
105
+ "('bounce_rebound', 'free_fall')": 400,
106
+ "('melting_phase_change', 'expanding_dispersing')": 136,
107
+ "('collision_impact', 'free_fall')": 400,
108
+ "('no_impact', 'oscillating_vibrating')": 400,
109
+ "('melting_phase_change', 'sliding')": 231,
110
+ "('fracture_shatter', 'free_fall')": 400,
111
+ "('fracture_shatter', 'expanding_dispersing')": 400,
112
+ "('crumbling', 'sliding')": 28,
113
+ "('collision_impact', 'swinging_pendulum')": 120,
114
+ "('collision_impact', 'rolling')": 400,
115
+ "('bounce_rebound', 'rotating_spinning')": 78,
116
+ "('compression_squeeze', 'rolling')": 400,
117
+ "('collision_impact', 'flowing_pouring')": 136,
118
+ "('splash_dispersal', 'projectile_arc')": 400,
119
+ "('fracture_shatter', 'in_place_deformation')": 91,
120
+ "('tearing_rupture', 'sliding')": 400,
121
+ "('tearing_rupture', 'expanding_dispersing')": 45,
122
+ "('crumbling', 'in_place_deformation')": 105,
123
+ "('melting_phase_change', 'flowing_pouring')": 400,
124
+ "('fracture_shatter', 'rolling')": 36,
125
+ "('compression_squeeze', 'oscillating_vibrating')": 36,
126
+ "('splash_dispersal', 'swinging_pendulum')": 28,
127
+ "('tearing_rupture', 'rotating_spinning')": 1,
128
+ "('tearing_rupture', 'in_place_deformation')": 400,
129
+ "('melting_phase_change', 'free_fall')": 91,
130
+ "('tearing_rupture', 'free_fall')": 21,
131
+ "('fracture_shatter', 'flowing_pouring')": 28,
132
+ "('splash_dispersal', 'rolling')": 105,
133
+ "('compression_squeeze', 'rotating_spinning')": 400,
134
+ "('collision_impact', 'projectile_arc')": 400,
135
+ "('crumbling', 'free_fall')": 21,
136
+ "('compression_squeeze', 'flowing_pouring')": 136,
137
+ "('splash_dispersal', 'rotating_spinning')": 36,
138
+ "('collision_impact', 'rotating_spinning')": 10,
139
+ "('fracture_shatter', 'projectile_arc')": 91,
140
+ "('bounce_rebound', 'flowing_pouring')": 6,
141
+ "('collision_impact', 'oscillating_vibrating')": 55,
142
+ "('crumbling', 'expanding_dispersing')": 21,
143
+ "('collision_impact', 'in_place_deformation')": 28,
144
+ "('bounce_rebound', 'swinging_pendulum')": 10,
145
+ "('melting_phase_change', 'projectile_arc')": 10,
146
+ "('dent_deformation', 'sliding')": 55,
147
+ "('splash_dispersal', 'in_place_deformation')": 6,
148
+ "('crumbling', 'rotating_spinning')": 3,
149
+ "('tearing_rupture', 'rolling')": 1,
150
+ "('bounce_rebound', 'expanding_dispersing')": 6
151
+ }
152
+ candidate pairs: 15608
153
+ candidate pairs: 15608
154
+ candidate pairs: 15608
155
+
156
+ �██████▌ | 12/14 [04:49<00:46, 23.04s/it]
157
+ �██████▌ | 12/14 [04:49<00:46, 23.05s/it]
158
+ �██████▌ | 12/14 [04:49<00:46, 23.05s/it]
159
+ Asked to sample `fps` frames per second but no video metadata was provided which is required when sampling with `fps`. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.
160
+ The following generation flags are not valid and may be ignored: ['temperature', 'top_p', 'top_k']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
161
+ Asked to sample `fps` frames per second but no video metadata was provided which is required when sampling with `fps`. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.
162
+ Asked to sample `fps` frames per second but no video metadata was provided which is required when sampling with `fps`. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.
163
+ Asked to sample `fps` frames per second but no video metadata was provided which is required when sampling with `fps`. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.
164
+ The following generation flags are not valid and may be ignored: ['temperature', 'top_p', 'top_k']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
165
+ The following generation flags are not valid and may be ignored: ['temperature', 'top_p', 'top_k']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
166
+ The following generation flags are not valid and may be ignored: ['temperature', 'top_p', 'top_k']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
167
+ 0/3902 kept=0
168
+ 0/3902 kept=0
169
+ 0/3902 kept=0
170
+ 0/3902 kept=0
171
+ 20/3902 kept=2
172
+ 20/3902 kept=3
173
+ 20/3902 kept=1
174
+ 20/3902 kept=1
175
+ 40/3902 kept=4
176
+ 40/3902 kept=5
177
+ 40/3902 kept=4
178
+ 40/3902 kept=2
179
+ 60/3902 kept=4
180
+ 60/3902 kept=4
181
+ 60/3902 kept=4
182
+ 60/3902 kept=5
183
+ 80/3902 kept=5
184
+ 80/3902 kept=6
185
+ 80/3902 kept=9
186
+ 80/3902 kept=6
187
+ 100/3902 kept=9
188
+ 100/3902 kept=11
189
+ 100/3902 kept=11
190
+ 100/3902 kept=7
191
+ 120/3902 kept=10
192
+ 120/3902 kept=11
193
+ 120/3902 kept=13
194
+ 120/3902 kept=9
195
+ 140/3902 kept=12
196
+ 140/3902 kept=12
197
+ 140/3902 kept=16
198
+ 140/3902 kept=10
199
+ 160/3902 kept=15
200
+ 160/3902 kept=16
201
+ 160/3902 kept=13
202
+ 160/3902 kept=21
203
+ 180/3902 kept=17
204
+ 180/3902 kept=17
205
+ 180/3902 kept=16
206
+ 180/3902 kept=22
207
+ 200/3902 kept=18
208
+ 200/3902 kept=18
209
+ 200/3902 kept=18
210
+ 200/3902 kept=26
211
+ 220/3902 kept=19
212
+ 220/3902 kept=21
213
+ 220/3902 kept=19
214
+ 220/3902 kept=28
215
+ 240/3902 kept=22
216
+ 240/3902 kept=23
217
+ 240/3902 kept=20
218
+ 240/3902 kept=29
219
+ 260/3902 kept=22
220
+ 260/3902 kept=22
221
+ 260/3902 kept=23
222
+ 260/3902 kept=33
223
+ 280/3902 kept=22
224
+ 280/3902 kept=24
225
+ 280/3902 kept=24
226
+ 280/3902 kept=35
227
+ 300/3902 kept=25
228
+ 300/3902 kept=29
229
+ 300/3902 kept=27
230
+ 300/3902 kept=37
231
+ 320/3902 kept=28
232
+ 320/3902 kept=30
233
+ 320/3902 kept=28
234
+ 320/3902 kept=39
235
+ 340/3902 kept=30
236
+ 340/3902 kept=28
237
+ 340/3902 kept=33
238
+ 340/3902 kept=44
239
+ 360/3902 kept=31
240
+ 360/3902 kept=30
241
+ 360/3902 kept=33
242
+ 360/3902 kept=47
243
+ 380/3902 kept=34
244
+ 380/3902 kept=34
245
+ 380/3902 kept=35
246
+ 380/3902 kept=48
247
+ 400/3902 kept=35
248
+ 400/3902 kept=36
249
+ 400/3902 kept=35
250
+ 400/3902 kept=49
251
+ 420/3902 kept=37
252
+ 420/3902 kept=37
253
+ 420/3902 kept=37
254
+ 420/3902 kept=52
255
+ 440/3902 kept=39
256
+ 440/3902 kept=40
257
+ 440/3902 kept=37
258
+ 440/3902 kept=53
259
+ 460/3902 kept=43
260
+ 460/3902 kept=42
261
+ 460/3902 kept=39
262
+ 460/3902 kept=56
263
+ 480/3902 kept=43
264
+ 480/3902 kept=43
265
+ 480/3902 kept=39
266
+ 480/3902 kept=58
267
+ 500/3902 kept=45
268
+ 500/3902 kept=45
269
+ 500/3902 kept=39
270
+ 500/3902 kept=60
271
+ 520/3902 kept=47
272
+ 520/3902 kept=46
273
+ 520/3902 kept=40
274
+ 520/3902 kept=61
275
+ 540/3902 kept=49
276
+ 540/3902 kept=48
277
+ 540/3902 kept=44
278
+ 540/3902 kept=64
279
+ 560/3902 kept=52
280
+ 560/3902 kept=50
281
+ 560/3902 kept=46
282
+ 560/3902 kept=68
283
+ 580/3902 kept=53
284
+ 580/3902 kept=51
285
+ 580/3902 kept=50
286
+ 580/3902 kept=71
287
+ 600/3902 kept=54
288
+ 600/3902 kept=53
289
+ 600/3902 kept=52
290
+ 600/3902 kept=75
291
+ 620/3902 kept=56
292
+ 620/3902 kept=77
293
+ 620/3902 kept=55
294
+ 620/3902 kept=52
295
+ 640/3902 kept=57
296
+ 640/3902 kept=60
297
+ 640/3902 kept=80
298
+ 640/3902 kept=54
299
+ 660/3902 kept=57
300
+ 660/3902 kept=61
301
+ 660/3902 kept=84
302
+ 660/3902 kept=58
303
+ 680/3902 kept=59
304
+ 680/3902 kept=89
305
+ 680/3902 kept=64
306
+ 680/3902 kept=61
307
+ 700/3902 kept=62
308
+ 700/3902 kept=67
309
+ 700/3902 kept=91
310
+ 700/3902 kept=65
311
+ 720/3902 kept=62
312
+ 720/3902 kept=70
313
+ 720/3902 kept=94
314
+ 720/3902 kept=67
315
+ 740/3902 kept=63
316
+ 740/3902 kept=71
317
+ 740/3902 kept=94
318
+ 740/3902 kept=70
319
+ 760/3902 kept=64
320
+ 760/3902 kept=73
321
+ 760/3902 kept=73
322
+ 760/3902 kept=96
323
+ 780/3902 kept=66
324
+ 780/3902 kept=75
325
+ 780/3902 kept=76
326
+ 780/3902 kept=97
327
+ 800/3902 kept=71
328
+ 800/3902 kept=77
329
+ 800/3902 kept=77
330
+ 800/3902 kept=98
331
+ 820/3902 kept=73
332
+ 820/3902 kept=78
333
+ 820/3902 kept=78
334
+ 820/3902 kept=99
335
+ 840/3902 kept=74
336
+ 840/3902 kept=78
337
+ 840/3902 kept=99
338
+ 840/3902 kept=80
339
+ 860/3902 kept=76
340
+ 860/3902 kept=81
341
+ 860/3902 kept=100
342
+ 860/3902 kept=82
343
+ 880/3902 kept=83
344
+ 880/3902 kept=77
345
+ 880/3902 kept=103
346
+ 880/3902 kept=85
347
+ 900/3902 kept=86
348
+ 900/3902 kept=78
349
+ 900/3902 kept=106
350
+ 900/3902 kept=89
351
+ 920/3902 kept=89
352
+ 920/3902 kept=78
353
+ 920/3902 kept=109
354
+ 920/3902 kept=92
355
+ 940/3902 kept=93
356
+ 940/3902 kept=79
357
+ 940/3902 kept=112
358
+ 940/3902 kept=95
359
+ 960/3902 kept=97
360
+ 960/3902 kept=82
361
+ 960/3902 kept=115
362
+ 960/3902 kept=99
363
+ 980/3902 kept=97
364
+ 980/3902 kept=83
365
+ 980/3902 kept=116
366
+ 980/3902 kept=100
367
+ 1000/3902 kept=100
368
+ 1000/3902 kept=84
369
+ 1000/3902 kept=118
370
+ 1000/3902 kept=104
371
+ 1020/3902 kept=102
372
+ 1020/3902 kept=87
373
+ 1020/3902 kept=118
374
+ 1020/3902 kept=105
375
+ 1040/3902 kept=104
376
+ 1040/3902 kept=89
377
+ 1040/3902 kept=120
378
+ 1040/3902 kept=108
379
+ 1060/3902 kept=105
380
+ 1060/3902 kept=93
381
+ 1060/3902 kept=120
382
+ 1060/3902 kept=108
383
+ 1080/3902 kept=110
384
+ 1080/3902 kept=94
385
+ 1080/3902 kept=121
386
+ 1080/3902 kept=111
387
+ 1100/3902 kept=110
388
+ 1100/3902 kept=126
389
+ 1100/3902 kept=95
390
+ 1100/3902 kept=114
391
+ 1120/3902 kept=111
392
+ 1120/3902 kept=127
393
+ 1120/3902 kept=96
394
+ 1120/3902 kept=117
395
+ 1140/3902 kept=112
396
+ 1140/3902 kept=131
397
+ 1140/3902 kept=100
398
+ 1140/3902 kept=120
399
+ 1160/3902 kept=113
400
+ 1160/3902 kept=132
401
+ 1160/3902 kept=101
402
+ 1160/3902 kept=124
403
+ 1180/3902 kept=114
404
+ 1180/3902 kept=133
405
+ 1180/3902 kept=103
406
+ 1180/3902 kept=127
407
+ 1200/3902 kept=117
408
+ 1200/3902 kept=134
409
+ 1200/3902 kept=104
410
+ 1200/3902 kept=128
411
+ 1220/3902 kept=119
412
+ 1220/3902 kept=136
413
+ 1220/3902 kept=106
414
+ 1220/3902 kept=130
415
+ 1240/3902 kept=121
416
+ 1240/3902 kept=137
417
+ 1240/3902 kept=108
418
+ 1240/3902 kept=132
419
+ 1260/3902 kept=122
420
+ 1260/3902 kept=139
421
+ 1260/3902 kept=109
422
+ 1260/3902 kept=133
423
+ 1280/3902 kept=126
424
+ 1280/3902 kept=141
425
+ 1280/3902 kept=109
426
+ 1280/3902 kept=135
427
+ 1300/3902 kept=129
428
+ 1300/3902 kept=141
429
+ 1300/3902 kept=110
430
+ 1300/3902 kept=137
431
+ 1320/3902 kept=131
432
+ 1320/3902 kept=143
433
+ 1320/3902 kept=111
434
+ 1320/3902 kept=140
435
+ 1340/3902 kept=132
436
+ 1340/3902 kept=143
437
+ 1340/3902 kept=112
438
+ 1340/3902 kept=142
439
+ 1360/3902 kept=133
440
+ 1360/3902 kept=145
441
+ 1360/3902 kept=115
442
+ 1360/3902 kept=145
443
+ 1380/3902 kept=137
444
+ 1380/3902 kept=147
445
+ 1380/3902 kept=119
446
+ 1380/3902 kept=145
447
+ 1400/3902 kept=138
448
+ 1400/3902 kept=150
449
+ 1400/3902 kept=121
450
+ 1400/3902 kept=146
451
+ 1420/3902 kept=142
452
+ 1420/3902 kept=153
453
+ 1420/3902 kept=124
454
+ 1420/3902 kept=147
455
+ 1440/3902 kept=149
456
+ 1440/3902 kept=156
457
+ 1440/3902 kept=124
458
+ 1440/3902 kept=149
459
+ 1460/3902 kept=151
460
+ 1460/3902 kept=156
461
+ 1460/3902 kept=125
462
+ 1460/3902 kept=153
463
+ 1480/3902 kept=153
464
+ 1480/3902 kept=157
465
+ 1480/3902 kept=125
466
+ 1480/3902 kept=154
467
+ 1500/3902 kept=154
468
+ 1500/3902 kept=158
469
+ 1500/3902 kept=126
470
+ 1500/3902 kept=154
471
+ 1520/3902 kept=154
472
+ 1520/3902 kept=161
473
+ 1520/3902 kept=130
474
+ 1520/3902 kept=158
475
+ 1540/3902 kept=155
476
+ 1540/3902 kept=162
477
+ 1540/3902 kept=131
478
+ 1540/3902 kept=160
479
+ 1560/3902 kept=159
480
+ 1560/3902 kept=164
481
+ 1560/3902 kept=132
482
+ 1560/3902 kept=161
483
+ 1580/3902 kept=160
484
+ 1580/3902 kept=164
485
+ 1580/3902 kept=133
486
+ 1580/3902 kept=163
487
+ 1600/3902 kept=163
488
+ 1600/3902 kept=167
489
+ 1600/3902 kept=136
490
+ 1600/3902 kept=165
491
+ 1620/3902 kept=167
492
+ 1620/3902 kept=169
493
+ 1620/3902 kept=137
494
+ 1620/3902 kept=166
495
+ 1640/3902 kept=170
496
+ 1640/3902 kept=173
497
+ 1640/3902 kept=140
498
+ 1640/3902 kept=166
499
+ 1660/3902 kept=172
500
+ 1660/3902 kept=175
501
+ 1660/3902 kept=142
502
+ 1660/3902 kept=167
503
+ 1680/3902 kept=174
504
+ 1680/3902 kept=177
505
+ 1680/3902 kept=146
506
+ 1680/3902 kept=169
507
+ 1700/3902 kept=176
508
+ 1700/3902 kept=179
509
+ 1700/3902 kept=146
510
+ 1700/3902 kept=172
511
+ 1720/3902 kept=182
512
+ 1720/3902 kept=180
513
+ 1720/3902 kept=148
514
+ 1720/3902 kept=175
515
+ 1740/3902 kept=183
516
+ 1740/3902 kept=182
517
+ 1740/3902 kept=149
518
+ 1740/3902 kept=177
519
+ 1760/3902 kept=184
520
+ 1760/3902 kept=185
521
+ 1760/3902 kept=151
522
+ 1760/3902 kept=179
523
+ 1780/3902 kept=187
524
+ 1780/3902 kept=187
525
+ 1780/3902 kept=153
526
+ 1780/3902 kept=182
527
+ 1800/3902 kept=188
528
+ 1800/3902 kept=188
529
+ 1800/3902 kept=156
530
+ 1800/3902 kept=184
531
+ 1820/3902 kept=191
532
+ 1820/3902 kept=188
533
+ 1820/3902 kept=157
534
+ 1820/3902 kept=186
535
+ 1840/3902 kept=193
536
+ 1840/3902 kept=191
537
+ 1840/3902 kept=159
538
+ 1840/3902 kept=189
539
+ 1860/3902 kept=196
540
+ 1860/3902 kept=192
541
+ 1860/3902 kept=161
542
+ 1860/3902 kept=190
543
+ 1880/3902 kept=197
544
+ 1880/3902 kept=194
545
+ 1880/3902 kept=165
546
+ 1880/3902 kept=192
547
+ 1900/3902 kept=197
548
+ 1900/3902 kept=195
549
+ 1900/3902 kept=170
550
+ 1900/3902 kept=194
551
+ 1920/3902 kept=199
552
+ 1920/3902 kept=197
553
+ 1920/3902 kept=173
554
+ 1920/3902 kept=197
555
+ 1940/3902 kept=200
556
+ 1940/3902 kept=199
557
+ 1940/3902 kept=175
558
+ 1940/3902 kept=199
559
+ 1960/3902 kept=201
560
+ 1960/3902 kept=200
561
+ 1960/3902 kept=177
562
+ 1960/3902 kept=200
563
+ 1980/3902 kept=203
564
+ 1980/3902 kept=200
565
+ 1980/3902 kept=179
566
+ 1980/3902 kept=204
567
+ 2000/3902 kept=206
568
+ 2000/3902 kept=204
569
+ 2000/3902 kept=181
570
+ 2000/3902 kept=205
571
+ 2020/3902 kept=207
572
+ 2020/3902 kept=205
573
+ 2020/3902 kept=183
574
+ 2020/3902 kept=205
575
+ 2040/3902 kept=208
576
+ 2040/3902 kept=207
577
+ 2040/3902 kept=186
578
+ 2040/3902 kept=206
579
+ 2060/3902 kept=209
580
+ 2060/3902 kept=208
581
+ 2060/3902 kept=189
582
+ 2060/3902 kept=209
583
+ 2080/3902 kept=209
584
+ 2080/3902 kept=209
585
+ 2080/3902 kept=189
586
+ 2080/3902 kept=209
587
+ 2100/3902 kept=210
588
+ 2100/3902 kept=211
589
+ 2100/3902 kept=190
590
+ 2100/3902 kept=214
591
+ 2120/3902 kept=214
592
+ 2120/3902 kept=212
593
+ 2120/3902 kept=190
594
+ 2120/3902 kept=216
595
+ 2140/3902 kept=215
596
+ 2140/3902 kept=215
597
+ 2140/3902 kept=190
598
+ 2140/3902 kept=217
599
+ 2160/3902 kept=218
600
+ 2160/3902 kept=216
601
+ 2160/3902 kept=193
602
+ 2160/3902 kept=220
603
+ 2180/3902 kept=218
604
+ 2180/3902 kept=216
605
+ 2180/3902 kept=195
606
+ 2180/3902 kept=222
607
+ 2200/3902 kept=219
608
+ 2200/3902 kept=218
609
+ 2200/3902 kept=198
610
+ 2200/3902 kept=225
611
+ 2220/3902 kept=220
612
+ 2220/3902 kept=221
613
+ 2220/3902 kept=198
614
+ 2220/3902 kept=227
615
+ 2240/3902 kept=223
616
+ 2240/3902 kept=222
617
+ 2240/3902 kept=199
618
+ 2240/3902 kept=230
619
+ 2260/3902 kept=227
620
+ 2260/3902 kept=224
621
+ 2260/3902 kept=199
622
+ 2260/3902 kept=233
623
+ 2280/3902 kept=230
624
+ 2280/3902 kept=226
625
+ 2280/3902 kept=200
626
+ 2280/3902 kept=234
627
+ 2300/3902 kept=230
628
+ 2300/3902 kept=229
629
+ 2300/3902 kept=202
630
+ 2300/3902 kept=236
631
+ 2320/3902 kept=235
632
+ 2320/3902 kept=229
633
+ 2320/3902 kept=205
634
+ 2320/3902 kept=236
635
+ 2340/3902 kept=236
636
+ 2340/3902 kept=231
637
+ 2340/3902 kept=208
638
+ 2340/3902 kept=237
639
+ 2360/3902 kept=237
640
+ 2360/3902 kept=233
641
+ 2360/3902 kept=210
642
+ 2360/3902 kept=243
643
+ 2380/3902 kept=238
644
+ 2380/3902 kept=234
645
+ 2380/3902 kept=214
646
+ 2380/3902 kept=245
647
+ 2400/3902 kept=239
648
+ Aug 06 17:30:45.185423 1679552 slurmstepd 0x155551a0c700: error: *** JOB 31601200 ON batch-block7-00639 CANCELLED AT 2026-08-06T17:30:45 DUE TO TIME LIMIT ***
649
+ srun: Job step aborted: Waiting up to 122 seconds for job step to finish.
650
+ Aug 06 17:30:45.185763 1679643 slurmstepd 0x15555088f700: error: *** STEP 31601200.0 ON batch-block7-00639 CANCELLED AT 2026-08-06T17:30:45 DUE TO TIME LIMIT ***
logs/scaleup_3_precompute_31601202.log ADDED
@@ -0,0 +1,479 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:30: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
2
+ @amp.autocast(enabled=False)
3
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:30: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
4
+ @amp.autocast(enabled=False)
5
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:30: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
6
+ @amp.autocast(enabled=False)
7
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:41: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
8
+ @amp.autocast(enabled=False)
9
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:30: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
10
+ @amp.autocast(enabled=False)
11
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:41: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
12
+ @amp.autocast(enabled=False)
13
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:41: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
14
+ @amp.autocast(enabled=False)
15
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:30: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
16
+ @amp.autocast(enabled=False)
17
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:41: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
18
+ @amp.autocast(enabled=False)
19
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:30: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
20
+ @amp.autocast(enabled=False)
21
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:41: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
22
+ @amp.autocast(enabled=False)
23
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:41: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
24
+ @amp.autocast(enabled=False)
25
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:30: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
26
+ @amp.autocast(enabled=False)
27
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:41: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
28
+ @amp.autocast(enabled=False)
29
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:30: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
30
+ @amp.autocast(enabled=False)
31
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/motioner.py:41: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
32
+ @amp.autocast(enabled=False)
33
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:61: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
34
+ @amp.autocast(enabled=False)
35
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:61: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
36
+ @amp.autocast(enabled=False)
37
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:61: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
38
+ @amp.autocast(enabled=False)
39
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:61: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
40
+ @amp.autocast(enabled=False)
41
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:79: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
42
+ @amp.autocast(enabled=False)
43
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:61: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
44
+ @amp.autocast(enabled=False)
45
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:79: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
46
+ @amp.autocast(enabled=False)
47
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:79: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
48
+ @amp.autocast(enabled=False)
49
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:61: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
50
+ @amp.autocast(enabled=False)
51
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:79: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
52
+ @amp.autocast(enabled=False)
53
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:61: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
54
+ @amp.autocast(enabled=False)
55
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:79: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
56
+ @amp.autocast(enabled=False)
57
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:79: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
58
+ @amp.autocast(enabled=False)
59
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:79: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
60
+ @amp.autocast(enabled=False)
61
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:61: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
62
+ @amp.autocast(enabled=False)
63
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/s2v/model_s2v.py:79: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
64
+ @amp.autocast(enabled=False)
65
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:614: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
66
+ torch.load(pretrained_path, map_location=device), assign=True)
67
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:614: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
68
+ torch.load(pretrained_path, map_location=device), assign=True)
69
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:614: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
70
+ torch.load(pretrained_path, map_location=device), assign=True)
71
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:614: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
72
+ torch.load(pretrained_path, map_location=device), assign=True)
73
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:614: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
74
+ torch.load(pretrained_path, map_location=device), assign=True)
75
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:614: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
76
+ torch.load(pretrained_path, map_location=device), assign=True)
77
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:614: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
78
+ torch.load(pretrained_path, map_location=device), assign=True)
79
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:614: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
80
+ torch.load(pretrained_path, map_location=device), assign=True)
81
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/t5.py:496: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
82
+ model.load_state_dict(torch.load(checkpoint_path, map_location='cpu'))
83
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/t5.py:496: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
84
+ model.load_state_dict(torch.load(checkpoint_path, map_location='cpu'))
85
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/t5.py:496: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
86
+ model.load_state_dict(torch.load(checkpoint_path, map_location='cpu'))
87
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/t5.py:496: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
88
+ model.load_state_dict(torch.load(checkpoint_path, map_location='cpu'))
89
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/t5.py:496: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
90
+ model.load_state_dict(torch.load(checkpoint_path, map_location='cpu'))
91
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/t5.py:496: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
92
+ model.load_state_dict(torch.load(checkpoint_path, map_location='cpu'))
93
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/t5.py:496: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
94
+ model.load_state_dict(torch.load(checkpoint_path, map_location='cpu'))
95
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/t5.py:496: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
96
+ model.load_state_dict(torch.load(checkpoint_path, map_location='cpu'))
97
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:651: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
98
+ with amp.autocast(dtype=self.dtype):
99
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:651: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
100
+ with amp.autocast(dtype=self.dtype):
101
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:651: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
102
+ with amp.autocast(dtype=self.dtype):
103
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:651: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
104
+ with amp.autocast(dtype=self.dtype):
105
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:651: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
106
+ with amp.autocast(dtype=self.dtype):
107
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:651: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
108
+ with amp.autocast(dtype=self.dtype):
109
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:651: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
110
+ with amp.autocast(dtype=self.dtype):
111
+ /lustre/fs11/portfolios/healthcareeng/projects/healthcareeng_computervision/users/yuq/project/cheng/viper/third_party/Wan2.2/wan/modules/vae2_1.py:651: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
112
+ with amp.autocast(dtype=self.dtype):
113
+ [1] 20/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(26, 4096)
114
+ [0] 20/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(40, 4096)
115
+ [5] 20/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(26, 4096)
116
+ [2] 20/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
117
+ [3] 20/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(40, 4096)
118
+ [7] 20/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(24, 4096)
119
+ [6] 20/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
120
+ [4] 20/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
121
+ [1] 40/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(41, 4096)
122
+ [0] 40/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
123
+ [5] 40/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(37, 4096)
124
+ [2] 40/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
125
+ [3] 40/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
126
+ [7] 40/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
127
+ [6] 40/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
128
+ [4] 40/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
129
+ [1] 60/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
130
+ [0] 60/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
131
+ [5] 60/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
132
+ [2] 60/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
133
+ [3] 60/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
134
+ [7] 60/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
135
+ [6] 60/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
136
+ [4] 60/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
137
+ [1] 80/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(40, 4096)
138
+ [0] 80/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
139
+ [5] 80/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
140
+ [2] 80/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
141
+ [3] 80/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
142
+ [6] 80/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
143
+ [7] 80/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
144
+ [4] 80/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
145
+ [1] 100/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(45, 4096)
146
+ [0] 100/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
147
+ [5] 100/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
148
+ [2] 100/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
149
+ [3] 100/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
150
+ [6] 100/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
151
+ [7] 100/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
152
+ [4] 100/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
153
+ [0] 120/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
154
+ [1] 140/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(46, 4096)
155
+ [2] 140/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
156
+ [5] 140/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
157
+ [0] 140/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
158
+ [3] 140/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
159
+ [6] 140/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
160
+ [7] 140/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
161
+ [4] 140/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
162
+ [1] 160/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
163
+ [2] 160/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
164
+ [5] 160/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(23, 4096)
165
+ [3] 160/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
166
+ [0] 160/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(26, 4096)
167
+ [6] 160/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
168
+ [7] 160/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
169
+ [4] 160/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
170
+ [1] 180/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
171
+ [2] 180/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(24, 4096)
172
+ [5] 180/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
173
+ [3] 180/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(20, 4096)
174
+ [0] 180/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
175
+ [6] 180/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
176
+ [7] 180/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(24, 4096)
177
+ [4] 180/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
178
+ [1] 200/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
179
+ [2] 200/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
180
+ [5] 200/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
181
+ [3] 200/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
182
+ [6] 200/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
183
+ [0] 200/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
184
+ [7] 200/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
185
+ [4] 200/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(20, 4096)
186
+ [1] 220/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
187
+ [2] 220/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
188
+ [5] 220/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
189
+ [3] 220/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
190
+ [6] 220/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
191
+ [0] 220/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
192
+ [7] 220/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
193
+ [4] 220/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
194
+ [1] 240/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
195
+ [2] 240/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(26, 4096)
196
+ [0] 240/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
197
+ [1] 260/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
198
+ [2] 260/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(48, 4096)
199
+ [5] 260/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
200
+ [3] 260/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(21, 4096)
201
+ [6] 260/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
202
+ [0] 260/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
203
+ [4] 260/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
204
+ [7] 260/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
205
+ [1] 280/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
206
+ [2] 280/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
207
+ [5] 280/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
208
+ [3] 280/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
209
+ [6] 280/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
210
+ [0] 280/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
211
+ [4] 280/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
212
+ [7] 280/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
213
+ [2] 300/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(23, 4096)
214
+ [1] 300/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(24, 4096)
215
+ [5] 300/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
216
+ [3] 300/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
217
+ [6] 300/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
218
+ [0] 300/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
219
+ [4] 300/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
220
+ [7] 300/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
221
+ [2] 320/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(37, 4096)
222
+ [1] 320/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
223
+ [5] 320/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
224
+ [3] 320/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
225
+ [6] 320/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
226
+ [0] 320/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
227
+ [4] 320/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(37, 4096)
228
+ [7] 320/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
229
+ [2] 340/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
230
+ [1] 340/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(19, 4096)
231
+ [5] 340/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
232
+ [3] 340/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(44, 4096)
233
+ [6] 340/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(52, 4096)
234
+ [0] 340/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
235
+ [4] 340/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
236
+ [7] 340/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
237
+ [2] 360/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
238
+ [1] 360/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
239
+ [3] 360/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
240
+ [0] 360/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
241
+ [2] 380/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
242
+ [5] 380/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
243
+ [1] 380/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
244
+ [3] 380/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(37, 4096)
245
+ [6] 380/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
246
+ [4] 380/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(26, 4096)
247
+ [0] 380/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(43, 4096)
248
+ [7] 380/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
249
+ [2] 400/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
250
+ [5] 400/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
251
+ [1] 400/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
252
+ [3] 400/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
253
+ [6] 400/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
254
+ [4] 400/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
255
+ [0] 400/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
256
+ [7] 400/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(41, 4096)
257
+ [2] 420/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
258
+ [5] 420/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
259
+ [1] 420/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
260
+ [3] 420/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(43, 4096)
261
+ [6] 420/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
262
+ [0] 420/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
263
+ [4] 420/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
264
+ [7] 420/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(37, 4096)
265
+ [2] 440/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
266
+ [5] 440/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
267
+ [1] 440/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
268
+ [3] 440/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
269
+ [6] 440/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
270
+ [0] 440/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(42, 4096)
271
+ [4] 440/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
272
+ [7] 440/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
273
+ [2] 460/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
274
+ [5] 460/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
275
+ [1] 460/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
276
+ [3] 460/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
277
+ [6] 460/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(24, 4096)
278
+ [0] 460/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
279
+ [4] 460/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
280
+ [7] 460/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(42, 4096)
281
+ [2] 480/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(23, 4096)
282
+ [1] 480/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(21, 4096)
283
+ [0] 480/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
284
+ [2] 500/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
285
+ [5] 500/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(42, 4096)
286
+ [3] 500/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(26, 4096)
287
+ [1] 500/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
288
+ [6] 500/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
289
+ [0] 500/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
290
+ [4] 500/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(37, 4096)
291
+ [7] 500/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
292
+ [2] 520/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
293
+ [5] 520/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(26, 4096)
294
+ [3] 520/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
295
+ [1] 520/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
296
+ [6] 520/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
297
+ [0] 520/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
298
+ [4] 520/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
299
+ [7] 520/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(58, 4096)
300
+ [2] 540/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
301
+ [5] 540/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
302
+ [3] 540/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
303
+ [1] 540/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(50, 4096)
304
+ [6] 540/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
305
+ [0] 540/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
306
+ [4] 540/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
307
+ [7] 540/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
308
+ [2] 560/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
309
+ [5] 560/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
310
+ [3] 560/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
311
+ [1] 560/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
312
+ [6] 560/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
313
+ [0] 560/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(40, 4096)
314
+ [4] 560/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(43, 4096)
315
+ [7] 560/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
316
+ [2] 580/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(26, 4096)
317
+ [5] 580/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
318
+ [3] 580/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(46, 4096)
319
+ [1] 580/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(51, 4096)
320
+ [6] 580/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
321
+ [0] 580/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
322
+ [4] 580/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
323
+ [7] 580/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
324
+ [2] 600/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(26, 4096)
325
+ [3] 600/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
326
+ [1] 600/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
327
+ [0] 600/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
328
+ [2] 620/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
329
+ [5] 620/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
330
+ [3] 620/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(22, 4096)
331
+ [1] 620/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
332
+ [6] 620/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
333
+ [4] 620/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
334
+ [0] 620/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
335
+ [7] 620/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(37, 4096)
336
+ [2] 640/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(42, 4096)
337
+ [5] 640/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(24, 4096)
338
+ [3] 640/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
339
+ [1] 640/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(24, 4096)
340
+ [6] 640/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(41, 4096)
341
+ [4] 640/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
342
+ [0] 640/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
343
+ [7] 640/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(23, 4096)
344
+ [2] 660/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
345
+ [5] 660/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(44, 4096)
346
+ [3] 660/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
347
+ [1] 660/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
348
+ [6] 660/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
349
+ [4] 660/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
350
+ [0] 660/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(43, 4096)
351
+ [7] 660/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
352
+ [2] 680/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(37, 4096)
353
+ [5] 680/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(37, 4096)
354
+ [3] 680/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
355
+ [1] 680/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
356
+ [6] 680/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
357
+ [4] 680/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
358
+ [0] 680/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
359
+ [7] 680/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
360
+ [2] 700/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
361
+ [5] 700/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
362
+ [3] 700/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(45, 4096)
363
+ [1] 700/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
364
+ [6] 700/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
365
+ [4] 700/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
366
+ [0] 700/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
367
+ [7] 700/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(37, 4096)
368
+ [2] 720/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
369
+ [5] 720/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(26, 4096)
370
+ [3] 720/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
371
+ [1] 720/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
372
+ [6] 720/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(23, 4096)
373
+ [4] 720/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
374
+ [0] 720/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
375
+ [2] 740/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
376
+ [5] 740/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
377
+ [3] 740/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
378
+ [1] 740/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
379
+ [6] 740/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
380
+ [4] 740/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
381
+ [0] 740/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(40, 4096)
382
+ [7] 740/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
383
+ [2] 760/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(42, 4096)
384
+ [5] 760/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
385
+ [3] 760/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
386
+ [1] 760/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
387
+ [6] 760/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
388
+ [4] 760/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
389
+ [0] 760/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
390
+ [7] 760/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
391
+ [2] 780/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
392
+ [5] 780/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
393
+ [3] 780/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
394
+ [1] 780/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
395
+ [6] 780/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
396
+ [4] 780/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
397
+ [0] 780/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
398
+ [7] 780/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
399
+ [2] 800/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
400
+ [5] 800/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
401
+ [3] 800/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
402
+ [1] 800/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
403
+ [6] 800/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
404
+ [4] 800/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(24, 4096)
405
+ [0] 800/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
406
+ [7] 800/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
407
+ [2] 820/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
408
+ [5] 820/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
409
+ [3] 820/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
410
+ [1] 820/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
411
+ [6] 820/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
412
+ [4] 820/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(40, 4096)
413
+ [0] 820/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
414
+ [7] 820/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
415
+ [2] 840/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
416
+ [5] 840/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
417
+ [3] 840/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(23, 4096)
418
+ [1] 840/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(46, 4096)
419
+ [6] 840/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(30, 4096)
420
+ [4] 840/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
421
+ [0] 840/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(40, 4096)
422
+ [7] 840/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
423
+ [2] 860/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(24, 4096)
424
+ [5] 860/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
425
+ [3] 860/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(47, 4096)
426
+ [1] 860/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
427
+ [6] 860/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
428
+ [4] 860/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(40, 4096)
429
+ [0] 860/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(34, 4096)
430
+ [7] 860/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(26, 4096)
431
+ [2] 880/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(26, 4096)
432
+ [5] 880/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(20, 4096)
433
+ [3] 880/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
434
+ [1] 880/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
435
+ [6] 880/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(38, 4096)
436
+ [0] 880/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(24, 4096)
437
+ [4] 880/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
438
+ [7] 880/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
439
+ [2] 900/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
440
+ [5] 900/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
441
+ [3] 900/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
442
+ [1] 900/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(37, 4096)
443
+ [6] 900/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
444
+ [0] 900/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
445
+ [4] 900/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(35, 4096)
446
+ [7] 900/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(24, 4096)
447
+ [2] 920/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(32, 4096)
448
+ [5] 920/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(44, 4096)
449
+ [3] 920/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(23, 4096)
450
+ [1] 920/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(37, 4096)
451
+ [6] 920/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(25, 4096)
452
+ [0] 920/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
453
+ [4] 920/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
454
+ [7] 920/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
455
+ [2] 940/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(31, 4096)
456
+ [5] 940/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
457
+ [3] 940/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
458
+ [1] 940/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
459
+ [6] 940/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(37, 4096)
460
+ [0] 940/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
461
+ [4] 940/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
462
+ [7] 940/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(36, 4096)
463
+ [2] 960/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
464
+ [5] 960/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
465
+ [5] DONE 961/961 -> data/cache
466
+ [3] 960/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(39, 4096)
467
+ [2] DONE 962/962 -> data/cache
468
+ [3] DONE 962/962 -> data/cache
469
+ [1] 960/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(28, 4096)
470
+ [1] DONE 962/962 -> data/cache
471
+ [6] 960/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(27, 4096)
472
+ [6] DONE 961/961 -> data/cache
473
+ [0] 960/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(24, 4096)
474
+ [4] 960/962 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(33, 4096)
475
+ [7] 960/961 lat=(16, 21, 60, 104) y=(20, 21, 60, 104) ctx=(29, 4096)
476
+ [7] DONE 961/961 -> data/cache
477
+ [0] DONE 962/962 -> data/cache
478
+ [4] DONE 962/962 -> data/cache
479
+ cached clips: 7693 / 7693
scripts/eval_run.sbatch ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ #SBATCH --account=healthcareeng_computervision
3
+ #SBATCH --partition=backfill_singlenode
4
+ #SBATCH --nodes=1
5
+ #SBATCH --gpus-per-node=8
6
+ #SBATCH --exclusive
7
+ #SBATCH --time=24:00:00
8
+ #SBATCH --job-name=viper_eval
9
+ #SBATCH --output=logs/eval_run_%j.log
10
+ #
11
+ # Validation inference + evaluation, split out of full_run.sbatch.
12
+ #
13
+ # 74 held-out pairs x 2 variants (VIPER vs zeroed physics tokens) = 148 videos
14
+ # at 50 sampling steps / 81 frames / 480p, over 4 ranks of 2 GPUs. Set
15
+ # INFER_LIMIT to generate only the first N pairs if the queue is tight.
16
+ set -e
17
+ cd "$SLURM_SUBMIT_DIR"
18
+ source env.sh
19
+
20
+ export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
21
+ export PYTHONUNBUFFERED=1
22
+
23
+ CKPT=${CKPT:-checkpoints/stage3/final.pt}
24
+
25
+ echo "=== validation inference (VIPER vs no-physics) from $CKPT ==="
26
+ srun --ntasks=4 scripts/run_infer.sh "$CKPT"
27
+ cat results/manifest.jsonl.* > results/manifest.jsonl
28
+
29
+ echo "=== evaluating generated videos ==="
30
+ .venv/bin/python -m viper.eval --manifest results/manifest.jsonl \
31
+ --out results/eval_viper.json
32
+
33
+ echo "=== paired conditioning ablation (reference vs zeroed physics tokens) ==="
34
+ for STAGE in 1 2 3; do
35
+ .venv/bin/python -m viper.eval_loss --ckpt checkpoints/stage$STAGE/final.pt \
36
+ --out results/eval_loss_stage$STAGE.json
37
+ done
scripts/fetch_wisa.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Fetch + extract the WISA-80K wan480p shards.
2
+
3
+ The clips live in ``csusupergear/WISA-80K-wan480p-16fps-81f`` as 276 webdataset
4
+ tars; shard ``N`` holds ids ``N*100 .. N*100+99`` as ``<id>.{mp4,txt,json}``.
5
+ Download and extraction are interleaved over a thread pool so a shard is unpacked
6
+ as soon as it lands. Both steps are idempotent: an already-downloaded shard is
7
+ served from the HF cache and an already-extracted shard is skipped.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import argparse
13
+ import os
14
+ import tarfile
15
+ from concurrent.futures import ThreadPoolExecutor, as_completed
16
+ from pathlib import Path
17
+
18
+ REPO = "csusupergear/WISA-80K-wan480p-16fps-81f"
19
+
20
+
21
+ def shard_done(vdir: Path, shard: int) -> bool:
22
+ """A shard counts as extracted when its last clip's three files exist."""
23
+ last = f"{shard * 100 + 99:08d}"
24
+ return all((vdir / f"{last}.{ext}").exists() for ext in ("mp4", "txt", "json"))
25
+
26
+
27
+ def fetch_one(shard: int, raw_dir: Path, vdir: Path) -> tuple[int, str]:
28
+ from huggingface_hub import hf_hub_download
29
+
30
+ if shard_done(vdir, shard):
31
+ return shard, "skip"
32
+ path = hf_hub_download(
33
+ REPO, f"{shard:06d}.tar", repo_type="dataset",
34
+ local_dir=str(raw_dir),
35
+ )
36
+ with tarfile.open(path) as tf:
37
+ tf.extractall(vdir)
38
+ return shard, "ok"
39
+
40
+
41
+ def main():
42
+ ap = argparse.ArgumentParser()
43
+ ap.add_argument("--num_shards", type=int, default=276)
44
+ ap.add_argument("--raw_dir", default="data/raw/wisa_wan480p")
45
+ ap.add_argument("--video_dir", default="data/videos")
46
+ ap.add_argument("--workers", type=int, default=8)
47
+ args = ap.parse_args()
48
+
49
+ raw_dir, vdir = Path(args.raw_dir), Path(args.video_dir)
50
+ vdir.mkdir(parents=True, exist_ok=True)
51
+
52
+ done = n_err = 0
53
+ with ThreadPoolExecutor(args.workers) as ex:
54
+ futs = {ex.submit(fetch_one, s, raw_dir, vdir): s
55
+ for s in range(args.num_shards)}
56
+ for f in as_completed(futs):
57
+ s = futs[f]
58
+ try:
59
+ _, status = f.result()
60
+ except Exception as e: # network / corrupt tar
61
+ n_err += 1
62
+ print(f"[err] shard {s}: {e}", flush=True)
63
+ continue
64
+ done += 1
65
+ if done % 10 == 0:
66
+ print(f"{done}/{args.num_shards} shards ({status} {s:06d})",
67
+ flush=True)
68
+
69
+ n = len(list(vdir.glob("*.mp4")))
70
+ print(f"DONE shards={done} errors={n_err} clips={n}", flush=True)
71
+
72
+
73
+ if __name__ == "__main__":
74
+ main()
scripts/full_run.sbatch CHANGED
@@ -8,16 +8,20 @@
8
  #SBATCH --job-name=viper_train
9
  #SBATCH --output=logs/full_run_%j.log
10
  #
11
- # Three-stage VIPER training, then batch inference + eval on the held-out pairs.
 
 
 
12
  #
13
- # Step counts are scaled DOWN from the paper's 3K/6K/6K. The paper trains on
14
- # VIPER-19K; our mini dataset is 523 clips / 64 pairs, so the paper's schedule
15
- # would be many hundreds of epochs over the pair set and would just memorise it.
16
- # We keep the stage ratio (1 : 2 : 2 relative weight) and size stage 1 to a few
17
- # epochs over the clip set.
18
  #
19
  # Throughput reference: 35.8 s/optimizer-step measured on one A100-80GB at
20
- # 81x480x832 (seq_len 32760). With 8 ranks that is 8 samples per step.
 
21
  set -e
22
  cd "$SLURM_SUBMIT_DIR"
23
  source env.sh
@@ -25,20 +29,11 @@ source env.sh
25
  export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
26
  export PYTHONUNBUFFERED=1
27
 
28
- STEPS=400 scripts/train.sh 1
29
- STEPS=200 scripts/train.sh 2
30
- STEPS=200 scripts/train.sh 3
 
 
 
31
 
32
- echo "=== training complete: running validation inference (VIPER vs no-physics) ==="
33
- srun --ntasks=4 scripts/run_infer.sh checkpoints/stage3/final.pt
34
- cat results/manifest.jsonl.* > results/manifest.jsonl
35
-
36
- echo "=== evaluating generated videos ==="
37
- .venv/bin/python -m viper.eval --manifest results/manifest.jsonl \
38
- --out results/eval_viper.json
39
-
40
- echo "=== paired conditioning ablation (reference vs zeroed physics tokens) ==="
41
- for STAGE in 1 2 3; do
42
- .venv/bin/python -m viper.eval_loss --ckpt checkpoints/stage$STAGE/final.pt \
43
- --out results/eval_loss_stage$STAGE.json
44
- done
 
8
  #SBATCH --job-name=viper_train
9
  #SBATCH --output=logs/full_run_%j.log
10
  #
11
+ # Three-stage VIPER training. Inference + eval now live in eval_run.sbatch:
12
+ # after the scale-up the validation set is 74 pairs x 2 variants = 148 videos,
13
+ # which no longer fits the same 24h window as 17.4h of training, and a timeout
14
+ # would take the evaluation down with it.
15
  #
16
+ # Step counts are still scaled down from the paper's 3K/6K/6K, but the binding
17
+ # constraint is now wall clock, not overfitting: after the full-WISA scale-up the
18
+ # dataset is ~7.7K clips / ~hundreds of pairs, so the old 400/200/200 schedule no
19
+ # longer even covers one epoch of stage 1. We keep the paper's 1 : 2 : 2 stage
20
+ # ratio and size the total to the 24h limit.
21
  #
22
  # Throughput reference: 35.8 s/optimizer-step measured on one A100-80GB at
23
+ # 81x480x832 (seq_len 32760). With 8 ranks that is 8 samples per step, so
24
+ # 350+700+700 = 1750 steps ~= 17.4h, leaving room for inference + eval.
25
  set -e
26
  cd "$SLURM_SUBMIT_DIR"
27
  source env.sh
 
29
  export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
30
  export PYTHONUNBUFFERED=1
31
 
32
+ # Train on the split-restricted sets, never on data/annotated.jsonl or
33
+ # data/pairs.jsonl: those still contain the held-out validation videos, and
34
+ # viper.eval reports on exactly those.
35
+ STEPS=${STEPS1:-350} scripts/train.sh 1 --clips data/clips_train.jsonl
36
+ STEPS=${STEPS2:-700} scripts/train.sh 2 --pairs data/pairs_train.jsonl
37
+ STEPS=${STEPS3:-700} scripts/train.sh 3 --pairs data/pairs_train.jsonl
38
 
39
+ echo "=== training complete: checkpoints/stage{1,2,3}/final.pt ==="
 
 
 
 
 
 
 
 
 
 
 
 
scripts/make_splits.py CHANGED
@@ -20,7 +20,14 @@ def main():
20
  ap.add_argument("--pairs", default="data/pairs.jsonl")
21
  ap.add_argument("--train_out", default="data/pairs_train.jsonl")
22
  ap.add_argument("--val_out", default="data/pairs_val.jsonl")
23
- ap.add_argument("--val_frac", type=float, default=0.15)
 
 
 
 
 
 
 
24
  ap.add_argument("--seed", type=int, default=0)
25
  args = ap.parse_args()
26
 
@@ -50,11 +57,21 @@ def main():
50
  for r in data:
51
  f.write(json.dumps(r, ensure_ascii=False) + "\n")
52
 
 
 
 
 
 
 
 
 
 
53
  dropped = len(rows) - len(train) - len(val)
54
  print(f"videos: {len(vids)} ({len(val_vids)} held out)")
55
  print(f"train pairs: {len(train)}")
56
  print(f"val pairs: {len(val)}")
57
  print(f"dropped (cross-split, would leak): {dropped}")
 
58
 
59
 
60
  if __name__ == "__main__":
 
20
  ap.add_argument("--pairs", default="data/pairs.jsonl")
21
  ap.add_argument("--train_out", default="data/pairs_train.jsonl")
22
  ap.add_argument("--val_out", default="data/pairs_val.jsonl")
23
+ ap.add_argument("--clips", default="data/annotated.jsonl",
24
+ help="stage-1 clip set to filter against the held-out videos")
25
+ ap.add_argument("--clips_train_out", default="data/clips_train.jsonl")
26
+ # 0.08 of ~930 judged pairs is 74 validation pairs -- the size the paper
27
+ # reports on. A larger fraction is actively harmful here: every held-out
28
+ # clip quarantines all the *training* pairs it appears in, so val_frac 0.15
29
+ # costs ~145 train pairs relative to 0.08 for validation we do not need.
30
+ ap.add_argument("--val_frac", type=float, default=0.08)
31
  ap.add_argument("--seed", type=int, default=0)
32
  args = ap.parse_args()
33
 
 
57
  for r in data:
58
  f.write(json.dumps(r, ensure_ascii=False) + "\n")
59
 
60
+ # Stage 1 trains on single clips with self-reference augmentation. It must
61
+ # not see the held-out videos either, or a validation pair's target has
62
+ # already been reconstructed during training.
63
+ clips = [json.loads(l) for l in open(args.clips)]
64
+ clips_train = [c for c in clips if c["id"] not in val_vids]
65
+ with open(args.clips_train_out, "w") as f:
66
+ for c in clips_train:
67
+ f.write(json.dumps(c, ensure_ascii=False) + "\n")
68
+
69
  dropped = len(rows) - len(train) - len(val)
70
  print(f"videos: {len(vids)} ({len(val_vids)} held out)")
71
  print(f"train pairs: {len(train)}")
72
  print(f"val pairs: {len(val)}")
73
  print(f"dropped (cross-split, would leak): {dropped}")
74
+ print(f"stage-1 clips: {len(clips_train)} / {len(clips)}")
75
 
76
 
77
  if __name__ == "__main__":
scripts/push_to_hf.py CHANGED
@@ -93,6 +93,12 @@ def main():
93
  ap.add_argument("--repo_type", default="model")
94
  ap.add_argument("--token", default=os.environ.get("HF_PUSH_TOKEN"))
95
  ap.add_argument("--dry_run", action="store_true")
 
 
 
 
 
 
96
  args = ap.parse_args()
97
 
98
  if not args.token:
@@ -154,6 +160,30 @@ def main():
154
  commit_message="qualitative comparison videos "
155
  "(reference / target GT / Wan2.2 baseline / VIPER)",
156
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  print(f"done: https://huggingface.co/{args.repo}")
158
 
159
 
 
93
  ap.add_argument("--repo_type", default="model")
94
  ap.add_argument("--token", default=os.environ.get("HF_PUSH_TOKEN"))
95
  ap.add_argument("--dry_run", action="store_true")
96
+ ap.add_argument(
97
+ "--with_videos", action="store_true",
98
+ help="also upload the clips actually referenced by data/pairs_train.jsonl "
99
+ "and data/pairs_val.jsonl (not all of data/videos, which is the full "
100
+ "raw WISA-80K download cache)",
101
+ )
102
  args = ap.parse_args()
103
 
104
  if not args.token:
 
160
  commit_message="qualitative comparison videos "
161
  "(reference / target GT / Wan2.2 baseline / VIPER)",
162
  )
163
+ if args.with_videos:
164
+ import json as _json
165
+ ids = set()
166
+ for fn in ("data/pairs_train.jsonl", "data/pairs_val.jsonl"):
167
+ for line in (ROOT / fn).read_text().splitlines():
168
+ d = _json.loads(line)
169
+ ids.add(d["ref_id"])
170
+ ids.add(d["tgt_id"])
171
+ patterns = [f"{i}{ext}" for i in ids for ext in (".mp4", ".txt", ".json")]
172
+ vids_dir = ROOT / "data" / "videos"
173
+ size = sum((vids_dir / p).stat().st_size for p in patterns
174
+ if (vids_dir / p).exists())
175
+ print(f"\nuploading {len(ids)} clips referenced by pairs_train/pairs_val "
176
+ f"({size/1e9:.2f} GB) from data/videos ...")
177
+ api.upload_folder(
178
+ folder_path=str(vids_dir),
179
+ path_in_repo="data/videos",
180
+ repo_id=args.repo,
181
+ repo_type=args.repo_type,
182
+ allow_patterns=patterns,
183
+ commit_message="training clips referenced by pairs_train.jsonl / "
184
+ "pairs_val.jsonl (WISA-80K subset, apache-2.0)",
185
+ )
186
+
187
  print(f"done: https://huggingface.co/{args.repo}")
188
 
189
 
scripts/run_infer.sh CHANGED
@@ -8,5 +8,5 @@ export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
8
  exec .venv/bin/python -m viper.infer_batch \
9
  --ckpt "$CKPT" --pairs data/pairs_val.jsonl \
10
  --out_dir results/videos --manifest results/manifest.jsonl \
11
- --ablate_no_physics \
12
  --shard $SLURM_LOCALID --num_shards $SLURM_NTASKS
 
8
  exec .venv/bin/python -m viper.infer_batch \
9
  --ckpt "$CKPT" --pairs data/pairs_val.jsonl \
10
  --out_dir results/videos --manifest results/manifest.jsonl \
11
+ --ablate_no_physics --limit ${INFER_LIMIT:-0} \
12
  --shard $SLURM_LOCALID --num_shards $SLURM_NTASKS
scripts/run_judge.sh CHANGED
@@ -6,4 +6,6 @@ export CUDA_VISIBLE_DEVICES=$((SLURM_LOCALID*2)),$((SLURM_LOCALID*2+1))
6
  exec .venv/bin/python -m viper.data.build_pairs \
7
  --annotated data/annotated.jsonl --out data/pairs.jsonl \
8
  --judge models/Qwen3-VL-32B-Instruct \
9
- --shard $SLURM_LOCALID --num_shards $SLURM_NTASKS
 
 
 
6
  exec .venv/bin/python -m viper.data.build_pairs \
7
  --annotated data/annotated.jsonl --out data/pairs.jsonl \
8
  --judge models/Qwen3-VL-32B-Instruct \
9
+ --max_per_bucket ${MAX_PER_BUCKET:-60} --limit ${JUDGE_LIMIT:-0} \
10
+ --deadline_min ${JUDGE_DEADLINE_MIN:-0} \
11
+ --shard $SLURM_LOCALID --num_shards $SLURM_NTASKS "$@"
scripts/run_precompute.sh CHANGED
@@ -1,7 +1,9 @@
1
  #!/bin/bash
2
  cd "$(dirname "$0")/.."
3
  source env.sh
4
- export CUDA_VISIBLE_DEVICES=$((SLURM_LOCALID*2))
 
 
5
  exec .venv/bin/python -m viper.precompute \
6
- --clips data/annotated.jsonl --out_dir data/cache \
7
  --shard $SLURM_LOCALID --num_shards $SLURM_NTASKS
 
1
  #!/bin/bash
2
  cd "$(dirname "$0")/.."
3
  source env.sh
4
+ # GPU_STRIDE=2 leaves a spare card per rank (the 4-rank pilot ran that way);
5
+ # with 8 ranks the VAE + umT5 pair fits comfortably on one 80GB card each.
6
+ export CUDA_VISIBLE_DEVICES=$((SLURM_LOCALID*${GPU_STRIDE:-1}))
7
  exec .venv/bin/python -m viper.precompute \
8
+ --clips ${CLIPS:-data/annotated.jsonl} --out_dir data/cache \
9
  --shard $SLURM_LOCALID --num_shards $SLURM_NTASKS
scripts/scaleup_1_annotate.sbatch ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ #SBATCH --account=healthcareeng_computervision
3
+ #SBATCH --partition=interactive_singlenode
4
+ #SBATCH --nodes=1
5
+ #SBATCH --gpus-per-node=8
6
+ #SBATCH --exclusive
7
+ #SBATCH --time=04:00:00
8
+ #SBATCH --job-name=viper_su1_annotate
9
+ #SBATCH --output=logs/scaleup_1_annotate_%j.log
10
+ #
11
+ # Scale-up step 1: clip filtering + 3-axis physics annotation over the FULL
12
+ # WISA-80K wan480p subset (276 shards / 27.6K clips) instead of the 20-shard
13
+ # / 2K-clip pilot.
14
+ #
15
+ # Filtering is CPU/decode-bound (the cut detector decodes every clip that passed
16
+ # the metadata checks) -> multiprocess over the node's cores.
17
+ # Annotation is Qwen3-VL-4B, one rank per GPU.
18
+ set -e
19
+ cd "$SLURM_SUBMIT_DIR"
20
+ source env.sh
21
+ export PYTHONUNBUFFERED=1
22
+
23
+ if [ -s data/filtered_clips.jsonl ] && [ -z "$FORCE_FILTER" ]; then
24
+ echo "=== clip filtering: reusing $(wc -l < data/filtered_clips.jsonl) rows ==="
25
+ else
26
+ echo "=== clip filtering ($(ls data/videos/*.mp4 | wc -l) clips on disk) ==="
27
+ .venv/bin/python -m viper.data.filter_clips \
28
+ --video_dir data/videos --out data/filtered_clips.jsonl --workers 64
29
+ fi
30
+
31
+ # NOTE: no --gpus-per-task here. run_annotate.sh picks its card with
32
+ # CUDA_VISIBLE_DEVICES=$SLURM_LOCALID, which needs all 8 GPUs visible to every
33
+ # task; --gpus-per-task=1 renumbers them to 0 and ranks 1-7 die with
34
+ # "No CUDA GPUs are available".
35
+ echo "=== 3-axis annotation (Qwen3-VL-4B, 8 ranks) ==="
36
+ srun --ntasks=8 scripts/run_annotate.sh
37
+
38
+ cat data/annotated.jsonl.[0-7] > data/annotated.jsonl
39
+ echo "filtered_clips: $(wc -l < data/filtered_clips.jsonl)"
40
+ echo "annotated: $(wc -l < data/annotated.jsonl)"
scripts/scaleup_2_pairs.sbatch ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ #SBATCH --account=healthcareeng_computervision
3
+ #SBATCH --partition=interactive_singlenode
4
+ #SBATCH --nodes=1
5
+ #SBATCH --gpus-per-node=8
6
+ #SBATCH --exclusive
7
+ #SBATCH --time=04:00:00
8
+ #SBATCH --job-name=viper_su2_pairs
9
+ #SBATCH --output=logs/scaleup_2_pairs_%j.log
10
+ #
11
+ # Scale-up step 2: bucket the annotated clips into candidate pairs and run the
12
+ # Qwen3-VL-32B transferability judge over them (4 ranks x 2 GPUs).
13
+ #
14
+ # MAX_PER_BUCKET is raised from the pilot's 60 because the clip set is ~13x
15
+ # larger. The judge measures ~6 s/pair/rank (two 6-frame videos per call), so
16
+ # 4 ranks get through ~2.4K pairs/hour in total -- a full 15.6K candidate set
17
+ # does NOT fit the 4h interactive limit. JUDGE_DEADLINE_MIN makes each rank stop
18
+ # early and exit 0, so the concatenation + split below still run and the afterok
19
+ # dependents survive; whatever was judged by then is kept.
20
+ set -e
21
+ cd "$SLURM_SUBMIT_DIR"
22
+ source env.sh
23
+ export PYTHONUNBUFFERED=1
24
+
25
+ export MAX_PER_BUCKET=${MAX_PER_BUCKET:-400}
26
+ export JUDGE_LIMIT=${JUDGE_LIMIT:-16000}
27
+ export JUDGE_DEADLINE_MIN=${JUDGE_DEADLINE_MIN:-195}
28
+
29
+ echo "=== candidate pairs (bucketing only, for the record) ==="
30
+ .venv/bin/python -m viper.data.build_pairs \
31
+ --annotated data/annotated.jsonl --out data/pairs_candidates.jsonl \
32
+ --max_per_bucket $MAX_PER_BUCKET --skip_judge
33
+
34
+ echo "=== transferability judging (Qwen3-VL-32B, 4 ranks x 2 GPUs) ==="
35
+ srun --ntasks=4 scripts/run_judge.sh # no --gpus-per-task: run_judge.sh maps cards itself
36
+
37
+ cat data/pairs.jsonl.[0-3] > data/pairs.jsonl
38
+ echo "candidates: $(wc -l < data/pairs_candidates.jsonl)"
39
+ echo "judged-kept pairs: $(wc -l < data/pairs.jsonl)"
40
+
41
+ echo "=== video-disjoint split ==="
42
+ .venv/bin/python scripts/make_splits.py
scripts/scaleup_3_precompute.sbatch ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ #SBATCH --account=healthcareeng_computervision
3
+ #SBATCH --partition=interactive_singlenode
4
+ #SBATCH --nodes=1
5
+ #SBATCH --gpus-per-node=8
6
+ #SBATCH --exclusive
7
+ #SBATCH --time=04:00:00
8
+ #SBATCH --job-name=viper_su3_precompute
9
+ #SBATCH --output=logs/scaleup_3_precompute_%j.log
10
+ #
11
+ # Scale-up step 3: cache the frozen VAE latents / I2V conditioning / umT5
12
+ # embeddings for every annotated clip (~9.2MB per clip). Independent of the
13
+ # pair judging, so this runs on its own node in parallel with step 2.
14
+ #
15
+ # Resumable: viper.precompute skips ids already present in data/cache, so a
16
+ # requeue after the 4h interactive limit just continues.
17
+ set -e
18
+ cd "$SLURM_SUBMIT_DIR"
19
+ source env.sh
20
+ export PYTHONUNBUFFERED=1
21
+
22
+ srun --ntasks=8 scripts/run_precompute.sh # no --gpus-per-task: the rank maps its own card
23
+
24
+ echo "cached clips: $(ls data/cache/*.pt | wc -l) / $(wc -l < data/annotated.jsonl)"
viper/data/build_pairs.py CHANGED
@@ -23,6 +23,7 @@ import argparse
23
  import json
24
  import random
25
  import re
 
26
  from collections import defaultdict
27
  from pathlib import Path
28
 
@@ -123,6 +124,9 @@ def build_candidates(rows, max_per_bucket, max_caption_sim, seed=0):
123
  })
124
  bucket_stats[str(key)] = len(pairs)
125
  cands.extend(pairs)
 
 
 
126
  return cands, bucket_stats
127
 
128
 
@@ -137,6 +141,12 @@ def main():
137
  ap.add_argument("--num_frames", type=int, default=6)
138
  ap.add_argument("--skip_judge", action="store_true",
139
  help="write candidates without MLLM filtering (debug)")
 
 
 
 
 
 
140
  ap.add_argument("--limit", type=int, default=0)
141
  ap.add_argument("--shard", type=int, default=0)
142
  ap.add_argument("--num_shards", type=int, default=1)
@@ -173,8 +183,12 @@ def main():
173
  ).eval()
174
 
175
  kept = 0
 
176
  with open(args.out, "w") as f:
177
  for i, c in enumerate(cands):
 
 
 
178
  try:
179
  rf = sample_frames(c["ref_video"], args.num_frames)
180
  tf = sample_frames(c["tgt_video"], args.num_frames)
 
23
  import json
24
  import random
25
  import re
26
+ import time
27
  from collections import defaultdict
28
  from pathlib import Path
29
 
 
124
  })
125
  bucket_stats[str(key)] = len(pairs)
126
  cands.extend(pairs)
127
+ # Candidates come out grouped by bucket; shuffle so that a later --limit
128
+ # keeps a bucket-balanced sample instead of only the first few buckets.
129
+ rng.shuffle(cands)
130
  return cands, bucket_stats
131
 
132
 
 
141
  ap.add_argument("--num_frames", type=int, default=6)
142
  ap.add_argument("--skip_judge", action="store_true",
143
  help="write candidates without MLLM filtering (debug)")
144
+ ap.add_argument("--deadline_min", type=float, default=0,
145
+ help="stop judging after this many minutes and exit cleanly; "
146
+ "0 disables. The judge runs at ~6 s/pair/rank, so a "
147
+ "large candidate set will not fit a 4h interactive "
148
+ "window -- without this the job is SIGKILLed at the "
149
+ "wall clock and its afterok dependents are cancelled.")
150
  ap.add_argument("--limit", type=int, default=0)
151
  ap.add_argument("--shard", type=int, default=0)
152
  ap.add_argument("--num_shards", type=int, default=1)
 
183
  ).eval()
184
 
185
  kept = 0
186
+ t0 = time.monotonic()
187
  with open(args.out, "w") as f:
188
  for i, c in enumerate(cands):
189
+ if args.deadline_min and (time.monotonic() - t0) / 60 > args.deadline_min:
190
+ print(f"[deadline] stopping at {i}/{len(cands)} judged", flush=True)
191
+ break
192
  try:
193
  rf = sample_frames(c["ref_video"], args.num_frames)
194
  tf = sample_frames(c["tgt_video"], args.num_frames)
viper/data/filter_clips.py CHANGED
@@ -74,6 +74,49 @@ def detect_shot_transitions(path: str, thresh: float = 0.45, stride: int = 2) ->
74
  return cuts
75
 
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  def main():
78
  ap = argparse.ArgumentParser()
79
  ap.add_argument("--video_dir", default="data/videos")
@@ -82,49 +125,35 @@ def main():
82
  ap.add_argument("--min_motion", type=float, default=1.0)
83
  ap.add_argument("--max_text_ratio", type=float, default=0.01)
84
  ap.add_argument("--max_cuts", type=int, default=0)
 
 
85
  args = ap.parse_args()
86
 
87
  vdir = Path(args.video_dir)
88
  metas = sorted(vdir.glob("*.json"))
89
- kept, stats = [], {"total": 0, "label": 0, "quality": 0, "motion": 0,
90
- "text": 0, "cuts": 0, "kept": 0}
91
-
92
- for mp in metas:
93
- stats["total"] += 1
94
- m = json.loads(mp.read_text())
95
- mp4 = mp.with_suffix(".mp4")
96
- if not mp4.exists():
97
- continue
98
-
99
- if m.get("label") not in PHYSICAL_EVENT_LABELS:
100
- stats["label"] += 1
101
- continue
102
- if float(m.get("visual_quality_score", 0)) < args.min_quality:
103
- stats["quality"] += 1
104
- continue
105
- if float(m.get("motion_score", 0)) < args.min_motion:
106
- stats["motion"] += 1
107
- continue
108
- if float(m.get("text_bbox_ratio", 0)) > args.max_text_ratio:
109
- stats["text"] += 1
110
- continue
111
-
112
- cuts = detect_shot_transitions(str(mp4))
113
- if cuts > args.max_cuts:
114
- stats["cuts"] += 1
115
- continue
116
-
117
- caption = mp.with_suffix(".txt")
118
- kept.append({
119
- "id": mp.stem,
120
- "video": str(mp4),
121
- "label": m["label"],
122
- "caption": caption.read_text().strip() if caption.exists() else "",
123
- "phys_law": m.get("physical_annotation", {}).get("phys_law", ""),
124
- "motion_score": m.get("motion_score"),
125
- "visual_quality_score": m.get("visual_quality_score"),
126
- })
127
- stats["kept"] += 1
128
 
129
  os.makedirs(Path(args.out).parent, exist_ok=True)
130
  with open(args.out, "w") as f:
 
74
  return cuts
75
 
76
 
77
+ def check_clip(mp: Path, args) -> tuple[str, dict | None]:
78
+ """Run every filter on one clip. Returns (reason, row); row is None if cut."""
79
+ m = json.loads(mp.read_text())
80
+ mp4 = mp.with_suffix(".mp4")
81
+ if not mp4.exists():
82
+ return "missing", None
83
+
84
+ if m.get("label") not in PHYSICAL_EVENT_LABELS:
85
+ return "label", None
86
+ if float(m.get("visual_quality_score", 0)) < args.min_quality:
87
+ return "quality", None
88
+ if float(m.get("motion_score", 0)) < args.min_motion:
89
+ return "motion", None
90
+ if float(m.get("text_bbox_ratio", 0)) > args.max_text_ratio:
91
+ return "text", None
92
+
93
+ # Decoding is the expensive part, so it runs last -- only on clips that
94
+ # already passed every metadata check.
95
+ try:
96
+ cuts = detect_shot_transitions(str(mp4))
97
+ except Exception:
98
+ return "decode", None
99
+ if cuts > args.max_cuts:
100
+ return "cuts", None
101
+
102
+ caption = mp.with_suffix(".txt")
103
+ return "kept", {
104
+ "id": mp.stem,
105
+ "video": str(mp4),
106
+ "label": m["label"],
107
+ "caption": caption.read_text().strip() if caption.exists() else "",
108
+ "phys_law": m.get("physical_annotation", {}).get("phys_law", ""),
109
+ "motion_score": m.get("motion_score"),
110
+ "visual_quality_score": m.get("visual_quality_score"),
111
+ }
112
+
113
+
114
+ def _check(pair):
115
+ """Top-level wrapper so ProcessPoolExecutor can pickle the work item."""
116
+ mp, args = pair
117
+ return check_clip(mp, args)
118
+
119
+
120
  def main():
121
  ap = argparse.ArgumentParser()
122
  ap.add_argument("--video_dir", default="data/videos")
 
125
  ap.add_argument("--min_motion", type=float, default=1.0)
126
  ap.add_argument("--max_text_ratio", type=float, default=0.01)
127
  ap.add_argument("--max_cuts", type=int, default=0)
128
+ ap.add_argument("--workers", type=int, default=1,
129
+ help="processes for the decode-bound cut detector")
130
  args = ap.parse_args()
131
 
132
  vdir = Path(args.video_dir)
133
  metas = sorted(vdir.glob("*.json"))
134
+ kept, stats = [], {"total": len(metas), "missing": 0, "label": 0,
135
+ "quality": 0, "motion": 0, "text": 0, "decode": 0,
136
+ "cuts": 0, "kept": 0}
137
+
138
+ if args.workers > 1:
139
+ import cv2
140
+ from concurrent.futures import ProcessPoolExecutor
141
+
142
+ cv2.setNumThreads(1) # avoid oversubscribing the node
143
+ with ProcessPoolExecutor(args.workers) as ex:
144
+ results = ex.map(_check, ((mp, args) for mp in metas), chunksize=16)
145
+ for i, (reason, row) in enumerate(results):
146
+ stats[reason] += 1
147
+ if row is not None:
148
+ kept.append(row)
149
+ if i % 2000 == 0:
150
+ print(f"{i}/{len(metas)} kept={len(kept)}", flush=True)
151
+ else:
152
+ for mp in metas:
153
+ reason, row = check_clip(mp, args)
154
+ stats[reason] += 1
155
+ if row is not None:
156
+ kept.append(row)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
 
158
  os.makedirs(Path(args.out).parent, exist_ok=True)
159
  with open(args.out, "w") as f: