Apache MXNet ಮತ್ತು Horovod ಜೊತೆಗೆ ವಿತರಣಾ ಕಲಿಕೆ

ಕೋರ್ಸ್ ಪ್ರಾರಂಭದ ಮುನ್ನಾದಿನದಂದು ಲೇಖನದ ಅನುವಾದವನ್ನು ಸಿದ್ಧಪಡಿಸಲಾಗಿದೆ "ಇಂಡಸ್ಟ್ರಿಯಲ್ ಎಂಎಲ್ ಆನ್ ಬಿಗ್ ಡೇಟಾ"

ಬಹು ಉನ್ನತ-ಕಾರ್ಯಕ್ಷಮತೆಯ ಕಂಪ್ಯೂಟಿಂಗ್ ನಿದರ್ಶನಗಳ ಮೇಲೆ ವಿತರಿಸಲಾದ ತರಬೇತಿಯು ಆಧುನಿಕ ಆಳವಾದ ನರಮಂಡಲಗಳ ತರಬೇತಿ ಸಮಯವನ್ನು ವಾರಗಳಿಂದ ಗಂಟೆಗಳು ಅಥವಾ ನಿಮಿಷಗಳವರೆಗೆ ದೊಡ್ಡ ಪ್ರಮಾಣದ ಡೇಟಾದಲ್ಲಿ ಕಡಿಮೆ ಮಾಡುತ್ತದೆ, ಈ ತರಬೇತಿ ತಂತ್ರವು ಆಳವಾದ ಕಲಿಕೆಯ ಪ್ರಾಯೋಗಿಕ ಅನ್ವಯಗಳಲ್ಲಿ ಪ್ರಚಲಿತವಾಗಿದೆ. ಅನೇಕ ನಿದರ್ಶನಗಳಲ್ಲಿ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳುವುದು ಮತ್ತು ಸಿಂಕ್ರೊನೈಸ್ ಮಾಡುವುದು ಹೇಗೆ ಎಂಬುದನ್ನು ಬಳಕೆದಾರರು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕು, ಇದು ಸ್ಕೇಲಿಂಗ್ ದಕ್ಷತೆಯ ಮೇಲೆ ಪ್ರಮುಖ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ. ಹೆಚ್ಚುವರಿಯಾಗಿ, ಒಂದೇ ನಿದರ್ಶನದಲ್ಲಿ ಅನೇಕ ನಿದರ್ಶನಗಳಿಗೆ ಚಲಿಸುವ ತರಬೇತಿ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಹೇಗೆ ನಿಯೋಜಿಸಬೇಕೆಂದು ಬಳಕೆದಾರರು ತಿಳಿದಿರಬೇಕು.

ಈ ಲೇಖನದಲ್ಲಿ ನಾವು ತೆರೆದ ಆಳವಾದ ಕಲಿಕೆಯ ಲೈಬ್ರರಿ Apache MXNet ಮತ್ತು Horovod ವಿತರಿಸಿದ ಕಲಿಕೆಯ ಚೌಕಟ್ಟನ್ನು ಬಳಸಿಕೊಂಡು ಕಲಿಕೆಯನ್ನು ವಿತರಿಸಲು ತ್ವರಿತ ಮತ್ತು ಸುಲಭವಾದ ಮಾರ್ಗವನ್ನು ಕುರಿತು ಮಾತನಾಡುತ್ತೇವೆ. ನಾವು Horovod ಫ್ರೇಮ್‌ವರ್ಕ್‌ನ ಕಾರ್ಯಕ್ಷಮತೆಯ ಪ್ರಯೋಜನಗಳನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಪ್ರದರ್ಶಿಸುತ್ತೇವೆ ಮತ್ತು MXNet ತರಬೇತಿ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಹೇಗೆ ಬರೆಯಬೇಕು ಎಂಬುದನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತೇವೆ ಇದರಿಂದ ಅದು Horovod ನೊಂದಿಗೆ ವಿತರಿಸಿದ ರೀತಿಯಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.

Apache MXNet ಎಂದರೇನು

ಅಪಾಚೆ MXNet ಆಳವಾದ ನರ ಜಾಲಗಳನ್ನು ರಚಿಸಲು, ತರಬೇತಿ ನೀಡಲು ಮತ್ತು ನಿಯೋಜಿಸಲು ಬಳಸಲಾಗುವ ತೆರೆದ ಮೂಲ ಆಳವಾದ ಕಲಿಕೆಯ ಚೌಕಟ್ಟಾಗಿದೆ. MXNet ನರ ನೆಟ್‌ವರ್ಕ್‌ಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದರೊಂದಿಗೆ ಸಂಬಂಧಿಸಿದ ಸಂಕೀರ್ಣತೆಗಳನ್ನು ಅಮೂರ್ತಗೊಳಿಸುತ್ತದೆ, ಇದು ಹೆಚ್ಚು ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಸ್ಕೇಲೆಬಲ್ ಆಗಿದೆ ಮತ್ತು ಜನಪ್ರಿಯ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಗಳಿಗೆ API ಗಳನ್ನು ನೀಡುತ್ತದೆ ಪೈಥಾನ್, ಸಿ ++, ಕ್ಲೋಜುರೆ, ಜಾವಾ, ಜೂಲಿಯಾ, R, ಸ್ಕಲಾ ಮತ್ತು ಇತರರು.

ಪ್ಯಾರಾಮೀಟರ್ ಸರ್ವರ್‌ನೊಂದಿಗೆ MXNet ನಲ್ಲಿ ವಿತರಿಸಲಾದ ತರಬೇತಿ

MXNet ನಲ್ಲಿ ಸ್ಟ್ಯಾಂಡರ್ಡ್ ವಿತರಣೆ ಕಲಿಕೆ ಮಾಡ್ಯೂಲ್ ಪ್ಯಾರಾಮೀಟರ್ ಸರ್ವರ್ ವಿಧಾನವನ್ನು ಬಳಸುತ್ತದೆ. ಇದು ಪ್ರತಿ ಕೆಲಸಗಾರರಿಂದ ಗ್ರೇಡಿಯಂಟ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು, ಒಟ್ಟುಗೂಡಿಸುವಿಕೆಯನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ಮುಂದಿನ ಆಪ್ಟಿಮೈಸೇಶನ್ ಪುನರಾವರ್ತನೆಗಾಗಿ ಕಾರ್ಮಿಕರಿಗೆ ನವೀಕರಿಸಿದ ಗ್ರೇಡಿಯಂಟ್‌ಗಳನ್ನು ಕಳುಹಿಸಲು ಪ್ಯಾರಾಮೀಟರ್ ಸರ್ವರ್‌ಗಳ ಗುಂಪನ್ನು ಬಳಸುತ್ತದೆ. ಕೆಲಸಗಾರರಿಗೆ ಸರ್ವರ್‌ಗಳ ಸರಿಯಾದ ಅನುಪಾತವನ್ನು ನಿರ್ಧರಿಸುವುದು ಪರಿಣಾಮಕಾರಿ ಸ್ಕೇಲಿಂಗ್‌ಗೆ ಪ್ರಮುಖವಾಗಿದೆ. ಕೇವಲ ಒಂದು ಪ್ಯಾರಾಮೀಟರ್ ಸರ್ವರ್ ಇದ್ದರೆ, ಅದು ಲೆಕ್ಕಾಚಾರದಲ್ಲಿ ಅಡಚಣೆಯಾಗಬಹುದು. ವ್ಯತಿರಿಕ್ತವಾಗಿ, ಹಲವಾರು ಸರ್ವರ್‌ಗಳನ್ನು ಬಳಸಿದರೆ, ಹಲವು-ಹಲವು ಸಂವಹನವು ಎಲ್ಲಾ ನೆಟ್‌ವರ್ಕ್ ಸಂಪರ್ಕಗಳನ್ನು ಮುಚ್ಚಬಹುದು.

ಹೊರೊವೊಡ್ ಎಂದರೇನು

ಹೋರೊವೊಡ್ Uber ನಲ್ಲಿ ಅಭಿವೃದ್ಧಿಪಡಿಸಲಾದ ಮುಕ್ತ ವಿತರಣೆ ಆಳವಾದ ಕಲಿಕೆಯ ಚೌಕಟ್ಟಾಗಿದೆ. ಇದು ವೊರೆಕ್ಸ್‌ನಾದ್ಯಂತ ಮಾದರಿ ನಿಯತಾಂಕಗಳನ್ನು ವಿತರಿಸಲು ಮತ್ತು ಒಟ್ಟುಗೂಡಿಸಲು NVIDIA ಕಲೆಕ್ಟಿವ್ ಕಮ್ಯುನಿಕೇಷನ್ಸ್ ಲೈಬ್ರರಿ (NCCL) ಮತ್ತು ಮೆಸೇಜ್ ಪಾಸಿಂಗ್ ಇಂಟರ್ಫೇಸ್ (MPI) ನಂತಹ ದಕ್ಷ ಕ್ರಾಸ್-ಜಿಪಿಯು ಮತ್ತು ಕ್ರಾಸ್-ನೋಡ್ ತಂತ್ರಜ್ಞಾನಗಳನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ. ಡೀಪ್ ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್ ಮಾದರಿಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಇದು ನೆಟ್‌ವರ್ಕ್ ಬ್ಯಾಂಡ್‌ವಿಡ್ತ್ ಮತ್ತು ಮಾಪಕಗಳ ಬಳಕೆಯನ್ನು ಉತ್ತಮಗೊಳಿಸುತ್ತದೆ. ಇದು ಪ್ರಸ್ತುತ ಹಲವಾರು ಜನಪ್ರಿಯ ಯಂತ್ರ ಕಲಿಕೆಯ ಚೌಕಟ್ಟುಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ, ಅವುಗಳೆಂದರೆ MX ನೆಟ್, ಟೆನ್ಸಾರ್‌ಫ್ಲೋ, ಕೆರಾಸ್ ಮತ್ತು ಪೈಟಾರ್ಚ್.

MXNet ಮತ್ತು Horovod ಏಕೀಕರಣ

MXNet Horovod ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಡಿಸ್ಟ್ರಿಬ್ಯೂಟೆಡ್ ಲರ್ನಿಂಗ್ API ಗಳ ಮೂಲಕ Horovod ನೊಂದಿಗೆ ಸಂಯೋಜಿಸುತ್ತದೆ. Horovod ಸಂವಹನ API ಗಳು horovod.broadcast(), horovod.allgather() и horovod.allreduce() ಅದರ ಕಾರ್ಯ ಗ್ರಾಫ್‌ನ ಭಾಗವಾಗಿ MXNet ಎಂಜಿನ್‌ನ ಅಸಮಕಾಲಿಕ ಕಾಲ್‌ಬ್ಯಾಕ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಅಳವಡಿಸಲಾಗಿದೆ. ಈ ರೀತಿಯಾಗಿ, ಸಿಂಕ್ರೊನೈಸೇಶನ್‌ನಿಂದಾಗಿ ಕಾರ್ಯಕ್ಷಮತೆಯ ನಷ್ಟವನ್ನು ತಪ್ಪಿಸಲು ಸಂವಹನ ಮತ್ತು ಗಣನೆಯ ನಡುವಿನ ಡೇಟಾ ಅವಲಂಬನೆಗಳನ್ನು MXNet ಎಂಜಿನ್‌ನಿಂದ ಸುಲಭವಾಗಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ. ಹೋರೊವೊಡ್‌ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಡಿಸ್ಟ್ರಿಬ್ಯೂಟೆಡ್ ಆಪ್ಟಿಮೈಜರ್ ಆಬ್ಜೆಕ್ಟ್ horovod.DistributedOptimizer ವಿಸ್ತರಿಸುತ್ತದೆ ಆಪ್ಟಿಮೈಜರ್ MXNet ನಲ್ಲಿ ಇದು ವಿತರಿಸಿದ ಪ್ಯಾರಾಮೀಟರ್ ನವೀಕರಣಗಳಿಗಾಗಿ ಅನುಗುಣವಾದ Horovod API ಗಳನ್ನು ಕರೆಯುತ್ತದೆ. ಈ ಎಲ್ಲಾ ಅನುಷ್ಠಾನದ ವಿವರಗಳು ಅಂತಿಮ ಬಳಕೆದಾರರಿಗೆ ಪಾರದರ್ಶಕವಾಗಿರುತ್ತದೆ.

ವೇಗದ ಆರಂಭ

ನಿಮ್ಮ ಮ್ಯಾಕ್‌ಬುಕ್‌ನಲ್ಲಿ MXNet ಮತ್ತು Horovod ಅನ್ನು ಬಳಸಿಕೊಂಡು MNIST ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ನೀವು ಸಣ್ಣ ಕನ್ವಲ್ಯೂಷನಲ್ ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್ ಅನ್ನು ತ್ವರಿತವಾಗಿ ತರಬೇತಿಯನ್ನು ಪ್ರಾರಂಭಿಸಬಹುದು.
ಮೊದಲಿಗೆ, PyPI ನಿಂದ mxnet ಮತ್ತು horovod ಅನ್ನು ಸ್ಥಾಪಿಸಿ:

pip install mxnet
pip install horovod

ಗಮನಿಸಿ: ಸಮಯದಲ್ಲಿ ನೀವು ದೋಷವನ್ನು ಎದುರಿಸಿದರೆ ಪಿಪ್ ಇನ್ಸ್ಟಾಲ್ horovodಬಹುಶಃ ನೀವು ವೇರಿಯಬಲ್ ಅನ್ನು ಸೇರಿಸಬೇಕಾಗಬಹುದು MACOSX_DEPLOYMENT_TARGET=10.vvಅಲ್ಲಿ vv - ಇದು ನಿಮ್ಮ MacOS ಆವೃತ್ತಿಯ ಆವೃತ್ತಿಯಾಗಿದೆ, ಉದಾಹರಣೆಗೆ, MacOSX Sierra ಗಾಗಿ ನೀವು ಬರೆಯಬೇಕಾಗಿದೆ MACOSX_DEPLOYMENT_TARGET=10.12 ಪಿಪ್ ಇನ್‌ಸ್ಟಾಲ್ ಹೋರೊವೊಡ್

ನಂತರ OpenMPI ಅನ್ನು ಸ್ಥಾಪಿಸಿ ಇಲ್ಲಿಂದ.

ಕೊನೆಯಲ್ಲಿ, ಪರೀಕ್ಷಾ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ mxnet_mnist.py ಇಲ್ಲಿಂದ ಮತ್ತು ಕೆಲಸ ಮಾಡುವ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಮ್ಯಾಕ್‌ಬುಕ್ ಟರ್ಮಿನಲ್‌ನಲ್ಲಿ ಈ ಕೆಳಗಿನ ಆಜ್ಞೆಗಳನ್ನು ಚಲಾಯಿಸಿ:

mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py

ಇದು ನಿಮ್ಮ ಪ್ರೊಸೆಸರ್‌ನ ಎರಡು ಕೋರ್‌ಗಳಲ್ಲಿ ತರಬೇತಿಯನ್ನು ನಡೆಸುತ್ತದೆ. ಔಟ್ಪುಟ್ ಈ ಕೆಳಗಿನಂತಿರುತ್ತದೆ:

INFO:root:Epoch[0] Batch [0-50] Speed: 2248.71 samples/sec      accuracy=0.583640
INFO:root:Epoch[0] Batch [50-100] Speed: 2273.89 samples/sec      accuracy=0.882812
INFO:root:Epoch[0] Batch [50-100] Speed: 2273.39 samples/sec      accuracy=0.870000

ಪ್ರದರ್ಶನ ಡೆಮೊ

ಎಂಟು ನಿದರ್ಶನಗಳೊಂದಿಗೆ 50 GPU ಗಳಲ್ಲಿ ImageNet ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ResNet1-v64 ಮಾದರಿಯನ್ನು ತರಬೇತಿ ಮಾಡುವಾಗ p3.16x ದೊಡ್ಡದು EC2, ಪ್ರತಿಯೊಂದೂ AWS ಕ್ಲೌಡ್‌ನಲ್ಲಿ 8 NVIDIA Tesla V100 GPUಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ, ನಾವು 45000 ಚಿತ್ರಗಳು/ಸೆಕೆಂಡಿನ ತರಬೇತಿ ಥ್ರೋಪುಟ್ ಅನ್ನು ಸಾಧಿಸಿದ್ದೇವೆ (ಅಂದರೆ, ಪ್ರತಿ ಸೆಕೆಂಡಿಗೆ ತರಬೇತಿ ಪಡೆದ ಮಾದರಿಗಳ ಸಂಖ್ಯೆ). 44% ನ ಅತ್ಯುತ್ತಮ ನಿಖರತೆಯೊಂದಿಗೆ 90 ಯುಗಗಳ ನಂತರ 75.7 ನಿಮಿಷಗಳಲ್ಲಿ ತರಬೇತಿ ಪೂರ್ಣಗೊಂಡಿದೆ.

8, 16, 32 ಮತ್ತು 64 ಜಿಪಿಯುಗಳಲ್ಲಿ ಪ್ಯಾರಾಮೀಟರ್ ಸರ್ವರ್‌ಗಳನ್ನು ಬಳಸುವ MXNet ನ ವಿತರಣಾ ತರಬೇತಿ ವಿಧಾನಕ್ಕೆ ನಾವು ಇದನ್ನು ಹೋಲಿಸಿದ್ದೇವೆ ಮತ್ತು ಅನುಕ್ರಮವಾಗಿ 1 ರಿಂದ 1 ಮತ್ತು 2 ರಿಂದ 1 ರ ವರ್ಕರ್ ಅನುಪಾತದೊಂದಿಗೆ ಒಂದೇ ಪ್ಯಾರಾಮೀಟರ್ ಸರ್ವರ್ ಮತ್ತು ಸರ್ವರ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ. ಕೆಳಗಿನ ಚಿತ್ರ 1 ರಲ್ಲಿ ನೀವು ಫಲಿತಾಂಶವನ್ನು ನೋಡಬಹುದು. ಎಡಭಾಗದಲ್ಲಿರುವ y-ಅಕ್ಷದಲ್ಲಿ, ಬಾರ್‌ಗಳು ಪ್ರತಿ ಸೆಕೆಂಡಿಗೆ ತರಬೇತಿ ನೀಡಬೇಕಾದ ಚಿತ್ರಗಳ ಸಂಖ್ಯೆಯನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತವೆ, ರೇಖೆಗಳು ಬಲಭಾಗದಲ್ಲಿರುವ y-ಅಕ್ಷದ ಮೇಲೆ ಸ್ಕೇಲಿಂಗ್ ದಕ್ಷತೆಯನ್ನು (ಅಂದರೆ, ನೈಜ ಮತ್ತು ಆದರ್ಶ ಥ್ರೋಪುಟ್‌ನ ಅನುಪಾತ) ಪ್ರತಿಬಿಂಬಿಸುತ್ತವೆ. ನೀವು ನೋಡುವಂತೆ, ಸರ್ವರ್‌ಗಳ ಸಂಖ್ಯೆಯ ಆಯ್ಕೆಯು ಸ್ಕೇಲಿಂಗ್ ದಕ್ಷತೆಯ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ. ಕೇವಲ ಒಂದು ಪ್ಯಾರಾಮೀಟರ್ ಸರ್ವರ್ ಇದ್ದರೆ, 38 GPU ಗಳಲ್ಲಿ ಸ್ಕೇಲಿಂಗ್ ದಕ್ಷತೆಯು 64% ಕ್ಕೆ ಇಳಿಯುತ್ತದೆ. ಹೋರೊವೊಡ್‌ನಂತೆಯೇ ಅದೇ ಸ್ಕೇಲಿಂಗ್ ದಕ್ಷತೆಯನ್ನು ಸಾಧಿಸಲು, ನೀವು ಕಾರ್ಮಿಕರ ಸಂಖ್ಯೆಗೆ ಹೋಲಿಸಿದರೆ ಸರ್ವರ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ದ್ವಿಗುಣಗೊಳಿಸಬೇಕಾಗುತ್ತದೆ.

Apache MXNet ಮತ್ತು Horovod ಜೊತೆಗೆ ವಿತರಣಾ ಕಲಿಕೆ
ಚಿತ್ರ 1. ಹೋರೊವೊಡ್ ಮತ್ತು ಪ್ಯಾರಾಮೀಟರ್ ಸರ್ವರ್‌ನೊಂದಿಗೆ MXNet ಬಳಸಿ ವಿತರಿಸಿದ ಕಲಿಕೆಯ ಹೋಲಿಕೆ

ಕೆಳಗಿನ ಕೋಷ್ಟಕ 1 ರಲ್ಲಿ, 64 GPU ಗಳಲ್ಲಿ ಪ್ರಯೋಗಗಳನ್ನು ನಡೆಸುವಾಗ ನಾವು ಪ್ರತಿ ನಿದರ್ಶನಕ್ಕೆ ಅಂತಿಮ ವೆಚ್ಚವನ್ನು ಹೋಲಿಸುತ್ತೇವೆ. Horovod ಜೊತೆಗೆ MXNet ಅನ್ನು ಬಳಸುವುದು ಕಡಿಮೆ ವೆಚ್ಚದಲ್ಲಿ ಅತ್ಯುತ್ತಮ ಥ್ರೋಪುಟ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ.

Apache MXNet ಮತ್ತು Horovod ಜೊತೆಗೆ ವಿತರಣಾ ಕಲಿಕೆ
ಕೋಷ್ಟಕ 1. ಹೋರೊವೊಡ್ ಮತ್ತು ಪ್ಯಾರಾಮೀಟರ್ ಸರ್ವರ್ ನಡುವಿನ ವೆಚ್ಚದ ಹೋಲಿಕೆಯು 2 ರಿಂದ 1 ರ ವರ್ಕರ್ ಅನುಪಾತದ ಸರ್ವರ್‌ನೊಂದಿಗೆ.

ಸಂತಾನೋತ್ಪತ್ತಿಗೆ ಕ್ರಮಗಳು

ಮುಂದಿನ ಹಂತಗಳಲ್ಲಿ, MXNet ಮತ್ತು Horovod ಬಳಸಿಕೊಂಡು ವಿತರಿಸಿದ ತರಬೇತಿಯ ಫಲಿತಾಂಶವನ್ನು ಹೇಗೆ ಪುನರುತ್ಪಾದಿಸುವುದು ಎಂಬುದನ್ನು ನಾವು ನಿಮಗೆ ತೋರಿಸುತ್ತೇವೆ. MXNet ರೀಡ್‌ನೊಂದಿಗೆ ವಿತರಿಸಿದ ಕಲಿಕೆಯ ಕುರಿತು ಇನ್ನಷ್ಟು ತಿಳಿದುಕೊಳ್ಳಲು ಈ ಪೋಸ್ಟ್.

1 ಹೆಜ್ಜೆ

ವಿತರಿಸಿದ ಕಲಿಕೆಯನ್ನು ಬಳಸಲು MXNet ಆವೃತ್ತಿ 1.4.0 ಅಥವಾ ಹೆಚ್ಚಿನ ಮತ್ತು Horovod ಆವೃತ್ತಿ 0.16.0 ಅಥವಾ ಹೆಚ್ಚಿನದರೊಂದಿಗೆ ಏಕರೂಪದ ನಿದರ್ಶನಗಳ ಸಮೂಹವನ್ನು ರಚಿಸಿ. GPU ತರಬೇತಿಗಾಗಿ ನೀವು ಗ್ರಂಥಾಲಯಗಳನ್ನು ಸಹ ಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ. ನಮ್ಮ ನಿದರ್ಶನಗಳಿಗಾಗಿ, ನಾವು GPU ಡ್ರೈವರ್ 16.04, CUDA 396.44, cuDNN 9.2 ಲೈಬ್ರರಿ, NCCL 7.2.1 ಸಂವಹನಕಾರ ಮತ್ತು OpenMPI 2.2.13 ಜೊತೆಗೆ ಉಬುಂಟು 3.1.1 Linux ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದ್ದೇವೆ. ನೀವು ಸಹ ಬಳಸಬಹುದು ಅಮೆಜಾನ್ ಡೀಪ್ ಲರ್ನಿಂಗ್ AMI, ಈ ಗ್ರಂಥಾಲಯಗಳನ್ನು ಈಗಾಗಲೇ ಮೊದಲೇ ಸ್ಥಾಪಿಸಲಾಗಿದೆ.

2 ಹೆಜ್ಜೆ

ನಿಮ್ಮ MXNet ತರಬೇತಿ ಸ್ಕ್ರಿಪ್ಟ್‌ಗೆ Horovod API ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಸೇರಿಸಿ. MXNet Gluon API ಆಧಾರಿತ ಕೆಳಗಿನ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಸರಳ ಟೆಂಪ್ಲೇಟ್ ಆಗಿ ಬಳಸಬಹುದು. ನೀವು ಈಗಾಗಲೇ ಅನುಗುಣವಾದ ತರಬೇತಿ ಸ್ಕ್ರಿಪ್ಟ್ ಹೊಂದಿದ್ದರೆ ದಪ್ಪದಲ್ಲಿ ಸಾಲುಗಳು ಅಗತ್ಯವಿದೆ. Horovod ನೊಂದಿಗೆ ಕಲಿಯಲು ನೀವು ಮಾಡಬೇಕಾದ ಕೆಲವು ನಿರ್ಣಾಯಕ ಬದಲಾವಣೆಗಳು ಇಲ್ಲಿವೆ:

  • ಸರಿಯಾದ ಗ್ರಾಫಿಕ್ಸ್ ಕೋರ್‌ನಲ್ಲಿ ತರಬೇತಿಯನ್ನು ನಡೆಸಲಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸ್ಥಳೀಯ ಹೊರೊವೊಡ್ ಶ್ರೇಣಿಯ (ಲೈನ್ 8) ಪ್ರಕಾರ ಸಂದರ್ಭವನ್ನು ಹೊಂದಿಸಿ.
  • ಎಲ್ಲಾ ಕೆಲಸಗಾರರು ಒಂದೇ ಆರಂಭಿಕ ನಿಯತಾಂಕಗಳೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಒಬ್ಬ ಕೆಲಸಗಾರರಿಂದ ಎಲ್ಲರಿಗೂ ಆರಂಭಿಕ ನಿಯತಾಂಕಗಳನ್ನು ರವಾನಿಸಿ (ಲೈನ್ 18).
  • ಹೋರೊವೊಡ್ ರಚಿಸಿ ಡಿಸ್ಟ್ರಿಬ್ಯೂಟೆಡ್ ಆಪ್ಟಿಮೈಜರ್ (ಲೈನ್ 25) ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ವಿತರಿಸಿದ ರೀತಿಯಲ್ಲಿ ನವೀಕರಿಸಲು.

ಪೂರ್ಣ ಸ್ಕ್ರಿಪ್ಟ್ ಪಡೆಯಲು, ದಯವಿಟ್ಟು Horovod-MXNet ಉದಾಹರಣೆಗಳನ್ನು ನೋಡಿ MNIST и ಇಮೇಜ್ ನೆಟ್.

1  import mxnet as mx
2  import horovod.mxnet as hvd
3
4  # Horovod: initialize Horovod
5  hvd.init()
6
7  # Horovod: pin a GPU to be used to local rank
8  context = mx.gpu(hvd.local_rank())
9
10 # Build model
11 model = ...
12
13 # Initialize parameters
14 model.initialize(initializer, ctx=context)
15 params = model.collect_params()
16
17 # Horovod: broadcast parameters
18 hvd.broadcast_parameters(params, root_rank=0)
19
20 # Create optimizer
21 optimizer_params = ...
22 opt = mx.optimizer.create('sgd', **optimizer_params)
23
24 # Horovod: wrap optimizer with DistributedOptimizer
25 opt = hvd.DistributedOptimizer(opt)
26
27 # Create trainer and loss function
28 trainer = mx.gluon.Trainer(params, opt, kvstore=None)
29 loss_fn = ...
30
31 # Train model
32 for epoch in range(num_epoch):
33    ...

3 ಹೆಜ್ಜೆ

MPI ನಿರ್ದೇಶನವನ್ನು ಬಳಸಿಕೊಂಡು ವಿತರಿಸಲಾದ ತರಬೇತಿಯನ್ನು ಪ್ರಾರಂಭಿಸಲು ಕಾರ್ಮಿಕರಲ್ಲಿ ಒಬ್ಬರಿಗೆ ಲಾಗ್ ಇನ್ ಮಾಡಿ. ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, ವಿತರಿಸಿದ ತರಬೇತಿಯು ನಾಲ್ಕು ನಿದರ್ಶನಗಳಲ್ಲಿ 4 ಜಿಪಿಯುಗಳೊಂದಿಗೆ ನಡೆಯುತ್ತದೆ ಮತ್ತು ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿ ಒಟ್ಟು 16 ಜಿಪಿಯುಗಳು. ಕೆಳಗಿನ ಹೈಪರ್‌ಪ್ಯಾರಾಮೀಟರ್‌ಗಳೊಂದಿಗೆ ಸ್ಟೊಕಾಸ್ಟಿಕ್ ಗ್ರೇಡಿಯಂಟ್ ಡಿಸೆಂಟ್ (SGD) ಆಪ್ಟಿಮೈಜರ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ:

  • ಮಿನಿ-ಬ್ಯಾಚ್ ಗಾತ್ರ: 256
  • ಕಲಿಕೆಯ ದರ: 0.1
  • ಆವೇಗ: 0.9
  • ತೂಕದ ಕೊಳೆತ: 0.0001

ನಾವು ಒಂದು GPU ದಿಂದ 64 GPU ಗಳಿಗೆ ಸ್ಕೇಲ್ ಮಾಡಿದಂತೆ, ನಾವು GPU ಗಳ ಸಂಖ್ಯೆಗೆ ಅನುಗುಣವಾಗಿ ತರಬೇತಿ ದರವನ್ನು ರೇಖಾತ್ಮಕವಾಗಿ ಅಳೆಯುತ್ತೇವೆ (0,1 GPU ಗಾಗಿ 1 ರಿಂದ 6,4 GPU ಗಳಿಗೆ 64 ವರೆಗೆ), ಆದರೆ ಪ್ರತಿ GPU ಗೆ ಚಿತ್ರಗಳ ಸಂಖ್ಯೆಯನ್ನು 256 (ಒಂದು ಬ್ಯಾಚ್‌ನಿಂದ 256 GPU ಗಾಗಿ 1 ಚಿತ್ರಗಳು 16 GPU ಗಳಿಗೆ 384). GPU ಗಳ ಸಂಖ್ಯೆ ಹೆಚ್ಚಾದಂತೆ ತೂಕದ ಕೊಳೆತ ಮತ್ತು ಆವೇಗದ ನಿಯತಾಂಕಗಳು ಬದಲಾಗಿವೆ. NVIDIA Tesla GPUಗಳು ಬೆಂಬಲಿಸುವ float64 ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ವೇಗಗೊಳಿಸಲು ನಾವು ಫಾರ್ವರ್ಡ್ ಪಾಸ್‌ಗಾಗಿ float16 ಡೇಟಾ ಪ್ರಕಾರದೊಂದಿಗೆ ಮಿಶ್ರ ನಿಖರ ತರಬೇತಿಯನ್ನು ಮತ್ತು ಗ್ರೇಡಿಯಂಟ್‌ಗಳಿಗಾಗಿ float32 ಅನ್ನು ಬಳಸಿದ್ದೇವೆ.

$ mpirun -np 16 
    -H server1:4,server2:4,server3:4,server4:4 
    -bind-to none -map-by slot 
    -mca pml ob1 -mca btl ^openib 
    python mxnet_imagenet_resnet50.py

ತೀರ್ಮಾನಕ್ಕೆ

ಈ ಲೇಖನದಲ್ಲಿ, ನಾವು Apache MXNet ಮತ್ತು Horovod ಬಳಸಿಕೊಂಡು ವಿತರಿಸಿದ ಮಾದರಿ ತರಬೇತಿಗೆ ಸ್ಕೇಲೆಬಲ್ ವಿಧಾನವನ್ನು ನೋಡಿದ್ದೇವೆ. ResNet50-v1 ಮಾದರಿಯು ತರಬೇತಿ ಪಡೆದ ಇಮೇಜ್‌ನೆಟ್ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಪ್ಯಾರಾಮೀಟರ್ ಸರ್ವರ್ ವಿಧಾನಕ್ಕೆ ಹೋಲಿಸಿದರೆ ನಾವು ಸ್ಕೇಲಿಂಗ್ ದಕ್ಷತೆ ಮತ್ತು ವೆಚ್ಚ-ಪರಿಣಾಮಕಾರಿತ್ವವನ್ನು ಪ್ರದರ್ಶಿಸಿದ್ದೇವೆ. Horovod ಬಳಸಿಕೊಂಡು ಬಹು ನಿದರ್ಶನ ತರಬೇತಿಯನ್ನು ಚಲಾಯಿಸಲು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಮಾರ್ಪಡಿಸಲು ನೀವು ಬಳಸಬಹುದಾದ ಹಂತಗಳನ್ನು ಸಹ ನಾವು ಸೇರಿಸಿದ್ದೇವೆ.

ನೀವು ಈಗಷ್ಟೇ MXNet ಮತ್ತು ಆಳವಾದ ಕಲಿಕೆಯೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸುತ್ತಿದ್ದರೆ, ಅನುಸ್ಥಾಪನಾ ಪುಟಕ್ಕೆ ಹೋಗಿ MXNeಮೊದಲು MXNet ಅನ್ನು ನಿರ್ಮಿಸಲು. ಲೇಖನವನ್ನು ಓದುವುದನ್ನು ನಾವು ಬಲವಾಗಿ ಶಿಫಾರಸು ಮಾಡುತ್ತೇವೆ 60 ನಿಮಿಷಗಳಲ್ಲಿ MXNetಪ್ರಾರಂಭಿಸಲು.

ನೀವು ಈಗಾಗಲೇ MXNet ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಿದ್ದರೆ ಮತ್ತು Horovod ನೊಂದಿಗೆ ವಿತರಿಸಿದ ಕಲಿಕೆಯನ್ನು ಪ್ರಯತ್ನಿಸಲು ಬಯಸಿದರೆ, ನಂತರ ಒಮ್ಮೆ ನೋಡಿ Horovod ಅನುಸ್ಥಾಪನಾ ಪುಟ, ಇದನ್ನು MXNet ನಿಂದ ನಿರ್ಮಿಸಿ ಮತ್ತು ಉದಾಹರಣೆಯನ್ನು ಅನುಸರಿಸಿ MNIST ಅಥವಾ ಇಮೇಜ್ ನೆಟ್.

* ವೆಚ್ಚವನ್ನು ಆಧರಿಸಿ ಲೆಕ್ಕ ಹಾಕಲಾಗುತ್ತದೆ ಗಂಟೆಯ ದರಗಳು EC2 ನಿದರ್ಶನಗಳಿಗಾಗಿ AWS

ಕೋರ್ಸ್ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ "ಇಂಡಸ್ಟ್ರಿಯಲ್ ಎಂಎಲ್ ಆನ್ ಬಿಗ್ ಡೇಟಾ"

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ