Skip to content

OmniGen क्विकस्टार्ट

इस उदाहरण में, हम OmniGen के लिए Lycoris LoKr प्रशिक्षण करेंगे, जिसका फोकस सामान्य T2I प्रदर्शन सुधार पर है (अभी edit/instruct प्रशिक्षण नहीं)।

हार्डवेयर आवश्यकताएँ

OmniGen लगभग 3.8B पैरामीटर का मध्यम आकार का मॉडल है; यह SDXL VAE का उपयोग करता है लेकिन टेक्स्ट एन्कोडर उपयोग नहीं करता। इसके बजाय, OmniGen native token IDs को इनपुट के रूप में लेता है और multi‑modal मॉडल की तरह व्यवहार करता है।

ट्रेनिंग के दौरान मेमोरी उपयोग अभी ज्ञात नहीं है, लेकिन batch size 2 या 3 के साथ 24G कार्ड पर आसानी से फिट होने की उम्मीद है। मॉडल को quantise किया जा सकता है, जिससे VRAM और बचती है।

OmniGen की आर्किटेक्चर अन्य SimpleTuner‑trainable मॉडलों से अलग है;

  • वर्तमान में केवल t2i (text‑to‑image) प्रशिक्षण समर्थित है, जहाँ मॉडल आउटपुट प्रशिक्षण prompts और इनपुट images से align होता है।
  • image‑to‑image प्रशिक्षण अभी समर्थित नहीं है, लेकिन भविष्य में हो सकता है।
  • इस मोड में दूसरी इमेज इनपुट दी जाती है, और मॉडल इसे conditioning/reference डेटा के रूप में उपयोग करता है।
  • OmniGen ट्रेनिंग के दौरान loss मान बहुत ऊँचा होता है, और इसका कारण ज्ञात नहीं है।

पूर्वापेक्षाएँ

सुनिश्चित करें कि Python इंस्टॉल है; SimpleTuner 3.10 से 3.12 के साथ अच्छा काम करता है।

आप इसे चलाकर जांच सकते हैं:

python --version

यदि आपके Ubuntu पर Python 3.12 इंस्टॉल नहीं है, तो आप यह प्रयास कर सकते हैं:

apt -y install python3.13 python3.13-venv

Container image dependencies

Vast, RunPod, और TensorDock (आदि) के लिए, CUDA 12.2‑12.8 इमेज पर CUDA extensions कम्पाइल करने हेतु यह काम करेगा:

apt -y install nvidia-cuda-toolkit

इंस्टॉलेशन

pip के जरिए SimpleTuner इंस्टॉल करें:

pip install 'simpletuner[cuda]'

# CUDA 13 / Blackwell users (NVIDIA B-series GPUs)
pip install 'simpletuner[cuda13]' --extra-index-url https://download.pytorch.org/whl/cu130

मैनुअल इंस्टॉलेशन या डेवलपमेंट सेटअप के लिए, installation documentation देखें।

वातावरण सेटअप

SimpleTuner चलाने के लिए, आपको एक configuration फ़ाइल, dataset और model directories, तथा एक dataloader configuration फ़ाइल सेट करनी होगी।

Configuration file

एक प्रयोगात्मक स्क्रिप्ट, configure.py, इंटरैक्टिव step‑by‑step कॉन्फ़िगरेशन के जरिए इस सेक्शन को पूरी तरह स्किप करने में मदद कर सकती है। इसमें कुछ सुरक्षा फीचर्स हैं जो सामान्य pitfalls से बचाते हैं।

नोट: यह आपके dataloader को कॉन्फ़िगर नहीं करता। आपको उसे बाद में मैन्युअली करना होगा।

इसे चलाने के लिए:

simpletuner configure

⚠️ जिन देशों में Hugging Face Hub आसानी से उपलब्ध नहीं है, वहाँ HF_ENDPOINT=https://hf-mirror.com को अपने ~/.bashrc या ~/.zshrc में जोड़ें, यह आपके सिस्टम के $SHELL पर निर्भर करता है।

यदि आप मैन्युअल कॉन्फ़िगर करना पसंद करते हैं:

config/config.json.example को config/config.json में कॉपी करें:

cp config/config.json.example config/config.json

फिर, आपको संभवतः निम्न वेरिएबल्स बदलने होंगे:

  • model_type - इसे lora पर सेट करें।
  • lora_type - इसे lycoris पर सेट करें।
  • model_family - इसे omnigen पर सेट करें।
  • model_flavour - इसे v1 पर सेट करें।
  • output_dir - इसे उस डायरेक्टरी पर सेट करें जहाँ आप अपने checkpoints और validation images रखना चाहते हैं। यहाँ full path उपयोग करने की सलाह है।
  • train_batch_size - 24G कार्ड पर full gradient checkpointing के साथ यह 6 तक हो सकता है।
  • validation_resolution - OmniGen का यह checkpoint 1024px मॉडल है; इसे 1024x1024 या अन्य समर्थित resolutions पर सेट करें।
  • अन्य resolutions को कॉमा से अलग कर सकते हैं: 1024x1024,1280x768,2048x2048
  • validation_guidance - OmniGen inference में जिस मान के साथ आप सहज हों, वही रखें; 2.5‑3.0 के आसपास का कम मान अधिक यथार्थवादी परिणाम देता है।
  • validation_num_inference_steps - लगभग 30 रखें।
  • use_ema - इसे true सेट करने से मुख्य trained checkpoint के साथ अधिक स्मूद परिणाम मिलते हैं।

  • optimizer - आप कोई भी optimiser उपयोग कर सकते हैं जिसे आप जानते हों, लेकिन इस उदाहरण में हम adamw_bf16 इस्तेमाल करेंगे।

  • mixed_precision - सबसे कुशल training के लिए bf16 अनुशंसित है, या no (लेकिन मेमोरी अधिक खपत होगी और धीमा रहेगा)।
  • gradient_checkpointing - इसे बंद करने पर सबसे तेज़ होगा, लेकिन batch sizes सीमित होंगे। सबसे कम VRAM उपयोग के लिए इसे सक्षम रखना आवश्यक है।

Multi‑GPU उपयोगकर्ता उपयोग किए जाने वाले GPU की संख्या कॉन्फ़िगर करने के लिए इस दस्तावेज़ को देखें।

अंत में आपका config.json कुछ ऐसा दिखेगा:

उदाहरण कॉन्फ़िग देखें
{
    "validation_torch_compile": "false",
    "validation_step_interval": 200,
    "validation_seed": 42,
    "validation_resolution": "1024x1024",
    "validation_prompt": "A photo-realistic image of a cat",
    "validation_num_inference_steps": "20",
    "validation_guidance": 2.0,
    "validation_guidance_rescale": "0.0",
    "vae_cache_ondemand": true,
    "vae_batch_size": 1,
    "train_batch_size": 1,
    "tracker_run_name": "eval_loss_test1",
    "seed": 42,
    "resume_from_checkpoint": "latest",
    "resolution": 1024,
    "resolution_type": "pixel_area",
    "report_to": "tensorboard",
    "output_dir": "output/models-omnigen",
    "optimizer": "adamw_bf16",
    "num_train_epochs": 0,
    "num_eval_images": 1,
    "model_type": "lora",
    "model_family": "omnigen",
    "mixed_precision": "bf16",
    "minimum_image_size": 0,
    "max_train_steps": 10000,
    "max_grad_norm": 0.01,
    "lycoris_config": "config/lycoris_config.json",
    "lr_warmup_steps": 100,
    "lr_scheduler": "constant",
    "lora_type": "lycoris",
    "learning_rate": "4e-5",
    "gradient_checkpointing": "true",
    "grad_clip_method": "value",
    "eval_steps_interval": 100,
    "disable_benchmark": false,
    "data_backend_config": "config/omnigen/multidatabackend.json",
    "checkpoints_total_limit": 5,
    "checkpoint_step_interval": 500,
    "caption_dropout_probability": 0.0,
    "base_model_precision": "no_change",
    "aspect_bucket_rounding": 2
}

और एक सरल config/lycoris_config.json फ़ाइल — ध्यान दें कि अतिरिक्त training stability के लिए FeedForward हटाया जा सकता है।

उदाहरण कॉन्फ़िग देखें
{
    "algo": "lokr",
    "multiplier": 1.0,
    "linear_dim": 10000,
    "linear_alpha": 1,
    "factor": 16,
    "apply_preset": {
        "target_module": [
            "Attention",
            "FeedForward"
        ],
        "module_algo_map": {
            "Attention": {
                "factor": 16
            },
            "FeedForward": {
                "factor": 8
            }
        }
    }
}

उन्नत प्रयोगात्मक विशेषताएँ

उन्नत प्रयोगात्मक विवरण दिखाएँ SimpleTuner में प्रयोगात्मक फीचर्स शामिल हैं जो प्रशिक्षण की स्थिरता और प्रदर्शन को काफी बेहतर कर सकते हैं। * **[Scheduled Sampling (Rollout)](../experimental/SCHEDULED_SAMPLING.md):** exposure bias कम करता है और आउटपुट गुणवत्ता बढ़ाता है, क्योंकि यह प्रशिक्षण के दौरान मॉडल को अपने इनपुट्स खुद जनरेट करने देता है। > ⚠️ ये फीचर्स प्रशिक्षण के कंप्यूटेशनल ओवरहेड को बढ़ाते हैं। #### वैलिडेशन प्रॉम्प्ट्स `config/config.json` के अंदर "primary validation prompt" (`--validation_prompt`) होता है, जो आमतौर पर आपके single subject या style के लिए मुख्य instance_prompt होता है। इसके अतिरिक्त, एक JSON फ़ाइल बनाई जा सकती है जिसमें वैलिडेशन के दौरान चलाने के लिए अतिरिक्त प्रॉम्प्ट्स हों। उदाहरण config फ़ाइल `config/user_prompt_library.json.example` का फ़ॉर्मैट:
{
  "nickname": "the prompt goes here",
  "another_nickname": "another prompt goes here"
}
nicknames validation के लिए फ़ाइलनाम होते हैं, इसलिए इन्हें छोटा और फ़ाइलसिस्टम‑अनुकूल रखें। ट्रेनर को इस prompt library की ओर इंगित करने के लिए, `config.json` के अंत में नया लाइन जोड़कर इसे TRAINER_EXTRA_ARGS में जोड़ें:
  "--user_prompt_library": "config/user_prompt_library.json",
विविध प्रॉम्प्ट्स का सेट यह निर्धारित करने में मदद करेगा कि मॉडल प्रशिक्षण के दौरान collapse तो नहीं हो रहा। इस उदाहरण में `` शब्द को अपने subject नाम (instance_prompt) से बदलें।
{
    "anime_<token>": "a breathtaking anime-style portrait of <token>, capturing her essence with vibrant colors and expressive features",
    "chef_<token>": "a high-quality, detailed photograph of <token> as a sous-chef, immersed in the art of culinary creation",
    "just_<token>": "a lifelike and intimate portrait of <token>, showcasing her unique personality and charm",
    "cinematic_<token>": "a cinematic, visually stunning photo of <token>, emphasizing her dramatic and captivating presence",
    "elegant_<token>": "an elegant and timeless portrait of <token>, exuding grace and sophistication",
    "adventurous_<token>": "a dynamic and adventurous photo of <token>, captured in an exciting, action-filled moment",
    "mysterious_<token>": "a mysterious and enigmatic portrait of <token>, shrouded in shadows and intrigue",
    "vintage_<token>": "a vintage-style portrait of <token>, evoking the charm and nostalgia of a bygone era",
    "artistic_<token>": "an artistic and abstract representation of <token>, blending creativity with visual storytelling",
    "futuristic_<token>": "a futuristic and cutting-edge portrayal of <token>, set against a backdrop of advanced technology",
    "woman": "a beautifully crafted portrait of a woman, highlighting her natural beauty and unique features",
    "man": "a powerful and striking portrait of a man, capturing his strength and character",
    "boy": "a playful and spirited portrait of a boy, capturing youthful energy and innocence",
    "girl": "a charming and vibrant portrait of a girl, emphasizing her bright personality and joy",
    "family": "a heartwarming and cohesive family portrait, showcasing the bonds and connections between loved ones"
}
> ℹ️ OmniGen लगभग 122 tokens के आसपास समझ तक सीमित लगता है। यह स्पष्ट नहीं कि यह इससे अधिक समझ पाता है या नहीं। #### CLIP score ट्रैकिंग यदि आप मॉडल प्रदर्शन स्कोर करने के लिए evaluations सक्षम करना चाहते हैं, तो CLIP scores को कॉन्फ़िगर और इंटरप्रेट करने के लिए [यह दस्तावेज़](../evaluation/CLIP_SCORES.md) देखें।

स्थिर evaluation loss

यदि आप मॉडल प्रदर्शन स्कोर करने के लिए stable MSE loss उपयोग करना चाहते हैं, तो evaluation loss को कॉन्फ़िगर और इंटरप्रेट करने के लिए यह दस्तावेज़ देखें।

Validation previews

SimpleTuner Tiny AutoEncoder मॉडलों का उपयोग करके generation के दौरान intermediate validation previews स्ट्रीम करने का समर्थन करता है। इससे आप webhook callbacks के जरिए real‑time में step‑by‑step validation images देख सकते हैं।

सक्रिय करने के लिए:

उदाहरण कॉन्फ़िग देखें
{
  "validation_preview": true,
  "validation_preview_steps": 1
}

आवश्यकताएँ: - Webhook configuration - Validation सक्षम होना

validation_preview_steps को ऊँचा मान (जैसे 3 या 5) रखें ताकि Tiny AutoEncoder का ओवरहेड कम हो। validation_num_inference_steps=20 और validation_preview_steps=5 के साथ, आपको steps 5, 10, 15, और 20 पर preview images मिलेंगी।

Flow schedule shifting

वर्तमान में OmniGen अपने विशेष flow‑matching formulation का उपयोग करने के लिए hard‑coded है, और schedule shift उस पर लागू नहीं होता।

डेटासेट विचार

अपने मॉडल को प्रशिक्षित करने के लिए पर्याप्त बड़ा डेटासेट होना महत्वपूर्ण है। डेटासेट आकार पर सीमाएँ हैं, और आपको सुनिश्चित करना होगा कि आपका डेटासेट पर्याप्त बड़ा हो। ध्यान दें कि न्यूनतम डेटासेट आकार train_batch_size * gradient_accumulation_steps और vae_batch_size से अधिक होना चाहिए। यदि डेटासेट बहुत छोटा है, तो वह उपयोग योग्य नहीं होगा।

ℹ️ बहुत कम images होने पर आपको no images detected in dataset संदेश दिख सकता है — repeats मान बढ़ाना इस सीमा को पार करेगा।

आपके डेटासेट के अनुसार, आपको डेटासेट डायरेक्टरी और dataloader configuration फ़ाइल अलग तरीके से सेट करनी होगी। इस उदाहरण में हम pseudo-camera-10k डेटासेट उपयोग करेंगे।

एक --data_backend_config (config/multidatabackend.json) दस्तावेज़ बनाएँ जिसमें यह हो:

उदाहरण कॉन्फ़िग देखें
[
  {
    "id": "pseudo-camera-10k-omnigen",
    "type": "local",
    "crop": true,
    "crop_aspect": "square",
    "crop_style": "center",
    "resolution": 512,
    "minimum_image_size": 512,
    "maximum_image_size": 512,
    "target_downsample_size": 512,
    "resolution_type": "pixel_area",
    "cache_dir_vae": "cache/vae/omnigen/pseudo-camera-10k",
    "instance_data_dir": "datasets/pseudo-camera-10k",
    "disabled": false,
    "skip_file_discovery": "",
    "caption_strategy": "filename",
    "metadata_backend": "discovery",
    "repeats": 0,
    "is_regularisation_data": true
  },
  {
    "id": "dreambooth-subject",
    "type": "local",
    "crop": false,
    "resolution": 1024,
    "minimum_image_size": 1024,
    "maximum_image_size": 1024,
    "target_downsample_size": 1024,
    "resolution_type": "pixel_area",
    "cache_dir_vae": "cache/vae/omnigen/dreambooth-subject",
    "instance_data_dir": "datasets/dreambooth-subject",
    "caption_strategy": "instanceprompt",
    "instance_prompt": "the name of your subject goes here",
    "metadata_backend": "discovery",
    "repeats": 1000
  },
  {
    "id": "dreambooth-subject-512",
    "type": "local",
    "crop": false,
    "resolution": 512,
    "minimum_image_size": 512,
    "maximum_image_size": 512,
    "target_downsample_size": 512,
    "resolution_type": "pixel_area",
    "cache_dir_vae": "cache/vae/omnigen/dreambooth-subject-512",
    "instance_data_dir": "datasets/dreambooth-subject",
    "caption_strategy": "instanceprompt",
    "instance_prompt": "the name of your subject goes here",
    "metadata_backend": "discovery",
    "repeats": 1000
  },
  {
    "id": "text-embeds",
    "type": "local",
    "dataset_type": "text_embeds",
    "default": true,
    "cache_dir": "cache/text/omnigen",
    "disabled": false,
    "write_batch_size": 128
  }
]

caption_strategy विकल्प और आवश्यकताओं के लिए DATALOADER.md देखें।

ℹ️ 512px और 1024px datasets को साथ चलाना समर्थित है, और इससे बेहतर convergence हो सकता है।

ℹ️ OmniGen text encoder embeds नहीं बनाता, लेकिन एक को परिभाषित करना अभी भी आवश्यक है (फिलहाल)।

OmniGen के लिए मेरा कॉन्फ़िग बहुत basic था, और stable eval loss प्रशिक्षण सेट का उपयोग करते हुए ऐसा दिखा:

उदाहरण कॉन्फ़िग देखें
[
    {
        "id": "something-special-to-remember-by",
        "type": "local",
        "instance_data_dir": "/datasets/pseudo-camera-10k/train",
        "minimum_image_size": 1024,
        "maximum_image_size": 1536,
        "target_downsample_size": 1024,
        "resolution": 1024,
        "resolution_type": "pixel_area",
        "caption_strategy": "filename",
        "cache_dir_vae": "cache/vae/omnigen",
        "vae_cache_clear_each_epoch": false,
        "crop": true,
        "crop_aspect": "square"
    },
    {
        "id": "omnigen-eval",
        "type": "local",
        "dataset_type": "eval",
        "crop": true,
        "crop_aspect": "square",
        "instance_data_dir": "/datasets/test_datasets/squares",
        "resolution": 1024,
        "minimum_image_size": 1024,
        "maximum_image_size": 1024,
        "target_downsample_size": 1024,
        "resolution_type": "pixel_area",
        "cache_dir_vae": "cache/vae/omnigen-eval",
        "caption_strategy": "filename"
    },
    {
        "id": "text-embed-cache",
        "dataset_type": "text_embeds",
        "default": true,
        "type": "local",
        "cache_dir": "cache/text/omnigen"
    }
]

फिर, datasets डायरेक्टरी बनाएँ:

mkdir -p datasets
pushd datasets
    huggingface-cli download --repo-type=dataset bghira/pseudo-camera-10k --local-dir=pseudo-camera-10k
    mkdir dreambooth-subject
    # place your images into dreambooth-subject/ now
popd

यह लगभग 10k फोटोग्राफ सैंपल्स को आपकी datasets/pseudo-camera-10k डायरेक्टरी में डाउनलोड करेगा, जो अपने‑आप बन जाएगी।

आपकी Dreambooth images को datasets/dreambooth-subject डायरेक्टरी में जाना चाहिए।

WandB और Huggingface Hub में लॉग‑इन

प्रशिक्षण शुरू करने से पहले WandB और HF Hub में लॉग‑इन करना बेहतर है, खासकर यदि आप --push_to_hub और --report_to=wandb उपयोग कर रहे हैं।

यदि आप Git LFS रिपॉज़िटरी में मैन्युअली आइटम्स push करने वाले हैं, तो git config --global credential.helper store भी चलाएँ।

निम्न कमांड चलाएँ:

wandb login

और

huggingface-cli login

निर्देशों का पालन करके दोनों सेवाओं में लॉग‑इन करें।

प्रशिक्षण रन निष्पादित करना

SimpleTuner डायरेक्टरी से, प्रशिक्षण शुरू करने के लिए आपके पास कई विकल्प हैं:

विकल्प 1 (अनुशंसित - pip install):

pip install 'simpletuner[cuda]'

# CUDA 13 / Blackwell users (NVIDIA B-series GPUs)
pip install 'simpletuner[cuda13]' --extra-index-url https://download.pytorch.org/whl/cu130
simpletuner train

विकल्प 2 (Git clone विधि):

simpletuner train

विकल्प 3 (Legacy विधि - अभी भी काम करता है):

./train.sh

इससे text embed और VAE आउटपुट कैशिंग डिस्क पर शुरू होगी।

अधिक जानकारी के लिए dataloader और tutorial दस्तावेज़ देखें।

नोट्स और समस्या‑समाधान टिप्स

सबसे कम VRAM कॉन्फ़िग

सबसे कम VRAM वाला OmniGen कॉन्फ़िग अभी ज्ञात नहीं है, लेकिन उम्मीद है कि यह लगभग इस जैसा होगा:

  • OS: Ubuntu Linux 24
  • GPU: एक NVIDIA CUDA डिवाइस (10G, 12G)
  • System memory: लगभग 50G सिस्टम मेमोरी
  • Base model precision: int8-quanto (या fp8-torchao, int8-torchao — सभी समान मेमोरी प्रोफ़ाइल रखते हैं)
  • Optimiser: Lion 8Bit Paged, bnb-lion8bit-paged
  • Resolution: 1024px
  • Batch size: 1, zero gradient accumulation steps
  • DeepSpeed: बंद/कॉन्फ़िगर नहीं
  • PyTorch: 2.7+
  • <=16G कार्ड्स पर startup के दौरान outOfMemory त्रुटि से बचने के लिए --quantize_via=cpu उपयोग करें।
  • --gradient_checkpointing सक्षम करें
  • बहुत छोटा LoRA या Lycoris कॉन्फ़िग उपयोग करें (जैसे LoRA rank 1 या Lokr factor 25)

नोट: VAE embeds और text encoder outputs की pre‑caching अधिक मेमोरी ले सकती है और फिर भी OOM हो सकता है। ऐसा हो तो VAE tiling और slicing वैकल्पिक रूप से सक्षम की जा सकती है। VAE caching के दौरान text encoders को CPU पर ऑफ़लोड किया जा सकता है (offload_during_startup=true). बड़े डेटासेट्स में VAE cache के लिए डिस्क उपयोग से बचने हेतु --vae_cache_disable उपयोग करें।

AMD 7900XTX पर Pytorch 2.7 और ROCm 6.3 के साथ गति लगभग 3.4 iterations per second थी।

Masked loss

यदि आप किसी subject या style को ट्रेन कर रहे हैं और इनमें से किसी को mask करना चाहते हैं, तो Dreambooth गाइड के masked loss training सेक्शन देखें।

Quantisation

अभी तक अच्छी तरह से परीक्षण नहीं हुआ है।

Learning rates

LoRA (--lora_type=standard)

समर्थित नहीं है।

LoKr (--lora_type=lycoris)

  • LoKr के लिए हल्के learning rates बेहतर हैं (1e-4 AdamW के साथ, 2e-5 Lion के साथ)
  • अन्य algo के लिए अधिक exploration की आवश्यकता है।
  • is_regularisation_data का OmniGen के साथ प्रभाव अज्ञात है (टेस्ट नहीं हुआ)

Image artifacts

OmniGen का image artifacts पर response अज्ञात है, हालांकि यह SDXL VAE उपयोग करता है और fine‑details की समान सीमाएँ हैं।

यदि कोई image quality समस्या आए, तो Github पर issue खोलें।

Aspect bucketing

इस मॉडल का aspect bucketed डेटा पर response अज्ञात है। experimentation मददगार होगी।

High loss values

OmniGen में loss मान बहुत ऊँचा होता है, और इसका कारण ज्ञात नहीं है। loss मान को नज़रअंदाज़ करके generated images की दृश्य गुणवत्ता पर ध्यान देने की सलाह दी जाती है।