Gerchegg commited on
Commit
5adaf2e
·
verified ·
1 Parent(s): b4d451f

Upload scripts_reference/convert_to_diffusers.py with huggingface_hub

Browse files
scripts_reference/convert_to_diffusers.py ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Скрипт для конвертации модели Qwen из safetensors в формат diffusers
3
+ """
4
+ import torch
5
+ import os
6
+ from diffusers import DiffusionPipeline
7
+ from safetensors.torch import load_file
8
+ from huggingface_hub import HfApi, create_repo
9
+
10
+ # Параметры
11
+ SAFETENSORS_PATH = r"D:\swarm_Comfy\SwarmUI_Model_Downloader_v82\SwarmUI\Models\unet\QwenSolobandModel\Qwen_Soloband_Model_V1-000140.safetensors"
12
+ BASE_MODEL = "Qwen/Qwen-Image"
13
+ OUTPUT_DIR = "./qwen_soloband_diffusers"
14
+ HF_REPO = "Gerchegg/Qwen-Soloband-Diffusers"
15
+ HF_TOKEN = os.environ.get("HF_TOKEN", "hf_YOUR_TOKEN_HERE") # Замените на ваш токен
16
+
17
+ def convert_safetensors_to_diffusers():
18
+ """
19
+ Конвертация safetensors модели в формат diffusers
20
+ """
21
+ print("Загрузка базовой модели Qwen-Image...")
22
+ # Загружаем базовую модель со всеми компонентами
23
+ pipeline = DiffusionPipeline.from_pretrained(
24
+ BASE_MODEL,
25
+ torch_dtype=torch.bfloat16
26
+ )
27
+
28
+ print(f"Загрузка весов из safetensors: {SAFETENSORS_PATH}")
29
+ # Загружаем веса из safetensors
30
+ state_dict = load_file(SAFETENSORS_PATH)
31
+
32
+ print("Загрузка весов в transformer...")
33
+ # Загружаем веса в transformer компонент
34
+ # Qwen-Image использует DiT (Diffusion Transformer)
35
+ if hasattr(pipeline, 'transformer'):
36
+ # Фильтруем ключи, которые относятся к transformer
37
+ transformer_state_dict = {}
38
+ for key, value in state_dict.items():
39
+ # Убираем префиксы если есть
40
+ new_key = key.replace("model.", "").replace("diffusion_model.", "")
41
+ transformer_state_dict[new_key] = value
42
+
43
+ # Загружаем веса
44
+ missing_keys, unexpected_keys = pipeline.transformer.load_state_dict(
45
+ transformer_state_dict,
46
+ strict=False
47
+ )
48
+
49
+ if missing_keys:
50
+ print(f"Предупреждение: отсутствующие ключи: {missing_keys[:5]}...")
51
+ if unexpected_keys:
52
+ print(f"Предупреждение: неожиданные ключи: {unexpected_keys[:5]}...")
53
+
54
+ print(f"Сохранение модели в формате diffusers: {OUTPUT_DIR}")
55
+ # Сохраняем в формате diffusers
56
+ pipeline.save_pretrained(OUTPUT_DIR)
57
+
58
+ print("Конвертация завершена!")
59
+ return OUTPUT_DIR
60
+
61
+ def upload_to_huggingface(model_dir, repo_id, token):
62
+ """
63
+ Загрузка модели в HuggingFace Hub
64
+ """
65
+ print(f"Создание/проверка репозитория: {repo_id}")
66
+ api = HfApi()
67
+
68
+ try:
69
+ # Создаем репозиторий если не существует
70
+ create_repo(
71
+ repo_id=repo_id,
72
+ token=token,
73
+ exist_ok=True,
74
+ repo_type="model"
75
+ )
76
+ print("Репозиторий готов")
77
+ except Exception as e:
78
+ print(f"Репозиторий уже существует или ошибка: {e}")
79
+
80
+ print("Загрузка файлов модели...")
81
+ # Загружаем все файлы из директории
82
+ api.upload_folder(
83
+ folder_path=model_dir,
84
+ repo_id=repo_id,
85
+ token=token,
86
+ repo_type="model"
87
+ )
88
+
89
+ print(f"Модель успешно загружена в {repo_id}!")
90
+ print(f"Ссылка: https://huggingface.co/{repo_id}")
91
+
92
+ if __name__ == "__main__":
93
+ # Конвертируем модель
94
+ output_dir = convert_safetensors_to_diffusers()
95
+
96
+ # Спрашиваем пользователя, загружать ли в HF
97
+ upload = input("\nЗагрузить модель в HuggingFace Hub? (y/n): ")
98
+ if upload.lower() == 'y':
99
+ upload_to_huggingface(output_dir, HF_REPO, HF_TOKEN)
100
+ else:
101
+ print(f"Модель сохранена локально в: {output_dir}")
102
+