मैपराटोरिनेटर
जनरेटिव मॉडल को यहाँ आज़माएँ, या माईमोड यहाँ देखें। वीडियो प्रस्तुति के लिए यहाँ देखें।
मैपराटोरिनेटर एक मल्टी-मॉडल फ्रेमवर्क है जो स्पेक्ट्रोग्राम इनपुट का उपयोग करके सभी गेममोड्स के लिए पूर्ण osu! बीटमैप जनरेट करता है और मॉडिंग में सहायता करता है। इस प्रोजेक्ट का उद्देश्य किसी भी गाने से स्वचालित रूप से उच्च गुणवत्ता वाले, रैंक योग्य osu! बीटमैप्स को अत्यधिक अनुकूलन क्षमता के साथ बनाना है।
यह प्रोजेक्ट osuT5 और osu-diffusion पर आधारित है। इसे बनाते समय मैंने अपने 4060 Ti और vast.ai पर किराए के 4090 इंस्टेंसेस पर 142 रन में करीब 2500 घंटे GPU कंप्यूट में लगाए।
#### इस टूल का जिम्मेदारी से उपयोग करें। हमेशा अपनी बीटमैप्स में एआई के उपयोग का खुलासा करें।
स्थापना
नीचे दिए गए निर्देश आपको अपनी स्थानीय मशीन पर बीटमैप्स जनरेट करने की अनुमति देते हैं, वैकल्पिक रूप से आप इसे क्लाउड में colab notebook के साथ चला सकते हैं।
1. रिपॉजिटरी को क्लोन करें
git clone https://github.com/OliBomby/Mapperatorinator.git
cd Mapperatorinator2. (वैकल्पिक) वर्चुअल एनवायरनमेंट बनाएं
Python 3.10 का उपयोग करें, बाद के संस्करण निर्भरताओं के साथ संगत नहीं हो सकते हैं।
python -m venv .venvIn cmd.exe
.venv\Scripts\activate.bat
In PowerShell
.venv\Scripts\Activate.ps1
In Linux or MacOS
source .venv/bin/activate3. आवश्यक डिपेंडेंसी इंस्टॉल करें
- Python 3.10
- Git
- ffmpeg
- CUDA (NVIDIA GPU के लिए) या ROCm (AMD GPU के लिए लिनक्स पर)
- PyTorch: सुनिश्चित करें कि आपने Get Started गाइड का पालन किया है जिससे आप
torchऔरtorchaudioGPU सपोर्ट के साथ इंस्टॉल करें। उस Compute Platform संस्करण का चयन करें जो आपने पिछले चरण में इंस्टॉल किया है। - और शेष Python डिपेंडेंसी:
pip install -r requirements.txtवेब GUI (अनुशंसित)
एक अधिक उपयोगकर्ता-अनुकूल अनुभव के लिए, वेब UI का उपयोग करने पर विचार करें। यह जेनरेशन पैरामीटर को कॉन्फ़िगर करने, प्रक्रिया शुरू करने और आउटपुट की निगरानी के लिए एक ग्राफिकल इंटरफ़ेस प्रदान करता है।
GUI लॉन्च करें
अपने टर्मिनल में क्लोन किए गए Mapperatorinator डायरेक्टरी पर जाएं और चलाएं:
python web-ui.py
यह एक स्थानीय वेब सर्वर शुरू करेगा और स्वचालित रूप से UI को एक नई विंडो में खोलेगा।GUI का उपयोग करना
- कॉन्फ़िगर करें: इनपुट/आउटपुट पथ को फॉर्म फ़ील्ड और "ब्राउज़" बटन के माध्यम से सेट करें। जनरेशन पैरामीटर जैसे गेममोड, कठिनाई, शैली (वर्ष, मैपर आईडी, वर्णनकर्ता), टाइमिंग, विशिष्ट फीचर्स (हिटसाउंड्स, सुपर टाइमिंग), और भी बहुत कुछ, कमांड-लाइन विकल्पों की तरह समायोजित करें। (नोट: यदि आप
beatmap_pathप्रदान करते हैं, तो UI स्वचालित रूप सेaudio_pathऔरoutput_pathनिर्धारित कर लेगा, इसलिए आप वे फ़ील्ड खाली छोड़ सकते हैं) - शुरू करें: बीटमैप जनरेशन शुरू करने के लिए "Start Inference" बटन पर क्लिक करें।
- रद्द करें: आप "Cancel Inference" बटन का उपयोग करके चल रही प्रक्रिया को रोक सकते हैं।
- आउटपुट खोलें: पूरा होने के बाद, जेनरेट की गई फाइलों तक त्वरित पहुंच के लिए "Open Output Folder" बटन का उपयोग करें।
inference.py स्क्रिप्ट के चारों ओर एक सुविधाजनक आवरण के रूप में कार्य करता है। उन्नत विकल्पों या समस्या निवारण के लिए, कमांड-लाइन निर्देश देखें।कमांड-लाइन इंफेरेंस
उन उपयोगकर्ताओं के लिए जो कमांड लाइन पसंद करते हैं या जिन्हें उन्नत कॉन्फ़िगरेशन की आवश्यकता होती है, नीचे दिए गए चरणों का पालन करें। नोट: एक सरल ग्राफिकल इंटरफेस के लिए कृपया ऊपर Web UI (Recommended) अनुभाग देखें।
inference.py चलाएँ और बीटमैप जनरेट करने के लिए कुछ आर्ग्युमेंट्स पास करें। इसके लिए Hydra override syntax का उपयोग करें। सभी उपलब्ध पैरामीटर के लिए configs/inference_v29.yaml देखें।
python inference.py \
audio_path [Path to input audio] \
output_path [Path to output directory] \
beatmap_path [Path to .osu file to autofill metadata, and output_path, or use as reference] \
gamemode [Game mode to generate 0=std, 1=taiko, 2=ctb, 3=mania] \
difficulty [Difficulty star rating to generate] \
mapper_id [Mapper user ID for style] \
year [Upload year to simulate] \
hitsounded [Whether to add hitsounds] \
slider_multiplier [Slider velocity multiplier] \
circle_size [Circle size] \
keycount [Key count for mania] \
hold_note_ratio [Hold note ratio for mania 0-1] \
scroll_speed_ratio [Scroll speed ratio for mania and ctb 0-1] \
descriptors [List of beatmap user tags for style] \
negative_descriptors [List of beatmap user tags for classifier-free guidance] \
add_to_beatmap [Whether to add generated content to the reference beatmap instead of making a new beatmap] \
start_time [Generation start time in milliseconds] \
end_time [Generation end time in milliseconds] \
in_context [List of additional context to provide to the model [NONE,TIMING,KIAI,MAP,GD,NO_HS]] \
output_type [List of content types to generate] \
cfg_scale [Scale of the classifier-free guidance] \
super_timing [Whether to use slow accurate variable BPM timing generator] \
seed [Random seed for generation] \उदाहरण:
python inference.py beatmap_path="'C:\Users\USER\AppData\Local\osu!\Songs\1 Kenji Ninuma - DISCO PRINCE\Kenji Ninuma - DISCOPRINCE (peppy) [Normal].osu'" gamemode=0 difficulty=5.5 year=2023 descriptors="['jump aim','clean']" in_context=[TIMING,KIAI]इंटरएक्टिव CLI
जो लोग टर्मिनल-आधारित वर्कफ़्लो पसंद करते हैं लेकिन मार्गदर्शित सेटअप चाहते हैं, उनके लिए इंटरएक्टिव CLI स्क्रिप्ट वेब UI का एक उत्कृष्ट विकल्प है।CLI लॉन्च करें
क्लोन की गई डायरेक्टरी में जाएं। आपको पहले स्क्रिप्ट को निष्पादनीय बनाना पड़ सकता है।# Make the script executable (only needs to be done once)
chmod +x cli_inference.sh# Run the script
./cli_inference.shCLI का उपयोग करना
स्क्रिप्ट आपको Web UI की तरह सभी जेनरेशन पैरामीटर्स को कॉन्फ़िगर करने के लिए एक श्रृंखला के प्रॉम्प्ट्स के माध्यम से ले जाएगी।यह स्पष्टता के लिए रंग-कोडित इंटरफ़ेस का उपयोग करता है। यह स्टाइल डिस्क्रिप्टर्स चुनने के लिए आपके एरो कीज़ और स्पेसबार के साथ एक उन्नत मल्टी-सेलेक्ट मेन्यू प्रदान करता है। सभी प्रश्नों का उत्तर देने के बाद, यह आपके समीक्षा के लिए अंतिम कमांड दिखाएगा। आप फिर इसे सीधे निष्पादित करने की पुष्टि कर सकते हैं या मैन्युअल उपयोग के लिए कमांड कॉपी कर सकते हैं।
जेनरेशन टिप्स
- आप
configs/inference_v29.yamlको एडिट कर सकते हैं और अपने आर्ग्युमेंट्स वहां जोड़ सकते हैं, जिससे हर बार टर्मिनल में टाइप करने की जरूरत नहीं पड़ेगी। - सभी उपलब्ध डिस्क्रिप्टर्स यहां मिल सकते हैं।
- हमेशा 2007 और 2023 के बीच का वर्ष आर्ग्युमेंट दें। अगर आप इसे अज्ञात छोड़ते हैं, तो मॉडल असंगत स्टाइल के साथ जेनरेट कर सकता है।
- हमेशा डिफिकल्टी आर्ग्युमेंट दें। अगर आप इसे अज्ञात छोड़ते हैं, तो मॉडल असंगत डिफिकल्टी के साथ जेनरेट कर सकता है।
cfg_scaleपैरामीटर बढ़ाने सेmapper_idऔरdescriptorsआर्ग्युमेंट्स की प्रभावशीलता बढ़ती है।- आप
negative_descriptorsआर्ग्युमेंट का उपयोग करके मॉडल को कुछ स्टाइल्स से दूर ले जा सकते हैं। यह केवल तब काम करता है जबcfg_scale > 1हो। सुनिश्चित करें कि नेगेटिव डिस्क्रिप्टर्स की संख्या डिस्क्रिप्टर्स के बराबर हो। - अगर आपके गीत का स्टाइल और वांछित बीटमैप स्टाइल मेल नहीं खाते हैं, तो मॉडल आपकी निर्देशों का पालन नहीं कर सकता। उदाहरण के लिए, शांत गीत के लिए उच्च SR, उच्च SV बीटमैप जनरेट करना कठिन है।
- अगर आपके पास पहले से ही गीत के लिए टाइमिंग और कियाई टाइम्स तैयार हैं, तो आप इसे मॉडल को देकर इन्फेरेंस स्पीड और एक्युरेसी बहुत बढ़ा सकते हैं:
beatmap_pathऔरin_context=[TIMING,KIAI]आर्ग्युमेंट्स का उपयोग करें। - अपने बीटमैप के केवल एक हिस्से को रीमैप करने के लिए,
beatmap_path,start_time,end_time, औरadd_to_beatmap=trueआर्ग्युमेंट्स का उपयोग करें। - बीटमैप के लिए गेस्ट डिफिकल्टी जेनरेट करने के लिए,
beatmap_pathऔरin_context=[GD,TIMING,KIAI]आर्ग्युमेंट्स का उपयोग करें। - बीटमैप के लिए हिटसाउंड्स जेनरेट करने के लिए,
beatmap_pathऔरin_context=[NO_HS,TIMING,KIAI]आर्ग्युमेंट्स का उपयोग करें। - केवल गीत के लिए टाइमिंग जेनरेट करने के लिए,
super_timing=trueऔरoutput_type=[TIMING]आर्ग्युमेंट्स का उपयोग करें।
MaiMod: एआई-चालित मॉडिंग टूल
MaiMod एक मॉडिंग टूल है जो Mapperatorinator की प्रेडिक्शंस का उपयोग करके संभावित गलतियों और विसंगतियों का पता लगाता है जिन्हें अन्य स्वचालित मॉडिंग टूल्स जैसे Mapset Verifier नहीं पकड़ सकते। यह निम्नलिखित समस्याओं का पता लगा सकता है:
- गलत स्नैपिंग या रिदमिक पैटर्न
- गलत टाइमिंग पॉइंट्स
- हिट ऑब्जेक्ट की असंगत पोजिशनिंग या नए कॉम्बो की प्लेसमेंट्स
- अजीब स्लाइडर शेप्स
- असंगत हिटसाउंड्स या वॉल्यूम्स
mai_mod.py स्क्रिप्ट चलाएं, और अपने बीटमैप के पथ को beatmap_path आर्ग्युमेंट के साथ निर्दिष्ट करें।
python mai_mod.py beatmap_path="'C:\Users\USER\AppData\Local\osu!\Songs\1 Kenji Ninuma - DISCO PRINCE\Kenji Ninuma - DISCOPRINCE (peppy) [Normal].osu'"
यह मॉडिंग सुझावों को कंसोल में प्रिंट करेगा, जिन्हें आप फिर अपने बीटमैप पर मैन्युअली लागू कर सकते हैं।
सुझावों को कालानुक्रमिक रूप से क्रमबद्ध किया गया है और श्रेणियों में समूहित किया गया है।
वृत्त में पहला मान 'सरप्राइजल' को दर्शाता है, जो यह मापता है कि मॉडल को यह समस्या कितनी अप्रत्याशित लगी, ताकि आप सबसे महत्वपूर्ण मुद्दों को प्राथमिकता दे सकें।मॉडल गलतियां कर सकता है, खासकर कम सरप्राइजल वाले मुद्दों पर, इसलिए अपने बीटमैप पर लागू करने से पहले हमेशा सुझावों को दोबारा जांचें। मुख्य उद्देश्य यह है कि संभावित समस्याओं के लिए खोज क्षेत्र को संकीर्ण करने में आपकी मदद करना, ताकि आपको अपने बीटमैप में हर एक हिट ऑब्जेक्ट को मैन्युअली जांचना न पड़े।
MaiMod GUI
MaiMod Web UI चलाने के लिए, आपको Mapperatorinator इंस्टॉल करना होगा। फिर,mai_mod_ui.py स्क्रिप्ट चलाएं। इससे एक लोकल वेब सर्वर शुरू होगा और UI अपने आप नई विंडो में खुलेगा:python mai_mod_ui.pyअवलोकन
टोकनाइजेशन
Mapperatorinator osu! बीटमैप्स को एक मध्यवर्ती ईवेंट प्रतिनिधित्व में बदलता है जिसे सीधे टोकन में बदला जा सकता है और पुनः प्राप्त किया जा सकता है। इसमें हिट ऑब्जेक्ट्स, हिटसाउंड्स, स्लाइडर वेलोसिटी, न्यू कॉम्बो, टाइमिंग पॉइंट्स, कियाई टाइम्स, और टैइको/मैनिया स्क्रॉल स्पीड शामिल हैं।
यहाँ टोकनाइजेशन प्रक्रिया का एक छोटा उदाहरण है:
शब्दावली के आकार को कम करने के लिए, समय ईवेंट्स को 10ms अंतराल में क्वांटाइज़ किया गया है और स्थिति निर्देशांक को 32 पिक्सेल ग्रिड बिंदुओं पर क्वांटाइज़ किया गया है।
मॉडल आर्किटेक्चर
मॉडल मूल रूप से HF Transformers Whisper मॉडल के चारों ओर एक रैपर है, जिसमें कस्टम इनपुट एम्बेडिंग और लॉस फंक्शन है। मॉडल का आकार 219M पैरामीटर्स है। यह मॉडल इस कार्य के लिए T5 से तेज़ और अधिक सटीक पाया गया।मॉडल के इनपुट-आउटपुट का उच्च-स्तरीय अवलोकन निम्नानुसार है:
मॉडल मेल स्पेक्ट्रोग्राम फ्रेम्स को एन्कोडर इनपुट के रूप में उपयोग करता है, प्रत्येक इनपुट स्थिति के लिए एक फ्रेम के साथ। मॉडल डिकोडर आउटपुट प्रत्येक चरण पर घटनाओं की एक विविक्त, पूर्व-परिभाषित शब्दावली पर सॉफ्टमैक्स वितरण है। आउटपुट विरल हैं, ईवेंट्स केवल तब आवश्यक होते हैं जब कोई हिट-ऑब्जेक्ट होता है, हर ऑडियो फ्रेम को एनोटेट करने के बजाय।
मल्टीटास्क प्रशिक्षण प्रारूप
SOS टोकन से पहले अतिरिक्त टोकन होते हैं जो सशर्त जनरेशन की सुविधा प्रदान करते हैं। इन टोकनों में गेममोड, कठिनाई, मैपर आईडी, वर्ष और अन्य मेटाडेटा शामिल हैं। प्रशिक्षण के दौरान, इन टोकनों के साथ लेबल नहीं होते, इसलिए इन्हें मॉडल द्वारा कभी आउटपुट नहीं किया जाता। साथ ही प्रशिक्षण के दौरान एक यादृच्छिक संभावना होती है कि किसी मेटाडेटा टोकन को 'अज्ञात' टोकन से बदल दिया जाए, ताकि अनुमान के समय हम इन 'अज्ञात' टोकनों का उपयोग मॉडल को दी जाने वाली मेटाडेटा की मात्रा कम करने के लिए कर सकें।
निर्बाध लंबी जनरेशन
मॉडल की संदर्भ लंबाई 8.192 सेकंड लंबी है। यह स्पष्ट रूप से एक पूर्ण बीटमैप उत्पन्न करने के लिए पर्याप्त नहीं है, इसलिए हमें गीत को कई विंडो में विभाजित करना पड़ता है और बीटमैप को छोटे हिस्सों में उत्पन्न करना पड़ता है। सुनिश्चित करने के लिए कि उत्पन्न बीटमैप की विंडोज़ के बीच कोई स्पष्ट सीम न हो, हम 90% ओवरलैप का उपयोग करते हैं और विंडोज़ को क्रमिक रूप से उत्पन्न करते हैं। प्रत्येक जनरेशन विंडो, पहली को छोड़कर, डिकोडर के साथ विंडो की 50% तक की टोकन पिछली विंडोज़ से प्री-फिल की जाती है। हम लॉजिट प्रोसेसर का उपयोग यह सुनिश्चित करने के लिए करते हैं कि मॉडल जनरेशन विंडो के पहले 50% में समय टोकन उत्पन्न न कर सके। इसके अतिरिक्त, जनरेशन विंडो के अंतिम 40% को अगली विंडो के लिए आरक्षित किया गया है। उस श्रेणी में उत्पन्न समय टोकन को EOS टोकन के रूप में माना जाता है। यह सुनिश्चित करता है कि प्रत्येक उत्पन्न टोकन कम से कम पिछले 4 सेकंड के टोकनों और भविष्य के 3.3 सेकंड के ऑडियो पर आधारित हो ताकि अनुमान लगाया जा सके।
लंबी जनरेशन के दौरान ऑफसेट ड्रिफ्टिंग को रोकने के लिए, प्रशिक्षण के दौरान डिकोडर में समय घटनाओं में यादृच्छिक ऑफसेट जोड़े गए हैं। यह इसे ऑडियो में ऑनसेट्स को सुनकर टाइमिंग त्रुटियों को सुधारने के लिए मजबूर करता है, और परिणामस्वरूप लगातार सटीक ऑफसेट मिलता है।
डिफ्यूजन के साथ सुधारे गए निर्देशांक
डिकोडर द्वारा उत्पन्न स्थिति निर्देशांक 32 पिक्सल ग्रिड बिंदुओं पर क्वांटाइज़ किए जाते हैं, इसलिए बाद में हम अंतिम स्थिति के लिए निर्देशांक को डीनोइज़ करने के लिए डिफ्यूजन का उपयोग करते हैं। इसके लिए हमने osu-diffusion के एक संशोधित संस्करण को प्रशिक्षित किया है, जो केवल शोर अनुसूची के अंतिम 10% के लिए विशेषीकृत है, और Mapperatorinator द्वारा उपयोग किए जाने वाले अधिक उन्नत मेटाडेटा टोकन को सशर्त जनरेशन के लिए स्वीकार करता है।
चूंकि Mapperatorinator मॉडल स्लाइडर्स के SV को आउटपुट करता है, स्लाइडर की आवश्यक लंबाई नियंत्रण बिंदु पथ के आकार की परवाह किए बिना निश्चित रहती है। इसलिए, हम डिफ्यूजन प्रक्रिया को आवश्यक स्लाइडर लंबाई में फिट होने वाले निर्देशांक बनाने के लिए मार्गदर्शन करने का प्रयास करते हैं। हम यह आवश्यक लंबाई और वर्तमान नियंत्रण बिंदु पथ के आधार पर डिफ्यूजन प्रक्रिया के प्रत्येक चरण के बाद स्लाइडर एंड पोजीशन को पुनः गणना करके करते हैं। इसका अर्थ है कि डिफ्यूजन प्रक्रिया को स्लाइडर एंड पोजीशन पर प्रत्यक्ष नियंत्रण नहीं है, लेकिन यह नियंत्रण बिंदु पथ को बदलकर उन्हें प्रभावित कर सकती है।
पोस्ट-प्रोसेसिंग
Mapperatorinator उत्पन्न बीटमैप की गुणवत्ता सुधारने के लिए कुछ अतिरिक्त पोस्ट-प्रोसेसिंग करता है:
- डिफ्यूजन के साथ स्थिति निर्देशांक को सुधारें।
- मॉडल द्वारा उत्पन्न स्नैप डिवाइज़र का उपयोग करके समय घटनाओं को निकटतम टिक पर पुनः स्नैप करें।
- लगभग परिपूर्ण स्थिति ओवरलैप को स्नैप करें।
- मेनिया कॉलम घटनाओं को X निर्देशांक में बदलें।
- ताइको ड्रमरोल्स के लिए स्लाइडर पथ उत्पन्न करें।
- आवश्यक स्लाइडर लंबाई और नियंत्रण बिंदु पथ लंबाई में बड़े अंतर को ठीक करें।
सुपर टाइमिंग जनरेटर
सुपर टाइमिंग जनरेटर एक एल्गोरिदम है जो पूरे गीत के लिए टाइमिंग का अनुमान लगाकर 20 बार उसे उत्पन्न करता है और परिणामों का औसत निकालता है, जिससे उत्पन्न टाइमिंग की सटीकता और परिशुद्धता बढ़ जाती है। यह परिवर्तनीय BPM वाले गीतों या BPM परिवर्तन वाले गीतों के लिए उपयोगी है। परिणाम लगभग परिपूर्ण होता है, जिसमें केवल कभी-कभी किसी अनुभाग को मैन्युअल समायोजन की आवश्यकता होती है।
प्रशिक्षण
नीचे दिया गया निर्देश आपके स्थानीय मशीन पर प्रशिक्षण वातावरण बनाता है।
1. रिपॉजिटरी को क्लोन करें
git clone https://github.com/OliBomby/Mapperatorinator.git
cd Mapperatorinator2. डेटासेट बनाएं
Mapperator कंसोल ऐप का उपयोग करके अपना खुद का डेटासेट बनाएं। यह बीटमैप्स को सत्यापित करने और अतिरिक्त मेटाडाटा प्राप्त करने के लिए एक osu! OAuth क्लाइंट टोकन की आवश्यकता होती है। डेटासेट को datasets डायरेक्टरी में रखें, जो Mapperatorinator डायरेक्टरी के पास होनी चाहिए।
Mapperator.ConsoleApp.exe dataset2 -t "/Mapperatorinator/datasets/beatmap_descriptors.csv" -i "path/to/osz/files" -o "/datasets/cool_dataset"3. (वैकल्पिक) लॉगिंग के लिए वेट एंड बायस सेट-अप करें
वेट एंड बायस पर एक खाता बनाएं और अपनी खाता सेटिंग्स से अपना API कुंजी प्राप्त करें। फिरWANDB_API_KEY एनवायरनमेंट वेरिएबल सेट करें, ताकि प्रशिक्षण प्रक्रिया को पता चले कि किस कुंजी पर लॉग करना है।export WANDB_API_KEY=4. डॉकर कंटेनर बनाएं
आप अपने venv में भी प्रशिक्षण कर सकते हैं, लेकिन बेहतर प्रदर्शन के लिए हम WSL पर डॉकर का उपयोग करने की सलाह देते हैं।docker compose up -d --force-recreate
docker attach mapperatorinator_space
cd Mapperatorinator5. पैरामीटर कॉन्फ़िगर करें और प्रशिक्षण शुरू करें
सभी कॉन्फ़िगरेशन ./configs/train/default.yaml में स्थित हैं।
सुनिश्चित करें कि आपने अपने डेटासेट के लिए सही train_dataset_path और test_dataset_path सेट किया है, साथ ही ट्रेन/टेस्ट स्प्लिट के लिए स्टार्ट और एंड मैपसेट इंडेक्स भी।
पथ डॉकर कंटेनर के लिए स्थानीय है, इसलिए यदि आपने अपना डेटासेट cool_dataset नाम से datasets डायरेक्टरी में रखा है, तो यह /workspace/datasets/cool_dataset होना चाहिए।
मैं सुझाव देता हूँ कि आप एक कस्टम कॉन्फ़िग फाइल बनाएं जो डिफ़ॉल्ट कॉन्फ़िग को ओवरराइड करे, ताकि आपके पास अपने प्रशिक्षण कॉन्फ़िग का रिकॉर्ड प्रजननशीलता के लिए रहे।
data:
train_dataset_path: "/workspace/datasets/cool_dataset"
test_dataset_path: "/workspace/datasets/cool_dataset"
train_dataset_start: 0
train_dataset_end: 90
test_dataset_start: 90
test_dataset_end: 100Begin training by calling python osuT5/train.py or torchrun --nproc_per_node=NUM_GPUS osuT5/train.py for multi-GPU training.
python osuT5/train.py -cn train_v29 train_dataset_path="/workspace/datasets/cool_dataset" test_dataset_path="/workspace/datasets/cool_dataset" train_dataset_end=90 test_dataset_start=90 test_dataset_end=1006. LoRA फाइन-ट्यूनिंग
आप LoRA के साथ प्री-ट्रेंड मॉडल को भी फाइन-ट्यून कर सकते हैं ताकि उसे किसी विशेष शैली या गेम मोड के अनुरूप बनाया जा सके।
इसके लिए, configs/train/lora.yaml को अपनी आवश्यकताओं के अनुसार अनुकूलित करें और lora प्रशिक्षण कॉन्फ़िग को चलाएँ:
python osuT5/train.py -cn lora train_dataset_path="/workspace/datasets/cool_dataset" test_dataset_path="/workspace/datasets/cool_dataset" train_dataset_end=90 test_dataset_start=90 test_dataset_end=100
महत्वपूर्ण LoRA पैरामीटर जिन्हें ध्यान में रखना चाहिए:
pretrained_path: बेस मॉडल का पथ या HF रिपॉजिटरी जिसे फाइन-ट्यून करना है।r: LoRA मैट्रिसेस की रैंक। उच्च मान मॉडल की क्षमता बढ़ाते हैं लेकिन मेमोरी उपयोग भी।lora_alpha: LoRA अपडेट्स के लिए स्केलिंग फैक्टर।total_steps: ट्रेनिंग स्टेप्स की कुल संख्या। अपने डाटासेट के आकार के अनुसार संतुलन बनाएं।enable_lora: LoRA का उपयोग करना है या पूर्ण मॉडल फाइन-ट्यूनिंग।
lora_path आर्ग्युमेंट के साथ उपयोग करने के लिए LoRA वेट्स निर्दिष्ट कर सकते हैं।
यह एक लोकल पथ या Hugging Face रिपॉजिटरी हो सकता है।यह भी देखें
श्रेय
विशेष धन्यवाद:
- osuT5 के लेखकों को उनके ट्रेनिंग कोड के लिए।
- Hugging Face टीम को उनके उपकरणों के लिए।
- Jason Won और Richard Nagyfi को विचार साझा करने के लिए।
- Marvin को ट्रेनिंग क्रेडिट दान करने के लिए।
- osu! समुदाय को बीटमैप्स के लिए।
संबंधित कार्य
- osu! Beatmap Generator Syps (Nick Sypteras) द्वारा
- osumapper kotritrona, jyvden, Yoyolick (Ryan Zmuda) द्वारा
- osu-diffusion OliBomby (Olivier Schipper), NiceAesth (Andrei Baciu) द्वारा
- osuT5 gyataro (Xiwen Teoh) द्वारा
- Beat Learning sedthh (Richard Nagyfi) द्वारा
- osu!dreamer jaswon (Jason Won) द्वारा