Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: LXXIII Международной научно-практической конференции «Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ» (Россия, г. Новосибирск, 17 января 2019 г.)

Наука: Информационные технологии

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Нурмухаметов Д.Р. TORCH7, КАК СРЕДА ДЛЯ МАШИННОГО ОБУЧЕНИЯ // Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ: сб. ст. по мат. LXXIII междунар. студ. науч.-практ. конф. № 1(72). URL: https://sibac.info/archive/technic/1(72).pdf (дата обращения: 19.04.2024)
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

TORCH7, КАК СРЕДА ДЛЯ МАШИННОГО ОБУЧЕНИЯ

Нурмухаметов Дамир Рустемович

студент 3 курса, кафедра АСУ УГАТУ,

РФ, г. Уфа

Аннотация. 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.

 

Список литературы:

  1. Г. Рутм, М. Фатика, CUDA Fortran для ученых и инженеров, ISBN: 978-5-97060-065-8, 2014 г. – 364 с.
  2. Материал из Википедии — свободной энциклопедии, Theano, URL: https://ru.wikipedia.org/wiki/Theano (дата обращения: 03.01.2019)
  3. Материал из Википедии — свободной энциклопедии, Torch, URL: https://ru.wikipedia.org/wiki/Torch (дата обращения: 02.01.2019)
  4. Программирование на языке Lua, Третье издание, Roberto Ierusalimschy, URL: http://computercraft.ru/public/lua.pdf (дата обращения: 01.01.2019)
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.