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 के साथ अच्छा काम करता है।
आप इसे चलाकर जांच सकते हैं:
यदि आपके Ubuntu पर Python 3.12 इंस्टॉल नहीं है, तो आप यह प्रयास कर सकते हैं:
Container image dependencies¶
Vast, RunPod, और TensorDock (आदि) के लिए, CUDA 12.2‑12.8 इमेज पर CUDA extensions कम्पाइल करने हेतु यह काम करेगा:
इंस्टॉलेशन¶
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 को कॉन्फ़िगर नहीं करता। आपको उसे बाद में मैन्युअली करना होगा।
इसे चलाने के लिए:
⚠️ जिन देशों में Hugging Face Hub आसानी से उपलब्ध नहीं है, वहाँ
HF_ENDPOINT=https://hf-mirror.comको अपने~/.bashrcया~/.zshrcमें जोड़ें, यह आपके सिस्टम के$SHELLपर निर्भर करता है।
यदि आप मैन्युअल कॉन्फ़िगर करना पसंद करते हैं:
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 हटाया जा सकता है।
उदाहरण कॉन्फ़िग देखें
उन्नत प्रयोगात्मक विशेषताएँ¶
उन्नत प्रयोगात्मक विवरण दिखाएँ
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` का फ़ॉर्मैट: nicknames validation के लिए फ़ाइलनाम होते हैं, इसलिए इन्हें छोटा और फ़ाइलसिस्टम‑अनुकूल रखें। ट्रेनर को इस prompt library की ओर इंगित करने के लिए, `config.json` के अंत में नया लाइन जोड़कर इसे TRAINER_EXTRA_ARGS में जोड़ें: विविध प्रॉम्प्ट्स का सेट यह निर्धारित करने में मदद करेगा कि मॉडल प्रशिक्षण के दौरान collapse तो नहीं हो रहा। इस उदाहरण में `{
"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"
}
स्थिर 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 देख सकते हैं।
सक्रिय करने के लिए:
आवश्यकताएँ: - 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 भी चलाएँ।
निम्न कमांड चलाएँ:
और
निर्देशों का पालन करके दोनों सेवाओं में लॉग‑इन करें।
प्रशिक्षण रन निष्पादित करना¶
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 विधि):
विकल्प 3 (Legacy विधि - अभी भी काम करता है):
इससे 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-4AdamW के साथ,2e-5Lion के साथ) - अन्य 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 की दृश्य गुणवत्ता पर ध्यान देने की सलाह दी जाती है।