Программируем с PyTorch: Создание приложений глубокого обучения
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабын онлайн тегін оқу  Программируем с PyTorch: Создание приложений глубокого обучения

 

Ян Пойнтер
Программируем с PyTorch: Создание приложений глубокого обучения
2021

Переводчики Д. Акуратер, А. Попова

Технический редактор А. Руденко

Литературный редактор М. Муханова

Художники В. Мостипан, Л. Соловьева, Л. Соловьева

Корректоры С. Беляева, Н. Викторова

Верстка Л. Соловьева


 

Ян Пойнтер

Программируем с PyTorch: Создание приложений глубокого обучения. — СПб.: Питер, 2021.

 

ISBN 978-5-4461-1677-5

© ООО Издательство "Питер", 2021

 

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

 

Предисловие

Глубокое обучение в современном мире

Всем привет! В этой книге я расскажу вам о глубоком обучении в PyTorch — библиотеке с открытым исходным кодом, выпущенной Facebook в 2017 году. Если только вы не живете на необитаемом острове, то наверняка заметили, что нейронные сети сейчас можно встретить повсюду. Они перестали быть некоей суперчастью computer science, которую мы изучаем и никак не используем: нейросети есть, например, в наших смартфонах. С их помощью мы улучшаем фотографии или даем голосовые команды. Программное обеспечение для электронной почты читает письма и выдает соответствующий контексту ответ, нас слушаются умные колонки, автомобили ездят сами по себе, а компьютер наконец-то переиграл человека в Го. А, например, в авторитарных странах эта технология используется для не самых хороших дел: системы, в основе которых лежат нейронные сети, распознают лица и принимают решения о задержании этих людей.

И все же, несмотря на ощущение, что все произошло так быстро, концепции глубокого обучения и нейронных сетей уходят в далекое прошлое. Доказательство того, что такая сеть может стать заменой любой математической функции аппроксимации (нейронные сети могут быть обучены для множества различных задач), датируется 1989 годом1, а в конце 90-х ­сверточные нейронные сети использовались для распознавания контрольных цифр. Все это время строился прочный фундамент, но почему же именно за последние десять лет произошел бум?

Существует много причин, но основная из них заключается в росте ­производительности графических процессоров (GPU) и их ценовой ­доступности.

Изначально разработанные для игр, GPU должны выполнять миллионы операций над матрицами в секунду, чтобы визуализировать все полигоны гоночной игры или стрелялки, в которую вы играете на консоли или на ПК, — операции, под которые стандартный центральный процессор (CPU) просто не заточен.

В работе «Large-Scale Deep Unsupervised Learning Using Graphics Processors», которую Раджат Райна написал совместно с другими авторами, отмечается, что обучение нейронных сетей также основано на вы­полнении множества операций над матрицами, и поэтому дополни­тельные видеокарты могут использоваться для ускорения обучения, а ­также для создания более крупных и глубоких архитектур нейронных сетей.

Другие важные методы, такие как прореживание, или дропаут (который мы рассмотрим в главе 3), также были введены в последнее десятилетие как способ не только ускорить обучение, но и сделать его более обобщенным (чтобы сеть не просто научилась распознавать набор данных для обу­чения, как это происходит при возникновении проблемы переобучения, о которой мы поговорим в главе 1). За последние пару лет компании вывели этот подход, в основе которого лежат GPU, на новый уровень, и Google создал так называемые тензорные процессоры (TPU), которые представляют собой устройства, разработанные специально для максимально быстрого глубокого обучения. Они доступны как часть экосистемы Google Cloud.

Еще один способ оценить прогресс в области глубокого обучения за последнее десятилетие — это конкурс ImageNet. Обширная база данных, насчитывающая более 14 миллионов изображений, вручную разделенных на 20 тысяч категорий, ImageNet — сокровищница размеченных данных для целей машинного обучения.

С 2010 года ведется проект ImageNet Large Scale Visual Recognition Challenge — кампания по широкомасштабному распознаванию образов в ImageNet, в рамках которой различные программные продукты ежегодно соревнуются в классификации и распознавании объектов и сцен в базе данных из тысячи категорий ImageNet, и до 2012 года процент ошибок составлял около 25 %.

Однако в тот год победила глубокая сверточная нейронная сеть, значительно превзошедшая всех остальных участников: ее процент ошибок ­составлял 16 %. В последующие годы уровень ошибок все больше и больше снижался, и в 2015 году архитектура ResNet получила результат 3,6 %, что превосходит средний результат человека в ImageNet (5 %). Нас ­обошли.

Что такое глубокое обучение и нужна ли докторская степень, чтобы понять его?

Определение глубокого обучения несколько сложнее, чем кажется. По одному из определений глубокое обучение — это техника машинного обучения, в которой используются многочисленные и множественные слои нелинейных преобразований для постепенного извлечения признаков из необработанных входных данных. Безусловно, так и есть, но понятнее не становится, правда? Я предпочитаю описывать глубокое обучение как метод решения задач, предоставляющий входные данные и необходимые выходные данные и позволяющий компьютеру найти решение, используя нейронную сеть.

Математика — вот что пугает многих, если речь идет о глубоком обучении. Посмотрите любую работу в этой области, и вы увидите огромное количество греческих букв. Скорее всего, вы пуститесь наутек без оглядки. Но на самом деле не нужно быть гением, чтобы использовать методы глубокого обучения. Для большинства повседневных базовых применений технологии не нужно много знать, а чтобы по-настоящему понять ее (как вы увидите в главе 2), нужно всего лишь немного подготовиться. Это поможет понять концепции, которые вы наверняка учили в старших классах. Так что не пугайтесь математики.

К концу главы 3 вы сможете всего за несколько строк кода построить классификатор изображений, который составит достойную конкуренцию предложенным лучшими умами 2015 года.

PyTorch

Как я уже говорил, PyTorch — это предложение от Facebook с открытым исходным кодом, которое облегчает написание кода для глубокого изучения на Python. У него два «родителя». Во-первых, что вовсе не удивительно, учитывая его название, много функций и концепций он позаимствовал из Torch — библиотеки нейронных сетей на основе Lua, появившейся в 2002 году. Другой «родитель» — Chainer, разработанный в Японии в 2015 году. Chainer была одной из первых библиотек, предложивших энергичный подход к дифференциации вместо определения статических графов, позволяющий более гибко подходить к созданию, обучению и эксплуатации сетей. Наследие Torch и идеи Chainer сделали PyTorch популярным за последние пару лет.2

Библиотека также содержит модули, которые помогают работать с текстом, изображениями и звуком (torchtext, torchvision и torchaudio), а также встроенные варианты распространенных архитектур, таких как ResNet (с весами, которые можно загрузить для облегчения работы с переносом обучения, о котором вы узнаете в главе 4).

Так же как и Facebook, PyTorch быстро завоевал признание, и такие компании, как Twitter, Salesforce, Uber и NVIDIA, используют его различными способами для глубокого обучения. Я знаю, что вы хотите спросить…

А как насчет TensorFlow?

Да, давайте посмотрим на весьма заметного слона от Google. Что такого предлагает PyTorch, чего нет у TensorFlow? Почему вы должны изучать именно PyTorch?

Ответ заключается в том, что традиционный TensorFlow работает не так, как PyTorch, что значительно влияет на написание кода и отладку. В TensorFlow используется библиотека для построения представления архитектуры нейронной сети в виде графа, а затем выполняются операции с этим графом в рамках библиотеки TensorFlow. Этот метод декларативного программирования несколько расходится с более императивной парадигмой Python, а это означает, что программы на Python в TensorFlow могут выглядеть странно и быть трудными для понимания. Другая проблема заключается в том, что объявление статического графа может сделать динамическое изменение архитектуры во время обучения и время вывода значительно сложнее и шаблоннее, чем в PyTorch.

Поэтому PyTorch стал популярным в исследовательских сообществах. ­Количество работ, представленных на Международную конференцию по обучению, в которых упоминается PyTorch, за прошедший год подскочило на 200 %, а количество работ, упоминающих TensorFlow, увеличилось почти в равной степени. PyTorch пришел определенно для того, чтобы остаться.

Однако в более поздних версиях TensorFlow все меняется. Недавно в библиотеку была добавлена новая функция, называемая энергичным выполнением (eager execution), которая позволяет ей работать по аналогии с PyTorch и будет представлять парадигму, поддерживаемую в TensorFlow 2.0. А так как новых ресурсов, кроме Google, помогающих изучить этот новый метод работы с TensorFlow, не так уж и много, потребуются годы работы, чтобы понять другую парадигму и получить максимальную отдачу от библиотеки. Но это не повод плохо относиться к TensorFlow; она остается проверенной библиотекой, которую поддерживает одна из крупнейших компаний на планете. Я бы сказал, что в PyTorch (поддерживаемый другой крупнейшей компанией) вложен более оптимизированный и целенаправленный подход к глубокому обучению и дифференциальному программированию. Поскольку ему не нужно продолжать поддерживать более старые и сложные API-интерфейсы, учиться и работать в PyTorch легче, чем в TensorFlow.

А как сюда вписывается Keras? Тоже хороший вопрос! Keras — это библиотека глубокого обучения высокого уровня, которая изначально поддерживала Theano и TensorFlow, а теперь также поддерживает некоторые другие платформы, например Apache MXNet. Она предоставляет определенные функции, такие как циклы обучения, проверки и тестирования, которые низкоуровневые фреймворки оставляют разработчикам, а также простые методы построения архитектур нейронных сетей. Библиотека Keras внесла огромный вклад в освоение TensorFlow и теперь является ее непосредственной частью (как tf.keras), а также продолжает оставаться отдельным проектом. PyTorch — это нечто среднее между низкоуровневыми сырыми TensorFlow и Keras; приходится писать свои собственные процедуры обучения и выводы, но создавать нейронные сети почти так же просто (и я бы сказал, что разработчики Python считают подход PyTorch к созданию и повторному использованию архитектур гораздо более логичным, чем некоторые из чудес Keras).

Хотя PyTorch распространен в исследовательских целях, во время чтения вы увидите, что PyTorch 1.0 идеально подходит для производственных сценариев использования.

Типографские соглашения

В данной книге используются следующие типографские соглашения:

Курсив

Обозначает новые термины.

Шрифт без засечек

Обозначает URL, адреса электронной почты, названия файлов и расширения.

Моноширинный шрифт

Используется для примеров программ, а также внутри абзацев для ссылки на элементы программ, такие как переменные или имена функций, базы данных, переменные среды, операторы и ключевые слова.

 

Этот элемент означает подсказку или предложение.

 

Этот элемент означает общее примечание.

 

Этот элемент указывает на предупреждение или предостережение.

Использование примеров кода

Дополнительные материалы (примеры кода, упражнения и т.д.) доступны для скачивания по адресу https://oreil.ly/pytorch-github.

Эта книга призвана облегчить вашу работу. В целом, если к книге прилагается какой-либо пример кода, вы можете использовать его в ваших программах и документации. Обращаться к нам за разрешением нет необходимости, разве что если вы копируете значительную часть кода. Например, написание программы, использующей несколько фрагментов кода из этой книги, не требует отдельного разрешения. Для продажи или распространения компакт-диска с примерами из книг O’Reilly разрешение, конечно, нужно. Ответ на вопрос путем цитирования этой книги и цитирования примеров кода не требует обращения к нам. Включение значительного количества кода примеров из этой книги в документацию к вашему продукту лучше обговорить.

Если вам кажется, что использование вами примеров кода выходит за рамки правомерного применения или данных выше разрешений, не стесняясь связывайтесь с нами по адресу permissions@oreilly.com.

Благодарности

Выражаю огромную благодарность моему редактору Мелиссе Поттер (Melissa Potter), моей семье и Тэмми Эдлунд (Tammy Edlund) за их помощь в создании книги. Спасибо научным редакторам, которые предоставляли ценную обратную связь на протяжении всего процесса написания этой книги, включая Фила Роудса (Phil Rhodes), Дэвида Мерца (David Mertz), Чарльза Гивра (Charles Givre), Доминика Монна (Dominic Monn), Анкура Пателя (Ankur Patel) и Сару Наги (Sarah Nagy).

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу comp@piter.com (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информа­цию о наших книгах.

1 См. «Approximation by Superpositions of Sigmoidal Functions», George Cybenko (1989), https://www.semanticscholar.org/paper/Approximation-by-superpositions-of-a-sigmoidal-Cybenko/8da1dda34ecc96263102181448c94ec7d645d085

2 Обратите внимание, что PyTorch заимствует только идеи Chainer, а не реальный код.

Как я уже говорил, PyTorch — это предложение от Facebook с открытым исходным кодом, которое облегчает написание кода для глубокого изучения на Python. У него два «родителя». Во-первых, что вовсе не удивительно, учитывая его название, много функций и концепций он позаимствовал из Torch — библиотеки нейронных сетей на основе Lua, появившейся в 2002 году. Другой «родитель» — Chainer, разработанный в Японии в 2015 году. Chainer была одной из первых библиотек, предложивших энергичный подход к дифференциации вместо определения статических графов, позволяющий более гибко подходить к созданию, обучению и эксплуатации сетей. Наследие Torch и идеи Chainer сделали PyTorch популярным за последние пару лет.2

Обратите внимание, что PyTorch заимствует только идеи Chainer, а не реальный код.

См. «Approximation by Superpositions of Sigmoidal Functions», George Cybenko (1989), https://www.semanticscholar.org/paper/Approximation-by-superpositions-of-a-sigmoidal-Cybenko/8da1dda34ecc96263102181448c94ec7d645d085

И все же, несмотря на ощущение, что все произошло так быстро, концепции глубокого обучения и нейронных сетей уходят в далекое прошлое. Доказательство того, что такая сеть может стать заменой любой математической функции аппроксимации (нейронные сети могут быть обучены для множества различных задач), датируется 1989 годом1, а в конце 90-х ­сверточные нейронные сети использовались для распознавания контрольных цифр. Все это время строился прочный фундамент, но почему же именно за последние десять лет произошел бум?

Глава 1. Начало работы с PyTorch

В этой главе мы настроим все необходимое для работы с PyTorch, и как только сделаем это, каждая последующая глава будет опираться на первоначальный фундамент, поэтому важно во всем разобраться. Отсюда следует первый фундаментальный вопрос: стоит ли создавать настроенный компьютер для глубокого обучения или просто использовать один из множества доступных облачных ресурсов?

Сборка компьютера для глубокого обучения

При погружении в глубокое обучение возникает потребность создать себе монстра для всех своих вычислительных потребностей. Вы можете целыми днями просматривать различные типы видеокарт, изучать возможности различных ЦП, выбирать лучший тип памяти, который можно купить, и, в конце концов, думать о том, насколько большой SSD-накопитель можно приобрести, чтобы сделать доступ к диску максимально быстрым. Я не говорю, что это лишнее; пару лет назад я потратил месяц на то, чтобы составить список комплектующих и собрать новый компьютер на кухонном столе.

Мой вам совет, особенно если вы новичок: не делайте так. Вы можете запросто потратить несколько тысяч долларов на систему, которую не будете использовать так уж много. Лучше поработайте с этой книгой, используя облачные ресурсы (в Amazon Web Services, Google Cloud или Microsoft Azure), и только тогда начинайте думать о создании собственного компьютера, если почувствуете, что требуется один компьютер для работы 24/7. Не нужно вкладывать огромные средства в аппаратное обеспечение для запуска любого кода из этой книги.

Возможно, вам даже не потребуется собирать себе специальный компьютер. Всегда приятно осознавать, что создание собственной установки может обойтись дешевле, если вы знаете, что расчеты всегда будут ограничены одной машиной (не более чем несколькими GPU).

Однако если вычисления начинают требовать нескольких машин и GPU, облако снова вызывает интерес. Учитывая стоимость сборки специального компьютера, я бы хорошенько подумал, прежде чем взяться за это всерьез.

Если я еще не убедил вас, в следующих разделах вы найдете предложения о том, как создать свою систему.

Графический процессор

Сердце каждого блока глубокого обучения, GPU в видеокарте, служит основой для большинства вычислений в PyTorch, и, скорее всего, это будет самый дорогой компонент компьютера. В последнее время цены на видеокарты выросли, а поставки уменьшились из-за их использования в майнинге криптовалют. К счастью, пузырь уже сдувается, и проблем с покупкой становится меньше.

На момент написания этой книги я рекомендовал бы приобрести видеокарту NVIDIA GeForce RTX 2080 Ti. Если нужен вариант подешевле, то смело выбирайте 1080 Ti (хотя, если решите приобрести 1080 Ti исходя из финансовых соображений, предлагаю все-таки рассмотреть облачные технологии). Несмотря на наличие графических карт AMD, их поддержка в PyTorch в настоящее время недостаточно хороша. Поэтому я рекомендую NVIDIA. Обратите внимание на технологию ROCm, которая должна сделать их надежной альтернативой в области GPU.

Центральный процессор / материнская плата

Возможно, вы захотите купить материнскую плату серии Z370. Многие скажут, что CPU для глубокого обучения не так важен и что можно обойтись более медленным, если есть мощный GPU. Но вы удивитесь, как часто CPU становится проблемой, особенно при работе с аугментированными данными.

Оперативная память

Больше оперативной памяти — это хорошо, так как это означает, что можно хранить больше данных, не обращаясь к гораздо более медленной дисковой системе хранения (это особенно важно на этапах обучения модели). Рассчитывайте на как минимум 64 ГБ памяти DDR4.

Хранилище

Хранилище должно быть разделено на два класса: во-первых, твердотельный накопитель с интерфейсом M2 (SSD) — настолько большой, насколько вы можете себе позволить, чтобы у вас был максимально быстрый доступ к горячим данным при активной работе над проектом. Для хранилищ второго класса добавьте диск Serial ATA (SATA) емкостью 4 ТБ для данных, с которыми вы не работаете активно, и переносите их в горячее и холодное хранилище по мере необходимости.

Советую обратить внимание на PCPartPicker, чтобы понять, какие системы для глубокого обучения используют другие (иногда идеи бывают довольно странными). Вы получите представление о необходимых комплектующих и ценах, которые могут сильно колебаться, особенно если речь идет о GPU.

Теперь, когда вы изучили локальные настройки и опции компьютера, самое время перейти к облачным технологиям.

Глубокое обучение в облаке

Итак, почему же облачный вариант лучше? Особенно если учесть, что схема ценообразования Amazon Web Services (AWS) позволяет окупить систему для машинного обучения в течение шести месяцев. Подумайте: вначале вы не будете использовать компьютер 24/7 в течение этих шести месяцев. Просто не будете. Это значит, что можно отключить облачную машину и платить копейки за хранящиеся в это время данные.

Новичкам не нужно выкладываться по полной и использовать один из гигантов NVIDIA — Tesla V100, подключенную к облаку. Можно начать с одного из более дешевых (иногда даже бесплатных) вариантов на основе K80 и перейти к более мощной карте, когда возникнет необходимость. Это в несколько раз дешевле, чем покупка базовой видеокарты и обновление до 2080Ti. Кроме того, если хотите добавить восемь карт V100 к недублирующему хранению, это можно сделать всего в несколько кликов. Попробуйте проделать то же самое со своим собственным оборудованием.

Другая проблема — обслуживание. Если вы возьмете за привычку регулярно восстанавливать экземпляры в облаке (в идеале, начинать заново каждый раз, когда возвращаетесь к работе над своими экспериментами), у вас почти всегда будет обновленная система. Если у вас свой компьютер, обновление остается за вами. Признаюсь: у меня есть собственный кастомизированный компьютер для глубокого обучения, а я так долго игнорировал установку Ubuntu, что поддерживаемые обновления сильно устарели. Пришлось потратить целый день, чтобы система вернулась к работе и снова могла обновляться. Какая досада!

В любом случае вы решили перейти в облако. Ура! Далее: какой провайдер?

Облачный сервис Google Colaboratory

Прежде чем мы перейдем к провайдерам, давайте подумаем вот о чем. А что, если вы вообще не хотите делать что-то? Не хотите заниматься этой нудной сборкой компьютера или проходить этапы установки экземпляров в облаке? Где вариант для ленивых? У Google есть отличное решение.

Colaboratory (или Colab) (https://colab.research.google.com/) — это в основном бесплатная среда Jupyter Notebook, не требующая установки. Понадобится лишь учетная запись Google, чтобы настроить свои собственные блокноты. На рис. 1.1 показан скриншот блокнота, созданного в Colab.

Colab — отличный способ погрузиться в глубокое обучение, так как включает в себя предустановленные версии TensorFlow и PyTorch. Ничего настраивать не нужно. Только ввести import torch, и каждый пользователь может получить бесплатный доступ к NVIDIA T4 GPU до 12 часов непрерывной работы. Бесплатно! Для сравнения, эмпирические исследования показывают, что вы получаете примерно половину скорости 1080 Ti для обучения, но с дополнительными 5 ГБ памяти для хранения больших моделей. За дополнительную плату в Colab можно подключаться к более

 

Рис. 1.1. Google Colab(oratory)

мощным GPU и специальному оборудованию тензорного процессора Google, однако все примеры из этой книги можно сделать в Colab бесплатно. Я советую сначала использовать Colab вместе с этой книгой, а затем, при необходимости, перейти к выделенным облачным экземплярам и/или собственному личному серверу для глубокого обучения.

Использование Colab не требует усилий с вашей стороны. Однако если вы хотите больше контроля над системой или доступа к Secure Shell (SSH) — вашему экземпляру в облаке, — то давайте посмотрим, что предлагают поставщики облачных услуг.

Облачные провайдеры

Каждый из трех крупнейших облачных провайдеров (Amazon Web Services, Google Cloud Platform и Microsoft Azure) предлагают экземпляры на основе GPU (также называемые виртуальными машинами, или VM) и официальные образы для развертывания в этих экземплярах. В них есть все необходимое, чтобы начать работу без самостоятельной установки драйверов и библиотек Python. Давайте посмотрим предложения провайдеров.

Amazon Web Services

AWS, 800-фунтовая горилла облачного рынка, с лихвой удовлетворит ваши потребности в GPU и предлагает типы экземпляров P2 и P3. (Тип экземпляра G3, как правило, чаще используется в графических приложениях, например в кодировании видео, поэтому мы не будем его здесь рассматривать.) Экземпляры P2 используют устаревшие карты NVIDIA K80 (максимум 16 могут быть подключены к одному экземпляру), а ­экземпляры P3 используют невероятно быстрые карты NVIDIA V100 (и вы можете привязать 8 из них к одному экземпляру, если захотите).

Если вы собираетесь использовать AWS, рекомендую взять класс p2.xlarge. Это обойдется вам всего в 90 центов в час и обеспечит достаточную мощность для работы с экземплярами. Возможно, вы захотите перейти к классам P3, когда начнете работать над какими-то сложными заданиями Kaggle.

Создать платформу для глубокого обучения в AWS невероятно просто:

1. Войдите в консоль AWS.

2. Выберите EC2 и нажмите Launch Instance.

3. Найдите параметр Deep Learning AMI (Ubuntu) и выберите его.

4. Выберите p2.xlarge в качестве типа вашего экземпляра.

5. Запустите экземпляр, либо создав новую пару ключей, либо повторно используя существующую пару ключей.

6. Подключитесь к экземпляру, используя SSH и перенаправив порт 8888 на локальном компьютере на экземпляр:

ssh -L localhost:8888:localhost:8888 \

-i your .pem filename ubuntu@your instance DNS

7. Запустите Jupyter Notebook, введя jupyter notebook. Скопируйте сгенерированный URL-адрес и вставьте его в браузер для доступа к Jupyter.

Не забудьте закрыть свой экземпляр, если не используете его! Это можно сделать, кликнув правой кнопкой мыши на экземпляре в веб-интерфейсе и завершив работу. Это закроет экземпляр, и вы таким образом не будете платить за него, пока он не запущен.

Однако придется платить за выделенное место его хранения, даже если экземпляр выключен. Имейте это в виду. Чтобы полностью удалить экземпляр и хранилище, выберите параметр завершения.

Azure

Как и AWS, Azure предлагает набор более дешевых экземпляров на основе K80 и более дорогих экземпляров Tesla V100. Azure также использует экземпляры, основанные на более старом программном обеспечении P100, в качестве промежуточной точки между двумя другими. Для целей этой книги рекомендую тип экземпляра, использующий один K80 (NC6), который также стоит 90 центов в час. По мере необходимости можно переходить на другие типы NC, NCv2 (P100) или NCv3 (V100).

Вот как нужно настраивать виртуальную машину в Azure:

1. Войдите на портал Azure и найдите образ Data Science Virtual Machine на Azure Marketplace.

2. Кликните на кнопке Get It Now.

3. Заполните данные виртуальной машины (дайте ей имя, выберите SSD-диск поверх HDD, имя пользователя/пароль SSH, подписку на оплату экземпляров и задайте ближайшее местоположение, которое предлагает тип экземпляра NC).

4. Кликните на кнопке Create option. Экземпляр должен быть готов примерно через пять минут.

5. Можно использовать SSH с именем пользователя/паролем, которые были указаны для публичного имени системы доменных имен (DNS) этого экземпляра.

6. Jupyter Notebook должен запускаться после создания экземпляра; перейдите по адресу http://dns name of instance:8000 и используйте комбинацию имени пользователя и пароля, которую использовали для входа в SSH.

Google Cloud Platform

В дополнение к предлагаемым экземплярам K80, P100 и V100, таким как Amazon и Azure, Google Cloud Platform (GCP) предлагает тензорные процессоры для тех, кто обладает огромными данными и высокими требованиями к вычислению. Для целей этой книги тензорные процессоры не понадобятся, однако они будут работать с PyTorch 1.0. Не думайте, что придется использовать TensorFlow, если проект, над которым вы работаете, требует их использования.

Начать работу с Google Cloud также довольно просто:

1. Найдите VM для глубокого обучения на GCP Marketplace.

2. Нажмите Запустить на Compute Engine.

3. Дайте экземпляру имя и присвойте его ближайшему местоположению.

4. Установите тип машины 8 vCPUs.

5. Установите графический процессор на 1 K80.

6. Убедитесь, что в разделе Framework выбран PyTorch 1.0.

7. Установите флажок Установить NVIDIA GPU автоматически при первом запуске?

8. Установите загрузочный диск на SSD-диск постоянного хранения данных.

9. Нажмите Развернуть. Для полного развертывания виртуальной машины потребуется около пяти минут.

10. Чтобы подключиться к Jupyter в экземпляре, убедитесь, что вы вошли в правильный проект в gcloud, и выполните эту команду:

gcloud compute ssh _INSTANCE_NAME_ -- -L 8080:localhost:8080

Плата за Google Cloud должна составлять около 70 центов в час, что делает его самым дешевым из трех основных облачных провайдеров.

Какой облачный провайдер использовать?

Если у вас нет каких-либо конкретных предпочтений, то рекомендую Google Cloud Platform (GCP); это самый бюджетный вариант, который при необходимости гораздо проще масштабировать до использования тензорных процессоров, чем предложения AWS или Azure. Но если у вас уже есть ресурсы на одной из двух других платформ, то их среды прекрасно подойдут.

Когда облачный экземпляр будет запущен, вы сможете войти в копию Jupyter Notebook. Давайте разберемся, что же делать дальше.

Использование Jupyter Notebook

Jupyter Notebook — это браузерная среда, которая позволяет комбинировать живой код с текстом, изображениями и визуализациями и которая стала одним из главных инструментов исследователей данных по всему миру. Созданными в Jupyter блокнотами легко поделиться. Скриншот Jupyter Notebook в действии показан на рис. 1.2.

В этой книге мы не будем затрагивать какие-либо расширенные функции Jupyter. Все, что нужно знать, — это как создать новый блокнот и что Shift-Enter запускает содержимое ячейки. Если вы никогда раньше не использовали его, предлагаю ознакомиться с документацией Jupyter, прежде чем переходить к главе 2.

Перед тем как приступить к работе с PyTorch, рассмотрим то, как установить все вручную.

 

Рис. 1.2. Jupyter Notebook

Установка PyTorch с нуля

Возможно, вам требуется больше контроля своего программного обеспечения, чем просто использование одного из облачных изображений. Или коду нужна конкретная версия PyTorch. Или, несмотря на все мои предостережения, вы действительно хотите собрать собственный компьютер. Давайте узнаем, как установить PyTorch на сервере Linux.

Можно использовать PyTorch с Python 2.x, но настоятельно рекомендую не делать этого. Хотя эпопея обновления Python с 2.x до 3.x продолжается уже более десяти лет, все больше и больше пакетов начинают отказываться от поддержки Python 2.x. Поэтому, если нет веских причин этого не делать, убедитесь, что ваша система работает на Python 3.

Скачивание CUDA

Хотя PyTorch может работать в режиме CPU, в большинстве случаев для практического использования PyTorch требуется GPU, поэтому понадобится поддержка графического процессора. Это довольно просто; если есть карта NVIDIA, то настройки производятся через API-интерфейс Compute Unified Device Architecture (CUDA). Выберите на свой вкус соответствующий формат пакета Linux и установите его (https://oreil.ly/Gx_q2).

Для Red Hat Enterprise Linux (RHEL) 7:

sudo rpm -i cuda-repo-rhel7-10-0local-10.0.130-410.48-1.0-1.x86_64.rpm

sudo yum clean all

sudo yum install cuda

Для Ubuntu 18.04:

sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb

sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub

sudo apt-get update

sudo apt-get install cuda

Anaconda

У Python множество пакетов, у каждого из которых есть свои достоинства и недостатки. Как и разработчики PyTorch, я рекомендую вам установить Anaconda, обеспечивающий создание лучшего дистрибутива пакетов для специалистов по обработке данных. Как и CUDA, установить его довольно легко.

Перейдите на сайт Anaconda (https://www.anaconda.com/distribution/) и выберите установочный файл. Поскольку это огромный архив, который выполняется с помощью сценария командной оболочки, рекомендую запустить для загруженног

...