Local Gradient Accumulation ತರಬೇತಿಯ ವೇಗವನ್ನು 1.7x ಹೆಚ್ಚಿಸುತ್ತದೆ
ಪೈಪ್ಲೈನ್ಗಳಲ್ಲಿನ ನಿಷ್ಕ್ರಿಯ ಸಮಯದ (idle time) ಕಾರಣದಿಂದಾಗಿ ತರಬೇತಿಯ ವೇಗವು ಹೆಚ್ಚಾಗಿ ಕುಂಠಿತಗೊಳ್ಳುತ್ತದೆ. ಈ ನಿಷ್ಕ್ರಿಯ ಸಮಯವನ್ನು 'bubble' ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ.
PACI ಎಂಬ ಹೊಸ ವಿಧಾನವು ಈ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುತ್ತದೆ. ಇದು ಈ ಬಬಲ್ಗಳನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ ಮತ್ತು ತರಬೇತಿಯ ವೇಗವನ್ನು 1.69x ಹೆಚ್ಚಿಸುತ್ತದೆ.
ಹೆಚ್ಚಿನ ತಂಡಗಳು 1F1B-flush ಎಂಬ ಕಾರ್ಯತಂತ್ರವನ್ನು ಬಳಸುತ್ತವೆ. ಈ ವಿಧಾನವು weights ಅನ್ನು ಸ್ಥಿರವಾಗಿರಿಸುತ್ತದೆ ಆದರೆ ಸಿಸ್ಟಮ್ ಡೇಟಾಕ್ಕಾಗಿ ಕಾಯುವ ಖಾಲಿ ಜಾಗಗಳನ್ನು (empty slots) ಸೃಷ್ಟಿಸುತ್ತದೆ. ಈ ಕಾಯುವ ಸಮಯವು ಎಲ್ಲವನ್ನೂ ನಿಧಾನಗೊಳಿಸುತ್ತದೆ.
ಇತರ asynchronous ವಿಧಾನಗಳು ಇದನ್ನು ಸರಿಪಡಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತವೆ. ಅವು weight stashing ಅಥವಾ ಡ್ಯೂಪ್ಲಿಕೇಟ್ ಪ್ರತಿಗಳಂತಹ ಸಂಕೀರ್ಣ ತಂತ್ರಗಳನ್ನು ಬಳಸುತ್ತವೆ. ಈ ತಂತ್ರಗಳು ಹೆಚ್ಚಿನ ಮೆಮೊರಿಯನ್ನು ಬಳಸುತ್ತವೆ ಮತ್ತು ತರಬೇತಿಯನ್ನು ಅಸ್ಥಿರಗೊಳಿಸುತ್ತವೆ.
PACI ವಿಭಿನ್ನ ಹಾದಿಯನ್ನು ಅನುಸರಿಸುತ್ತದೆ. ಇದು local gradient accumulation ಅನ್ನು ಬಳಸುತ್ತದೆ. ಇದು global synchronization ಅಗತ್ಯವಿಲ್ಲದೆಯೇ ಪೈಪ್ಲೈನ್ ಅನ್ನು ಕಾರ್ಯನಿರತವಾಗಿರಿಸುತ್ತದೆ.
PACI ಏಕೆ ಮುಖ್ಯ ಎಂಬುದು ಇಲ್ಲಿದೆ:
- ಇದು ಪ್ರಮಾಣಿತ ವಿಧಾನಗಳ ಸ್ಥಿರತೆಯನ್ನು ಹೊಂದುತ್ತದೆ.
- ಇದು ಅಷ್ಟೇ ಪ್ರಮಾಣದ ಮೆಮೊರಿಯನ್ನು ಬಳಸುತ್ತದೆ.
- ಇದು ವೇಗವಾದ ಆದರೆ ಹೆಚ್ಚು ಭಾರವಾದ ಕಾನ್ಫಿಗರೇಶನ್ಗಳ ವೇಗವನ್ನು ತಲುಪುತ್ತದೆ.
- ಇದು time-to-accuracy ಅನ್ನು 1.69x ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
GPT-2 Medium ನೊಂದಿಗೆ ನಡೆಸಿದ ಪರೀಕ್ಷೆಗಳಲ್ಲಿ, PACI ಗುರಿ ನಿಖರತೆಯನ್ನು ಬಹಳ ವೇಗವಾಗಿ ತಲುಪಿತು. ಸಣ್ಣ ಪ್ರಮಾಣದ weight drift ಬದಲಿಗೆ ದೊಡ್ಡ ಮಟ್ಟದ ದಕ್ಷತೆಯನ್ನು ಪಡೆಯಬಹುದು ಎಂಬುದನ್ನು ಇದು ತೋರಿಸುತ್ತದೆ.
ಎಂಜಿನಿಯರಿಂಗ್ ತಂಡಗಳಿಗೆ, ಇದರರ್ಥ ಹಾರ್ಡ್ವೇರ್ ವೆಚ್ಚದಲ್ಲಿ 40% ಕಡಿತ. ಹೆಚ್ಚಿನ GPUsಗಳನ್ನು ಖರೀದಿಸದೆ ಅಥವಾ ಹೆಚ್ಚಿನ ಮೆಮೊರಿಯನ್ನು ಸೇರಿಸದೆ ನೀವು ವೇಗವಾದ ಫಲಿತಾಂಶಗಳನ್ನು ಪಡೆಯಬಹುದು.
ಸಂಶೋಧಕರು ಇದನ್ನು GPT-ಶೈಲಿಯ ಮಾದರಿಗಳೊಂದಿಗೆ 8-ಹಂತದ ಪೈಪ್ಲೈನ್លើ ಪರೀಕ್ಷಿಸಿದ್ದಾರೆ. ನೀವು ನಿಮ್ಮ ಪೈಪ್ಲೈನ್ ಆಳ ಅಥವಾ batch size ಅನ್ನು ಬದಲಾಯಿಸಿದರೆ, accumulation window ಅನ್ನು ಟ್ಯೂನ್ ಮಾಡಬೇಕಾಗಬಹುದು.
ನೀವು ಇದನ್ನು ನೀವೇ ಪರೀಕ್ಷಿಸಬಹುದು. ಲೇಖಕರು ತಮ್ಮ ರೆಪೊಸಿಟರಿಯಲ್ಲಿ a local-accumulation wrapper ಅನ್ನು ಒದಗಿಸಿದ್ದಾರೆ. ವೇಗವರ್ಧನೆಯನ್ನು ನೋಡಲು ನಿಮ್ಮ ಪ್ರಸ್ತುತ flush synchronizer ಅನ್ನು ಅದರೊಂದಿಗೆ ಬದಲಾಯಿಸಿ.
Source: https://dev.to/olaughter/local-gradient-accumulation-speeds-training-17x-2mdk
Optional learning community: https://t.me/GyaanSetuAi