ചുരുക്ക ഉത്തരം: AI മോഡലുകൾ ഒപ്റ്റിമൈസ് ചെയ്യുന്നതിന്, ഒരു പ്രാഥമിക നിയന്ത്രണം (ലേറ്റൻസി, ചെലവ്, മെമ്മറി, ഗുണനിലവാരം, സ്ഥിരത അല്ലെങ്കിൽ ത്രൂപുട്ട്) തിരഞ്ഞെടുക്കുക, തുടർന്ന് എന്തെങ്കിലും മാറ്റുന്നതിനുമുമ്പ് വിശ്വസനീയമായ ഒരു അടിസ്ഥാനരേഖ പിടിച്ചെടുക്കുക. ആദ്യം പൈപ്പ്ലൈൻ തടസ്സങ്ങൾ നീക്കം ചെയ്യുക, തുടർന്ന് മിക്സഡ് പ്രിസിഷൻ, ബാച്ചിംഗ് പോലുള്ള കുറഞ്ഞ അപകടസാധ്യതയുള്ള നേട്ടങ്ങൾ പ്രയോഗിക്കുക; ഗുണനിലവാരം നിലനിൽക്കുകയാണെങ്കിൽ, കംപൈലർ/റൺടൈം ടൂളിംഗിലേക്ക് നീങ്ങുക, തുടർന്ന് ആവശ്യമുള്ളപ്പോൾ ക്വാണ്ടൈസേഷൻ അല്ലെങ്കിൽ ഡിസ്റ്റിലേഷൻ വഴി മോഡൽ വലുപ്പം കുറയ്ക്കുക.
പ്രധാന കാര്യങ്ങൾ:
നിയന്ത്രണം : ഒന്നോ രണ്ടോ ലക്ഷ്യ മെട്രിക്കുകൾ തിരഞ്ഞെടുക്കുക; ഒപ്റ്റിമൈസേഷൻ എന്നത് സ്വതന്ത്ര വിജയങ്ങളല്ല, മറിച്ച് ട്രേഡ്-ഓഫുകളുടെ ഒരു ലാൻഡ്സ്കേപ്പാണ്.
അളവ് : p50/p95/p99, ത്രൂപുട്ട്, ഉപയോഗം, മെമ്മറി പീക്കുകൾ എന്നിവ ഉപയോഗിച്ച് യഥാർത്ഥ വർക്ക്ലോഡുകൾ പ്രൊഫൈൽ ചെയ്യുക.
പൈപ്പ്ലൈൻ : മോഡലിൽ സ്പർശിക്കുന്നതിന് മുമ്പ് ടോക്കണൈസേഷൻ, ഡാറ്റലോഡറുകൾ, പ്രീപ്രോസസിംഗ്, ബാച്ചിംഗ് എന്നിവ പരിഹരിക്കുക.
സെർവിംഗ് : കാഷിംഗ്, ബോധപൂർവമായ ബാച്ചിംഗ്, കൺകറൻസി ട്യൂണിംഗ് എന്നിവ ഉപയോഗിക്കുക, ടെയിൽ ലേറ്റൻസി സൂക്ഷ്മമായി നിരീക്ഷിക്കുക.
ഗാർഡ്റെയിലുകൾ : ഓരോ പ്രകടന മാറ്റത്തിനും ശേഷം ഗോൾഡൻ പ്രോംപ്റ്റുകൾ, ടാസ്ക് മെട്രിക്സ്, സ്പോട്ട് ചെക്കുകൾ എന്നിവ പ്രവർത്തിപ്പിക്കുക.

🔗 AI മോഡലുകളെ ഫലപ്രദമായി എങ്ങനെ വിലയിരുത്താം
മോഡലുകളെ ന്യായമായും വിശ്വസനീയമായും വിലയിരുത്തുന്നതിനുള്ള പ്രധാന മാനദണ്ഡങ്ങളും ഘട്ടങ്ങളും.
🔗 യഥാർത്ഥ മെട്രിക്സ് ഉപയോഗിച്ച് AI പ്രകടനം എങ്ങനെ അളക്കാം
താരതമ്യം ചെയ്യാൻ ബെഞ്ച്മാർക്കുകൾ, ലേറ്റൻസി, ചെലവ്, ഗുണനിലവാര സിഗ്നലുകൾ എന്നിവ ഉപയോഗിക്കുക.
🔗 ഉൽപ്പാദനത്തിന് മുമ്പ് AI മോഡലുകൾ എങ്ങനെ പരീക്ഷിക്കാം
പ്രായോഗിക പരിശോധന വർക്ക്ഫ്ലോ: ഡാറ്റ വിഭജനം, സമ്മർദ്ദ കേസുകൾ, നിരീക്ഷണം.
🔗 ഉള്ളടക്ക നിർമ്മാണത്തിന് AI എങ്ങനെ ഉപയോഗിക്കാം
ഘടനാപരമായ നിർദ്ദേശങ്ങളും ആവർത്തനങ്ങളും ഉപയോഗിച്ച് ആശയങ്ങളെ വേഗത്തിൽ ഡ്രാഫ്റ്റുകളാക്കി മാറ്റുക.
1) പ്രായോഗികമായി "ഒപ്റ്റിമൈസ് ചെയ്യുക" എന്നാൽ എന്താണ് അർത്ഥമാക്കുന്നത് (കാരണം എല്ലാവരും അത് വ്യത്യസ്ത രീതിയിലാണ് ഉപയോഗിക്കുന്നത്) 🧠
"ഒരു AI മോഡൽ ഒപ്റ്റിമൈസ് ചെയ്യുക" എന്ന് ആളുകൾ പറയുമ്പോൾ, അവർ അർത്ഥമാക്കുന്നത്:
-
ഇത് വേഗത്തിലാക്കുക (ലേറ്റൻസി കുറയ്ക്കുക)
-
ഇത് വിലകുറഞ്ഞതാക്കുക (കുറച്ച് GPU-മണിക്കൂർ, കുറഞ്ഞ ക്ലൗഡ് ചെലവ്)
-
അതിനെ ചെറുതാക്കുക (മെമ്മറി ഫുട്പ്രിന്റ്, എഡ്ജ് വിന്യാസം)
-
കൂടുതൽ കൃത്യതയുള്ളതാക്കുക (ഗുണനിലവാര മെച്ചപ്പെടുത്തലുകൾ, കുറഞ്ഞ മതിഭ്രമങ്ങൾ)
-
കൂടുതൽ സ്ഥിരതയുള്ളതാക്കുക (വ്യതിയാനം കുറയുക, ഉൽപ്പാദനത്തിൽ കുറവ് പരാജയങ്ങൾ)
-
സെർവ് ചെയ്യുന്നത് എളുപ്പമാക്കുക (ത്രൂപുട്ട്, ബാച്ചിംഗ്, പ്രവചിക്കാവുന്ന പ്രകടനം)
നേരിയ തോതിൽ അരോചകമായ സത്യം ഇതാ: നിങ്ങൾക്ക് ഇവയെല്ലാം ഒറ്റയടിക്ക് പരമാവധിയാക്കാൻ കഴിയില്ല. ഒപ്റ്റിമൈസേഷൻ എന്നത് ഒരു ബലൂൺ ഞെക്കുന്നത് പോലെയാണ് - ഒരു വശം അകത്തേക്ക് തള്ളുമ്പോൾ മറുവശം പുറത്തുവരും. എല്ലായ്പ്പോഴും അല്ല, പക്ഷേ പലപ്പോഴും നിങ്ങൾ ട്രേഡ്ഓഫുകൾക്കായി ആസൂത്രണം ചെയ്യണം.
അതുകൊണ്ട് എന്തെങ്കിലും തൊടുന്നതിനുമുമ്പ്, നിങ്ങളുടെ പ്രാഥമിക നിയന്ത്രണം :
-
p95 ലേറ്റൻസി ( AWS ക്ലൗഡ് വാച്ച് പെർസെന്റൈലുകൾ ), ടെയിൽ പെർഫോമൻസ് ( “ടെയിൽ ലേറ്റൻസി” ബെസ്റ്റ് പ്രാക്ടീസ് പ്രധാനമാണ് 📉
-
ഗുണനിലവാരത്തിനായുള്ള സമയവും GPU ഉപയോഗവും നിങ്ങൾ ശ്രദ്ധിക്കുന്നു
-
നിങ്ങൾ ഉപകരണങ്ങളിൽ വിന്യസിക്കുകയാണെങ്കിൽ, നിങ്ങൾക്ക് റാമും പവറും 🔋
2) AI മോഡൽ ഒപ്റ്റിമൈസേഷന്റെ എത്ര നല്ല പതിപ്പ് പോലെ തോന്നുന്നു ✅
ഒപ്റ്റിമൈസേഷന്റെ ഒരു നല്ല പതിപ്പ് "ക്വാണ്ടൈസേഷൻ പ്രയോഗിച്ച് പ്രാർത്ഥിക്കുക" എന്നതല്ല. അതൊരു സിസ്റ്റമാണ്. മികച്ച സജ്ജീകരണങ്ങളിൽ സാധാരണയായി ഇവയുണ്ട്:
-
നിങ്ങൾ വിശ്വസിക്കുന്ന ഒരു അടിസ്ഥാനരേഖ.
നിങ്ങളുടെ നിലവിലെ ഫലങ്ങൾ പുനർനിർമ്മിക്കാൻ കഴിയുന്നില്ലെങ്കിൽ, നിങ്ങൾ എന്തെങ്കിലും മെച്ചപ്പെടുത്തിയെന്ന് നിങ്ങൾക്ക് അറിയാൻ കഴിയില്ല. ലളിതം... പക്ഷേ ആളുകൾ അത് ഒഴിവാക്കുന്നു. പിന്നീട് അവർ സർപ്പിളമായി മാറുന്നു. -
എന്ന വ്യക്തമായ ലക്ഷ്യ മെട്രിക്
അവ്യക്തമാണ്. "ഒരേ ഗുണനിലവാര സ്കോറിൽ p95 ലേറ്റൻസി 900ms ൽ നിന്ന് 300ms ആയി കുറയ്ക്കുക" എന്നത് ഒരു യഥാർത്ഥ ലക്ഷ്യമാണ്. -
ഗുണനിലവാരത്തിനായുള്ള ഗാർഡ്റെയിലുകൾ
ഓരോ പ്രകടന വിജയവും നിശബ്ദമായ ഗുണനിലവാര റിഗ്രഷൻ സാധ്യത സൃഷ്ടിക്കുന്നു. നിങ്ങൾക്ക് പരിശോധനകൾ, വിലയിരുത്തലുകൾ, അല്ലെങ്കിൽ കുറഞ്ഞത് ഒരു സാനിറ്റി സ്യൂട്ട് ആവശ്യമാണ്. -
ഹാർഡ്വെയർ അവബോധം
ഒരു ജിപിയുവിലെ "വേഗതയേറിയ" മോഡലിന് മറ്റൊന്നിൽ ക്രാൾ ചെയ്യാൻ കഴിയും. സിപിയുവിന് അതിന്റേതായ പ്രത്യേക തരം കുഴപ്പങ്ങളുണ്ട്. -
ആവർത്തിച്ചുള്ള മാറ്റങ്ങൾ, ഒരു വലിയ പുനരാഖ്യാനമല്ല.
നിങ്ങൾ ഒരേസമയം അഞ്ച് കാര്യങ്ങൾ മാറ്റുകയും പ്രകടനം മെച്ചപ്പെടുകയും ചെയ്യുമ്പോൾ, എന്തുകൊണ്ടെന്ന് നിങ്ങൾക്ക് അറിയില്ല. അത്... അസ്വസ്ഥത ഉണ്ടാക്കുന്നു.
ഒപ്റ്റിമൈസേഷൻ ഒരു ഗിറ്റാർ ട്യൂൺ ചെയ്യുന്നത് പോലെ തോന്നണം - ചെറിയ ക്രമീകരണങ്ങൾ, ശ്രദ്ധയോടെ കേൾക്കുക, ആവർത്തിക്കുക 🎸. കത്തികൾ കളിക്കുന്നത് പോലെ തോന്നിയാൽ, എന്തോ കുഴപ്പമുണ്ട്.
3) താരതമ്യ പട്ടിക: AI മോഡലുകൾ ഒപ്റ്റിമൈസ് ചെയ്യുന്നതിനുള്ള ജനപ്രിയ ഓപ്ഷനുകൾ 📊
സാധാരണ ഒപ്റ്റിമൈസേഷൻ ടൂളുകളുടെ/സമീപനങ്ങളുടെ ഒരു ഹ്രസ്വവും അൽപ്പം വൃത്തികെട്ടതുമായ താരതമ്യ പട്ടിക താഴെ കൊടുക്കുന്നു. ഇല്ല, അത് പൂർണ്ണമായും "ന്യായമല്ല" - യഥാർത്ഥ ജീവിതവും അങ്ങനെയല്ല.
| ഉപകരണം / ഓപ്ഷൻ | പ്രേക്ഷകർ | വില | എന്തുകൊണ്ട് ഇത് പ്രവർത്തിക്കുന്നു |
|---|---|---|---|
പൈടോർച്ച് ടോർച്ച്.കംപൈൽ ( പൈടോർച്ച് ഡോക്സ് ) |
പൈടോർച്ച് കൂട്ടുകാരെ | സൗ ജന്യം | ഗ്രാഫ് ക്യാപ്ചർ + കംപൈലർ തന്ത്രങ്ങൾ ഓവർഹെഡ് കുറയ്ക്കാൻ സഹായിക്കും… ചിലപ്പോൾ അത് മാന്ത്രികമാണ് ✨ |
| ONNX റൺടൈം ( ONNX റൺടൈം ഡോക്സ് ) | വിന്യാസ ടീമുകൾ | സൗജന്യം | ശക്തമായ അനുമാന ഒപ്റ്റിമൈസേഷനുകൾ, വിശാലമായ പിന്തുണ, സ്റ്റാൻഡേർഡ് സെർവിംഗിന് നല്ലത് |
| ടെൻസർആർടി ( എൻവിഡിയ ടെൻസർആർടി ഡോക്യുമെന്റുകൾ ) | എൻവിഡിയ വിന്യാസം | പണമടച്ചുള്ള വൈബുകൾ (പലപ്പോഴും ബണ്ടിൽ ചെയ്തിരിക്കുന്നത്) | അഗ്രസീവ് കേർണൽ ഫ്യൂഷൻ + കൃത്യതയുള്ള കൈകാര്യം ചെയ്യൽ, ക്ലിക്ക് ചെയ്യുമ്പോൾ വളരെ വേഗത |
| ഡീപ്സ്പീഡ് ( ZeRO ഡോക്സ് ) | പരിശീലന ടീമുകൾ | സൗ ജന്യം | മെമ്മറി + ത്രൂപുട്ട് ഒപ്റ്റിമൈസേഷനുകൾ (സീറോ മുതലായവ). ഒരു ജെറ്റ് എഞ്ചിൻ പോലെ തോന്നാം |
| FSDP (പൈടോർച്ച്) ( പൈടോർച്ച് FSDP ഡോക്സ് ) | പരിശീലന ടീമുകൾ | സൗ ജന്യം | ഷാർഡ്സ് പാരാമീറ്ററുകൾ/ഗ്രേഡിയന്റുകൾ, വലിയ മോഡലുകളെ ഭയപ്പെടുത്തുന്നത് കുറയ്ക്കുന്നു |
| ബിറ്റ്സാൻഡ്ബൈറ്റുകൾ ക്വാണ്ടൈസേഷൻ ( ബിറ്റ്സാൻഡ്ബൈറ്റുകൾ ) | എൽഎൽഎം ടിങ്കററുകൾ | സൗ ജന്യം | കുറഞ്ഞ ഭാരം, വലിയ മെമ്മറി ലാഭം - ഗുണനിലവാരം ആശ്രയിച്ചിരിക്കുന്നു, പക്ഷേ അത് എത്ര ശരിയാണ് 😬 |
| വാറ്റിയെടുക്കൽ ( ഹിന്റൺ തുടങ്ങിയവർ, 2015 ) | ഉൽപ്പന്ന ടീമുകൾ | "സമയച്ചെലവ്" | ചെറിയ വിദ്യാർത്ഥി മാതൃക പെരുമാറ്റം പാരമ്പര്യമായി സ്വീകരിക്കുന്നു, സാധാരണയായി മികച്ച ROI ദീർഘകാലാടിസ്ഥാനത്തിൽ |
| പ്രൂണിംഗ് ( പൈടോർച്ച് പ്രൂണിംഗ് ട്യൂട്ടോറിയൽ ) | ഗവേഷണം + പ്രോഡ് | സൗ ജന്യം | നിർജ്ജീവമായ ഭാരം നീക്കംചെയ്യുന്നു. പുനർപരിശീലനത്തോടൊപ്പം ചേർക്കുമ്പോൾ മികച്ച രീതിയിൽ പ്രവർത്തിക്കുന്നു |
| ഫ്ലാഷ് അറ്റൻഷൻ / ഫ്യൂസ്ഡ് കേർണലുകൾ ( ഫ്ലാഷ് അറ്റൻഷൻ പേപ്പർ ) | പ്രകടനത്തിലെ ആരാധകർ | സൗ ജന്യം | വേഗത്തിലുള്ള ശ്രദ്ധ, മികച്ച ഓർമ്മശക്തി. ട്രാൻസ്ഫോർമറുകൾക്ക് യഥാർത്ഥ വിജയം |
| ട്രൈറ്റൺ ഇൻഫെഷൻ സെർവർ ( ഡൈനാമിക് ബാച്ചിംഗ് ) | ഓപ്സ്/ഇൻഫ്രാ | സൗ ജന്യം | പ്രൊഡക്ഷൻ സെർവിംഗ്, ബാച്ചിംഗ്, മൾട്ടി-മോഡൽ പൈപ്പ്ലൈനുകൾ - എന്റർപ്രൈസ് പോലെ തോന്നുന്നു |
ഫോർമാറ്റിംഗ് വിചിത്രമായ കുറ്റസമ്മതം: “വില” എന്നത് വൃത്തികെട്ടതാണ്, കാരണം ഓപ്പൺ സോഴ്സ് ഇപ്പോഴും നിങ്ങൾക്ക് ഡീബഗ്ഗിംഗിന് ഒരു വാരാന്ത്യം ചിലവഴിക്കാൻ കഴിയും, അത്... ഒരു വിലയാണ്. 😵💫
4) അളവെടുപ്പിൽ നിന്ന് ആരംഭിക്കുക: നിങ്ങൾ ഉദ്ദേശിക്കുന്നതുപോലെ പ്രൊഫൈൽ 🔍
ഈ ഗൈഡിൽ നിന്ന് നിങ്ങൾ ഒരു കാര്യം മാത്രമേ ചെയ്യുന്നുള്ളൂവെങ്കിൽ, ഇത് ചെയ്യുക: ശരിയായി അളക്കുക.
എന്റെ സ്വന്തം പരീക്ഷണങ്ങളിൽ, ഏറ്റവും വലിയ "ഒപ്റ്റിമൈസേഷൻ മുന്നേറ്റങ്ങൾ" ഉണ്ടായത് ലജ്ജാകരമാം വിധം ലളിതമായ ഒന്ന് കണ്ടെത്തിയതിൽ നിന്നാണ്:
-
ഡാറ്റ ലോഡർ GPU-വിന് ക്ഷാമം നേരിടുന്നു
-
സിപിയു പ്രീപ്രോസസ്സിംഗ് തടസ്സം
-
ചെറിയ ബാച്ച് വലുപ്പങ്ങൾ കേർണൽ ലോഞ്ച് ഓവർഹെഡിന് കാരണമാകുന്നു
-
സാവധാനത്തിലുള്ള ടോക്കണൈസേഷൻ (ടോക്കണൈസർമാർക്ക് നിശബ്ദ വില്ലന്മാരാകാം)
-
മെമ്മറി ഫ്രാഗ്മെന്റേഷൻ ( പൈടോർച്ച് സിയുഡിഎ മെമ്മറി അലോക്കേറ്റർ കുറിപ്പുകൾ )
-
ഒരു സിംഗിൾ ലെയർ ഡോമിന്റേണിംഗ് കമ്പ്യൂട്ട്
എന്താണ് അളക്കേണ്ടത് (കുറഞ്ഞ സെറ്റ്)
-
ലേറ്റൻസി (p50, p95, p99) ( ലേറ്റൻസി ശതമാനങ്ങളിൽ SRE )
-
ത്രൂപുട്ട് (ടോക്കണുകൾ/സെക്കൻഡ്, അഭ്യർത്ഥനകൾ/സെക്കൻഡ്)
-
ജിപിയു ഉപയോഗം (കമ്പ്യൂട്ട് + മെമ്മറി)
-
VRAM / RAM പീക്കുകൾ
-
1k ടോക്കണുകൾക്കുള്ള ചെലവ് (അല്ലെങ്കിൽ അനുമാനമനുസരിച്ച്)
പ്രായോഗിക പ്രൊഫൈലിംഗ് മനോഭാവം
-
നിങ്ങൾക്ക് താൽപ്പര്യമുള്ള ഒരു സാഹചര്യം (കളിപ്പാട്ട പ്രോംപ്റ്റ് അല്ല) പ്രൊഫൈൽ ചെയ്യുക.
-
ഒരു ചെറിയ "പെർഫെക്റ്റ് ജേണലിൽ" എല്ലാം രേഖപ്പെടുത്തുക.
അതെ, ഇത് മടുപ്പിക്കുന്നതാണ്... പക്ഷേ പിന്നീട് ഗ്യാസ് ലൈറ്റിംഗിൽ നിന്ന് ഇത് നിങ്ങളെ രക്ഷിക്കുന്നു.
(തുടക്കത്തിൽ നിങ്ങൾക്ക് ഒരു കോൺക്രീറ്റ് ഉപകരണം വേണമെങ്കിൽ: PyTorch Profiler ( torch.profiler docs ), Nsight Systems ( NVIDIA Nsight Systems ) എന്നിവയാണ് സാധാരണ സംശയിക്കപ്പെടുന്നവ.)
5) ഡാറ്റ + പരിശീലന ഒപ്റ്റിമൈസേഷൻ: നിശബ്ദ സൂപ്പർ പവർ 📦🚀
ആളുകൾ മോഡൽ ആർക്കിടെക്ചറിൽ അമിതമായി ആമഗ്നരാകുകയും പൈപ്പ്ലൈൻ മറക്കുകയും ചെയ്യുന്നു. അതേസമയം പൈപ്പ്ലൈൻ നിശബ്ദമായി GPU യുടെ പകുതി കത്തിക്കുന്നു.
വേഗത്തിൽ ദൃശ്യമാകുന്ന എളുപ്പ വിജയങ്ങൾ
-
മിക്സഡ് പ്രിസിഷൻ ഉപയോഗിക്കുക (സ്ഥിരതയുള്ളിടത്ത് FP16/BF16) ( PyTorch AMP / torch.amp )
സാധാരണയായി വേഗതയേറിയതും പലപ്പോഴും മികച്ചതുമാണ് - പക്ഷേ സംഖ്യാപരമായ പ്രത്യേകതകൾ ശ്രദ്ധിക്കുക. -
ബാച്ച് വലുപ്പം പരിമിതമാകുമ്പോൾ ഗ്രേഡിയന്റ് അക്യുമുലേഷൻ 🤗 ആക്സിലറേറ്റ് ഗൈഡ് )
മെമ്മറി പൊട്ടിത്തെറിക്കാതെ ഒപ്റ്റിമൈസേഷൻ സ്ഥിരത നിലനിർത്തുന്നു. -
ഗ്രേഡിയന്റ് ചെക്ക്പോയിന്റിംഗ് ( torch.utils.checkpoint )
മെമ്മറിക്കായി ട്രേഡുകൾ കമ്പ്യൂട്ട് ചെയ്യുന്നു - വലിയ സന്ദർഭങ്ങൾ സാധ്യമാക്കുന്നു. -
കാര്യക്ഷമമായ ടോക്കണൈസേഷൻ ( 🤗 ടോക്കണൈസർമാർ )
ടോക്കണൈസേഷൻ വലിയ തോതിൽ തടസ്സമായി മാറിയേക്കാം. അത് ഗ്ലാമറസല്ല; അത് പ്രധാനമാണ്. -
ഡാറ്റലോഡർ ട്യൂണിംഗ്
കൂടുതൽ തൊഴിലാളികൾ, പിൻ ചെയ്ത മെമ്മറി, മുൻകൂട്ടി കണ്ടെത്തൽ - കാണിക്കുന്നില്ലെങ്കിലും ഫലപ്രദമാണ് 😴➡️💪 ( പൈടോർച്ച് പെർഫോമൻസ് ട്യൂണിംഗ് ഗൈഡ് )
പാരാമീറ്റർ-കാര്യക്ഷമമായ ഫൈൻ-ട്യൂണിംഗ്
വലിയ മോഡലുകളെ കൂടുതൽ മികച്ചതാക്കുകയാണെങ്കിൽ, PEFT രീതികൾ (LoRA-ശൈലിയിലുള്ള അഡാപ്റ്ററുകൾ പോലുള്ളവ) അതിശയകരമാംവിധം ശക്തമായി തുടരുന്നതിനൊപ്പം പരിശീലന ചെലവ് ഗണ്യമായി കുറയ്ക്കാനും കഴിയും ( 🤗 ട്രാൻസ്ഫോർമറുകൾ PEFT ഗൈഡ് , LoRA പേപ്പർ ). “എന്തുകൊണ്ട് നമ്മൾ ഇത് നേരത്തെ ചെയ്തില്ല?” എന്ന ചോദ്യങ്ങളിൽ ഒന്നാണിത്.
6) ആർക്കിടെക്ചർ-ലെവൽ ഒപ്റ്റിമൈസേഷൻ: മോഡലിന്റെ വലത്-വലുപ്പം 🧩
ചിലപ്പോൾ ഒപ്റ്റിമൈസ് ചെയ്യാനുള്ള ഏറ്റവും നല്ല മാർഗം... ജോലിക്ക് വളരെ വലുതായ ഒരു മോഡൽ ഉപയോഗിക്കുന്നത് നിർത്തുക എന്നതാണ്. എനിക്കറിയാം, ദൈവനിന്ദ 😄.
ചില അടിസ്ഥാനകാര്യങ്ങളെക്കുറിച്ച് ഒന്ന് വിളിക്കൂ:
-
നിങ്ങൾക്ക് പൂർണ്ണമായ ജനറൽ-ഇന്റലിജൻസ് വൈബുകൾ ആവശ്യമുണ്ടോ, അതോ ഒരു സ്പെഷ്യലിസ്റ്റിനെ വേണോ എന്ന് തീരുമാനിക്കുക.
-
കോൺടെക്സ്റ്റ് വിൻഡോ വലുതാക്കാതെ, ആവശ്യമുള്ളത്ര വലുതായി നിലനിർത്തുക.
-
ജോലിക്കായി പരിശീലനം ലഭിച്ച ഒരു മാതൃക ഉപയോഗിക്കുക (വർഗ്ഗീകരണ ജോലികൾക്കുള്ള വർഗ്ഗീകരണ മാതൃകകൾ മുതലായവ).
പ്രായോഗിക അവകാശ-വലുപ്പനിർണ്ണയ തന്ത്രങ്ങൾ
-
മിക്ക അഭ്യർത്ഥനകൾക്കും
ഒരു ചെറിയ ബാക്ക്ബോണിലേക്ക് മാറുക, തുടർന്ന് "ഹാർഡ് ക്വറികൾ" ഒരു വലിയ മോഡലിലേക്ക് റൂട്ട് ചെയ്യുക. -
രണ്ട് ഘട്ടങ്ങളുള്ള സജ്ജീകരണം ഉപയോഗിക്കുക
വേഗത്തിലുള്ള മോഡൽ ഡ്രാഫ്റ്റുകൾ, ശക്തമായ മോഡൽ വെരിഫൈകൾ അല്ലെങ്കിൽ എഡിറ്റുകൾ.
ഇത് വളരെ ശ്രദ്ധാലുവായ - ശല്യപ്പെടുത്തുന്ന, എന്നാൽ ഫലപ്രദവുമായ ഒരു സുഹൃത്തിനൊപ്പം എഴുതുന്നത് പോലെയാണ്. -
ഔട്ട്പുട്ട് ദൈർഘ്യം കുറയ്ക്കുക
ഔട്ട്പുട്ട് ടോക്കണുകൾക്ക് പണവും സമയവും ചിലവാകും. നിങ്ങളുടെ മോഡൽ തെറ്റിയാൽ, നിങ്ങൾ റാമ്പിളിന് പണം നൽകണം.
കുറഞ്ഞ സമയം മാത്രം ചെലവഴിച്ചുകൊണ്ട് ടീമുകൾ ചെലവ് ഗണ്യമായി കുറയ്ക്കുന്നത് ഞാൻ കണ്ടിട്ടുണ്ട്. ഇത് നിസ്സാരമായി തോന്നുന്നു. ഇത് പ്രവർത്തിക്കുന്നു.
7) കംപൈലർ + ഗ്രാഫ് ഒപ്റ്റിമൈസേഷനുകൾ: വേഗത എവിടെ നിന്ന് വരുന്നു 🏎️
ഇതാണ് "കമ്പ്യൂട്ടറിനെ കൂടുതൽ മികച്ചതാക്കുക കമ്പ്യൂട്ടർ കാര്യങ്ങൾ" എന്ന ലെയർ.
സാധാരണ വിദ്യകൾ:
-
ഓപ്പറേറ്റർ ഫ്യൂഷൻ (കേർണലുകൾ സംയോജിപ്പിക്കുക) ( NVIDIA TensorRT "ലെയർ ഫ്യൂഷൻ" )
-
സ്ഥിരമായ മടക്കൽ (സ്ഥിരമായ മൂല്യങ്ങൾ മുൻകൂട്ടി കണക്കാക്കുക) ( ONNX റൺടൈം ഗ്രാഫ് ഒപ്റ്റിമൈസേഷനുകൾ )
-
കേർണൽ തിരഞ്ഞെടുപ്പ് ഹാർഡ്വെയറുമായി ട്യൂൺ ചെയ്തിരിക്കുന്നു.
-
പൈത്തൺ ഓവർഹെഡ് കുറയ്ക്കുന്നതിനുള്ള ഗ്രാഫ് ക്യാപ്ചർ
torch.compileഅവലോകനം )
ലളിതമായി പറഞ്ഞാൽ: നിങ്ങളുടെ മോഡൽ ഗണിതശാസ്ത്രപരമായി വേഗതയുള്ളതായിരിക്കാം, പക്ഷേ പ്രവർത്തനപരമായി മന്ദഗതിയിലായിരിക്കും. കംപൈലറുകൾ അവയിൽ ചിലത് പരിഹരിക്കുന്നു.
പ്രായോഗിക കുറിപ്പുകൾ (വടുക്കൾ എന്നും അറിയപ്പെടുന്നു)
-
ഈ ഒപ്റ്റിമൈസേഷനുകൾ മോഡൽ ആകൃതി മാറ്റങ്ങളോട് സംവേദനക്ഷമമായിരിക്കും.
-
ചില മോഡലുകൾ വളരെയധികം വേഗത കൂട്ടുന്നു, ചിലത് വളരെ കഷ്ടിച്ച് മാത്രം നീങ്ങുന്നു.
-
ചിലപ്പോൾ വേഗത കൂട്ടുന്നതും അമ്പരപ്പിക്കുന്നതുമായ ഒരു ബഗ് ലഭിക്കും - ഒരു ഗ്രെംലിൻ അകത്തേക്ക് നീങ്ങിയതുപോലെ 🧌
എന്നിരുന്നാലും, അത് പ്രവർത്തിക്കുമ്പോൾ, അത് ഏറ്റവും ശുദ്ധമായ വിജയങ്ങളിൽ ഒന്നാണ്.
8) അളവ് നിശ്ചയിക്കൽ, പ്രൂണിംഗ്, വാറ്റിയെടുക്കൽ: കരയാതെ ചെറുതാക്കുക (വളരെയധികം) 🪓📉
ഇതാണ് ആളുകൾക്ക് വേണ്ട വിഭാഗം... കാരണം ഇത് സൌജന്യ പ്രകടനം പോലെ തോന്നുന്നു. അത് ആകാം, പക്ഷേ നിങ്ങൾ അതിനെ ശസ്ത്രക്രിയ പോലെയാണ് കൈകാര്യം ചെയ്യേണ്ടത്.
അളവ് നിർണ്ണയിക്കൽ (കുറഞ്ഞ കൃത്യതയുള്ള തൂക്കങ്ങൾ/സജീവമാക്കലുകൾ)
-
അനുമാന വേഗതയ്ക്കും മെമ്മറിക്കും മികച്ചത്
-
അപകടസാധ്യത: ഗുണനിലവാരം കുറയുന്നു, പ്രത്യേകിച്ച് അരികുകളിൽ
-
മികച്ച രീതി: വൈബുകളിലല്ല, യഥാർത്ഥ ടെസ്റ്റ് സെറ്റിൽ വിലയിരുത്തുക
നിങ്ങൾ കേൾക്കുന്ന സാധാരണ സുഗന്ധങ്ങൾ:
-
INT8 (പലപ്പോഴും ഖരരൂപത്തിലുള്ളത്) ( ടെൻസർആർടി ക്വാണ്ടൈസ് ചെയ്ത തരങ്ങൾ )
-
INT4 / ലോ-ബിറ്റ് (വലിയ സമ്പാദ്യം, ഗുണനിലവാര അപകടസാധ്യത വർദ്ധിക്കുന്നു) ( ബിറ്റ്സ്ആൻഡ്ബൈറ്റുകൾ കെ-ബിറ്റ് ക്വാണ്ടൈസേഷൻ )
-
മിക്സഡ് ക്വാണ്ടം (എല്ലാത്തിനും ഒരേ കൃത്യത ആവശ്യമില്ല)
കൊമ്പുകോതൽ (പാരാമീറ്ററുകൾ നീക്കം ചെയ്യുക)
-
"അപ്രധാനമായ" ഭാരങ്ങളോ ഘടനകളോ നീക്കംചെയ്യുന്നു ( പൈടോർച്ച് പ്രൂണിംഗ് ട്യൂട്ടോറിയൽ )
-
ഗുണനിലവാരം വീണ്ടെടുക്കാൻ സാധാരണയായി വീണ്ടും പരിശീലനം ആവശ്യമാണ്
-
ആളുകൾ കരുതുന്നതിലും നന്നായി പ്രവർത്തിക്കുന്നു... ശ്രദ്ധാപൂർവ്വം ചെയ്യുമ്പോൾ
വാറ്റിയെടുക്കൽ (വിദ്യാർത്ഥി അധ്യാപകനിൽ നിന്ന് പഠിക്കുന്നു)
ഇതാണ് എന്റെ വ്യക്തിപരമായ പ്രിയപ്പെട്ട ദീർഘകാല ലിവർ. വാറ്റിയെടുക്കൽ വഴി സമാനമായി പ്രവർത്തിക്കുന്ന ഒരു ചെറിയ മോഡൽ സൃഷ്ടിക്കാൻ കഴിയും, കൂടാതെ ഇത് പലപ്പോഴും എക്സ്ട്രീം ക്വാണ്ടൈസേഷനേക്കാൾ ( ഡിസ്റ്റില്ലിംഗ് ദി നോളജ് ഇൻ എ ന്യൂറൽ നെറ്റ്വർക്ക് ) കൂടുതൽ സ്ഥിരതയുള്ളതുമാണ്.
ഒരു അപൂർണ്ണ രൂപകം: വാറ്റിയെടുക്കൽ എന്നത് സങ്കീർണ്ണമായ ഒരു സൂപ്പ് ഒരു ഫിൽട്ടറിലൂടെ ഒഴിച്ച്... ചെറിയ ഒരു സൂപ്പ് ലഭിക്കുന്നത് പോലെയാണ്. സൂപ്പ് എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്നതല്ല, പക്ഷേ നിങ്ങൾക്ക് ആശയം മനസ്സിലാകും 🍲.
9) സേവനവും അനുമാനവും: യഥാർത്ഥ യുദ്ധ മേഖല 🧯
നിങ്ങൾക്ക് ഒരു മോഡൽ "ഒപ്റ്റിമൈസ്" ചെയ്യാൻ കഴിയും, എന്നിട്ടും അത് മോശമായി സേവിക്കും. സെർവിംഗ് എന്നത് ലേറ്റൻസിയും ചെലവും യഥാർത്ഥമാകുന്ന ഇടമാണ്.
സേവിക്കുന്നത് പ്രധാനമാണ്, വിജയം നേടുന്നു
-
ബാച്ചിംഗ്
ത്രൂപുട്ട് മെച്ചപ്പെടുത്തുന്നു. എന്നാൽ നിങ്ങൾ അത് അമിതമാക്കിയാൽ ലേറ്റൻസി വർദ്ധിപ്പിക്കുന്നു. അത് ബാലൻസ് ചെയ്യുക. ( ട്രൈറ്റൺ ഡൈനാമിക് ബാച്ചിംഗ് ) -
കാഷിംഗ്
ആവർത്തിച്ചുള്ള സന്ദർഭങ്ങളിൽ പ്രോംപ്റ്റ് കാഷിംഗും കെവി-കാഷെ പുനരുപയോഗവും വളരെ വലുതായിരിക്കും. ( കെവി കാഷെ വിശദീകരണം ) -
സ്ട്രീമിംഗ് ഔട്ട്പുട്ട്
മൊത്തം സമയം തുല്യമാണെങ്കിലും ഉപയോക്താക്കൾക്ക് ഇത് വേഗതയേറിയതായി തോന്നുന്നു. ധാരണ പ്രധാനമാണ് 🙂. -
ടോക്കൺ-ബൈ-ടോക്കൺ ഓവർഹെഡ് റിഡക്ഷൻ
ചില സ്റ്റാക്കുകൾ ഓരോ ടോക്കണിനും അധിക ജോലി ചെയ്യുന്നു. ആ ഓവർഹെഡ് കുറയ്ക്കുക, നിങ്ങൾ വലിയ വിജയം നേടും.
ടെയിൽ ലേറ്റൻസി ശ്രദ്ധിക്കുക
നിങ്ങളുടെ p99 ഒരു ദുരന്തമാണെങ്കിൽ നിങ്ങളുടെ ശരാശരി മികച്ചതായി തോന്നിയേക്കാം. നിർഭാഗ്യവശാൽ ഉപയോക്താക്കൾ ടെയിലിലാണ്. ( “ടെയിൽ ലേറ്റൻസി” ഉം ശരാശരികൾ എന്തുകൊണ്ട് കിടക്കുന്നു എന്നതും )
10) ഹാർഡ്വെയർ-അവെയർ ഒപ്റ്റിമൈസേഷൻ: മോഡലിനെ മെഷീനുമായി പൊരുത്തപ്പെടുത്തുക 🧰🖥️
ഹാർഡ്വെയർ അവബോധമില്ലാതെ ഒപ്റ്റിമൈസുചെയ്യുന്നത് ടയറുകൾ പരിശോധിക്കാതെ ഒരു റേസ് കാർ ട്യൂൺ ചെയ്യുന്നത് പോലെയാണ്. തീർച്ചയായും, നിങ്ങൾക്ക് അത് ചെയ്യാൻ കഴിയും, പക്ഷേ അത് അൽപ്പം മണ്ടത്തരമാണ്.
GPU പരിഗണനകൾ
-
മെമ്മറി ബാൻഡ്വിഡ്ത്ത് പലപ്പോഴും പരിമിതപ്പെടുത്തുന്ന ഘടകമാണ്, റോ കമ്പ്യൂട്ടിംഗ് അല്ല
-
വലിയ ബാച്ച് വലുപ്പങ്ങൾ സഹായിക്കും, അവ സഹായിക്കാത്തിടത്തോളം
-
ട്രാൻസ്ഫോർമറുകൾക്ക് കേർണൽ ഫ്യൂഷനും ശ്രദ്ധാ ഒപ്റ്റിമൈസേഷനുകളും വളരെ വലുതാണ് ( ഫ്ലാഷ്അറ്റൻഷൻ: IO-അവേർ കൃത്യമായ ശ്രദ്ധ )
സിപിയു പരിഗണനകൾ
-
ത്രെഡിംഗ്, വെക്റ്ററൈസേഷൻ, മെമ്മറി ലോക്കാലിറ്റി എന്നിവ വളരെ പ്രധാനമാണ്
-
ടോക്കണൈസേഷൻ ഓവർഹെഡിന് ആധിപത്യം സ്ഥാപിക്കാൻ കഴിയും ( 🤗 “വേഗതയേറിയ” ടോക്കണൈസറുകൾ )
-
GPU-വിനേക്കാൾ വ്യത്യസ്തമായ ക്വാണ്ടൈസേഷൻ തന്ത്രങ്ങൾ നിങ്ങൾക്ക് ആവശ്യമായി വന്നേക്കാം
എഡ്ജ് / മൊബൈൽ പരിഗണനകൾ
-
മെമ്മറി കാൽപ്പാടുകൾ ഒന്നാം സ്ഥാനത്തേക്ക് മാറുന്നു
-
ഉപകരണങ്ങൾ... മൂഡി ആയതിനാൽ ലേറ്റൻസി വേരിയൻസ് പ്രധാനമാണ്
-
ചെറുതും പ്രത്യേകവുമായ മോഡലുകൾ പലപ്പോഴും വലിയ പൊതു മോഡലുകളെ മറികടക്കുന്നു
11) ഗുണമേന്മയുള്ള ഗാർഡ്റെയിലുകൾ: ഒരു ബഗായി സ്വയം “ഒപ്റ്റിമൈസ്” ചെയ്യരുത് 🧪
ഓരോ സ്പീഡ് വിജയത്തിനും ഒരു ഗുണനിലവാര പരിശോധന ഉണ്ടായിരിക്കണം. അല്ലെങ്കിൽ നിങ്ങൾ ആഘോഷിക്കും, അഭിനന്ദിക്കും, തുടർന്ന് “എന്തുകൊണ്ടാണ് അസിസ്റ്റന്റ് പെട്ടെന്ന് ഒരു കടൽക്കൊള്ളക്കാരനെപ്പോലെ സംസാരിക്കുന്നത്?” എന്ന സന്ദേശം ലഭിക്കും 🏴☠️
പ്രായോഗിക സംരക്ഷണ ഭിത്തികൾ:
-
ഗോൾഡൻ പ്രോംപ്റ്റുകൾ (നിങ്ങൾ എപ്പോഴും പരീക്ഷിക്കുന്ന സ്ഥിരമായ പ്രോംപ്റ്റുകളുടെ സെറ്റ്)
-
ടാസ്ക് മെട്രിക്സ് (കൃത്യത, F1, BLEU, അനുയോജ്യമായത് എന്തായാലും)
-
മനുഷ്യ സ്പോട്ട് പരിശോധനകൾ (അതെ, ഗൗരവമായി)
-
റിഗ്രഷൻ പരിധികൾ ("X% ൽ കൂടുതൽ കുറവ് അനുവദനീയമല്ല")
പരാജയ മോഡുകളും ട്രാക്ക് ചെയ്യുക:
-
ഫോർമാറ്റിംഗ് ഡ്രിഫ്റ്റ്
-
പെരുമാറ്റ മാറ്റങ്ങൾ നിരസിക്കൽ
-
ഭ്രമാത്മകത ആവൃത്തി
-
പ്രതികരണ ദൈർഘ്യം പണപ്പെരുപ്പം
ഒപ്റ്റിമൈസേഷന് പെരുമാറ്റത്തിൽ അത്ഭുതകരമായ മാറ്റങ്ങൾ വരുത്താൻ കഴിയും. പ്രത്യേകമായി. അലോസരപ്പെടുത്തുന്നത് പോലെ. പ്രവചനാതീതമായി, പിന്നോട്ട് നോക്കുമ്പോൾ.
12) ചെക്ക്ലിസ്റ്റ്: AI മോഡലുകൾ എങ്ങനെ ഘട്ടം ഘട്ടമായി ഒപ്റ്റിമൈസ് ചെയ്യാം ✅🤖
AI മോഡലുകൾ എങ്ങനെ ഒപ്റ്റിമൈസ് ചെയ്യാം എന്നതിനെക്കുറിച്ചുള്ള വ്യക്തമായ പ്രവർത്തന ക്രമം നിങ്ങൾ ആഗ്രഹിക്കുന്നുവെങ്കിൽ , ആളുകളെ വിവേകത്തോടെ നിലനിർത്താൻ സഹായിക്കുന്ന വർക്ക്ഫ്ലോ ഇതാ:
-
വിജയം നിർവചിക്കുക
1-2 പ്രാഥമിക മെട്രിക്കുകൾ തിരഞ്ഞെടുക്കുക (ലേറ്റൻസി, ചെലവ്, ത്രൂപുട്ട്, ഗുണനിലവാരം). -
പ്രൊഫൈൽ യഥാർത്ഥ വർക്ക്ലോഡുകൾ, റെക്കോർഡ് p50/p95, മെമ്മറി, ചെലവ് എന്നിവ അളക്കുക PyTorch പ്രൊഫൈലർ ) -
പൈപ്പ്ലൈൻ തടസ്സങ്ങൾ പരിഹരിക്കുക.
ഡാറ്റ ലോഡിംഗ്, ടോക്കണൈസേഷൻ, പ്രീപ്രോസസ്സിംഗ്, ബാച്ചിംഗ്. -
കുറഞ്ഞ റിസ്ക് കമ്പ്യൂട്ട് വിജയങ്ങൾ പ്രയോഗിക്കുക
മിക്സഡ് പ്രിസിഷൻ, കേർണൽ ഒപ്റ്റിമൈസേഷനുകൾ, മികച്ച ബാച്ചിംഗ്. -
കംപൈലർ/റൺടൈം ഒപ്റ്റിമൈസേഷനുകൾ പരീക്ഷിച്ചുനോക്കൂ
ഗ്രാഫ് ക്യാപ്ചർ, ഇൻഫെരൻസ് റൺടൈമുകൾ, ഓപ്പറേറ്റർ ഫ്യൂഷൻ. (torch.compileട്യൂട്ടോറിയൽ , ONNX റൺടൈം ഡോക്സ് ) -
മോഡൽ ചെലവ് കുറയ്ക്കുക
ശ്രദ്ധാപൂർവ്വം അളവ് ക്രമീകരിക്കുക, കഴിയുമെങ്കിൽ വാറ്റിയെടുക്കുക, ഉചിതമെങ്കിൽ വെട്ടിയൊതുക്കുക. -
ട്യൂൺ സെർവിംഗ്
കാഷിംഗ്, കൺകറൻസി, ലോഡ് ടെസ്റ്റിംഗ്, ടെയിൽ ലേറ്റൻസി പരിഹാരങ്ങൾ. -
ഗുണനിലവാരം സാധൂകരിക്കുക
റിഗ്രഷൻ ടെസ്റ്റുകൾ പ്രവർത്തിപ്പിച്ച് ഔട്ട്പുട്ടുകൾ വശങ്ങളിലായി താരതമ്യം ചെയ്യുക. -
ആവർത്തിക്കുക
ചെറിയ മാറ്റങ്ങൾ, വ്യക്തമായ കുറിപ്പുകൾ, ആവർത്തിക്കുക. പ്രകടമല്ലാത്തത് - ഫലപ്രദം.
അതെ, ഇത് ഇപ്പോഴും AI മോഡലുകൾ എങ്ങനെ ഒപ്റ്റിമൈസ് ചെയ്യാം എന്നതാണ്, "റേക്കുകളിൽ ചവിട്ടുന്നത് എങ്ങനെ നിർത്താം" എന്ന് തോന്നിയാലും. അതേ കാര്യം തന്നെ.
13) സാധാരണ തെറ്റുകൾ (അതിനാൽ ബാക്കിയുള്ളവരെപ്പോലെ നിങ്ങൾ അവ ആവർത്തിക്കരുത്) 🙃
-
അളക്കുന്നതിന് മുമ്പ് ഒപ്റ്റിമൈസ് ചെയ്യുന്നത്
നിങ്ങൾ സമയം പാഴാക്കും. എന്നിട്ട് നിങ്ങൾ തെറ്റായ കാര്യം ആത്മവിശ്വാസത്തോടെ ഒപ്റ്റിമൈസ് ചെയ്യും... -
ഒറ്റ ബെഞ്ച്മാർക്കിനെ പിന്തുടരുന്നത്
ഒഴിവാക്കുന്നതിലൂടെയാണ് ബെഞ്ച്മാർക്കുകൾ ഉണ്ടാകുന്നത്. നിങ്ങളുടെ ജോലിഭാരം സത്യമാണ്. -
മെമ്മറി അവഗണിക്കുന്നത്
മെമ്മറി പ്രശ്നങ്ങൾ സ്ലോഡൗൺ, ക്രാഷുകൾ, വിറയൽ എന്നിവയ്ക്ക് കാരണമാകുന്നു. ( പൈടോർച്ചിലെ CUDA മെമ്മറി ഉപയോഗം മനസ്സിലാക്കുന്നു ) -
വളരെ നേരത്തെ തന്നെ അമിത അളവ് കണക്കാക്കൽ
ലോ-ബിറ്റ് ക്വാണ്ടുകൾ അത്ഭുതകരമാകാം, പക്ഷേ ആദ്യം സുരക്ഷിതമായ ഘട്ടങ്ങളിലൂടെ ആരംഭിക്കുക. -
റോൾബാക്ക് പ്ലാൻ ഇല്ല.
വേഗത്തിൽ പഴയപടിയാക്കാൻ കഴിയുന്നില്ലെങ്കിൽ, ഓരോ വിന്യാസവും സമ്മർദ്ദകരമാകും. സമ്മർദ്ദം ബഗുകൾ സൃഷ്ടിക്കുന്നു.
സമാപന കുറിപ്പുകൾ: ഒപ്റ്റിമൈസ് ചെയ്യാനുള്ള മാനുഷിക മാർഗം 😌⚡
AI മോഡലുകൾ എങ്ങനെ ഒപ്റ്റിമൈസ് ചെയ്യാം എന്നത് ഒറ്റ ഹാക്ക് അല്ല. ഇത് ഒരു ലെയേർഡ് പ്രക്രിയയാണ്: അളക്കുക, പൈപ്പ്ലൈൻ ശരിയാക്കുക, കംപൈലറുകളും റൺടൈമുകളും ഉപയോഗിക്കുക, ട്യൂൺ സെർവിംഗ് ചെയ്യുക, തുടർന്ന് ആവശ്യമെങ്കിൽ ക്വാണ്ടൈസേഷൻ അല്ലെങ്കിൽ ഡിസ്റ്റിലേഷൻ ഉപയോഗിച്ച് മോഡൽ ചുരുക്കുക. ഘട്ടം ഘട്ടമായി ചെയ്യുക, ഗുണനിലവാരമുള്ള ഗാർഡ്റെയിലുകൾ സൂക്ഷിക്കുക, ഒരു മെട്രിക് ആയി "ഇത് വേഗത്തിൽ തോന്നുന്നു" എന്ന് വിശ്വസിക്കരുത് (നിങ്ങളുടെ വികാരങ്ങൾ മനോഹരമാണ്, നിങ്ങളുടെ വികാരങ്ങൾ ഒരു പ്രൊഫൈലറല്ല).
ഏറ്റവും ചെറിയ ടേക്ക്അവേ വേണമെങ്കിൽ:
-
ആദ്യം അളക്കുക 🔍
-
അടുത്തതായി പൈപ്പ്ലൈൻ ഒപ്റ്റിമൈസ് ചെയ്യുക 🧵
-
പിന്നെ മോഡൽ ഒപ്റ്റിമൈസ് ചെയ്യുക 🧠
-
പിന്നെ സെർവിംഗ് ഒപ്റ്റിമൈസ് ചെയ്യൂ 🏗️
-
എപ്പോഴും ഗുണനിലവാര പരിശോധനകൾ നടത്തുക ✅
അത് സഹായകരമാണെങ്കിൽ, സ്വയം ഓർമ്മിപ്പിക്കുക: ലക്ഷ്യം ഒരു "തികഞ്ഞ മാതൃക" അല്ല. വേഗതയേറിയതും, താങ്ങാനാവുന്നതും, രാത്രിയിൽ ഉറങ്ങാൻ കഴിയുന്നത്ര വിശ്വസനീയവുമായ ഒരു മാതൃകയാണ് ലക്ഷ്യം... മിക്ക രാത്രികളിലും 😴.
പതിവുചോദ്യങ്ങൾ
ഒരു AI മോഡൽ ഒപ്റ്റിമൈസ് ചെയ്യുന്നത് പ്രായോഗികമായി എന്താണ് അർത്ഥമാക്കുന്നത്
"ഒപ്റ്റിമൈസ് ചെയ്യുക" എന്നാൽ സാധാരണയായി ഒരു പ്രാഥമിക നിയന്ത്രണം മെച്ചപ്പെടുത്തുക എന്നാണ് അർത്ഥമാക്കുന്നത്: ലേറ്റൻസി, ചെലവ്, മെമ്മറി കാൽപ്പാട്, കൃത്യത, സ്ഥിരത, അല്ലെങ്കിൽ സെർവിംഗ് ത്രൂപുട്ട്. ബുദ്ധിമുട്ടുള്ള ഭാഗം ട്രേഡ്ഓഫുകളാണ് - ഒരു മേഖലയെ മുന്നോട്ട് കൊണ്ടുപോകുന്നത് മറ്റൊന്നിനെ തളർത്തും. ഒരു പ്രായോഗിക സമീപനം വ്യക്തമായ ഒരു ലക്ഷ്യം (p95 ലേറ്റൻസി അല്ലെങ്കിൽ സമയ-ഗുണനിലവാരം പോലുള്ളവ) തിരഞ്ഞെടുത്ത് അതിലേക്ക് ഒപ്റ്റിമൈസ് ചെയ്യുക എന്നതാണ്. ഒരു ലക്ഷ്യമില്ലാതെ, "മെച്ചപ്പെടുത്താൻ" എളുപ്പമാണ്, പക്ഷേ ഇപ്പോഴും നഷ്ടപ്പെടും.
ഗുണനിലവാരം മോശമാകാതെ AI മോഡലുകൾ എങ്ങനെ ഒപ്റ്റിമൈസ് ചെയ്യാം
ഓരോ വേഗതയിലോ ചെലവിലോ വരുന്ന മാറ്റത്തെ ഒരു സാധ്യതയുള്ള നിശബ്ദ റിഗ്രഷൻ ആയി കണക്കാക്കുക. ഗോൾഡൻ പ്രോംപ്റ്റുകൾ, ടാസ്ക് മെട്രിക്സ്, ദ്രുത മനുഷ്യ സ്പോട്ട് പരിശോധനകൾ എന്നിവ പോലുള്ള ഗാർഡ്റെയിലുകൾ ഉപയോഗിക്കുക. സ്വീകാര്യമായ ഗുണനിലവാര ഡ്രിഫ്റ്റിനായി വ്യക്തമായ ഒരു പരിധി സജ്ജമാക്കുകയും ഔട്ട്പുട്ടുകൾ വശങ്ങളിലായി താരതമ്യം ചെയ്യുകയും ചെയ്യുക. നിങ്ങൾ ഷിപ്പ് ചെയ്തതിന് ശേഷം "ഇത് വേഗതയേറിയതാണ്" എന്നതിലേക്ക് "എന്തുകൊണ്ടാണ് ഇത് പെട്ടെന്ന് ഉൽപ്പാദനത്തിൽ വിചിത്രമായി മാറിയത്?" എന്നതിലേക്ക് മാറുന്നത് ഇത് തടയുന്നു.
ഒപ്റ്റിമൈസ് ചെയ്യാൻ തുടങ്ങുന്നതിനുമുമ്പ് എന്താണ് അളക്കേണ്ടത്
ലേറ്റൻസി പെർസെന്റൈലുകൾ (p50, p95, p99), ത്രൂപുട്ട് (ടോക്കണുകൾ/സെക്കൻഡ് അല്ലെങ്കിൽ അഭ്യർത്ഥനകൾ/സെക്കൻഡ്), GPU ഉപയോഗം, പീക്ക് VRAM/RAM എന്നിവയിൽ നിന്ന് ആരംഭിക്കുക. ചെലവ് ഒരു പരിമിതിയാണെങ്കിൽ അനുമാനത്തിനോ 1k ടോക്കണുകൾക്കോ ചെലവ് ട്രാക്ക് ചെയ്യുക. ഒരു ടോയ് പ്രോംപ്റ്റല്ല, നിങ്ങൾ നൽകുന്ന ഒരു യഥാർത്ഥ സാഹചര്യം പ്രൊഫൈൽ ചെയ്യുക. ഒരു ചെറിയ "പെർഫ് ജേണൽ" സൂക്ഷിക്കുന്നത് ഊഹിക്കലും തെറ്റുകൾ ആവർത്തിക്കലും ഒഴിവാക്കാൻ നിങ്ങളെ സഹായിക്കുന്നു.
പരിശീലന പ്രകടനത്തിന് വേഗത്തിലുള്ളതും കുറഞ്ഞ അപകടസാധ്യതയുള്ളതുമായ വിജയങ്ങൾ
മിക്സഡ് പ്രിസിഷൻ (FP16/BF16) ആണ് പലപ്പോഴും ഏറ്റവും വേഗതയേറിയ ആദ്യ ലിവർ, പക്ഷേ സംഖ്യാപരമായ പ്രത്യേകതകൾ ശ്രദ്ധിക്കുക. ബാച്ച് വലുപ്പം പരിമിതമാണെങ്കിൽ, മെമ്മറി നഷ്ടപ്പെടുത്താതെ തന്നെ ഗ്രേഡിയന്റ് അക്യുമുലേഷൻ ഒപ്റ്റിമൈസേഷൻ സ്ഥിരപ്പെടുത്തും. ഗ്രേഡിയന്റ് ചെക്ക്പോയിന്റിംഗ് താഴ്ന്ന മെമ്മറിക്ക് അധിക കമ്പ്യൂട്ട് ട്രേഡ് ചെയ്യുന്നു, ഇത് വലിയ സന്ദർഭങ്ങൾ പ്രാപ്തമാക്കുന്നു. ടോക്കണൈസേഷനും ഡാറ്റലോഡർ ട്യൂണിംഗും അവഗണിക്കരുത് - അവയ്ക്ക് നിശബ്ദമായി GPU-യെ പട്ടിണിയിലാക്കാൻ കഴിയും.
torch.compile, ONNX Runtime, അല്ലെങ്കിൽ TensorRT എപ്പോൾ ഉപയോഗിക്കണം
ഈ ഉപകരണങ്ങൾ പ്രവർത്തന ഓവർഹെഡ് ലക്ഷ്യമിടുന്നു: ഗ്രാഫ് ക്യാപ്ചർ, കേർണൽ ഫ്യൂഷൻ, റൺടൈം ഗ്രാഫ് ഒപ്റ്റിമൈസേഷനുകൾ. അവയ്ക്ക് ശുദ്ധമായ അനുമാന വേഗത നൽകാൻ കഴിയും, പക്ഷേ മോഡൽ ആകൃതിയും ഹാർഡ്വെയറും അനുസരിച്ച് ഫലങ്ങൾ വ്യത്യാസപ്പെടും. ചില സജ്ജീകരണങ്ങൾ മാന്ത്രികമായി തോന്നുന്നു; മറ്റുള്ളവ കഷ്ടിച്ച് നീങ്ങുന്നു. ആകൃതി മാറ്റങ്ങളോടും ഇടയ്ക്കിടെയുള്ള "ഗ്രെംലിൻ" ബഗുകളോടും സംവേദനക്ഷമത പ്രതീക്ഷിക്കുക - നിങ്ങളുടെ യഥാർത്ഥ ജോലിഭാരത്തിന് മുമ്പും ശേഷവും അളക്കുക.
ക്വാണ്ടൈസേഷൻ മൂല്യവത്താണോ, അമിതമായി പോകുന്നത് എങ്ങനെ ഒഴിവാക്കാം
പ്രത്യേകിച്ച് INT8-ൽ, ക്വാണ്ടൈസേഷൻ മെമ്മറി കുറയ്ക്കുകയും അനുമാനത്തെ വേഗത്തിലാക്കുകയും ചെയ്യും, എന്നാൽ ഗുണനിലവാരം എഡ്ജ് കേസുകളിൽ വഴുതിവീഴാം. ലോവർ-ബിറ്റ് ഓപ്ഷനുകൾ (INT4/k-bit പോലുള്ളവ) ഉയർന്ന റിസ്കുള്ള വലിയ ലാഭം നൽകുന്നു. ഒരു യഥാർത്ഥ ടെസ്റ്റ് സെറ്റിൽ വിലയിരുത്തുകയും ഔട്ട്പുട്ടുകൾ താരതമ്യം ചെയ്യുകയും ചെയ്യുക എന്നതാണ് ഏറ്റവും സുരക്ഷിതമായ ശീലം, ഗട്ട് ഫീൽ അല്ല. ആദ്യം സുരക്ഷിതമായ ഘട്ടങ്ങളിൽ നിന്ന് ആരംഭിക്കുക, തുടർന്ന് ആവശ്യമെങ്കിൽ മാത്രം കുറഞ്ഞ കൃത്യതയിലേക്ക് പോകുക.
മോഡൽ വലുപ്പം കുറയ്ക്കുന്നതിനുള്ള പ്രൂണിംഗും വാറ്റിയെടുക്കലും തമ്മിലുള്ള വ്യത്യാസം
പ്രൂണിംഗ് "ഡെഡ് വെയ്റ്റ്" പാരാമീറ്ററുകൾ നീക്കം ചെയ്യുന്നു, പ്രത്യേകിച്ച് ആക്രമണാത്മകമായി ചെയ്യുമ്പോൾ ഗുണനിലവാരം വീണ്ടെടുക്കാൻ പലപ്പോഴും പുനർപരിശീലനം ആവശ്യമാണ്. വാറ്റിയെടുക്കൽ ഒരു ചെറിയ വിദ്യാർത്ഥി മോഡലിനെ ഒരു വലിയ അധ്യാപകന്റെ പെരുമാറ്റം അനുകരിക്കാൻ പരിശീലിപ്പിക്കുന്നു, കൂടാതെ അത് തീവ്രമായ ക്വാണ്ടൈസേഷനേക്കാൾ ശക്തമായ ഒരു ദീർഘകാല ROI ആകാം. സമാനമായി പെരുമാറുകയും സ്ഥിരത നിലനിർത്തുകയും ചെയ്യുന്ന ഒരു ചെറിയ മോഡൽ നിങ്ങൾക്ക് വേണമെങ്കിൽ, വാറ്റിയെടുക്കൽ പലപ്പോഴും വൃത്തിയുള്ള പാതയാണ്.
സെർവിംഗ് മെച്ചപ്പെടുത്തലുകൾ വഴി അനുമാന ചെലവും ലേറ്റൻസിയും എങ്ങനെ കുറയ്ക്കാം
സെർവിംഗ് എന്നത് ഒപ്റ്റിമൈസേഷൻ പ്രകടമാകുന്ന ഇടമാണ്: ബാച്ചിംഗ് ത്രൂപുട്ട് വർദ്ധിപ്പിക്കും, പക്ഷേ അമിതമായി ചെയ്താൽ ലേറ്റൻസിയെ ബാധിക്കും, അതിനാൽ അത് ശ്രദ്ധാപൂർവ്വം ട്യൂൺ ചെയ്യുക. സന്ദർഭങ്ങൾ ആവർത്തിക്കുമ്പോൾ കാഷിംഗ് (പ്രോംപ്റ്റ് കാഷിംഗും കെവി-കാഷെ പുനരുപയോഗവും) വളരെ വലുതായിരിക്കും. മൊത്തം സമയം സമാനമാണെങ്കിൽ പോലും സ്ട്രീമിംഗ് ഔട്ട്പുട്ട് മനസ്സിലാക്കിയ വേഗത മെച്ചപ്പെടുത്തുന്നു. നിങ്ങളുടെ സ്റ്റാക്കിൽ ടോക്കൺ-ബൈ-ടോക്കൺ ഓവർഹെഡും നോക്കുക - ഓരോ ടോക്കണിലും ചെറിയ വർക്ക് വേഗത്തിൽ കൂട്ടിച്ചേർക്കപ്പെടുന്നു.
AI മോഡലുകൾ ഒപ്റ്റിമൈസ് ചെയ്യുമ്പോൾ ടെയിൽ ലേറ്റൻസി ഇത്ര പ്രധാനമാകുന്നത് എന്തുകൊണ്ട്?
p99 ഒരു ദുരന്തമാണെങ്കിലും ശരാശരികൾ മികച്ചതായി കാണപ്പെടാം, ഉപയോക്താക്കൾ ടെയിലിൽ ജീവിക്കാൻ പ്രവണത കാണിക്കുന്നു. ടെയിൽ ലേറ്റൻസി പലപ്പോഴും വിറയൽ മൂലമാണ് ഉണ്ടാകുന്നത്: മെമ്മറി ഫ്രാഗ്മെന്റേഷൻ, CPU പ്രീപ്രോസസ്സിംഗ് സ്പൈക്കുകൾ, ടോക്കണൈസേഷൻ സ്ലോഡൗണുകൾ, അല്ലെങ്കിൽ മോശം ബാച്ചിംഗ് പെരുമാറ്റം. അതുകൊണ്ടാണ് ഗൈഡ് പെർസെന്റൈലുകൾക്കും യഥാർത്ഥ വർക്ക്ലോഡുകൾക്കും പ്രാധാന്യം നൽകുന്നത്. നിങ്ങൾ p50 മാത്രം ഒപ്റ്റിമൈസ് ചെയ്യുകയാണെങ്കിൽ, "ക്രമരഹിതമായി മന്ദഗതിയിലാണെന്ന് തോന്നുന്ന" ഒരു അനുഭവം നിങ്ങൾക്ക് ഇപ്പോഴും നൽകാൻ കഴിയും
അവലംബം
-
ആമസോൺ വെബ് സർവീസസ് (AWS) - AWS ക്ലൗഡ് വാച്ച് പെർസെന്റൈലുകൾ (സ്റ്റാറ്റിസ്റ്റിക്സ് നിർവചനങ്ങൾ) - docs.aws.amazon.com
-
ഗൂഗിൾ - ദി ടെയിൽ അറ്റ് സ്കെയിൽ (ടെയിൽ ലേറ്റൻസി ബെസ്റ്റ് പ്രാക്ടീസ്) - sre.google
-
ഗൂഗിൾ - സർവീസ് ലെവൽ ഒബ്ജക്റ്റീവുകൾ (SRE ബുക്ക്) - ലേറ്റൻസി പെർസെന്റൈലുകൾ - sre.google
-
പൈടോർച്ച് - torch.compile - docs.pytorch.org
-
പൈടോർച്ച് - ഫുള്ളിഷാർഡഡ്ഡാറ്റ പാരലൽ (എഫ്എസ്ഡിപി) - docs.pytorch.org
-
PyTorch - PyTorch പ്രൊഫൈലർ - docs.pytorch.org
-
പൈടോർച്ച് - CUDA സെമാന്റിക്സ്: മെമ്മറി മാനേജ്മെന്റ് (CUDA മെമ്മറി അലോക്കേറ്റർ കുറിപ്പുകൾ) - docs.pytorch.org
-
പൈടോർച്ച് - ഓട്ടോമാറ്റിക് മിക്സഡ് പ്രിസിഷൻ (torch.amp / AMP) - docs.pytorch.org
-
പൈടോർച്ച് - torch.utils.checkpoint - docs.pytorch.org
-
പൈടോർച്ച് - പെർഫോമൻസ് ട്യൂണിംഗ് ഗൈഡ് - docs.pytorch.org
-
പൈടോർച്ച് - പ്രൂണിംഗ് ട്യൂട്ടോറിയൽ - docs.pytorch.org
-
PyTorch - PyTorch-ലെ CUDA മെമ്മറി ഉപയോഗം മനസ്സിലാക്കൽ - docs.pytorch.org
-
പൈടോർച്ച് - torch.compile ട്യൂട്ടോറിയൽ / അവലോകനം - docs.pytorch.org
-
ONNX റൺടൈം - ONNX റൺടൈം ഡോക്യുമെന്റേഷൻ - onnxruntime.ai
-
NVIDIA - TensorRT ഡോക്യുമെന്റേഷൻ - docs.nvidia.com
-
NVIDIA - TensorRT ക്വാണ്ടൈസ്ഡ് തരങ്ങൾ - docs.nvidia.com
-
എൻവിഡിയ - എൻസൈറ്റ് സിസ്റ്റംസ് - developer.nvidia.com
-
എൻവിഡിയ - ട്രൈറ്റൺ ഇൻഫെരൻസ് സെർവർ - ഡൈനാമിക് ബാച്ചിംഗ് - docs.nvidia.com
-
DeepSpeed - ZeRO സ്റ്റേജ് 3 ഡോക്യുമെന്റേഷൻ - deepspeed.readthedocs.io
-
ബിറ്റ്സാൻഡ്ബൈറ്റുകൾ (ബിറ്റ്സാൻഡ്ബൈറ്റുകൾ-ഫൗണ്ടേഷൻ) - ബിറ്റ്സാൻഡ്ബൈറ്റുകൾ - github.com
-
ആലിംഗന മുഖം - ആക്സിലറേറ്റ് ചെയ്യുക: ഗ്രേഡിയന്റ് അക്യുമുലേഷൻ ഗൈഡ് - huggingface.co
-
ഹഗ്ഗിംഗ് ഫെയ്സ് - ടോക്കണൈസേഴ്സ് ഡോക്യുമെന്റേഷൻ - huggingface.co
-
ഹഗ്ഗിംഗ് ഫെയ്സ് - ട്രാൻസ്ഫോർമറുകൾ: PEFT ഗൈഡ് - huggingface.co
-
ഹഗ്ഗിംഗ് ഫെയ്സ് - ട്രാൻസ്ഫോർമറുകൾ: കെവി കാഷെ വിശദീകരണം - huggingface.co
-
ഹഗ്ഗിംഗ് ഫെയ്സ് - ട്രാൻസ്ഫോർമറുകൾ: “ഫാസ്റ്റ്” ടോക്കണൈസറുകൾ (ടോക്കണൈസർ ക്ലാസുകൾ) - huggingface.co
-
arXiv - ഒരു ന്യൂറൽ നെറ്റ്വർക്കിലെ അറിവ് വാറ്റിയെടുക്കൽ (ഹിന്റൺ തുടങ്ങിയവർ, 2015) - arxiv.org
-
arXiv - LoRA: വലിയ ഭാഷാ മോഡലുകളുടെ താഴ്ന്ന റാങ്കിലുള്ള പൊരുത്തപ്പെടുത്തൽ - arxiv.org
-
arXiv - ഫ്ലാഷ്അറ്റൻഷൻ: IO-അവബോധത്തോടെ വേഗതയേറിയതും മെമ്മറി-കാര്യക്ഷമവുമായ കൃത്യമായ ശ്രദ്ധ - arxiv.org