.. _sec_buy_gpu: Выбор серверов и графических процессоров ======================================== Обучение в глубоком обучении обычно требует больших объёмов вычислений. В настоящее время графические процессоры (GPU) являются наиболее экономически эффективными аппаратными ускорителями для глубокого обучения. В частности, по сравнению с центральными процессорами (CPU), GPU дешевле и обеспечивают более высокую производительность, часто превосходящую показатели CPU более чем на порядок. Кроме того, один сервер может поддерживать несколько GPU, до 8 в высокопроизводительных серверах. Более типичные значения — до 4 GPU для инженерной рабочей станции, поскольку требования к теплоотводу, охлаждению и электропитанию быстро возрастают и превышают возможности офисных зданий. Для более масштабных развертываний облачные вычисления (например, объекты `P3 `__ и `G4 `__ от Amazon) представляют собой гораздо более практичное решение. Выбор серверов -------------- Как правило, нет необходимости приобретать высокопроизводительные процессоры с большим количеством потоков, поскольку значительная часть вычислений выполняется на графических процессорах. Тем не менее, из-за глобальной блокировки интерпретатора (GIL) в Python производительность одного потока процессора может иметь значение в ситуациях, когда используется 4–8 графических процессоров. При прочих равных условиях это означает, что процессоры с меньшим количеством ядер, но более высокой тактовой частотой могут оказаться более экономичным выбором. Например, при выборе между 6-ядерным процессором с частотой 4 ГГц и 8-ядерным процессором с частотой 3,5 ГГц первый вариант гораздо предпочтительнее, даже если его суммарная производительность ниже. Важным аспектом является то, что графические процессоры потребляют много энергии и, следовательно, выделяют много тепла. Это требует очень эффективного охлаждения и достаточно большого корпуса для размещения графических процессоров. Если возможно, следуйте приведённым ниже рекомендациям: 1. **Блок питания**. Видеокарты потребляют значительное количество энергии. Закладывайте до 350 Вт на устройство (проверяйте *пиковое энергопотребление* видеокарты, а не типичное, поскольку эффективный код может потреблять много энергии). Если мощности вашего блока питания недостаточно, система станет нестабильной. 2. **Размер шасси**. Видеокарты имеют большие габариты, а для подключения дополнительных разъемов питания часто требуется дополнительное пространство. Кроме того, большие шасси проще охлаждать. 3. **Охлаждение GPU**. Если у вас большое количество графических процессоров, стоит инвестировать в систему водяного охлаждения. Также стремитесь к *референсным конструкциям*, даже если они оснащены меньшим количеством вентиляторов, поскольку их малая толщина позволяет обеспечить приток воздуха между устройствами. Если вы приобретёте GPU с несколькими вентиляторами, он может оказаться слишком толстым, что затруднит достаточный приток воздуха при установке нескольких графических процессоров, и вы столкнётесь с троттлингом из-за перегрева. 4. **Слоты PCIe**. Передача данных в GPU и из него (а также обмен данными между GPU) требует высокой пропускной способности. Мы рекомендуем использовать слоты PCIe 3.0 с 16 линиями. Если вы устанавливаете несколько GPU, обязательно внимательно изучите описание материнской платы, чтобы убедиться, что пропускная способность 16\ :math:`\times` сохраняется при одновременном использовании нескольких GPU, а дополнительные слоты соответствуют стандарту PCIe 3.0, а не PCIe 2.0. На некоторых материнских платах при установке нескольких GPU пропускная способность снижается до 8\ :math:`\times` или даже до 4\ :math:`\times`. Это частично связано с количеством линий PCIe, предоставляемых процессором. Короче говоря, вот несколько рекомендаций по созданию сервера для глубокого обучения: - **Начинающим**. Купите недорогой GPU с низким энергопотреблением (бюджетные игровые видеокарты, подходящие для глубокого обучения, потребляют 150–200 Вт). Если повезёт, ваш текущий компьютер сможет его поддерживать. - **1 GPU**. Процессора с 4 ядрами будет достаточно, и большинство материнских плат также подойдут. Рекомендуется иметь как минимум 32 ГБ оперативной памяти и установить SSD для быстрого доступа к локальным данным. Блок питания мощностью 600 Вт должен быть достаточным. Выбирайте видеокарту с большим количеством вентиляторов. - **2 GPU**. Процессора начального уровня с 4–6 ядрами будет достаточно. Рекомендуется 64 ГБ оперативной памяти и SSD. Для двух высокопроизводительных GPU потребуется блок питания мощностью около 1000 Вт. Что касается материнских плат, убедитесь, что они имеют *два* слота PCIe 3.0 x16. Если есть возможность, выберите материнскую плату с двумя свободными местами (с шагом 60 мм) между слотами PCIe 3.0 x16 для улучшения охлаждения. В этом случае покупайте два GPU с большим количеством вентиляторов. - **4 GPU**. Убедитесь, что покупаете процессор с относительно высокой однопоточной производительностью (то есть с высокой тактовой частотой). Вероятно, вам понадобится процессор с большим количеством линий PCIe, например, AMD Threadripper. Скорее всего, вам понадобятся относительно дорогие материнские платы, чтобы получить 4 слота PCIe 3.0 x16, поскольку для мультиплексирования линий PCIe, вероятно, потребуется чип PLX. Покупайте GPU с эталонным дизайном, которые являются узкими и обеспечивают воздушный зазор между картами. Вам понадобится блок питания мощностью 1600–2000 Вт, и розетка в вашем офисе может не поддерживать такую нагрузку. Этот сервер, вероятно, будет работать *громко и горячо*. Не ставьте его под стол. Рекомендуется 128 ГБ оперативной памяти. Получите SSD (1–2 ТБ NVMe) для локального хранения и несколько жёстких дисков в конфигурации RAID для хранения ваших данных. - **8 GPU**. Вам потребуется приобрести выделенный корпус сервера с поддержкой нескольких GPU и несколькими избыточными блоками питания (например, конфигурация 2+1 для блоков питания мощностью 1600 Вт каждый). Для этого понадобятся серверные процессоры с двумя сокетами, 256 ГБ оперативной памяти ECC, быстрая сетевая карта (рекомендуется 10 Гбит/с), а также необходимо убедиться, что сервер поддерживает *физический форм-фактор* используемых GPU. Организация воздушного потока и прокладка кабелей существенно различаются для потребительских и серверных GPU (например, RTX 2080 и Tesla V100). Это означает, что вы можете столкнуться с невозможностью установки потребительской видеокарты в сервер из-за недостаточного зазора для силового кабеля или отсутствия подходящего кабельного жгута (что одному из соавторов пришлось узнать на собственном болезненном опыте). Выбор GPU --------- В настоящее время AMD и NVIDIA являются двумя основными производителями выделенных графических процессоров. NVIDIA первой вышла на рынок глубокого обучения и обеспечивает лучшую поддержку фреймворков глубокого обучения благодаря CUDA. Поэтому большинство покупателей выбирают графические процессоры NVIDIA. NVIDIA предлагает два типа графических процессоров: для индивидуальных пользователей (например, серии GTX и RTX) и для корпоративных клиентов (серия Tesla). Оба типа обеспечивают сопоставимую вычислительную мощность. Однако корпоративные GPU обычно оснащаются пассивным охлаждением с принудительной подачей воздуха, большим объёмом памяти и памятью с коррекцией ошибок (ECC). Такие графические процессоры более подходят для центров обработки данных и, как правило, стоят в десять раз дороже потребительских моделей. Если вы представляете крупную компанию с 100 и более серверами, следует рассмотреть вариант использования серии NVIDIA Tesla или облачных GPU-серверов. Для лаборатории или небольшой и средней компании с 10 и более серверами наиболее рентабельным, скорее всего, окажется серия NVIDIA RTX. Вы можете приобрести предварительно сконфигурированные серверы в корпусах Supermicro или Asus, обеспечивающие эффективное размещение 4–8 GPU. Производители графических процессоров обычно выпускают новое поколение каждые один-два года, например, серию GTX 1000 (Pascal), выпущенную в 2017 году, и серию RTX 2000 (Turing), выпущенную в 2019 году. Каждая серия включает несколько различных моделей, обеспечивающих разный уровень производительности. Производительность графического процессора в первую очередь определяется сочетанием следующих трёх параметров: 1. **Вычислительная мощность**. Как правило, мы ориентируемся на вычислительную мощность с плавающей запятой 32-битной точности. Обучение с использованием чисел с плавающей запятой 16-битной точности (FP16) также становится всё более популярным. Если вас интересует только предсказание, можно использовать целочисленные вычисления 8-битной точности. Новейшее поколение GPU на архитектуре Turing обеспечивает ускорение для вычислений 4-битной точности. К сожалению, на момент написания этой книги алгоритмы обучения сетей с низкой точностью ещё не получили широкого распространения. 2. **Размер памяти**. По мере увеличения размера моделей или размера батчей, используемых в процессе обучения, вам потребуется больше памяти GPU. Обращайте внимание на тип памяти: HBM2 (High Bandwidth Memory) или GDDR6 (Graphics DDR). HBM2 работает быстрее, но стоит значительно дороже. 3. **Пропускная способность памяти**. Вы сможете в полной мере использовать вычислительную мощность только при наличии достаточной пропускной способности памяти. При использовании GDDR6 обращайте внимание на ширину шины памяти. Для большинства пользователей достаточно обратить внимание на вычислительную мощность. Обратите внимание, что многие GPU предлагают различные виды ускорения. Например, Tensor Cores от NVIDIA ускоряют выполнение подмножества операторов в 5 раз :math:`\times`. Убедитесь, что ваши библиотеки поддерживают это. Память GPU должна составлять не менее 4 ГБ (8 ГБ — гораздо лучше). Старайтесь не использовать GPU для отображения графического интерфейса (вместо этого используйте встроенную графику). Если избежать этого невозможно, добавьте дополнительно 2 ГБ памяти для запаса. :numref:`fig_flopsvsprice` сравнивает вычислительную мощность с плавающей запятой двойной точности (32 бита) и стоимость различных моделей серий GTX 900, GTX 1000 и RTX 2000. Указанные цены соответствуют данным, опубликованным в Wikipedia на момент написания текста. .. _fig_flopsvsprice: .. figure:: ../img/flopsvsprice.svg Сравнение вычислительной мощности с плавающей запятой и стоимости. Мы можем отметить несколько моментов: 1. В пределах каждой серии цена и производительность примерно пропорциональны. Модели серии Titan имеют существенную наценку за счёт большего объёма памяти GPU. Однако новые модели обеспечивают лучшее соотношение цены и производительности, что видно при сравнении 980 Ti и 1080 Ti. Цена для серии RTX 2000 не выглядит значительно улучшенной. Однако это связано с тем, что они предлагают значительно более высокую производительность при низкоточных вычислениях (FP16, INT8 и INT4). 2. Соотношение производительности к стоимости у серии GTX 1000 примерно в два раза выше, чем у серии 900. 3. Для серии RTX 2000 производительность (в GFLOPs) является *аффинной* функцией цены. .. _fig_wattvsprice: .. figure:: ../img/wattvsprice.svg Производительность вычислений с плавающей запятой и энергопотребление. :numref:`fig_wattvsprice` показывает, что энергопотребление масштабируется преимущественно линейно в зависимости от объёма вычислений. Во-вторых, более новые поколения устройств работают эффективнее. Это, казалось бы, противоречит графику, соответствующему серии RTX 2000. Однако это является следствием использования TensorCores, которые потребляют непропорционально много энергии. Итог ---- - Обратите внимание на мощность, количество линий шины PCIe, скорость однопоточной работы процессора и охлаждение при сборке сервера. - Если возможно, следует приобретать видеокарты последнего поколения. - Используйте облако для крупных развертываний. - Серверы высокой плотности могут быть несовместимы со всеми типами GPU. Перед покупкой проверьте механические характеристики и требования к охлаждению. - Используйте FP16 или точность ниже для высокой эффективности. `Обсуждения `__