x2XcarleX2x commited on
Commit
1ac86d8
·
verified ·
1 Parent(s): b8b5372

Update aduc_framework/managers/wan_manager.py

Browse files
aduc_framework/managers/wan_manager.py CHANGED
@@ -1,5 +1,5 @@
1
  # aduc_framework/managers/wan_manager.py
2
- # WanManager v1.5.2 (Correção do dispositivo do torch.Generator)
3
 
4
  import os
5
  import platform
@@ -31,9 +31,10 @@ from aduc_framework.utils.callbacks import DenoiseStepLogger
31
 
32
  class WanManager:
33
  """
34
- Gerenciador de produção v1.5.2:
35
- - CORREÇÃO: Resolve o erro "META device type not an accelerator" ao criar o
36
- torch.Generator sempre na CPU.
 
37
  - Mantém o `yield` para atualizações em tempo real, os modos I2V e V2V,
38
  e toda a lógica de validação robusta.
39
  """
@@ -232,29 +233,27 @@ class WanManager:
232
 
233
  print("[WanManager] Preparando tensores e timesteps para a geração...")
234
 
235
- target_device = self.pipe.transformer.device
236
  transformer_dtype = self.pipe.transformer.dtype
237
-
238
  generator = torch.Generator(device="cpu").manual_seed(current_seed)
239
 
240
- prompt_embeds, negative_prompt_embeds = self.pipe.encode_prompt(prompt=prompt, negative_prompt=negative_prompt or self.default_negative_prompt, device=target_device)
241
  prompt_embeds = prompt_embeds.to(transformer_dtype)
242
  if negative_prompt_embeds is not None:
243
  negative_prompt_embeds = negative_prompt_embeds.to(transformer_dtype)
244
 
245
- image_processed = self.pipe.video_processor.preprocess(processed_convergent, height=target_h, width=target_w).to(target_device)
246
- causal_img_processed = self.pipe.video_processor.preprocess(processed_causal, height=target_h, width=target_w).to(target_device)
247
- handler_img_processed = self.pipe.video_processor.preprocess(processed_handler, height=target_h, width=target_w).to(target_device) if processed_handler else None
248
 
249
  latents_outputs = self.pipe.prepare_latents(
250
  image=image_processed, batch_size=1, num_channels_latents=self.pipe.vae.config.z_dim,
251
- height=target_h, width=target_w, num_frames=num_frames, dtype=torch.float32, device=target_device, generator=generator,
252
  causal_img=causal_img_processed, handler_img=handler_img_processed,
253
  handler_frame_index=corrected_handler_index, handler_weight=final_handler_weight, causal_weight=final_causal_weight
254
  )
255
  latents, condition = latents_outputs
256
 
257
- self.pipe.scheduler.set_timesteps(steps, device=target_device)
258
  timesteps = self.pipe.scheduler.timesteps
259
 
260
  denoise_logger = DenoiseStepLogger(self.pipe)
 
1
  # aduc_framework/managers/wan_manager.py
2
+ # WanManager v1.5.3 (Correção final de dispositivo para `device_map="auto"`)
3
 
4
  import os
5
  import platform
 
31
 
32
  class WanManager:
33
  """
34
+ Gerenciador de produção v1.5.3:
35
+ - CORREÇÃO: Remove o gerenciamento manual de dispositivos na preparação de tensores
36
+ para ser totalmente compatível com a automação do `accelerate` e `device_map="auto"`.
37
+ Resolve os erros "Cannot copy out of meta tensor".
38
  - Mantém o `yield` para atualizações em tempo real, os modos I2V e V2V,
39
  e toda a lógica de validação robusta.
40
  """
 
233
 
234
  print("[WanManager] Preparando tensores e timesteps para a geração...")
235
 
 
236
  transformer_dtype = self.pipe.transformer.dtype
 
237
  generator = torch.Generator(device="cpu").manual_seed(current_seed)
238
 
239
+ prompt_embeds, negative_prompt_embeds = self.pipe.encode_prompt(prompt=prompt, negative_prompt=negative_prompt or self.default_negative_prompt)
240
  prompt_embeds = prompt_embeds.to(transformer_dtype)
241
  if negative_prompt_embeds is not None:
242
  negative_prompt_embeds = negative_prompt_embeds.to(transformer_dtype)
243
 
244
+ image_processed = self.pipe.video_processor.preprocess(processed_convergent, height=target_h, width=target_w)
245
+ causal_img_processed = self.pipe.video_processor.preprocess(processed_causal, height=target_h, width=target_w)
246
+ handler_img_processed = self.pipe.video_processor.preprocess(processed_handler, height=target_h, width=target_w) if processed_handler else None
247
 
248
  latents_outputs = self.pipe.prepare_latents(
249
  image=image_processed, batch_size=1, num_channels_latents=self.pipe.vae.config.z_dim,
250
+ height=target_h, width=target_w, num_frames=num_frames, dtype=torch.float32, generator=generator,
251
  causal_img=causal_img_processed, handler_img=handler_img_processed,
252
  handler_frame_index=corrected_handler_index, handler_weight=final_handler_weight, causal_weight=final_causal_weight
253
  )
254
  latents, condition = latents_outputs
255
 
256
+ self.pipe.scheduler.set_timesteps(steps, device=latents.device)
257
  timesteps = self.pipe.scheduler.timesteps
258
 
259
  denoise_logger = DenoiseStepLogger(self.pipe)