Skip to content
This repository was archived by the owner on May 20, 2026. It is now read-only.

Commit 16918e0

Browse files
committed
fix lint errors.
1 parent 300b261 commit 16918e0

21 files changed

Lines changed: 201 additions & 180 deletions

dfm/src/common/utils/dynamic_import.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import importlib
1616

17+
1718
def dynamic_import(full_path):
1819
"""
1920
Dynamically import a class or function from a given full path.

dfm/src/common/utils/save_video.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
1615
import imageio
1716
import numpy as np
17+
import torch
1818

1919

2020
def save_video(
@@ -25,7 +25,6 @@ def save_video(
2525
video_save_quality: int,
2626
video_save_path: str,
2727
):
28-
2928
kwargs = {
3029
"fps": fps,
3130
"quality": video_save_quality,
@@ -34,5 +33,14 @@ def save_video(
3433
"output_params": ["-f", "mp4"],
3534
}
3635

37-
print('video_save_path', video_save_path)
38-
imageio.mimsave(video_save_path, grid, "mp4", **kwargs)
36+
print("video_save_path", video_save_path)
37+
imageio.mimsave(video_save_path, grid, "mp4", **kwargs)
38+
39+
40+
def print_dict(dict):
41+
for key, value in dict.items():
42+
if isinstance(value, torch.Tensor):
43+
print(key, value.shape)
44+
else:
45+
print(key, value)
46+
print("-" * 40)

dfm/src/common/utils/torch_split_tensor_for_cp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
import torch
1616
from torch import Tensor
17-
from torch.distributed import ProcessGroup, all_gather, get_process_group_ranks, get_world_size
17+
from torch.distributed import ProcessGroup, all_gather, get_world_size
1818

1919

2020
def cat_outputs_cp(x: Tensor, seq_dim: int, cp_group: ProcessGroup) -> Tensor:

dfm/src/megatron/data/dit/base.py

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,13 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
from copy import deepcopy
15+
import logging
1616
from typing import Any, Dict, Literal, Optional
1717

1818
from megatron.core import parallel_state
1919
from megatron.energon import WorkerConfig, get_savable_loader, get_train_dataset
20-
from torch.utils.data import DataLoader
21-
from typing_extensions import Self
22-
import logging
20+
21+
2322
logger = logging.getLogger(__name__)
2423

2524

@@ -107,7 +106,7 @@ def __init__(
107106
self.multimodal_sample_config = multimodal_sample_config
108107
self.shuffle_buffer_size = shuffle_buffer_size
109108
self.max_samples_per_sequence = max_samples_per_sequence
110-
self.task_encoder = task_encoder
109+
self.task_encoder = task_encoder
111110
self.init_global_step = 0
112111
self.train_dataloader_object = None
113112
self.val_dataloader_object = None
@@ -116,8 +115,7 @@ def __init__(
116115
self.num_val_workers = num_val_workers or self.num_workers
117116
self.kwargs = kwargs
118117

119-
120-
def datasets_provider(self, worker_config, split: Literal['train', 'val'] = 'val'):
118+
def datasets_provider(self, worker_config, split: Literal["train", "val"] = "val"):
121119
"""
122120
Provide the dataset for training or validation.
123121
@@ -132,7 +130,7 @@ def datasets_provider(self, worker_config, split: Literal['train', 'val'] = 'val
132130
Dataset: The dataset configured for the specified split.
133131
"""
134132

135-
if split not in {'train', 'val'}:
133+
if split not in {"train", "val"}:
136134
raise ValueError("Invalid value for split. Allowed values are 'train' or 'val'.")
137135

138136
if split == "train":
@@ -194,7 +192,7 @@ def train_dataloader(self) -> Any:
194192
worker_debug_path=None,
195193
worker_log_level=0,
196194
)
197-
train_dataset = self.datasets_provider(worker_config, split='train')
195+
train_dataset = self.datasets_provider(worker_config, split="train")
198196
energon_dataloader = get_savable_loader(train_dataset, worker_config=worker_config)
199197
self.train_dataloader_object = energon_dataloader
200198
return self.train_dataloader_object
@@ -232,7 +230,7 @@ def val_dataloader(self):
232230
worker_debug_path=None,
233231
worker_log_level=0,
234232
)
235-
val_dataset = self.datasets_provider(worker_config, split='val')
233+
val_dataset = self.datasets_provider(worker_config, split="val")
236234
energon_loader = get_savable_loader(val_dataset, worker_config=worker_config)
237235
self.val_dataloader_object = energon_loader
238236
return self.val_dataloader_object
@@ -285,7 +283,7 @@ def state_dict(self) -> Dict[str, Any]:
285283
state = [] # Megatron core requires all the states on all the ranks to have same python
286284
# type. Energon sends the state as a list
287285
logger.info(f"Multimodal data loader saving dataloader state dict consumed samples {consumed_samples}")
288-
return {'dataloader_state': state, 'consumed_samples': consumed_samples}
286+
return {"dataloader_state": state, "consumed_samples": consumed_samples}
289287

290288
logger.warning("trainer object not connected to data module object returning empty state")
291289
return {}
@@ -300,14 +298,14 @@ def load_state_dict(self, state_dict: Dict[str, Any]) -> None:
300298
Parameters:
301299
state_dict (Dict[str, Any]): The state dictionary containing the saved state of the data module.
302300
"""
303-
if not 'dataloader_state' in state_dict:
301+
if not "dataloader_state" in state_dict:
304302
logger.warning(
305303
f"Data loader state cannot be resumed from state_dict, "
306304
f"it does not have the required key dataloader_state. It has {state_dict.keys()}"
307305
)
308306
return
309307

310-
state = state_dict['dataloader_state']
308+
state = state_dict["dataloader_state"]
311309
try:
312310
if self.trainer:
313311
self.trainer.datamodule.train_dataloader().restore_state_global(state)
@@ -331,13 +329,11 @@ def load_state_dict(self, state_dict: Dict[str, Any]) -> None:
331329
logger.warning("Megatron num_microbatches_calculator not found, using Apex version.")
332330
from apex.transformer.pipeline_parallel.utils import update_num_microbatches
333331

334-
consumed_samples = state_dict['consumed_samples']
332+
consumed_samples = state_dict["consumed_samples"]
335333
self.data_sampler.init_consumed_samples = consumed_samples
336334
self.data_sampler.prev_consumed_samples = consumed_samples
337335
logger.info(f"Multimodal dataloader load state dict with consumed_samples {consumed_samples}")
338336
update_num_microbatches(
339337
consumed_samples=consumed_samples,
340338
consistency_check=False,
341339
)
342-
343-

dfm/src/megatron/data/dit/diffusion_energon_datamodule.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,17 @@
1414

1515
# pylint: disable=C0115,C0116,C0301
1616

17-
from dataclasses import dataclass
1817
import logging
18+
from dataclasses import dataclass
1919
from typing import Any, Dict, Literal
2020

21-
from torch import int_repr
22-
23-
from dfm.src.megatron.data.dit.diffusion_taskencoder import BasicDiffusionTaskEncoder
2421
from megatron.bridge.data.utils import DatasetBuildContext, DatasetProvider
2522
from megatron.energon import DefaultTaskEncoder, get_train_dataset
23+
from torch import int_repr
24+
2625
from dfm.src.megatron.data.dit.base import EnergonMultiModalDataModule
26+
from dfm.src.megatron.data.dit.diffusion_taskencoder import BasicDiffusionTaskEncoder
27+
2728

2829
@dataclass(kw_only=True)
2930
class DiffusionDataModuleConfig(DatasetProvider):
@@ -40,18 +41,19 @@ def __post_init__(self):
4041
self.dataset = DiffusionDataModule(
4142
path=self.path,
4243
seq_length=self.seq_length,
43-
task_encoder=BasicDiffusionTaskEncoder(seq_length=self.task_encoder_seq_length, packing_buffer_size=self.packing_buffer_size),
44+
task_encoder=BasicDiffusionTaskEncoder(
45+
seq_length=self.task_encoder_seq_length, packing_buffer_size=self.packing_buffer_size
46+
),
4447
micro_batch_size=self.micro_batch_size,
4548
packing_buffer_size=self.packing_buffer_size,
4649
global_batch_size=self.global_batch_size,
47-
num_workers=self.num_workers)
50+
num_workers=self.num_workers,
51+
)
4852
self.sequence_length = self.dataset.seq_length
49-
53+
5054
def build_datasets(self, context: DatasetBuildContext):
5155
# TODO: add validation and test datasets
5256
return self.dataset.train_dataloader(), self.dataset.train_dataloader(), self.dataset.train_dataloader()
53-
54-
5557

5658

5759
class DiffusionDataModule(EnergonMultiModalDataModule):

dfm/src/megatron/data/dit/diffusion_taskencoder.py

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,19 @@
1313
# limitations under the License.
1414

1515

16+
import random
17+
from typing import List
18+
1619
import torch
1720
import torch.nn.functional as F
1821
from einops import rearrange
22+
from megatron.core import parallel_state
1923
from megatron.energon import DefaultTaskEncoder, SkipSample
20-
from megatron.energon.task_encoder.cooking import Cooker, basic_sample_keys
2124
from megatron.energon.task_encoder.base import stateless
22-
from dfm.src.megatron.data.dit.sequence_packing_utils import first_fit_decreasing
25+
from megatron.energon.task_encoder.cooking import Cooker, basic_sample_keys
26+
2327
from dfm.src.megatron.data.dit.dit_sample import DiffusionSample
24-
from typing import List
25-
from megatron.core import parallel_state
26-
import random
28+
from dfm.src.megatron.data.dit.sequence_packing_utils import first_fit_decreasing
2729

2830

2931
def cook(sample: dict) -> dict:
@@ -123,7 +125,7 @@ def encode_sample(self, sample: dict) -> dict:
123125
if parallel_state.get_context_parallel_world_size() > 1:
124126
tpcp_size *= parallel_state.get_context_parallel_world_size() * 2
125127
if (T * H * W) % tpcp_size != 0:
126-
warnings.warn(f'skipping {video_latent.shape=} not divisible by {tpcp_size=}')
128+
warnings.warn(f"skipping {video_latent.shape=} not divisible by {tpcp_size=}")
127129
raise SkipSample()
128130

129131
video_latent = rearrange(
@@ -178,10 +180,10 @@ def encode_sample(self, sample: dict) -> dict:
178180
loss_mask = torch.ones(seq_len, dtype=torch.bfloat16)
179181

180182
return DiffusionSample(
181-
__key__=sample['__key__'],
182-
__restore_key__=sample['__restore_key__'],
183+
__key__=sample["__key__"],
184+
__restore_key__=sample["__restore_key__"],
183185
__subflavor__=None,
184-
__subflavors__=sample['__subflavors__'],
186+
__subflavors__=sample["__subflavors__"],
185187
video=video_latent,
186188
t5_text_embeddings=t5_text_embeddings,
187189
t5_text_mask=t5_text_mask,
@@ -217,14 +219,14 @@ def cat(attr):
217219
__restore_key__=(), # Will be set by energon based on `samples`
218220
__subflavor__=None,
219221
__subflavors__=samples[0].__subflavors__,
220-
video=cat('video'),
221-
t5_text_embeddings=cat('t5_text_embeddings'),
222-
t5_text_mask=cat('t5_text_mask'),
223-
loss_mask=cat('loss_mask'),
224-
seq_len_q=cat('seq_len_q'),
225-
seq_len_kv=cat('seq_len_kv'),
226-
pos_ids=cat('pos_ids'),
227-
latent_shape=stack('latent_shape'),
222+
video=cat("video"),
223+
t5_text_embeddings=cat("t5_text_embeddings"),
224+
t5_text_mask=cat("t5_text_mask"),
225+
loss_mask=cat("loss_mask"),
226+
seq_len_q=cat("seq_len_q"),
227+
seq_len_kv=cat("seq_len_kv"),
228+
pos_ids=cat("pos_ids"),
229+
latent_shape=stack("latent_shape"),
228230
)
229231

230232
@stateless
@@ -247,6 +249,7 @@ def batch(self, samples: List[DiffusionSample]) -> dict:
247249
latent_shape=sample.latent_shape,
248250
)
249251

252+
250253
class PosID3D:
251254
def __init__(self, *, max_t=32, max_h=128, max_w=128):
252255
self.max_t = max_t

dfm/src/megatron/data/dit/dit_sample.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
# limitations under the License.
1414

1515
from dataclasses import dataclass
16-
from typing import Optional, Any
17-
from megatron.energon import Sample
16+
from typing import Any, Optional
17+
1818
import torch
19+
from megatron.energon import Sample
20+
1921

2022
@dataclass
2123
class DiffusionSample(Sample):
@@ -93,4 +95,3 @@ def __lt__(self, other: Any) -> bool:
9395
elif isinstance(other, int):
9496
return self.seq_len_q.item() < other
9597
raise NotImplementedError
96-

dfm/src/megatron/data/dit/sequence_packing_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515

1616
from typing import List
17-
import torch
1817

1918

2019
def find_first_bin_that_fits(bins: List[List[int]], s: int, bin_size: int) -> int:
@@ -56,6 +55,7 @@ def first_fit(seqlens: List[int], pack_size: int) -> List[List[int]]:
5655
res[first_bin].append(s)
5756
return res
5857

58+
5959
def first_fit_decreasing(seqlens: List[int], pack_size: int) -> List[List[int]]:
6060
"""
6161
Packs sequences of varying lengths into bins using the First-Fit Decreasing algorithm.
@@ -72,6 +72,7 @@ def first_fit_decreasing(seqlens: List[int], pack_size: int) -> List[List[int]]:
7272
sorted_seqlens = sorted(seqlens, reverse=True)
7373
return first_fit(sorted_seqlens, pack_size)
7474

75+
7576
def concat_pad(tensor_list, max_seq_length):
7677
"""
7778
Efficiently concatenates a list of tensors along the first dimension and pads with zeros
@@ -102,4 +103,3 @@ def concat_pad(tensor_list, max_seq_length):
102103
current_index += length
103104

104105
return result
105-

0 commit comments

Comments
 (0)