|
22 | 22 | from megatron.bridge.training.utils.packed_seq_utils import get_packed_seq_params |
23 | 23 |
|
24 | 24 |
|
25 | | -@pytest.mark.unit |
26 | | -@pytest.mark.parametrize( |
27 | | - "image_sizes,expected_boundaries,expected_max", |
28 | | - [ |
29 | | - ([[512, 512]], [0, 1024], 1024), |
30 | | - ([[32, 48], [64, 32]], [0, 6, 14], 8), |
31 | | - ], |
32 | | -) |
33 | | -def test_vision_packed_metadata_uses_integer_maxima(image_sizes, expected_boundaries, expected_max): |
34 | | - image_sizes = torch.tensor(image_sizes, dtype=torch.int64) |
35 | | - |
36 | | - metadata = nemotron_omni_step._build_vision_packed_seq_params(image_sizes) |
37 | | - |
38 | | - assert metadata.qkv_format == "thd" |
39 | | - assert type(metadata.max_seqlen_q) is int |
40 | | - assert type(metadata.max_seqlen_kv) is int |
41 | | - assert metadata.max_seqlen_q == metadata.max_seqlen_kv == expected_max |
42 | | - for boundaries in (metadata.cu_seqlens_q, metadata.cu_seqlens_kv): |
43 | | - assert boundaries.tolist() == expected_boundaries |
44 | | - assert boundaries.dtype == torch.int32 |
45 | | - assert boundaries.device == image_sizes.device |
46 | | - |
47 | | - |
48 | 25 | def test_batch_moves_only_one_compatible_token_alias_to_cuda(monkeypatch): |
49 | 26 | cuda_inputs = [] |
50 | 27 |
|
@@ -145,27 +122,6 @@ def _pipeline_cfg(*, packed=True, defer_packing=False, temporal_patch_dim=1): |
145 | 122 | ) |
146 | 123 |
|
147 | 124 |
|
148 | | -@pytest.mark.unit |
149 | | -@pytest.mark.parametrize("packed", [False, True]) |
150 | | -def test_first_pipeline_batch_keeps_vision_maxima_as_integers(monkeypatch, packed): |
151 | | - monkeypatch.setattr(torch.Tensor, "cuda", lambda self, **kwargs: self) |
152 | | - monkeypatch.setattr(nemotron_omni_step, "is_pp_first_stage", lambda group: True) |
153 | | - monkeypatch.setattr(nemotron_omni_step, "is_pp_last_stage", lambda group: False) |
154 | | - batch = _packed_pipeline_batch() |
155 | | - if not packed: |
156 | | - for key in (*nemotron_omni_step._PACKED_SEQ_PARAM_KEYS, "padding_mask"): |
157 | | - batch.pop(key, None) |
158 | | - |
159 | | - result = get_batch(iter([batch]), _pipeline_cfg(packed=packed), pg_collection=SimpleNamespace(pp=object())) |
160 | | - |
161 | | - vision_metadata = result[12] |
162 | | - assert type(vision_metadata.max_seqlen_q) is int |
163 | | - assert type(vision_metadata.max_seqlen_kv) is int |
164 | | - assert vision_metadata.max_seqlen_q == vision_metadata.max_seqlen_kv == 4 |
165 | | - assert vision_metadata.cu_seqlens_q.tolist() == [0, 4, 8] |
166 | | - assert vision_metadata.cu_seqlens_kv.tolist() == [0, 4, 8] |
167 | | - |
168 | | - |
169 | 125 | def test_forward_rejects_deferred_multimodal_packing(): |
170 | 126 | state = SimpleNamespace( |
171 | 127 | timers=None, |
|
0 commit comments