Функции на PyTorch и основни тензорни функции.

Здравейте колеги НЛП ентусиасти! В NLPlanet говорихме много за общи НЛП концепции и техники, новини и библиотеки. Днес правим малка въвеждаща стъпка към известната библиотека PyTorch, която все още е на високо ниво, но малко по-ниско от SpaCy или Hugging Face transformers. В тази статия говорим за основните характеристики на PyTorch и как да управляваме тензорите. Наслади се! 😄

Какво е PyTorch

PyTorch (пуснат за първи път от Meta AI) е рамка за машинно обучение с отворен код, базирана на библиотеката Torch. Рамката съчетава ефективните и гъвкави GPU-ускорени бекенд библиотеки от Torch с интуитивен Python интерфейс, позволяващ лесно създаване на прототипи. Torch е библиотека за научни изчисления с широка поддръжка за алгоритми за машинно обучение и ефективни GPU реализации благодарение на C и CUDA.

Ето някои от функциите на PyTorch:

Основната работна единица на PyTorch е Tensor: многомерна матрица, съдържаща елементи от един тип данни, обикновено използвана за съхраняване и манипулиране на входовете и изходите на модел, както и на параметрите на модела. Тензорите са подобни на ndarray на NumPy, с изключение на това, че тензорите могат да работят на GPU за по-бързи изчисления.

Нека да видим някои примери за кодове за това как да използвате тензори.

Инсталиране на PyTorch

Вижте уебсайта на PyTorch за точни инструкции как да инсталирате PyTorch във вашата среда. Инструкциите за инсталиране се различават в зависимост от хостинг операционната система и поддръжката на GPU/TPU.

Тензорни определения

Първо, нека импортираме библиотеките torch и numpy (които ще използваме за сравнителен анализ).

Тензорите могат да бъдат създадени по няколко начина, като например от списъци на Python и масиви NumPy или от форми и запълнени с произволни числа.

Тензорни свойства

Най-важните свойства на tensor обект са неговите shape , dtype (типа на елементите в тензора) и device (низ, показващ дали тензорът е на CPU, GPU или други ускорители).

Преместване на тензори към GPU

За да преместите тензор към ускорител, използвайте метода to() с името на ускорителя, който да използвате (напр. cuda за GPU). Ако ускорителят не се разпознае от PyTorch, методът предизвиква грешка по време на изпълнение. Можете да проверите дали GPU е наличен с метода torch.cuda.is_available().

Тензорни операции

PyTorch прилага най-често срещаните операции над тензори като умножения на матрици, конкатенации, индексиране и агрегиране. Синтаксисът е подобен на синтаксиса на NumPy.

PyTorch и NumPy бенчмарк

Нека да видим примерен бенчмарк на PyTorch срещу NumPy при умножение на матрици. Умножаването на матрица 1000x1000 по нейното транспониране отнема около 18,6 милисекунди на процесора с NumPy.

PyTorch на CPU е малко по-бавен, отнема около 27 милисекунди за умножение на матрицата.

И накрая, PyTorch на GPU отнема само 540 микросекунди на умножение на матрица: x33 ускорение по отношение на NumPy на CPU.

Обърнете внимание, че не вземаме предвид времето, изминало за преместване на данните между CPU и GPU (т.е. извикването x.to("cuda") е извън магията %timeit): тези операции може да отнемат известно време, но са незначителни при умножаване на достатъчно големи матрици по отношение на времето, необходимо за изчисляване на продукта.

Основното използване на тензори в PyTorch

Когато внедрява невронни мрежи с тензори, PyTorch поддържа запис на тензори и изпълнени операции в „насочен ацикличен граф (DAG)“, което позволява удобно прилагане на „автоматично диференциране“, полезно за обучение на невронни мрежи с „обратно разпространение“.

Следващи стъпки

Възможните следващи стъпки са:

Благодаря ви, че прочетохте! Ако се интересувате да научите повече за НЛП, не забравяйте да следвате NLPlanet в Medium, LinkedIn, Twitter и се присъединете към нашия нов Discord сървър!