RosticFACE commited on
Commit
b930b6e
·
verified ·
1 Parent(s): 5b15c0f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -13
app.py CHANGED
@@ -14,7 +14,7 @@ from torchao.quantization import quantize_
14
  from torchao.quantization import Float8DynamicActivationFloat8WeightConfig
15
  from torchao.quantization import Int8WeightOnlyConfig
16
 
17
- import aoti # Импорт aoti.py
18
 
19
 
20
  MODEL_ID = "Wan-AI/Wan2.2-I2V-A14B-Diffusers"
@@ -32,7 +32,7 @@ MIN_FRAMES_MODEL = 8
32
  MIN_DURATION = round(MIN_FRAMES_MODEL / FIXED_FPS, 1)
33
  DEFAULT_DURATION = 5.0
34
 
35
- # Модель загружается с device_map='auto' для распределения больших трансформеров
36
  pipe = WanImageToVideoPipeline.from_pretrained(
37
  MODEL_ID,
38
  transformer=WanTransformer3DModel.from_pretrained(
@@ -50,7 +50,7 @@ pipe = WanImageToVideoPipeline.from_pretrained(
50
  torch_dtype=torch.bfloat16,
51
  )
52
 
53
- # Загрузка и фьюзинг LoRA
54
  pipe.load_lora_weights(
55
  "Kijai/WanVideo_comfy",
56
  weight_name="Lightx2v/lightx2v_I2V_14B_480p_cfg_step_distill_rank128_bf16.safetensors",
@@ -68,25 +68,28 @@ pipe.fuse_lora(adapter_names=["lightx2v"], lora_scale=3., components=["transform
68
  pipe.fuse_lora(adapter_names=["lightx2v_2"], lora_scale=1., components=["transformer_2"])
69
  pipe.unload_lora_weights()
70
 
71
- # Квантизация
72
  quantize_(pipe.text_encoder, Int8WeightOnlyConfig())
73
  quantize_(pipe.transformer, Float8DynamicActivationFloat8WeightConfig())
74
  quantize_(pipe.transformer_2, Float8DynamicActivationFloat8WeightConfig())
75
 
76
- # AOTI
77
  aoti.aoti_blocks_load(pipe.transformer, 'zerogpu-aoti/Wan2', variant='fp8da')
78
  aoti.aoti_blocks_load(pipe.transformer_2, 'zerogpu-aoti/Wan2', variant='fp8da')
79
 
 
 
 
80
 
81
  default_prompt_i2v = "make this image come alive, cinematic motion, smooth animation"
82
  default_negative_prompt = (
83
  "色调艳丽, 过曝, 静态, 细节模糊不清, 字幕, 风格, 作品, 画作, 画面, 静止, "
84
  "整体发灰, 最差质量, 低质量, JPEG压缩残留, 丑陋의, 残缺的, 多余的手指, "
85
- "画得不好的手部, 画得不好的脸部, 畸形, , 形态畸形的肢体, 手指融合, "
86
  "静止不动的画面, 杂乱的背景, 三条腿, 背景人很多, 倒着走"
87
  )
88
 
89
- # Функция изменения размера изображения
90
  def resize_image(image: Image.Image) -> Image.Image:
91
  width, height = image.size
92
 
@@ -172,10 +175,8 @@ def generate_video(
172
  current_seed = random.randint(0, MAX_SEED) if randomize_seed else int(seed)
173
  resized_image = resize_image(input_image)
174
 
175
- # При первом вызове pipe() здесь произойдет перемещение всех оставшихся (CPU/quantized)
176
- # частей модели на GPU.
177
- # 🟢 ИСПРАВЛЕНО: Добавлен 'device="cuda"' для создания латентов на GPU,
178
- # что соответствует генератору 'torch.Generator(device="cuda")'.
179
  output_frames_list = pipe(
180
  image=resized_image,
181
  prompt=prompt,
@@ -187,7 +188,6 @@ def generate_video(
187
  guidance_scale_2=float(guidance_scale_2),
188
  num_inference_steps=int(steps),
189
  generator=torch.Generator(device="cuda").manual_seed(current_seed),
190
- device="cuda", # <--- ИСПРАВЛЕНИЕ: Гарантирует, что латенты создаются на CUDA
191
  ).frames[0]
192
 
193
  with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as tmpfile:
@@ -197,7 +197,7 @@ def generate_video(
197
  return video_path, current_seed
198
 
199
 
200
- # --- Gradio Interface ---
201
  with gr.Blocks() as demo:
202
  gr.Markdown("# 🚀 Wan 2.2 I2V (14B) — Unlimited Duration Edition 🕒")
203
  gr.Markdown("Generate cinematic I2V animations without duration limits. Optimized for 4x NVIDIA L40S.")
 
14
  from torchao.quantization import Float8DynamicActivationFloat8WeightConfig
15
  from torchao.quantization import Int8WeightOnlyConfig
16
 
17
+ import aoti
18
 
19
 
20
  MODEL_ID = "Wan-AI/Wan2.2-I2V-A14B-Diffusers"
 
32
  MIN_DURATION = round(MIN_FRAMES_MODEL / FIXED_FPS, 1)
33
  DEFAULT_DURATION = 5.0
34
 
35
+ # Модель загружается с device_map='auto' для распределения больших трансформеров
36
  pipe = WanImageToVideoPipeline.from_pretrained(
37
  MODEL_ID,
38
  transformer=WanTransformer3DModel.from_pretrained(
 
50
  torch_dtype=torch.bfloat16,
51
  )
52
 
53
+ # Загрузка и фьюзинг LoRA
54
  pipe.load_lora_weights(
55
  "Kijai/WanVideo_comfy",
56
  weight_name="Lightx2v/lightx2v_I2V_14B_480p_cfg_step_distill_rank128_bf16.safetensors",
 
68
  pipe.fuse_lora(adapter_names=["lightx2v_2"], lora_scale=1., components=["transformer_2"])
69
  pipe.unload_lora_weights()
70
 
71
+ # Квантизация
72
  quantize_(pipe.text_encoder, Int8WeightOnlyConfig())
73
  quantize_(pipe.transformer, Float8DynamicActivationFloat8WeightConfig())
74
  quantize_(pipe.transformer_2, Float8DynamicActivationFloat8WeightConfig())
75
 
76
+ # AOTI
77
  aoti.aoti_blocks_load(pipe.transformer, 'zerogpu-aoti/Wan2', variant='fp8da')
78
  aoti.aoti_blocks_load(pipe.transformer_2, 'zerogpu-aoti/Wan2', variant='fp8da')
79
 
80
+ # 🟢 ИСПРАВЛЕНИЕ 1: Явно переводим пайплайн на GPU.
81
+ # Это решает проблему "Cannot generate a cpu tensor from a generator of type cuda."
82
+ pipe.to("cuda")
83
 
84
  default_prompt_i2v = "make this image come alive, cinematic motion, smooth animation"
85
  default_negative_prompt = (
86
  "色调艳丽, 过曝, 静态, 细节模糊不清, 字幕, 风格, 作品, 画作, 画面, 静止, "
87
  "整体发灰, 最差质量, 低质量, JPEG压缩残留, 丑陋의, 残缺的, 多余的手指, "
88
+ "画得不хорошие руки, 画得不хорошие лица, 畸形, , 形态畸形的肢体, 手指融合, "
89
  "静止不动的画面, 杂乱的背景, 三条腿, 背景人很多, 倒着走"
90
  )
91
 
92
+
93
  def resize_image(image: Image.Image) -> Image.Image:
94
  width, height = image.size
95
 
 
175
  current_seed = random.randint(0, MAX_SEED) if randomize_seed else int(seed)
176
  resized_image = resize_image(input_image)
177
 
178
+ # 🟢 ИСПРАВЛЕНИЕ 2: Удален аргумент 'device="cuda"', чтобы избежать TypeError,
179
+ # так как пайплайн уже был переведен на CUDA перед функцией.
 
 
180
  output_frames_list = pipe(
181
  image=resized_image,
182
  prompt=prompt,
 
188
  guidance_scale_2=float(guidance_scale_2),
189
  num_inference_steps=int(steps),
190
  generator=torch.Generator(device="cuda").manual_seed(current_seed),
 
191
  ).frames[0]
192
 
193
  with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as tmpfile:
 
197
  return video_path, current_seed
198
 
199
 
200
+ # --- Gradio Interface ---
201
  with gr.Blocks() as demo:
202
  gr.Markdown("# 🚀 Wan 2.2 I2V (14B) — Unlimited Duration Edition 🕒")
203
  gr.Markdown("Generate cinematic I2V animations without duration limits. Optimized for 4x NVIDIA L40S.")