Функции на PyTorch и основни тензорни функции.
Здравейте колеги НЛП ентусиасти! В NLPlanet говорихме много за общи НЛП концепции и техники, новини и библиотеки. Днес правим малка въвеждаща стъпка към известната библиотека PyTorch, която все още е на високо ниво, но малко по-ниско от SpaCy или Hugging Face transformers. В тази статия говорим за основните характеристики на PyTorch и как да управляваме тензорите. Наслади се! 😄
Какво е PyTorch
PyTorch (пуснат за първи път от Meta AI) е рамка за машинно обучение с отворен код, базирана на библиотеката Torch. Рамката съчетава ефективните и гъвкави GPU-ускорени бекенд библиотеки от Torch с интуитивен Python интерфейс, позволяващ лесно създаване на прототипи. Torch е библиотека за научни изчисления с широка поддръжка за алгоритми за машинно обучение и ефективни GPU реализации благодарение на C и CUDA.
Ето някои от функциите на PyTorch:
- Интегриран с популярни библиотеки на Python като NumPy, SciPy и Cython.
- Той поддържа CPU, GPU и паралелна обработка, както и разпределено обучение.
- PyTorch Hub е хранилище на предварително обучени модели, публично споделени.
- Лесно е да създавате персонализирани компоненти и параметрите могат лесно да се споделят с външни инструменти като TensorBoard.
- Той поддържа както „нетърпелив режим“ за експериментиране, така и „режим на графика“ за високопроизводително изпълнение.
- Голяма и активна общност.
- PyTorch има поддръжка за ONNX (Open Neural Network Exchange), който е формат за запазване и зареждане на невронни мрежи в различни ML рамки.
Основната работна единица на 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)“, което позволява удобно прилагане на „автоматично диференциране“, полезно за обучение на невронни мрежи с „обратно разпространение“.
Следващи стъпки
Възможните следващи стъпки са:
- Опитайте да изградите невронна мрежа с PyTorch, следвайки урока.
- Прочетете сравнение между TensorFlow, PyTorch и JAX.
- Научете за torchtext.
Благодаря ви, че прочетохте! Ако се интересувате да научите повече за НЛП, не забравяйте да следвате NLPlanet в Medium, LinkedIn, Twitter и се присъединете към нашия нов Discord сървър!