naifu (or naifu-diffusion) is designed for training generative models with various configurations and features. The code in the main branch of this repository is under development and subject to change as new features are added.
To get started with Naifu, follow these steps to install the necessary dependencies:
# Clone the Naifu repository:
git clone --depth 1 https://github.com/mikubill/naifu
# Install the required Python packages:
cd naifu && pip install -r requirements.txtMake sure you have a compatible version of Python installed (Python 3.9 or above).
Naifu provides a flexible and intuitive way to train models using various configurations. To train a model, use the trainer.py script and provide the desired configuration file as an argument.
python trainer.py --config config/<config_file>
# or (same as --config)
python trainer.py config/<config_file>Replace <config_file> with one of the available configuration files listed below.
Choose the appropriate configuration file based on training objectives and environment.
Train SDXL (Stable Diffusion XL) model
# prepare image data (to latents)
python scripts/encode_latents_xl.py -i <input_path> -o <encoded_path>
# sd_xl_base_1.0_0.9vae.safetensors
python trainer.py config/train_sdxl.yaml
# For huggingface model support
# stabilityai/stable-diffusion-xl-base-1.0
python trainer.py config/train_diffusers.yaml
# use original sgm loss module
python trainer.py config/train_sdxl_original.yamlTrain SDXL refiner (Stable Diffusion XL refiner) model
# stabilityai/stable-diffusion-xl-refiner-1.0
python trainer.py config/train_refiner.yamlTrain original Stable Diffusion 1.4 or 1.5 model
# runwayml/stable-diffusion-v1-5
# Note: will save in diffusers format
python trainer.py config/train_sd15.yamlTrain SDXL model with LyCORIS.
# Based on the work available at KohakuBlueleaf/LyCORIS
pip install lycoris_lora toml
python trainer.py config/train_lycoris.yamlUse fairscale strategy for distributed data parallel sharded training
pip install fairscale
python trainer.py config/train_fairscale.yamlTrain SDXL model with Diffusion DPO
Paper: Diffusion Model Alignment Using Direct Preference Optimization (arxiv:2311.12908)
# dataset: yuvalkirstain/pickapic_v2
# Be careful tuning the resolution and dpo_betas!
# will save in diffusers format
python trainer.py config/train_dpo_diffusers.yaml # diffusers backend
python trainer.py config/train_dpo.yaml # sgm backendTrain Pixart-Alpha model
Paper: Fast Training of Diffusion Transformer for Photorealistic Text-to-Image Synthesis (arxiv:2310.00426)
# PixArt-alpha/PixArt-XL-2-1024-MS
python trainer.py config/train_pixart.yamlTrain SDXL-LCM model
Paper: Latent Consistency Models: Synthesizing High-Resolution Images with Few-Step Inference (arxiv:2310.04378)
python trainer.py config/train_lcm.yamlTrain StableCascade model (Sai)
# currently only stage_c (w/ or w/o text encoder)
python trainer.py config/train_cascade_stage_c.yamlTrain GPT2 model
# currently only stage_c (w/ or w/o text encoder)
python trainer.py config/train_gpt2.yamlTrain with Phi-1.5/2 model
python trainer.py config/train_phi2.yamlTrain language models (LLaMA, Qwen, Gemma etc)
# Note that prepare data in sharegpt/chatml format, or define your own dataset in data/text_dataset.py
# See example dataset for reference: function-calling-sharegpt
python trainer.py config/train_general_llm.yamlTrain language models with lora or qlora (For example, Mistral)
python trainer.py config/train_mistral_lora.yaml- sgm - Uses the sgm to train SDXL models.
- sd3 - Trainer for SD3 models - use with caution: may produce undesired result
- hydit - Trainer for hunyuan dit models (v1.1 and v1.2)
- main-archived - Contains the original naifu-diffusion code for training Stable Diffusion 1.x models.
For branches without documentation, please follow the installation instructions provided above.