Instructions to use Joypop/GDPO with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusers
How to use Joypop/GDPO with Diffusers:
pip install -U diffusers transformers accelerate
import torch from diffusers import DiffusionPipeline from diffusers.utils import load_image # switch to "mps" for apple devices pipe = DiffusionPipeline.from_pretrained("Joypop/GDPO", dtype=torch.bfloat16, device_map="cuda") prompt = "Turn this cat into a dog" input_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png") image = pipe(image=input_image, prompt=prompt).images[0] - Notebooks
- Google Colab
- Kaggle
Download GDPOSR/mergelora.py from Joypop/GDPO: direct link, hf CLI and curl.
- Browser
- Download file 3.04 kB
-
https://huggingface.co/Joypop/GDPO/resolve/main/GDPOSR/mergelora.py
- Command line
-
hf download hf://Joypop/GDPO/GDPOSR/mergelora.py
-
curl -L -o mergelora.py https://huggingface.co/Joypop/GDPO/resolve/main/GDPOSR/mergelora.py
3.04 kB
| import os | |
| import requests | |
| import sys | |
| import copy | |
| import random | |
| import time | |
| import glob | |
| import math | |
| import yaml | |
| import torch | |
| import torch.nn as nn | |
| import torch.nn.functional as F | |
| from tqdm import tqdm | |
| from peft import LoraConfig | |
| from types import SimpleNamespace | |
| import sys | |
| sys.path.append("./") | |
| from diffusermodels.autoencoder_kl import AutoencoderKL as AutoencoderKLMerge | |
| from diffusermodels.unet_2d_condition import UNet2DConditionModel as UNet2DConditionModelMerge | |
| def UNetMergeLoRA(basemodel_path='', trainedmodel_path='', savepath='', savename=''): | |
| loraweight = torch.load(trainedmodel_path) | |
| # vae = AutoencoderKL.from_pretrained(pretrained_model_name_or_path, subfolder="vae") | |
| unet = UNet2DConditionModelMerge.from_pretrained(basemodel_path, subfolder="unet") | |
| # load unet lora | |
| lora_conf_encoder = LoraConfig(r=loraweight["rank_unet"], init_lora_weights="gaussian", target_modules=loraweight["unet_lora_encoder_modules"]) | |
| lora_conf_decoder = LoraConfig(r=loraweight["rank_unet"], init_lora_weights="gaussian", target_modules=loraweight["unet_lora_decoder_modules"]) | |
| lora_conf_others = LoraConfig(r=loraweight["rank_unet"], init_lora_weights="gaussian", target_modules=loraweight["unet_lora_others_modules"]) | |
| unet.add_adapter(lora_conf_encoder, adapter_name="default_encoder") | |
| unet.add_adapter(lora_conf_decoder, adapter_name="default_decoder") | |
| unet.add_adapter(lora_conf_others, adapter_name="default_others") | |
| for n, p in unet.named_parameters(): | |
| if "lora" in n or "conv_in" in n: | |
| p.data.copy_(loraweight["state_dict_unet"][n]) | |
| unet.set_adapter(['default_encoder', 'default_decoder', 'default_others']) | |
| unet = unet.merge_and_unload() | |
| unet.save_pretrained(os.path.join(savepath, savename)) | |
| def VAEMergeLoRA(basemodel_path='', trainedmodel_path='', savepath='', savename=''): | |
| loraweight = torch.load(trainedmodel_path) | |
| vae = AutoencoderKL.from_pretrained(pretrained_model_name_or_path, subfolder="vae") | |
| # load vae lora | |
| vae_lora_conf_encoder = LoraConfig(r=loraweight["rank_vae"], init_lora_weights="gaussian", target_modules=loraweight["vae_lora_encoder_modules"]) | |
| vae_lora_conf_decoder = LoraConfig(r=loraweight["rank_vae"], init_lora_weights="gaussian", target_modules=loraweight["vae_lora_decoder_modules"]) | |
| vae.add_adapter(vae_lora_conf_encoder, adapter_name="default_encoder") | |
| vae.add_adapter(vae_lora_conf_decoder, adapter_name="default_decoder") | |
| for n, p in vae.named_parameters(): | |
| if "lora" in n: | |
| p.data.copy_(loraweight["state_dict_vae"][n]) | |
| vae.set_adapter(['default_encoder']) | |
| vae = vae.merge_and_unload() | |
| vae.save_pretrained(os.path.join(savepath, savename)) | |
| unetbasemodel_path='' | |
| unettrainedmodel_path='' | |
| unetsavepath='' | |
| unetsavename='' | |
| UNetMergeLoRA(unetbasemodel_path, unettrainedmodel_path, unetsavepath, unetsavename) | |
| vaebasemodel_path='' | |
| vaetrainedmodel_path='' | |
| vaesavepath='' | |
| vaesavename='' | |
| VAEMergeLoRA(vaebasemodel_path, vaetrainedmodel_path, vaesavepath, vaesavename) |