***** 1 - Суперкомпьютерная обработка экспериментальных

advertisement
Возможности применения
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 GHz
o RAM: 3.25 Gb
o GPU: GeForce 8800 GT, 256 RAM
• Задача:
o нейронов входного и выходного слоёв:
1)512; 2)256.
o нейронов скрытого слоя: ось абсцисс графиков
1)
2)
Пример: ЗАДАЧА ДИАГНОСТИКИ
ПАЦИЕНТА,КАК ЗАДАЧА
РАСПОЗНАВАНИЯ ОБРАЗА
Многослойный перцептрон
Многослойный перцептрон
• Матрица входных элементов
• Вектор выходных элементов
• НС выполняет преобразование
W – вектор весовых коэффициентов
• Найти такие W*, которые
ошибку
Многослойный перцептрон
• Задача:
o нейронов во входном/скрытом/выходном слое – 16/64/2
o 87 пациентов(описывались 16ю показателями)
o функция активации сигмоида
• Платформа:
o Intel Pentium E5200
o 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 Duo
o GeForce 8800GT
• Результаты:
уменьшение задержек доступа к памяти
для чтения входных весов нейронов
Пример: РАСПОЗНАВАНИЕ
РУКОПИСНЫХ ЦИФР
• Задача:
o Обучение-обратное
распространение ошибки
o Тренировочный набор: 60000 раз по одному
вектору из 500
o Тестовый набор: по одному из 10000 образцов
Сеть свертки
• Платформа:
o CPU Intel Pentium D 925 (3000 МГц), 2 ГБ DDR2 (PC25300),
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
• CPU
o 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
GPC
4 Потоковых мультипроцессора
объединяются в GPC - Graphics Processing
Cluster , минимальный блок видеокарты
Чип в максимальной конфигурации
•16 SM
•512 ядер CUDA
Core
•Кеш L2 758KB
•GigaThreadEngine
•Контроллеры
памяти 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»
Download