Статья опубликована в рамках: LXXIII Международной научно-практической конференции «Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ» (Россия, г. Новосибирск, 17 января 2019 г.)
Наука: Информационные технологии
Скачать книгу(-и): Сборник статей конференции
дипломов
TORCH7, КАК СРЕДА ДЛЯ МАШИННОГО ОБУЧЕНИЯ
Аннотация. Torch7 - это универсальная цифровая вычислительная платформа и библиотека машинного обучения, которая расширяет Lua. Его целью является создание гибкой среды для проектирования и обучения обучающих машин. Гибкость достигается с помощью Lua, чрезвычайно легкого скриптового языка. Высокая производительность достигается за счет эффективной реализации низкоуровневых числовых подпрограмм OpenMP/SSE и CUDA. Torch7 может быть легко подключен к стороннему программному обеспечению благодаря легкому интерфейсу Lua.
Ключевые слова: Torch7, Lua, CUDA, OpenMP, Numpy, Python.
Описание Torch 7
С Torch7 [3] мы стремимся предоставить структуру с тремя основными преимуществами:
1.она должна облегчить разработку численных алгоритмов;
2.она должна быть легко расширена (включая использование других библиотек);
3.она должна быть быстрой.
Было обнаружено, что скриптовый (интерпретируемый) язык с хорошим C API выглядит как удобное решение для "удовлетворения" ограничения. Во-первых, язык высокого уровня делает процесс разработки программы более простым и понятным, чем язык низкого уровня. Во-вторых, при интерпретации языка программирования становится проще быстро и интерактивно опробовать различные идеи. И, наконец, предполагая хороший C API, язык сценариев становится связующим звеном между разнородными библиотеками: различные структуры одной и той же концепции (исходящие из разных библиотек) могут быть скрыты за уникальной структурой в языке сценариев, сохраняя при этом все функциональные возможности, поступающие из всех разных библиотек.
Среди существующих языков сценариев поиск тех, которые удовлетворяют условию 3, из-за этого выбор уменьшился. Был выбран Lua[4], самый быстрый интерпретируемый язык (а также самый быстрый компилятор Just In Time (JIT)), который был найден. Преимущество Lua в том, что оно был разработан так, чтобы его можно было легко встраивать в приложение C, и предоставляет отличный C API, основанный на виртуальном стеке для передачи значений в и из C. Это унифицирует интерфейс к C / C ++ и делает использование библиотеки удобнее.
Lua предназначен для использования в качестве мощного и легкого языка сценариев для любой программы, которая в нем нуждается. Lua реализован в виде библиотеки, написанной на чистом C (то есть в общем подмножестве ANSI C и C ++). Цитирую веб-страницу Lua. «Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode for a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping.»
Lua предлагает хорошую поддержку объектно-ориентированного программирования, функционального программирования и программирования на основе данных. Основным типом Lua является таблица, которая очень эффективно реализует ассоциативные массивы. Ассоциативный массив - это массив, который может быть проиндексирован не только числами, но и строками или любым другим значением языка. Таблицы не имеют фиксированного размера, могут динамически изменяться и могут использоваться в качестве” виртуальных таблиц" над другой таблицей для имитации различных объектно-ориентированных парадигм. Таблицы - единственный механизм структурирования данных в Lua, но этот механизм довольно мощный. Мы используем таблицы для представления простых массивов, таблиц символов, наборов, записей, очередей и других структур данных простым, единообразным и эффективным способом. Lua также использует таблицы для представления пакетов.
Эффективность Torch7
Torch7 был разработан с учетом эффективности, по возможности используя SSE и поддерживая два способа распараллеливания: OpenMP и CUDA. Библиотека Tensor (взаимодействующая с пакетом «torch» в Lua) интенсивно использует эти методы. С точки зрения пользователя, включение CUDA и OpenMP может привести к значительному ускорению работы любого сценария «Lua» при нулевых затратах на реализацию (поскольку большинство пакетов используют библиотеку Tensor). Другие пакеты (например, пакет «nn») также используют OpenMP и CUDA для более специфического использования, не охватываемого библиотекой Tensor.
Поддержка OpenMP
Open Multi-Processing (OpenMP) обеспечивает инфраструктуру распараллеливания ЦП с общей памятью на языках C / C ++ и Fortran[1] практически в каждой операционной системе и на наборе инструментов компилятора. Как правило, требуется минимальная модификация для интеграции в существующий проект. Torch7 разработан и разработан для использования директив OpenMP для различных операций в своей тензорной библиотеке и пакете нейронной сети. Хотя детали спецификации OpenMP выходят за рамки этой работы, ниже мы покажем одну из наиболее часто используемых директив OpenMP - распараллеливание по циклам for.
Поддержка CUDA
CUDA (Compute Unified Device Architecture) - это платформа nVidia для программирования графических процессоров для выполнения вычислений общего назначения. CUDA раскрывает иерархию памяти, доступной графическому процессору, двумя основными из которых являются внешняя (большая, с большой задержкой) DRAM и внутренняя общая память (несколько килобайт, низкая задержка). Он также раскрывает иерархию вычислительных ядер и то, как они взаимодействуют друг с другом и с различными типами памяти.
Тесты и результаты
В недавней работе авторы представили новый компилятор для математических выражений, построенный на Python и Numpy. Что касается Torch7, Theano[2] (в настоящее время) в основном используется в рамках нейронной сети. Theano может работать на процессоре или графическом процессоре. Авторы Theano показали эталонные тесты (включающие в себя обучение различным архитектурам нейронных сетей), сокрушающие другие альтернативные реализации (при работе Theano на GPU), включая Torch5, Matlab с GPUmat (работает на GPU) или EBLearn. Мы решили воспроизвести эти точные тесты, ограничившись Torch7 и Theano, поскольку Theano выглядит уже быстрее, чем любая существующая реализация.
Тест был проведён на Intel i7 2600 с 4 ядрами. Другой тест был проведён на nVidia GTX 660 Ti.
Рисунок 1. Torch7, Theano
Тесты Torch7 (красные полосы) против Theano (сплошной зеленый), в то время как тренировка различных архитектуры нейронных сетей с SGD. Мы рассмотрели одно ядро процессора, OpenMP с 4 ядрами и альтернативы GPU. Производительность дана в количестве примеров, обработанных за секунду (выше лучше). «Партия» означает, что 60 примеров были поданы во время обучения с SGD.
Заключение
Torch7 быстрее, чем Theano, в большинстве тестов. Интересно, что Theano действительно отстает от небольших архитектур, что может быть связано с большими накладными расходами Python. Еще один интересный комментарий - отличная производительность OpenMP по сравнению с реализацией на GPU: только самые большие архитектуры получат выгоду от GPU.
Список литературы:
- Г. Рутм, М. Фатика, CUDA Fortran для ученых и инженеров, ISBN: 978-5-97060-065-8, 2014 г. – 364 с.
- Материал из Википедии — свободной энциклопедии, Theano, URL: https://ru.wikipedia.org/wiki/Theano (дата обращения: 03.01.2019)
- Материал из Википедии — свободной энциклопедии, Torch, URL: https://ru.wikipedia.org/wiki/Torch (дата обращения: 02.01.2019)
- Программирование на языке Lua, Третье издание, Roberto Ierusalimschy, URL: http://computercraft.ru/public/lua.pdf (дата обращения: 01.01.2019)
дипломов
Оставить комментарий