[Feat] Enable loading local Qwen-Image model (#117)

Signed-off-by: gcanlin <canlinguosdu@gmail.com>
This commit is contained in:
Canlin Guo authored and GitHub committed 2025-11-30 21:07:53 +08:00
1 parent 3ea7fd280b
commit 0d110312df
1 file changed
+24 -7
@@ -240,19 +240,32 @@ class QwenImagePipeline(
prefix: str = "",
):
super().__init__()
self.od_config = od_config
self.device = get_local_device()
model = od_config.model
self.scheduler = FlowMatchEulerDiscreteScheduler.from_pretrained(model, subfolder="scheduler")
# Check if model is a local path
local_files_only = os.path.exists(model)
self.scheduler = FlowMatchEulerDiscreteScheduler.from_pretrained(
model, subfolder="scheduler", local_files_only=local_files_only
)
logger.info("Loaded Qwen-Image scheduler successfully")
with set_default_torch_dtype(torch.bfloat16):
self.text_encoder = Qwen2_5_VLForConditionalGeneration.from_pretrained(model, subfolder="text_encoder")
self.text_encoder = Qwen2_5_VLForConditionalGeneration.from_pretrained(
model, subfolder="text_encoder", local_files_only=local_files_only
)
logger.info("Loaded Qwen-Image text encoder successfully")
self.vae = AutoencoderKLQwenImage.from_pretrained(model, subfolder="vae").to(self.device)
self.vae = AutoencoderKLQwenImage.from_pretrained(
model, subfolder="vae", local_files_only=local_files_only
).to(self.device)
logger.info("Loaded Qwen-Image VAE successfully")
self.transformer = QwenImageTransformer2DModel()
logger.info("Initialized Qwen-Image transformer successfully.")
self.tokenizer = Qwen2Tokenizer.from_pretrained(model, subfolder="tokenizer")
self.tokenizer = Qwen2Tokenizer.from_pretrained(
model, subfolder="tokenizer", local_files_only=local_files_only
)
logger.info("Loaded Qwen-Image tokenizer successfully.")
self.stage = None
@@ -763,10 +776,14 @@ class QwenImagePipeline(
for name, tensor in state_dict.items():
yield name, tensor
model_name = "Qwen/Qwen-Image"
try:
# Use the arguments as verified by the user
model_path = download_weights_from_hf_specific(model_name, None, ["*"])
# Get model path from config or download from HF
model_name = self.od_config.model if hasattr(self, "od_config") else "Qwen/Qwen-Image"
if os.path.exists(model_name):
model_path = model_name
else:
model_path = download_weights_from_hf_specific(model_name, None, ["*"])
transformer_path = os.path.join(model_path, "transformer")
self.transformer.load_weights(weight_iterator(transformer_path))