diff --git a/comfyui/examples/FastHunyuan-diffusers.json b/comfyui/examples/FastHunyuan-diffusers.json index b5731ee1e..db4a71d13 100644 --- a/comfyui/examples/FastHunyuan-diffusers.json +++ b/comfyui/examples/FastHunyuan-diffusers.json @@ -310,7 +310,7 @@ "value": -99999, "cachedValue": "fp16" }, - "use_cpu_offload": { + "dit_cpu_offload": { "isAuto": true, "value": -99999, "cachedValue": true diff --git a/comfyui/examples/Wan2.1-I2V-14B-480P-Diffusers.json b/comfyui/examples/Wan2.1-I2V-14B-480P-Diffusers.json index e5a7087ee..1cb01d7e9 100644 --- a/comfyui/examples/Wan2.1-I2V-14B-480P-Diffusers.json +++ b/comfyui/examples/Wan2.1-I2V-14B-480P-Diffusers.json @@ -517,7 +517,7 @@ "value": "fp16", "cachedValue": "fp16" }, - "use_cpu_offload": { + "dit_cpu_offload": { "isAuto": true, "value": true, "cachedValue": true diff --git a/comfyui/video_generator/video_generator.py b/comfyui/video_generator/video_generator.py index 87bf6d945..259993b8e 100644 --- a/comfyui/video_generator/video_generator.py +++ b/comfyui/video_generator/video_generator.py @@ -105,7 +105,7 @@ class VideoGenerator: "precision": (["fp16", "bf16"], { "default": "fp16" }), - "use_cpu_offload": ([True, False], { + "dit_cpu_offload": ([True, False], { "default": False }), } @@ -204,7 +204,7 @@ class VideoGenerator: vae_config=None, text_encoder_config=None, dit_config=None, - use_cpu_offload=None, + dit_cpu_offload=None, ): print('Running FastVideo inference') @@ -259,8 +259,8 @@ class VideoGenerator: raw_generation_args['tp_size'] = tp_size if sp_size is not None: raw_generation_args['sp_size'] = sp_size - if use_cpu_offload is not None: - raw_generation_args['use_cpu_offload'] = use_cpu_offload + if dit_cpu_offload is not None: + raw_generation_args['dit_cpu_offload'] = dit_cpu_offload generation_args = { k: v diff --git a/comfyui/web/js/FastVideo.core.js b/comfyui/web/js/FastVideo.core.js index 6be0dcbc5..87f4009d7 100644 --- a/comfyui/web/js/FastVideo.core.js +++ b/comfyui/web/js/FastVideo.core.js @@ -552,7 +552,7 @@ app.registerExtension({ ] const floatWidgetNames = ["embedded_cfg_scale", "guidance_scale"] const comboWidgetNames = ["vae_tiling", "vae_precision", "vae_sp", "text_encoder_precision", "precision", - "load_encoder", "load_decoder", "use_tiling", "use_temporal_tiling", "use_parallel_tiling", "use_cpu_offload", "enable_teacache" + "load_encoder", "load_decoder", "use_tiling", "use_temporal_tiling", "use_parallel_tiling", "dit_cpu_offload", "enable_teacache" ] const stringWidgetNames = ["prefix", "quant_config", "lora_config", "image_path"] diff --git a/docs/source/inference/configuration.md b/docs/source/inference/configuration.md index 581fb151e..6462931d0 100644 --- a/docs/source/inference/configuration.md +++ b/docs/source/inference/configuration.md @@ -27,7 +27,7 @@ def main(): model_name = "Wan-AI/Wan2.1-T2V-1.3B-Diffusers" config = PipelineConfig.from_pretrained(model_name) config.vae_precision = "fp16" - config.use_cpu_offload = True + config.dit_cpu_offload = True # Create the generator generator = VideoGenerator.from_pretrained( diff --git a/examples/inference/basic/basic.py b/examples/inference/basic/basic.py index c21ccfe8b..37f15b516 100644 --- a/examples/inference/basic/basic.py +++ b/examples/inference/basic/basic.py @@ -13,7 +13,10 @@ def main(): # FastVideo will automatically handle distributed setup num_gpus=2, use_fsdp_inference=True, - use_cpu_offload=False + dit_cpu_offload=False, + vae_cpu_offload=False, + text_encoder_cpu_offload=False, + # image_encoder_cpu_offload=False, ) # sampling_param = SamplingParam.from_pretrained("Wan-AI/Wan2.1-T2V-1.3B-Diffusers") diff --git a/examples/inference/basic/basic_dmd.py b/examples/inference/basic/basic_dmd.py index 3579d592b..9bf7bc243 100644 --- a/examples/inference/basic/basic_dmd.py +++ b/examples/inference/basic/basic_dmd.py @@ -16,8 +16,9 @@ def main(): num_gpus=1, use_fsdp_inference=True, # Adjust these offload parameters if you have < 32GB of VRAM - text_encoder_offload=False, - use_cpu_offload=False, + text_encoder_cpu_offload=False, + dit_cpu_offload=False, + vae_cpu_offload=False, VSA_sparsity=0.8, ) load_end_time = time.perf_counter() @@ -35,11 +36,24 @@ def main(): video = generator.generate_video(prompt, output_path=OUTPUT_PATH, save_video=True, sampling_param=sampling_param) end_time = time.perf_counter() gen_time = end_time - start_time - e2e_gen_time = end_time - start_time + + # Generate another video with a different prompt, without reloading the + # model! + prompt2 = ( + "A majestic lion strides across the golden savanna, its powerful frame " + "glistening under the warm afternoon sun. The tall grass ripples gently in " + "the breeze, enhancing the lion's commanding presence. The tone is vibrant, " + "embodying the raw energy of the wild. Low angle, steady tracking shot, " + "cinematic.") + start_time = time.perf_counter() + video2 = generator.generate_video(prompt2, output_path=OUTPUT_PATH, save_video=True) + end_time = time.perf_counter() + gen_time2 = end_time - start_time + print(f"Time taken to load model: {load_time} seconds") print(f"Time taken to generate video: {gen_time} seconds") - print(f"Time taken for e2e generation: {e2e_gen_time} seconds") + print(f"Time taken to generate video2: {gen_time2} seconds") if __name__ == "__main__": diff --git a/examples/inference/basic/basic_mps.py b/examples/inference/basic/basic_mps.py index 6a819969b..ca53be02c 100644 --- a/examples/inference/basic/basic_mps.py +++ b/examples/inference/basic/basic_mps.py @@ -9,8 +9,8 @@ def main(): "Wan-AI/Wan2.1-T2V-1.3B-Diffusers", pipeline_config=config, use_fsdp_inference=False, # Disable FSDP for MPS - use_cpu_offload=True, - text_encoder_offload=True, + dit_cpu_offload=True, + text_encoder_cpu_offload=True, pin_cpu_memory=True, disable_autocast=False, num_gpus=1, diff --git a/examples/inference/basic/test.py b/examples/inference/basic/test.py index f8f55e326..050da2584 100644 --- a/examples/inference/basic/test.py +++ b/examples/inference/basic/test.py @@ -16,8 +16,8 @@ def main(): # if num_gpus > 1, FastVideo will automatically handle distributed setup pipeline_config=pipeline_config, use_fsdp_inference=False, # Disable FSDP for MPS - use_cpu_offload=True, - text_encoder_offload=True, + dit_cpu_offload=True, + text_encoder_cpu_offload=True, pin_cpu_memory=True, disable_autocast=False, num_gpus=1, diff --git a/examples/inference/optimizations/teacache_example.py b/examples/inference/optimizations/teacache_example.py index a50630f70..1dab0f92e 100644 --- a/examples/inference/optimizations/teacache_example.py +++ b/examples/inference/optimizations/teacache_example.py @@ -9,7 +9,7 @@ def main(): gen = VideoGenerator.from_pretrained( model_path="Wan-AI/Wan2.1-T2V-1.3B-Diffusers", num_gpus=1, - use_cpu_offload=False, + dit_cpu_offload=False, ) load_time = time.perf_counter() - start_time print(f"Model loading time: {load_time:.2f} seconds") diff --git a/fastvideo/configs/fasthunyuan_t2v.json b/fastvideo/configs/fasthunyuan_t2v.json index e58aa0d49..6eb29ae44 100644 --- a/fastvideo/configs/fasthunyuan_t2v.json +++ b/fastvideo/configs/fasthunyuan_t2v.json @@ -1,7 +1,7 @@ { "embedded_cfg_scale": 6, "flow_shift": 17, - "use_cpu_offload": false, + "dit_cpu_offload": false, "disable_autocast": false, "precision": "bf16", "vae_precision": "fp32", diff --git a/fastvideo/configs/wan_1.3B_t2v_pipeline.json b/fastvideo/configs/wan_1.3B_t2v_pipeline.json index a2d959b8c..2ed1b3bfe 100644 --- a/fastvideo/configs/wan_1.3B_t2v_pipeline.json +++ b/fastvideo/configs/wan_1.3B_t2v_pipeline.json @@ -1,7 +1,7 @@ { "embedded_cfg_scale": 6.0, "flow_shift": 3, - "use_cpu_offload": true, + "dit_cpu_offload": true, "disable_autocast": false, "precision": "bf16", "vae_precision": "fp32", diff --git a/fastvideo/configs/wan_14B_i2v_480p_pipeline.json b/fastvideo/configs/wan_14B_i2v_480p_pipeline.json index 1035eefe5..21743d66b 100644 --- a/fastvideo/configs/wan_14B_i2v_480p_pipeline.json +++ b/fastvideo/configs/wan_14B_i2v_480p_pipeline.json @@ -1,7 +1,7 @@ { "embedded_cfg_scale": 6.0, "flow_shift": 3, - "use_cpu_offload": true, + "dit_cpu_offload": true, "disable_autocast": false, "precision": "bf16", "vae_precision": "fp32", diff --git a/fastvideo/fastvideo_args.py b/fastvideo/fastvideo_args.py index 50a0e64d9..fc7d253b8 100644 --- a/fastvideo/fastvideo_args.py +++ b/fastvideo/fastvideo_args.py @@ -118,9 +118,12 @@ class FastVideoArgs: output_type: str = "pil" - use_cpu_offload: bool = True # For DiT + # CPU offload parameters + dit_cpu_offload: bool = True use_fsdp_inference: bool = True - text_encoder_offload: bool = True + text_encoder_cpu_offload: bool = True + image_encoder_cpu_offload: bool = True + vae_cpu_offload: bool = True pin_cpu_memory: bool = True # STA (Sliding Tile Attention) parameters @@ -307,7 +310,7 @@ class FastVideoArgs: ) parser.add_argument( - "--use-cpu-offload", + "--dit-cpu-offload", action=StoreBoolean, help= "Use CPU offload for DiT inference. Enable if run out of memory with FSDP.", @@ -324,6 +327,17 @@ class FastVideoArgs: help= "Use CPU offload for text encoder. Enable if run out of memory.", ) + parser.add_argument( + "--image-encoder-cpu-offload", + action=StoreBoolean, + help= + "Use CPU offload for image encoder. Enable if run out of memory.", + ) + parser.add_argument( + "--vae-cpu-offload", + action=StoreBoolean, + help="Use CPU offload for VAE. Enable if run out of memory.", + ) parser.add_argument( "--pin-cpu-memory", action=StoreBoolean, diff --git a/fastvideo/models/loader/component_loader.py b/fastvideo/models/loader/component_loader.py index 5ad5fc03d..dc451bbf8 100644 --- a/fastvideo/models/loader/component_loader.py +++ b/fastvideo/models/loader/component_loader.py @@ -247,10 +247,10 @@ class TextEncoderLoader(ComponentLoader): target_device: torch.device, fastvideo_args: FastVideoArgs, dtype: str = "fp16"): - use_cpu_offload = fastvideo_args.text_encoder_offload and len( + use_cpu_offload = fastvideo_args.text_encoder_cpu_offload and len( getattr(model_config, "_fsdp_shard_conditions", [])) > 0 - if fastvideo_args.text_encoder_offload: + if fastvideo_args.text_encoder_cpu_offload: target_device = torch.device( "mps") if current_platform.is_mps() else torch.device("cpu") @@ -324,7 +324,10 @@ class ImageEncoderLoader(TextEncoderLoader): encoder_config = fastvideo_args.pipeline_config.image_encoder_config encoder_config.update_model_arch(model_config) - target_device = get_local_torch_device() + if fastvideo_args.image_encoder_cpu_offload: + target_device = torch.device("mps") if current_platform.is_mps() else torch.device("cpu") + else: + target_device = get_local_torch_device() # TODO(will): add support for other dtypes return self.load_model( model_path, encoder_config, target_device, fastvideo_args, @@ -375,10 +378,15 @@ class VAELoader(ComponentLoader): vae_config = fastvideo_args.pipeline_config.vae_config vae_config.update_model_arch(config) + if fastvideo_args.vae_cpu_offload: + target_device = torch.device("mps") if current_platform.is_mps() else torch.device("cpu") + else: + target_device = get_local_torch_device() + with set_default_torch_dtype(PRECISION_TO_TYPE[ fastvideo_args.pipeline_config.vae_precision]): vae_cls, _ = ModelRegistry.resolve_model_cls(class_name) - vae = vae_cls(vae_config).to(get_local_torch_device()) + vae = vae_cls(vae_config).to(target_device) # Find all safetensors files safetensors_list = glob.glob( @@ -441,7 +449,7 @@ class TransformerLoader(ComponentLoader): device=get_local_torch_device(), hsdp_replicate_dim=fastvideo_args.hsdp_replicate_dim, hsdp_shard_dim=fastvideo_args.hsdp_shard_dim, - cpu_offload=fastvideo_args.use_cpu_offload, + cpu_offload=fastvideo_args.dit_cpu_offload, fsdp_inference=fastvideo_args.use_fsdp_inference, # TODO(will): make these configurable param_dtype=torch.bfloat16, diff --git a/fastvideo/pipelines/composed_pipeline_base.py b/fastvideo/pipelines/composed_pipeline_base.py index 89caedc44..1aa7cc55f 100644 --- a/fastvideo/pipelines/composed_pipeline_base.py +++ b/fastvideo/pipelines/composed_pipeline_base.py @@ -139,7 +139,7 @@ class ComposedPipelineBase(ABC): for key, value in kwargs.items(): setattr(fastvideo_args, key, value) - fastvideo_args.use_cpu_offload = False + fastvideo_args.dit_cpu_offload = False # we hijack the precision to be the master weight type so that the # model is loaded with the correct precision. Subsequently we will # use FSDP2's MixedPrecisionPolicy to set the precision for the diff --git a/fastvideo/pipelines/preprocess/v1_preprocess.py b/fastvideo/pipelines/preprocess/v1_preprocess.py index b0465fd56..56640bd8d 100644 --- a/fastvideo/pipelines/preprocess/v1_preprocess.py +++ b/fastvideo/pipelines/preprocess/v1_preprocess.py @@ -23,7 +23,7 @@ def main(args) -> None: assert num_gpus == 1, "Only support 1 GPU" pipeline_config = PipelineConfig.from_pretrained(args.model_path) kwargs = { - "use_cpu_offload": False, + "dit_cpu_offload": False, "vae_precision": "fp32", "vae_config": WanVAEConfig(load_encoder=True, load_decoder=False), } diff --git a/fastvideo/pipelines/stages/decoding.py b/fastvideo/pipelines/stages/decoding.py index 44de981d4..8e692c06a 100644 --- a/fastvideo/pipelines/stages/decoding.py +++ b/fastvideo/pipelines/stages/decoding.py @@ -133,7 +133,8 @@ class DecodingStage(PipelineStage): if hasattr(self, 'maybe_free_model_hooks'): self.maybe_free_model_hooks() - self.vae.to("cpu") + if fastvideo_args.vae_cpu_offload: + self.vae.to("cpu") if torch.backends.mps.is_available(): del self.vae diff --git a/fastvideo/pipelines/stages/encoding.py b/fastvideo/pipelines/stages/encoding.py index 54c20bce7..c8cdfab36 100644 --- a/fastvideo/pipelines/stages/encoding.py +++ b/fastvideo/pipelines/stages/encoding.py @@ -135,7 +135,8 @@ class EncodingStage(PipelineStage): if hasattr(self, 'maybe_free_model_hooks'): self.maybe_free_model_hooks() - self.vae.to("cpu") + if fastvideo_args.vae_cpu_offload: + self.vae.to("cpu") return batch diff --git a/fastvideo/pipelines/stages/image_encoding.py b/fastvideo/pipelines/stages/image_encoding.py index fa7991e83..889c01198 100644 --- a/fastvideo/pipelines/stages/image_encoding.py +++ b/fastvideo/pipelines/stages/image_encoding.py @@ -67,7 +67,7 @@ class ImageEncodingStage(PipelineStage): batch.image_embeds.append(image_embeds) - if fastvideo_args.use_cpu_offload: + if fastvideo_args.image_encoder_cpu_offload: self.image_encoder.to('cpu') return batch diff --git a/fastvideo/tests/inference/lora/test_lora_inference_similarity.py b/fastvideo/tests/inference/lora/test_lora_inference_similarity.py index ae4159ee2..2033e7903 100644 --- a/fastvideo/tests/inference/lora/test_lora_inference_similarity.py +++ b/fastvideo/tests/inference/lora/test_lora_inference_similarity.py @@ -33,7 +33,7 @@ WAN_LORA_PARAMS = { "fps": 24, "neg_prompt": "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", "text-encoder-precision": ("fp32",), - "use_cpu_offload": True, + "dit_cpu_offload": True, } # LoRA configurations for testing @@ -68,7 +68,7 @@ def test_merge_lora_weights(model_id): lora_path = lora_config["lora_path"] args = FastVideoArgs.from_kwargs( model_path=model_id, - use_cpu_offload=True, + dit_cpu_offload=True, dit_precision="bf16", ) pipe = build_pipeline(args) @@ -113,7 +113,7 @@ def test_lora_inference_similarity(ATTENTION_BACKEND, model_id): init_kwargs = { "num_gpus": BASE_PARAMS["num_gpus"], "flow_shift": BASE_PARAMS["flow_shift"], - "use_cpu_offload": BASE_PARAMS["use_cpu_offload"], + "dit_cpu_offload": BASE_PARAMS["dit_cpu_offload"], } if "text-encoder-precision" in BASE_PARAMS: init_kwargs["text_encoder_precisions"] = BASE_PARAMS["text-encoder-precision"] diff --git a/fastvideo/tests/ssim/test_inference_similarity.py b/fastvideo/tests/ssim/test_inference_similarity.py index 457a308dc..8c223026c 100644 --- a/fastvideo/tests/ssim/test_inference_similarity.py +++ b/fastvideo/tests/ssim/test_inference_similarity.py @@ -228,7 +228,7 @@ def test_inference_similarity(prompt, ATTENTION_BACKEND, model_id): "flow_shift": BASE_PARAMS["flow_shift"], "sp_size": BASE_PARAMS["sp_size"], "tp_size": BASE_PARAMS["tp_size"], - "use_cpu_offload": True, + "dit_cpu_offload": True, } if BASE_PARAMS.get("vae_sp"): init_kwargs["vae_sp"] = True diff --git a/fastvideo/tests/transformers/test_hunyuanvideo_load.py b/fastvideo/tests/transformers/test_hunyuanvideo_load.py index c0bfade23..5d83032e9 100644 --- a/fastvideo/tests/transformers/test_hunyuanvideo_load.py +++ b/fastvideo/tests/transformers/test_hunyuanvideo_load.py @@ -62,7 +62,7 @@ def test_hunyuanvideo_distributed(): precision_str = "bf16" args = FastVideoArgs(model_path=TRANSFORMER_PATH, - use_cpu_offload=True, + dit_cpu_offload=True, pipeline_config=PipelineConfig(dit_config=HunyuanVideoConfig(), dit_precision=precision_str)) args.device = torch.device(f"cuda:{LOCAL_RANK}") diff --git a/fastvideo/tests/transformers/test_wanvideo.py b/fastvideo/tests/transformers/test_wanvideo.py index ab4fdd60a..60b0a8626 100644 --- a/fastvideo/tests/transformers/test_wanvideo.py +++ b/fastvideo/tests/transformers/test_wanvideo.py @@ -34,7 +34,7 @@ def test_wan_transformer(): precision = torch.bfloat16 precision_str = "bf16" args = FastVideoArgs(model_path=TRANSFORMER_PATH, - use_cpu_offload=True, + dit_cpu_offload=True, pipeline_config=PipelineConfig(dit_config=WanVideoConfig(), dit_precision=precision_str)) args.device = device diff --git a/fastvideo/tests/vaes/test_hunyuan_vae.py b/fastvideo/tests/vaes/test_hunyuan_vae.py index 2dc914ec5..4e77a4f65 100644 --- a/fastvideo/tests/vaes/test_hunyuan_vae.py +++ b/fastvideo/tests/vaes/test_hunyuan_vae.py @@ -43,6 +43,7 @@ def test_hunyuan_vae(): precision_str = "bf16" args = FastVideoArgs(model_path=VAE_PATH, pipeline_config=PipelineConfig(vae_config=HunyuanVAEConfig(), vae_precision=precision_str)) args.device = device + args.vae_cpu_offload = False loader = VAELoader() model = loader.load(VAE_PATH, args) diff --git a/fastvideo/tests/vaes/test_wan_vae.py b/fastvideo/tests/vaes/test_wan_vae.py index cec0e439e..d0873ed3a 100644 --- a/fastvideo/tests/vaes/test_wan_vae.py +++ b/fastvideo/tests/vaes/test_wan_vae.py @@ -32,6 +32,7 @@ def test_wan_vae(): precision_str = "bf16" args = FastVideoArgs(model_path=VAE_PATH, pipeline_config=PipelineConfig(vae_config=WanVAEConfig(), vae_precision=precision_str)) args.device = device + args.vae_cpu_offload = False loader = VAELoader() model2 = loader.load(VAE_PATH, args) diff --git a/fastvideo/training/training_pipeline.py b/fastvideo/training/training_pipeline.py index 1135ed3ff..10d11885a 100644 --- a/fastvideo/training/training_pipeline.py +++ b/fastvideo/training/training_pipeline.py @@ -619,7 +619,7 @@ class TrainingPipeline(LoRAPipeline, ABC): """ assert training_args is not None training_args.inference_mode = True - training_args.use_cpu_offload = True + training_args.dit_cpu_offload = True if not training_args.log_validation: return if self.validation_pipeline is None: diff --git a/fastvideo/training/wan_i2v_training_pipeline.py b/fastvideo/training/wan_i2v_training_pipeline.py index ca3c16d9e..303ee20a4 100644 --- a/fastvideo/training/wan_i2v_training_pipeline.py +++ b/fastvideo/training/wan_i2v_training_pipeline.py @@ -46,7 +46,7 @@ class WanI2VTrainingPipeline(TrainingPipeline): args_copy = deepcopy(training_args) args_copy.inference_mode = True - args_copy.use_cpu_offload = True + args_copy.dit_cpu_offload = True # args_copy.pipeline_config.vae_config.load_encoder = False # validation_pipeline = WanImageToVideoValidationPipeline.from_pretrained( self.validation_pipeline = WanImageToVideoPipeline.from_pretrained( @@ -59,7 +59,7 @@ class WanI2VTrainingPipeline(TrainingPipeline): tp_size=training_args.tp_size, sp_size=training_args.sp_size, num_gpus=training_args.num_gpus, - use_cpu_offload=True) + dit_cpu_offload=True) def _get_next_batch(self, training_batch: TrainingBatch) -> TrainingBatch: assert self.training_args is not None @@ -225,5 +225,5 @@ if __name__ == "__main__": parser = TrainingArgs.add_cli_args(parser) parser = FastVideoArgs.add_cli_args(parser) args = parser.parse_args() - args.use_cpu_offload = False + args.dit_cpu_offload = False main(args) diff --git a/fastvideo/training/wan_training_pipeline.py b/fastvideo/training/wan_training_pipeline.py index 4ca04379b..d3c2578ab 100644 --- a/fastvideo/training/wan_training_pipeline.py +++ b/fastvideo/training/wan_training_pipeline.py @@ -36,7 +36,7 @@ class WanTrainingPipeline(TrainingPipeline): args_copy = deepcopy(training_args) args_copy.inference_mode = True - args_copy.use_cpu_offload = True + args_copy.dit_cpu_offload = True args_copy.pipeline_config.vae_config.load_encoder = False validation_pipeline = WanPipeline.from_pretrained( training_args.model_path, @@ -70,5 +70,5 @@ if __name__ == "__main__": parser = TrainingArgs.add_cli_args(parser) parser = FastVideoArgs.add_cli_args(parser) args = parser.parse_args() - args.use_cpu_offload = False + args.dit_cpu_offload = False main(args)