Skip to content

Commit 54af45c

Browse files
ltx2: fix custom block size fallback, framewise VAE tiling, v6 tile-search VMEM cap
1 parent 49cc98b commit 54af45c

5 files changed

Lines changed: 16 additions & 4 deletions

File tree

‎src/maxdiffusion/configs/ltx2_3_video.yml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ profiler_steps: 5
125125
enable_jax_named_scopes: False
126126

127127
replicate_vae: False
128+
enable_vae_tiling: False
129+
enable_vae_slicing: False
128130

129131
run_text_encoder_on_tpu: False
130132
# Dynamically disables VAE slicing and distributes the batch dimension to avoid HBM OOM for larger batch sizes.

‎src/maxdiffusion/configs/ltx2_video.yml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ enable_jax_named_scopes: False
131131

132132
replicate_vae: False
133133
use_bwe: False
134+
enable_vae_tiling: False
135+
enable_vae_slicing: False
134136

135137
run_text_encoder_on_tpu: False
136138
# Dynamically disables VAE slicing and distributes the batch dimension to avoid HBM OOM for larger batch sizes.

‎src/maxdiffusion/generate_ltx2.py‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ def maybe_tune_block_sizes(config):
105105
vmem_limit_bytes = int(
106106
keys.get("tile_search_vmem_limit_bytes") or config.flash_block_sizes.get("vmem_limit_bytes") or 64 * 1024 * 1024
107107
)
108+
if "v6" in jax.devices()[0].device_kind.lower():
109+
vmem_limit_bytes = min(vmem_limit_bytes, 32 * 1024 * 1024)
110+
108111
bench = LTX2BlockBenchmark.from_config(config, mesh, vmem_limit_bytes=vmem_limit_bytes)
109112
max_logging.log(f"[tile-search] tuning block sizes for {bench.label} before inference...")
110113
result = grid_search(

‎src/maxdiffusion/models/attention_flax.py‎

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ def _extract_custom_block_sizes(flash_block_sizes):
381381
bq = 4864
382382
bkv = 1024
383383
bkv_compute = 1024
384-
bkv_compute_in = 1024
384+
bkv_compute_in = None
385385
heads_per_tile = 1
386386
vmem_limit_bytes = None
387387
if flash_block_sizes is not None:
@@ -390,22 +390,25 @@ def _extract_custom_block_sizes(flash_block_sizes):
390390
bq = get("block_q", None) or bq
391391
bkv = get("block_kv", None) or bkv
392392
bkv_compute = get("block_kv_compute", None) or bkv_compute
393-
bkv_compute_in = get("block_kv_compute_in", None) or bkv_compute_in
393+
bkv_compute_in = get("block_kv_compute_in", None)
394394
heads_per_tile = get("heads_per_tile", None) or heads_per_tile
395395
vmem_limit_bytes = get("vmem_limit_bytes", None) or vmem_limit_bytes
396396
else:
397397
bq = getattr(flash_block_sizes, "block_q", None) or bq
398398
bkv = getattr(flash_block_sizes, "block_kv", None) or bkv
399399
bkv_compute = getattr(flash_block_sizes, "block_kv_compute", None) or bkv_compute
400-
bkv_compute_in = getattr(flash_block_sizes, "block_kv_compute_in", None) or bkv_compute_in
400+
bkv_compute_in = getattr(flash_block_sizes, "block_kv_compute_in", None)
401401
heads_per_tile = getattr(flash_block_sizes, "heads_per_tile", None) or heads_per_tile
402402
vmem_limit_bytes = getattr(flash_block_sizes, "vmem_limit_bytes", None) or vmem_limit_bytes
403403
# A BlockSizes object carries heads_per_tile=None when the config dict omitted
404404
# it; getattr then returns that None instead of the default, so coerce it back
405405
# to 1 (the custom-kernel default) to keep the `heads_per_tile > 1` guards safe.
406406
if heads_per_tile is None:
407407
heads_per_tile = 1
408-
bkv_compute_in = min(bkv_compute, bkv_compute_in)
408+
if bkv_compute_in is None:
409+
bkv_compute_in = bkv_compute
410+
else:
411+
bkv_compute_in = min(bkv_compute, bkv_compute_in)
409412
return bq, bkv, bkv_compute, bkv_compute_in, heads_per_tile, vmem_limit_bytes
410413

411414

‎src/maxdiffusion/pipelines/ltx2/ltx2_pipeline.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,9 +558,11 @@ def enable_vae_tiling(self):
558558
if hasattr(self.vae, "enable_tiling"):
559559
self.vae.enable_tiling()
560560
self.vae.use_tiling = True
561+
self.vae.use_framewise_decoding = True
561562

562563
def disable_vae_tiling(self):
563564
self.vae.use_tiling = False
565+
self.vae.use_framewise_decoding = False
564566

565567
@classmethod
566568
def load_tokenizer(cls, config: HyperParameters):

0 commit comments

Comments
 (0)