(model_type: str)
| 315 | |
| 316 | |
| 317 | def convert_transformer(model_type: str): |
| 318 | config = get_transformer_config(model_type) |
| 319 | diffusers_config = config["diffusers_config"] |
| 320 | model_id = config["model_id"] |
| 321 | |
| 322 | if "1.3B" in model_type: |
| 323 | original_state_dict = load_file(hf_hub_download(model_id, "model.safetensors")) |
| 324 | else: |
| 325 | os.makedirs(model_type, exist_ok=True) |
| 326 | model_dir = pathlib.Path(model_type) |
| 327 | if "720P" in model_type: |
| 328 | top_shard = 7 if "I2V" in model_type else 6 |
| 329 | zeros = "0" * (4 if "I2V" or "T2V" in model_type else 3) |
| 330 | model_name = "diffusion_pytorch_model" |
| 331 | elif "540P" in model_type: |
| 332 | top_shard = 14 if "I2V" in model_type else 12 |
| 333 | model_name = "model" |
| 334 | |
| 335 | for i in range(1, top_shard + 1): |
| 336 | shard_path = f"{model_name}-{i:05d}-of-{zeros}{top_shard}.safetensors" |
| 337 | hf_hub_download(model_id, shard_path, local_dir=model_dir) |
| 338 | original_state_dict = load_sharded_safetensors(model_dir) |
| 339 | |
| 340 | with init_empty_weights(): |
| 341 | transformer = SkyReelsV2Transformer3DModel.from_config(diffusers_config) |
| 342 | |
| 343 | for key in list(original_state_dict.keys()): |
| 344 | new_key = key[:] |
| 345 | for replace_key, rename_key in TRANSFORMER_KEYS_RENAME_DICT.items(): |
| 346 | new_key = new_key.replace(replace_key, rename_key) |
| 347 | update_state_dict_(original_state_dict, key, new_key) |
| 348 | |
| 349 | for key in list(original_state_dict.keys()): |
| 350 | for special_key, handler_fn_inplace in TRANSFORMER_SPECIAL_KEYS_REMAP.items(): |
| 351 | if special_key not in key: |
| 352 | continue |
| 353 | handler_fn_inplace(key, original_state_dict) |
| 354 | |
| 355 | if "FLF2V" in model_type: |
| 356 | if ( |
| 357 | hasattr(transformer.condition_embedder, "image_embedder") |
| 358 | and hasattr(transformer.condition_embedder.image_embedder, "pos_embed") |
| 359 | and transformer.condition_embedder.image_embedder.pos_embed is not None |
| 360 | ): |
| 361 | pos_embed_shape = transformer.condition_embedder.image_embedder.pos_embed.shape |
| 362 | original_state_dict["condition_embedder.image_embedder.pos_embed"] = torch.zeros(pos_embed_shape) |
| 363 | |
| 364 | transformer.load_state_dict(original_state_dict, strict=True, assign=True) |
| 365 | return transformer |
| 366 | |
| 367 | |
| 368 | def convert_vae(): |
no test coverage detected
searching dependent graphs…