Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,12 @@ python engiopt/cgan_cnn_2d/cgan_cnn_2d.py --problem-id "beams2d" --track --wandb

This will run a CGAN 2D using CNN model on the beams2d problem. `--track` will track the run on wandb, `--wandb-entity None` will use the default wandb entity, `--save-model` will save the model, `--n-epochs 200` will run for 200 epochs, and `--seed 1` will set the random seed.

For reproducible debugging runs, you can additionally enable strict deterministic mode:
```
python engiopt/cgan_cnn_2d/cgan_cnn_2d.py --problem-id "beams2d" --seed 1 --strict-determinism
```
This enables stricter PyTorch deterministic settings and deterministic data shuffling while keeping the default behavior unchanged when the flag is omitted.

You can always check the help for more options:
```
python engiopt/cgan_cnn_2d/cgan_cnn_2d.py -h
Expand Down
17 changes: 11 additions & 6 deletions engiopt/cgan_1d/cgan_1d.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

from dataclasses import dataclass
import os
import random
import time
from typing import TYPE_CHECKING

Expand All @@ -21,9 +20,12 @@
from torchvision import transforms
import tqdm
import tyro
import wandb

from engiopt.reproducibility import enable_strict_determinism
from engiopt.reproducibility import make_dataloader_generator
from engiopt.reproducibility import seed_training
from engiopt.transforms import flatten_dict_factory
import wandb

if TYPE_CHECKING:
from engibench.utils.problem import Problem
Expand Down Expand Up @@ -64,6 +66,9 @@ class Args:
"""Wandb entity name."""
seed: int = 1
"""Random seed."""

strict_determinism: bool = False
"""Enable strict deterministic operations for reproducibility debugging."""
save_model: bool = False
"""Saves the model to disk."""

Expand Down Expand Up @@ -220,10 +225,9 @@ def prepare_data(problem: Problem, device: th.device) -> tuple[th.utils.data.Ten
wandb.init(project=args.wandb_project, entity=args.wandb_entity, config=vars(args), save_code=True, name=run_name)

# Seeding
th.manual_seed(args.seed)
rng = np.random.default_rng(args.seed)
random.seed(args.seed)
th.backends.cudnn.deterministic = True
rng = seed_training(args.seed)
if args.strict_determinism:
enable_strict_determinism(warn_only=True)

os.makedirs("images", exist_ok=True)

Expand All @@ -240,6 +244,7 @@ def prepare_data(problem: Problem, device: th.device) -> tuple[th.utils.data.Ten
training_ds,
batch_size=args.batch_size,
shuffle=True,
generator=make_dataloader_generator(args.seed),
)

# Loss function
Expand Down
17 changes: 11 additions & 6 deletions engiopt/cgan_2d/cgan_2d.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

from dataclasses import dataclass
import os
import random
import time

from engibench.utils.all_problems import BUILTIN_PROBLEMS
Expand All @@ -18,9 +17,12 @@
from torch import nn
import tqdm
import tyro

import wandb

from engiopt.reproducibility import enable_strict_determinism
from engiopt.reproducibility import make_dataloader_generator
from engiopt.reproducibility import seed_training


@dataclass
class Args:
Expand All @@ -40,6 +42,9 @@ class Args:
"""Wandb entity name."""
seed: int = 1
"""Random seed."""

strict_determinism: bool = False
"""Enable strict deterministic operations for reproducibility debugging."""
save_model: bool = False
"""Saves the model to disk."""

Expand Down Expand Up @@ -147,10 +152,9 @@ def forward(self, design: th.Tensor, conds: th.Tensor) -> th.Tensor:
wandb.init(project=args.wandb_project, entity=args.wandb_entity, config=vars(args), save_code=True, name=run_name)

# Seeding
th.manual_seed(args.seed)
rng = np.random.default_rng(args.seed)
random.seed(args.seed)
th.backends.cudnn.deterministic = True
rng = seed_training(args.seed)
if args.strict_determinism:
enable_strict_determinism(warn_only=True)

os.makedirs("images", exist_ok=True)

Expand Down Expand Up @@ -182,6 +186,7 @@ def forward(self, design: th.Tensor, conds: th.Tensor) -> th.Tensor:
training_ds,
batch_size=args.batch_size,
shuffle=True,
generator=make_dataloader_generator(args.seed),
)

# Optimizers
Expand Down
18 changes: 11 additions & 7 deletions engiopt/cgan_bezier/cgan_bezier.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

from dataclasses import dataclass
import os
import random
import time
from typing import TYPE_CHECKING

Expand All @@ -19,9 +18,12 @@
from torch import nn
import torch.nn.functional as f
import tyro

import wandb

from engiopt.reproducibility import enable_strict_determinism
from engiopt.reproducibility import make_dataloader_generator
from engiopt.reproducibility import seed_training

if TYPE_CHECKING:
from collections.abc import Callable

Expand All @@ -46,6 +48,9 @@ class Args:
"""Wandb entity name."""
seed: int = 6
"""Random seed."""

strict_determinism: bool = False
"""Enable strict deterministic operations for reproducibility debugging."""
save_model: bool = True
"""Saves the model to disk."""

Expand Down Expand Up @@ -438,11 +443,9 @@ def denormalize(self, x: th.Tensor) -> th.Tensor:
save_code=True,
name=run_name,
)

th.manual_seed(args.seed)
rng = np.random.default_rng(args.seed)
random.seed(args.seed)
th.backends.cudnn.deterministic = True
rng = seed_training(args.seed)
if args.strict_determinism:
enable_strict_determinism(warn_only=True)

os.makedirs("images", exist_ok=True)

Expand Down Expand Up @@ -476,6 +479,7 @@ def denormalize(self, x: th.Tensor) -> th.Tensor:
training_ds,
batch_size=args.batch_size,
shuffle=True,
generator=make_dataloader_generator(args.seed),
)

discriminator = Discriminator(
Expand Down
18 changes: 11 additions & 7 deletions engiopt/cgan_cnn_2d/cgan_cnn_2d.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,21 @@

from dataclasses import dataclass
import os
import random
import time

from engibench.utils.all_problems import BUILTIN_PROBLEMS
import matplotlib.pyplot as plt
import numpy as np
import torch as th
from torch import nn
from torchvision import transforms
import tqdm
import tyro

import wandb

from engiopt.reproducibility import enable_strict_determinism
from engiopt.reproducibility import make_dataloader_generator
from engiopt.reproducibility import seed_training


@dataclass
class Args:
Expand All @@ -40,6 +41,9 @@ class Args:
"""Wandb entity name."""
seed: int = 1
"""Random seed."""

strict_determinism: bool = False
"""Enable strict deterministic operations for reproducibility debugging."""
save_model: bool = False
"""Saves the model to disk."""

Expand Down Expand Up @@ -243,10 +247,9 @@ def forward(self, x: th.Tensor, c: th.Tensor) -> th.Tensor:
wandb.init(project=args.wandb_project, entity=args.wandb_entity, config=vars(args), save_code=True, name=run_name)

# Seeding
th.manual_seed(args.seed)
rng = np.random.default_rng(args.seed)
random.seed(args.seed)
th.backends.cudnn.deterministic = True
rng = seed_training(args.seed)
if args.strict_determinism:
enable_strict_determinism(warn_only=True)

os.makedirs("images", exist_ok=True)

Expand Down Expand Up @@ -277,6 +280,7 @@ def forward(self, x: th.Tensor, c: th.Tensor) -> th.Tensor:
training_ds,
batch_size=args.batch_size,
shuffle=True,
generator=make_dataloader_generator(args.seed),
)

# Optimizers
Expand Down
17 changes: 11 additions & 6 deletions engiopt/cgan_cnn_3d/cgan_cnn_3d.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

from dataclasses import dataclass
import os
import random
import time

from engibench.utils.all_problems import BUILTIN_PROBLEMS
Expand All @@ -21,10 +20,13 @@
from torch.nn import functional
import tqdm
import tyro
import wandb

from engiopt.metrics import dpp_diversity
from engiopt.metrics import mmd
import wandb
from engiopt.reproducibility import enable_strict_determinism
from engiopt.reproducibility import make_dataloader_generator
from engiopt.reproducibility import seed_training


@dataclass
Expand All @@ -47,6 +49,9 @@ class Args:
"""Wandb entity name."""
seed: int = 1
"""Random seed."""

strict_determinism: bool = False
"""Enable strict deterministic operations for reproducibility debugging."""
save_model: bool = False
"""Saves the model to disk."""

Expand Down Expand Up @@ -368,10 +373,9 @@ def compute_gradient_penalty(discriminator, real_samples, fake_samples, conds, d
wandb.init(project=args.wandb_project, entity=args.wandb_entity, config=vars(args), save_code=True, name=run_name)

# Seeding
th.manual_seed(args.seed)
rng = np.random.default_rng(args.seed)
random.seed(args.seed)
th.backends.cudnn.deterministic = True
rng = seed_training(args.seed)
if args.strict_determinism:
enable_strict_determinism(warn_only=True)

os.makedirs("images_3d", exist_ok=True)

Expand Down Expand Up @@ -416,6 +420,7 @@ def compute_gradient_penalty(discriminator, real_samples, fake_samples, conds, d
training_ds,
batch_size=args.batch_size,
shuffle=True,
generator=make_dataloader_generator(args.seed),
)

# Optimizers
Expand Down
17 changes: 11 additions & 6 deletions engiopt/cgan_vae/cgan_vae.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

from dataclasses import dataclass
import os
import random
import time

from engibench.utils.all_problems import BUILTIN_PROBLEMS
Expand All @@ -21,10 +20,13 @@
from torch.nn import functional
import tqdm
import tyro
import wandb

from engiopt.metrics import dpp_diversity
from engiopt.metrics import mmd
import wandb
from engiopt.reproducibility import enable_strict_determinism
from engiopt.reproducibility import make_dataloader_generator
from engiopt.reproducibility import seed_training


@dataclass
Expand All @@ -47,6 +49,9 @@ class Args:
"""Wandb entity name."""
seed: int = 1
"""Random seed."""

strict_determinism: bool = False
"""Enable strict deterministic operations for reproducibility debugging."""
save_model: bool = False
"""Saves the model to disk."""

Expand Down Expand Up @@ -461,10 +466,9 @@ def compute_gradient_penalty(discriminator, real_samples, fake_samples, conds, d
wandb.init(project=args.wandb_project, entity=args.wandb_entity, config=vars(args), save_code=True, name=run_name)

# Seeding
th.manual_seed(args.seed)
rng = np.random.default_rng(args.seed)
random.seed(args.seed)
th.backends.cudnn.deterministic = True
rng = seed_training(args.seed)
if args.strict_determinism:
enable_strict_determinism(warn_only=True)

os.makedirs("images_3d", exist_ok=True)

Expand Down Expand Up @@ -517,6 +521,7 @@ def compute_gradient_penalty(discriminator, real_samples, fake_samples, conds, d
training_ds,
batch_size=args.batch_size,
shuffle=True,
generator=make_dataloader_generator(args.seed),
)

# Optimizers for all components
Expand Down
17 changes: 11 additions & 6 deletions engiopt/diffusion_1d/diffusion_1d.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

from dataclasses import dataclass
import os
import random
import time
from typing import TYPE_CHECKING

Expand All @@ -21,9 +20,12 @@
from torchvision import transforms
import tqdm
import tyro
import wandb

from engiopt.reproducibility import enable_strict_determinism
from engiopt.reproducibility import make_dataloader_generator
from engiopt.reproducibility import seed_training
from engiopt.transforms import flatten_dict_factory
import wandb

if TYPE_CHECKING:
from engibench.utils.problem import Problem
Expand Down Expand Up @@ -100,6 +102,9 @@ class Args:
"""Wandb entity name."""
seed: int = 1
"""Random seed."""

strict_determinism: bool = False
"""Enable strict deterministic operations for reproducibility debugging."""
save_model: bool = False
"""Saves the model to disk."""

Expand Down Expand Up @@ -153,10 +158,9 @@ class Args:
wandb.init(project=args.wandb_project, entity=args.wandb_entity, config=vars(args), save_code=True, name=run_name)

# Seeding
th.manual_seed(args.seed)
rng = np.random.default_rng(args.seed)
random.seed(args.seed)
th.backends.cudnn.deterministic = True
rng = seed_training(args.seed)
if args.strict_determinism:
enable_strict_determinism(warn_only=True)

os.makedirs("images", exist_ok=True)

Expand Down Expand Up @@ -188,6 +192,7 @@ class Args:
training_ds,
batch_size=args.batch_size,
shuffle=True,
generator=make_dataloader_generator(args.seed),
)

# Optimizers
Expand Down
Loading
Loading