Возможности применения GPU для нейронных сетей

62
Возможности применения GPU для нейронных сетей Путенкова В.Ю. Научный руководитель: Буряк Д.Ю.

description

Возможности применения GPU для нейронных сетей. Путенкова В.Ю. Научный руководитель: Буряк Д.Ю. Особенности строения мозга:. общее число нейронов 10 10 число связей 10 13 время реакции нейрона 10 - 3 с. Схема нейрона головного мозга. Нейронные сети в биологических системах. - PowerPoint PPT Presentation

Transcript of Возможности применения GPU для нейронных сетей

Возможности применения GPU для нейронных сетей

Путенкова В.Ю.Научный руководитель: Буряк Д.Ю.

Нейронные сети в биологических системахНейрон

дендриты

сома

аксон

синапс

синапс

Схема нейрона головного мозга

Особенности строения мозга:

• общее число нейронов 1010

• число связей 1013

• время реакции нейрона 10-3с

Модель искусственного нейрона

Виды нейронных сетей

Применение нейросетей

• Классификация• Кластеризация• Аппроксимация функций• Оптимизация• Прогнозирование• Автоассоциативная память• Управление• Визуализация многомерных данных

• Т.о. существует принципиальная возможность распараллеливания

• Реализация конкретных алгоритмов сильно зависит от используемых архитектур вычислительных систем

Возможные способы параллелизации

• фазы обучения• обучающей выборки• на уровне слоя• на уровне нейрона• на уровне весов

Проблемы:

• Распределение вычислений по процессорам

• Затраты на обмен данными(особенности алгоритмов, пропускная способность, латентность)

• Вычислительная сложность(специализированные процессоры, ограничения на используемые операции)

Используемые архитектуры

• Кластеры• Многопроцессорные системы• Одно- и многоядерные CPU• GPU• Нейрочипы

Примеры реализаций нейросетевых алгоритмов на различных аппаратных архитектурах

Пример: РЕАЛИЗАЦИЯ АЛГОРИТМА ОБУЧЕНИЯ САМООРГАНИЗУЮЩИХСЯ КАРТ КОХОНЕНА

• задачи кластеризации массивов данных и построения контекстных карт признаков

Карты Кохонена

1. Инициализация2. Подвыборка3. Поиск максимального подобия4. Коррекция

5. Продолжение (шаг 2)

• Задача: o 64 входа, карта 25 нейронов,

o 2790 примеров, 30 циклов обучения

• Платформы:o неоднородный кластер (Ethernet);

o однородный кластер (32 Dual-Pentium, оптоволокно);

o мультипроцессорная система (64 процессора)

Карты Кохонена

Пример:Карты Кохонена

• Задача:o 100 входов карты, 25х25, 50х50 и 100х100 нейронов, o 60000 примеров, 50 циклов обучения

• Платформа: o Intel Core i7 920 (4 * 2.67GHz), Windows 7 64-bit. o NVIDIA GeForce GTX 680.o Microsoft VS 2010, для параллельной версии использовалась

надстройка NVIDIA Parallel Nsight v.2.1 и программный пакет NVIDIA CUDA Toolkit v4.2.

• Средний прирост скорости обучения относительно последовательной версии алгоритма для карты размера 25х25 нейронов составил 12,39 раз, для карты размера 50х50 нейронов 24,27 раз, а для карты размера 100х100 нейронов время работы параллельного алгоритма превышает время работы последовательного уже в 55,78 раз

Пример: ОБУЧЕНИЕ ТРЕХСЛОЙНОГО ПЕРЦЕПТРОНА

• m,n,k – нейронов ввходном,скрытом и выходном слоях• активационная функция сигмоида• Алгоритм обучения: обратногораспространения ошибки

Трехслойный перцептрон

1.Прямое распространение сигнала

2.Входной вектор3.Выходной желаемый вектор4.Ошибка на р-ом примере

Трехслойный перцептрон

5.Подстройка весов(минимизация ошибки методом градиентного спуска)

Трехслойный перцептрон

Особенности решения:• Для уменьшения числа обменов с глобальной

памятью GPU-> массивы данных в двумерные массивы и разбить их на блоки;

• Загруженность процессорных элементов, способная скрыть задержку при доступе к ГП GPU-> блоки нужного размера;

• Cнизить частоту обменов между CPU и GPU-> пакетная обработка обучающей выборки(перемножение матриц).

Трехслойный перцептрон

Результаты:• Аппаратная платформа:

o CPU: Intel Core 2 Duo 3.00 GHzo RAM: 3.25 Gbo GPU: GeForce 8800 GT, 256 RAM

• Задача:o нейронов входного и выходного слоёв:

1)512; 2)256.o нейронов скрытого слоя: ось абсцисс графиков

1)

2)

Пример: ЗАДАЧА ДИАГНОСТИКИ ПАЦИЕНТА,КАК ЗАДАЧА РАСПОЗНАВАНИЯ ОБРАЗА

Многослойный перцептрон

• Матрица входных элементов• Вектор выходных элементов• НС выполняет преобразованиеW – вектор весовых коэффициентов• Найти такие W*, которые

ошибку

Многослойный перцептрон

• Задача: o нейронов во входном/скрытом/выходном слое – 16/64/2o 87 пациентов(описывались 16ю показателями)o функция активации сигмоида

• Платформа:o Intel Pentium E5200o NVIDIA GeForce GTX550TI (ОП 4 ГБ)

• Результаты:o T[c] обучения/тестирования алгоритмом, реализованным для

центрального процессора – 712/26 с, с применением CUDA – 88/4 с

o Ускорение вычислений в 8/6,5 раз

Многослойный перцептрон

Пример: ЗАДАЧА РАСПОЗНАВАНИЯ ИЗОБРАЖЕНИЯ

• Задача:o Входной/скрытый/выходной 64/9/6(вых 26

букв+10 цифр в двоичной кодировке)o Обучение: метод Лавнеберга- Марквардта

• Платформа:

Трехслойный персептрон

• Результаты:

Пример:ПАРАЛЛЕЛЬНАЯ ОБРАБОТКА ПОТОКА ДАННЫХ

• Задача: o Трехслойный персептронo Нейронов во входном=скрытом=выходномo Входные данные разбиты на окна,

объединенные в блоки• Платформа:

o IntelCore 2 Duoo GeForce 8800GT

• Результаты:

уменьшение задержек доступа к памяти для чтения входных весов нейронов

Пример: РАСПОЗНАВАНИЕ РУКОПИСНЫХ ЦИФР

• Задача:o Обучение-обратное

распространение ошибкиo Тренировочный набор: 60000 раз по одному

вектору из 500o Тестовый набор: по одному из 10000 образцов

Сеть свертки

• Платформа:o CPU Intel Pentium D 925 (3000 МГц), 2 ГБ DDR2 (PC2-5300),o видеокарта на основе NVIDIA 9600GT; o Microsoft Windows XP Service Pack 3; o NVIDIA Forceware191.07 (дата выпуска 05.10.2009); o NVIDIA CUDA2.3 (Toolkit + SDK);o Microsoft C/C++ compiler 14.0 (Microsoft Visual Studio

2005 Service Pack 1).o Настройки оптимизации: Maximize Speed (/O2), Inline

Function Expansion (/Ob1), Enable Intrinsic Functions(/Oi), Favor Fast Code (/Ot).

• Результаты:

Ошибки распознавания:• 1.6% на GPU • 1.3% на CPU

Пример: Обратная задача магнитотеллурического зондирования

• Обратная задача: восстановление реальныххарактеристик пород по наблюдаемым эл-маг. полям

Многослойный персептрон

• Задача:o Градиентный спуск(обратное распространение

ошибки)o 1628/8/1 нейронов во

входном/скрытом/выходном слояхo 4 комплекта по 1680 персептроновo Обучающая выборка 30000 примеров, 20 эпох

• Результаты:

• CPU: AMD Athlon64 x2 Dual 6000+ 3.0 GHz

Итог:• CUDA

o 2580эпох обучения (на 1 сеть за 1 минуту)o 13 часов на все вычисления на GTX 285

• CPUo 35эпох обучения (на 1 сеть за 1 минуту на 1

ядро)o Примерно 2 месяцана 11 ядрах класса AMD 64

x2 3.0ГГц

Почему CUDA?

Особенности CPU Intel Core I-7Небольшое число мощных независимых

ядер •2,4,6,8 ядер, 2,66—3,6ГГц каждое •Каждое физическое ядро определяется

системой как 2 логических и может параллельно выполнять два потока (Hyper-Threading)

3 уровня кешей, большой кеш L3 •На каждое ядро L1=32KB (data) + 32KB

( Instructions), L2=256KB •Разделяемый L3 до 20 mb Обращения в память обрабатываются

отдельно для каждого процесса\нити Core I7-3960x, 6 ядер, 15MB L3

GPU Streaming Multiprocessor (SM)

Потоковый мультипроцессор «Единица» построения устройства (как ядро в

CPU): •32 скалярных ядра CUDA Core, ~1.5ГГц •2 Warp Scheduler-а •Файл регистров, 128KB •3 Кэша – текстурный, глобальный (L1),

константный(uniform) •PolyMorphEngine – графический конвейер •Текстурные юниты •Special Function Unit (SFU) – интерполяция и

трансцендентная математика одинарной точности

•16 x Load/Store unit

GPC4 Потоковых мультипроцессора

объединяются в GPC - Graphics Processing Cluster , минимальный блок видеокарты

Чип в максимальной конфигурации

•16 SM •512 ядер CUDA

Core •Кеш L2 758KB •GigaThreadEngin

e •Контроллеры

памяти DDR5 •Интерфейс PCI

Отличия GPU от CPU

Сотни упрощённых вычислительных ядер, работающих на небольшой тактовой частоте ~1.5ГГц (вместо 2-8 на CPU)

Небольшие кеши •32 ядра разделяют L1, с двумя режимами: 16KB или 48KB •L2 общий для всех ядер, 768 KB, L3 отсутствует Оперативная память с высокой пропускной способностью и

высокой латентностью • Оптимизирована для коллективного доступа Поддержка миллионов виртуальных нитей, быстрое

переключение контекста для групп нитей

Латентность памяти

Цель: эффективно загружать Ядра Проблема: латентность памяти Решение: •CPU: Сложная иерархия кешей •GPU: Много нитей, покрывать обращения одних

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

За счёт наличия сотен ядер и поддержки миллионов нитей (потребителей) на GPU легче заполнить всю полосу пропускания

Теоретическая пропускная способность и производительность GPU vs СPU

GPU - Graphics Processing Unit

• GPGPU - General-Purpose computing on GPU, вычисления общего вида на GPU

Первые GPU от NVIDIA с поддержкой GPGPU – GeForce восьмого поколения, G80 (2006 г)

• CUDA - Compute Unified Device Architecture (унифицированная архитектура вычислительного устройства)

Программно-аппаратная архитектура от Nvidia, позволяющая производить вычисления с использованием графических процессоров

CUDA в классификации Флинна

У Nvidia собственная модель исполнения, имеющая черты как SIMD, так и MIMD: Nvidia SIMT: Single Instruction – Multiple Thread- все нити из одного варпа одновременно выполняют одну инструкцию, варпы выполняются независимо

SIMT: виртуальные нити, блоки

Виртуально все нити: •выполняются параллельно (MIMD) •Имеют одинаковые права на доступ к памяти (MIMD :SMP) Нити разделены на группы одинакового размера (блоки): •В общем случае, глобальная синхронизация всех нитей

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

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

Нити не мигрируют между блоками. Каждая нить находится в своём блоке с начала выполнения и до конца.

SIMT: аппаратное выполнение • Все нити из одного блока выполняются на одном мультипроцессоре

(SM) • Максимальное число нитей в блоке – 1024 • Блоки не мигрируют между SM • Распределение блоков по мультироцесссорам непредсказуемо • Каждый SM работает независимо от других • Блоки нитей по фиксированному правилу разделяются на группы по

32 нити, называемые варпами (warp) • Все нити варпа одновременно выполняют одну общую инструкцию

(в точности SIMD-выполнение) • Warp Scheduler на каждом цикле работы выбирает варп, все нити

которого готовы к выполнению следующей инструкции и запускает весь варп

• Все нити варпа одновременно выполняют одну и ту же инструкцию

Несколько блоков на одном SM

SM может работать с варпами нескольких блоков одновременно

•Максимальное число резидентных блоков на одном мультипроцессоре – 8

•Максимальное число резидентных варпов – 48 = 1536 нитей Чем больше нитей активно на мультипроцессоре, тем

эффективнее используется оборудование • Блоки по 1024 нити – 1 блок на SM, 1024 нити, 66% от

максимума • Блоки по 100 нитей – 8 блоков на SM, 800 нитей, 52% • Блоки по 512 нитей – 3 блока на SM, 1536 нитей, 100%

Вычисления с использованием GPU

Программа, использующая GPU, состоит из: •Кода для GPU, описывающего необходимые

вычисления и работу с памятью устройства •Кода для CPU, в котором осуществляется – Управление памятью GPU – выделение /

освобождение – Обмен данными между GPU/CPU – Запуск кода для GPU – Обработка результатов и прочий последовательный

код

GPU рассматривается как периферийное устройство, управляемое центральным процессором

• GPU «пассивно», т.е. не может само загрузить себя работой

Код для GPU можно запускать из любого места программы как обычную функцию

Код для GPU (device-code)

Код для GPU пишется на C++ с некоторыми надстройками: •Атрибуты функций, переменных и структур •Встроенные функции

o Математика, реализованная на GPU o Синхронизации, коллективные операции

•Векторные типы данных •Встроенные переменные

o threadIdx, blockIdx, gridDim, blockDim

•Шаблоны для работы с текстурами •… Компилируется специальным компилятором cicc

Код для CPU (host-code)

Код для CPU дополняется вызовами специальных функций для работы с устройством

Код для CPU компилируется обычным компилятором

•Кроме конструкции запуска ядра <<<...>>>

Библиотеки в составе CUDA Toolkit

• Thrust – STL-подобная параллельная обработка данных• CUBLAS – функции линейной алгебры• CUSPARSE – операции с разреженными

матрицами/векторами• CURAND – генерация псевдослучайных чисел• CUFFT – быстрое дискретное преобразование Фурье• NPP – обработка сигналов, изображений и видео• NVCUVID/NVCUVENC – кодирование/декодирование

видео• Thrust – Библиотека шаблонов C++ Параллельные

алгоритмы и структуры данных

Основные приемы ускорения для нейронных сетей:

• Правильная постановка задачи«Мусор» на входе -> «мусор» на выходе

• Раскрытие циклов• Использование shared memory видеокарты для хранения

часто используемых значений• Организация обменов с памятью• Легковесные нити• Использование пакетного режима• Выравнивание данных• Использование специализированных библиотек (CUBLASS,

CUFFR и др.)• Запускать как можно больше нитей

Направления развития

• Направление GPU: Kepler, Maxwell, SDK CUDA-x86

• Направление ARM • Направление реконфигурируемых чипов • Создание пакета программ «Neuron-GPU»