Мақалалар

Profiling әдісі арқылы PyTorch-та nn.Linear-ден біріктірілген нейрондық желіге өту

Жасанды интеллекттің дамуы барысында нейрондық желілердің тиімділігін арттыру талабы арта түсуде. PyTorch сияқты танымал машиналық оқыту кітапханалары өз өнімділігін арттыру үшін ішкі процестерді егжей-тегжейлі зерттеуді қажет етеді. Бұл мақалада nn.Linear модулінен бастап біріктірілген көпқабатты перцептронды құрастырып, жүйенің жұмысын қалай талдауға болатыны түсіндіріледі. Бұл тәсіл машиналық оқыту модельдерін оңтайландыруда маңызды рөл атқарады.

Кіріспе

PyTorch-та нейрондық желілердің негізгі элементтерінің бірі — nn.Linear модулі. Ол кіріс мәліметтерін матрицалық көбейту және векторға ығыстыру арқылы өңдейді. Бұл операция машиналық оқытудың негізгі құрылыс блогы саналады. Алғашқы мақалада осы операцияның матрицалық көбейту және қосу ретінде бөліп қарастыруы талданды. Ендігі мақалада nn.Linear негізінде күрделірек құрылымға — біріктірілген көпқабатты перцептронға көшеміз. Мұндай сараптау модельдің ішкі жұмысын жақсы түсінуге көмектеседі және өнімділікті арттыруға жол ашады.

PyTorch-та nn.Linear модулінің жұмыс істеу тәсілі

nn.Linear — матрицалық көбейту (x @ w.T) және ығыстыру (b) операциясын біріктірген модуль. Ол салмақтар мен ығыстыруды өзінің параметрлері ретінде ұстайды және қолданушыға ыңғайлы forward әдісін ұсынады. Яғни, y = x @ w.T + b формуласымен есептейді, мұндағы x – кіріс, w – салмақтар, b – ығыстыру векторы.

Transpose операциясының мәні

PyTorch профайлерінде nn.Linear шақырған кезде aten::t (transpose) операциясы матрицалық көбейтудің алдында орындалады. Алайда бұл операция нақты мәліметтерді көшіру немесе қайта ұйымдастыру емес, тек tensornің метадеректерін өзгертеді. Яғни, бұл операция жадта деректерді қайта орналастырмай, тек әртүрлі оқу жолын көрсететін мөлшер мен адымдарды ауыстырады. Бұл тәсіл есептеу тиімділігін арттыра отырып, қосымша жад шығындарын болдырмайды.

Бөлек көбейту мен қосу ядроларының болмауы

nn.Linear операциясында қосу (bias) бөлек ядро ретінде көрінбейді. Себебі көбейту ядросына орындалатын epilogue деп аталатын қосымша есептеу қосылады, бұл жадқа қайта жүктеу мен жазуды болдырмау үшін жасалады. Яғни, матрицалық көбейту аяқталған соң, ығыстыру бірден қосылады. Бұл тәсіл жадқа жасалатын операция саны мен олар бос өткізілетін уақытты қысқартып, жалпы өнімділікті арттырады. PyTorch-та aten::addmm операциясы дәл осылай bias қосқан матрицалық көбейтуді білдіреді.

torch.compile опциясының nn.Linear-ге әсері

torch.compile құралын қолданғанда nn.Linear операциясының есептеу графигі өзгермейді. Профайлер нәтижелері бірдей GPU ядросында орындалатынын көрсетті. Бұл құрал аз операциядан құралған есептерді қосу мүмкіндігін көрсетпейді. Сондықтан nn.Linear сияқты қарапайым операцияда torch.compile құралын пайдалану өнімділікті арттырмайды. Өнімділікті жақсарту көп операцияларды бірге біріктіретін жағдайларда тиімді болады.

Transpose операциясының жойылуы

torch.compile қолданылған кезде CPU тараптағы transpose операциясының жойылатыны байқалады. Бұл компилятор tensornің адымдарын (stride) алдын ала есептеп, тікелей өзгертілген адымдарды қолдануға мүмкіндік береді. Осылайша, CPU-дағы диспетчерлеу жүктемесі азайып, жеделдік жоғарылайды, ал GPU есептеуі түпнұсқа қарқынмен орындалады. Егер кіріс деректері компилятордың алдын ала есептеген адымдарына сәйкес келмесе, программа қателік береді, яғни компиляцияланған кодқа сәйкес емес деректерді жіберуге болмайды.

Контекст пен мысалдар

Мақаланың мысалында NVIDIA A100-SXM4-80GB GPU қолданылған. PyTorch профайлері арқылы nn.Linear және одан кейін үш nn.Linear қабаттарын біріктіріп, олардың арасына активация функциясы енгізілген көпқабатты перцептрон (MLP) құрылымы қарастырылған. Бұл мысалдар жүйенің ішкі жұмысына терең үңіліп, әр түрлі ядролардың жұмыс ерекшелігін, dispatcher-дің дисплейін қарастыруға мүмкіндік береді.

Практикалық маңызы

Нейрондық желінің негізгі үзіндісі ретінде nn.Linear модулін әрі қарай біріктіріп MLP-ге айналдыру, есептеулердің құрылымын тиімді жақсарту маңызды. transpose операциясын жою және bias қосу epilogue-дар арқылы біріктіру GPU ресурстарын үнемдейді, өнімділікті арттырады. Сонымен бірге torch.compile құралын дұрыс қолдану есептеу графигін оңтайландырып, тек қатып қалған CPU және GPU осы уақыттардың азаюына септігін тигізеді. Бұл оңтайландырулар модельді жылдамырақ оқытуға, тезірек болжам жасауға, энергияны үнемдеуге және жалпы есептеулердің шығынын төмендетуге жол ашады.

Қорытынды

PyTorch-та nn.Linear модулінің детальді талдауы күрделі MLP құрылымын оңтайландыруға негіз болады. Метадеректерді қолдану арқылы transpose операциясының жадқа түсімді әсерін төмендету, bias қосу epilogue түрінде біріктіру өнімділікті арттырады. torch.compile құралы оңтайландыру кезінде қажет мақсатты көздеу керек екенін көрсетеді. Жалпы, мұндай микроталдаулар нейрондық желілердің есептеу тиімділігін арттыруға бағытталған дамудың маңызды бөлігі саналады.

Дереккөз: Hugging Face Blog

Басқа жаңалықтар

Back to top button