В начале декабря исследователи из OpenAI представили библиотеку инструментов, которая поможет ускорить обучение нейронных сетей на GPU от Nvidia за счет использования разреженных матриц. О том, с какими трудностями сталкиваются разработчики нейронных сетей и в чем основная идея решения от OpenAI, расскажем далее.


/ фото alantankenghoe CC

Трудности тренировки крупных нейронных сетей на GPU


Графические процессоры (GPU) лучше подходят для машинного обучения, чем центральные процессоры (CPU). Технические особенности помогают GPU выполнять одновременно множество матричных операций, которые используются для обучения нейронных сетей.

Чтобы добиться схожего результата на центральном процессоре, придется выстроить инфраструктуру из нескольких кластеров CPU, что очень дорого. Система Google для тренировки нейросетей на CPU стоила порядка 5 млрд долларов. Сегодня ученые из Стэнфорда построили систему с аналогичной вычислительной мощностью на GPU всего за 33 тыс. долларов.

Однако здесь есть трудности: использовать весь потенциал GPU на ресурсоемких задачах не так просто. Для обработки данные должны храниться в памяти GPU, однако её объем невелик, что затрудняет тренировку крупных моделей. Например, модель VGG-16 требует около 14 ГБ, в то время как объем памяти Nvidia Titan X составляет 12 ГБ. И эту карту Nvidia позиционирует как один из самых мощных GPU для глубокого обучения.

Как верно заметил EvilGenius18 в комментариях, 7 декабря компания Nvidia представила новую карту Titan V на архитектуре Volta. Она обладает вычислительной мощностью 110 TFLOPS на задачах глубокого обучения, что в 9 раз больше, чем у предшественницы.

При этом для эффективной тренировки крупных моделей нейронных сетей используют различные подходы. Один из них — обработка данных на графическом процессоре последовательными партиями, когда CPU выступает временным контейнером. Минус такого подхода — расходование ресурсов на перенос данных.

Возможно одновременное использование нескольких графических процессоров, но количество GPU на одном компьютере ограничено, поэтому требуется высокоскоростное соединение между вычислительными системами. Межкомпьютерный канал связи сказывается на скорости обучения, поскольку машины в таком случае тратят больше времени на «общение», чем на вычисления.

Есть и еще одно решение, которое применяется в машинном обучении для оптимизации, — разреженные матрицы. Это матрицы, которые в основном содержат нулевые элементы. Преимущество заключается в том, что нули в матричных операциях воспринимаются как пустые компоненты. Поэтому такие матрицы расходуют меньше памяти графического процессора. Это ускоряет процедуру машинного обучения, что важно для больших моделей.

Но есть проблема: решения Nvidia, главного поставщика GPU, не поддерживают работу с разреженными матрицами. Но в OpenAI нашли выход из этой ситуации.

Решение от OpenAI


Команда OpenAI разработала программное обеспечение, которое моделирует работу крошечных ядер, способных взаимодействовать с такими матрицами. Ядра опробовали на обучении сетей, анализирующих обзоры на сайтах Amazon и IMDB. Как сообщает команда, уровень ошибок в работе со сводом данных IMDB был снижен с 5,91% до 5,01%.

Ядра реализованы с использованием CUDA, программно-аппаратной архитектуры параллельных вычислений от Nvidia. Но модель OpenAI пока доступна только для TensorFlow. Скотт Грей (Scott Gray), член команды Open AI, сказал, что решение может быть распространено на другие архитектуры, кроме Google TPU2. Компания Nvidia уже знает о работе OpenAI и готова оптимизировать свои системы.

Альтернативные проекты


Концепция разреженных матриц получила свое воплощение в компиляторе с открытым исходным кодом под названием Taco. О проекте, над которым работает команда ученых из Массачусетского технологического института в партнерстве с Adobe Research, стало известно в ноябре. Разработчики искали способ автоматизировать процесс обработки чисел в разреженных матрицах. И использовали для этого тензоры.

О своих разработках в области машинного обучения в декабре отчиталась и компания IBM. Решение ИТ-гиганта — DuHL — предлагает новый метод переноса данных с CPU на GPU. Основная задача технологии — определить, какая информация наиболее важна для алгоритма обучения, и передать её сети в правильном порядке. Исследования показали, что новый подход на основе DuHL в 10 раз быстрее по сравнению с классическим методом последовательной передачи данных между процессорами. Следующая цель компании — предложить DuHL как услугу в облаке.

Но в IBM не первыми придумали переносить GPU-вычисления в облако. Подобные проекты, работающие в том числе по модели IaaS, уже известны. Изначально услугу vGPU предоставляла компания Nvidia. Сейчас этим занимаются и AMD, и Intel.

Об OpenAI

OpenAI — это некоммерческая исследовательская организация, основанная главой Tesla Илоном Маском. Она ставит своей задачей продвижение и развитие искусственного интеллекта на благо человечества. Организация плотно сотрудничает с другими учреждениями и исследователями, предоставляя открытый доступ к своим разработкам.



P.S. Еще несколько материалов из нашего корпоративного блога:

Комментарии (13)


  1. EvilGenius18
    10.12.2017 16:45

    объем памяти Nvidia Titan X составляет 12 ГБ. И эту карту Nvidia позиционирует как один из самых мощных GPU для глубокого обучения

    Информация уже устарела, замените на Nvidia Titan V

    Nvidia Titan V представили пару дней назад, на архитектуре Volta, имеет 100+TFLOPS в задачах глубокого обучения, что в 5 раз быстрее предыдущей ахитектуры Pascal (Nvidia Titan X).


    1. erwins22
      10.12.2017 20:01

      Там тензорные процессоры, так что уверенности что данный код будет эффективен на Титан5 нет.


      1. EvilGenius18
        10.12.2017 20:15

        В Nvidia Titan V есть и CUDA (5120) и тензорные ядры (640).
        По словам Nvidia, производительность в задачах глубокого обучения у Nvidia Titan V в 5 раз выше предыдущей архитектуры Pascal:


        1. erwins22
          10.12.2017 20:21

          «Скотт Грей (Scott Gray), член команды Open AI, сказал, что решение может быть распространено на другие архитектуры, кроме Google TPU2.»

          Т.е. разряженные матрицы плохо ложатся на тензорные процессоры.


          1. AndrewSu
            10.12.2017 20:59
            +1

            Т.е. разряженные матрицы плохо ложатся на тензорные процессоры.

            Разреженные матрицы в целом не очень хорошо ложатся на современные архитектуры из-за непоследовательного доступа к памяти (что на CPU, что на GPU). И к ним сложно применить SIMD инструкции. Поэтому положительный эффект достигается только при достаточно низкой 'плотности' матрицы.


            1. erwins22
              10.12.2017 21:30
              -1

              Почему такой вывод? посмотрите как это реализовано в intel Xeon Phi.
              Там есть команды simd умножения разряженных матриц.


              1. AndrewSu
                10.12.2017 23:59

                Там есть команды simd умножения разряженных матриц.
                Про такие команды не слышал, если можно, то поясните.

                Умножение разряженных матриц, наверное, одна из самых сложных операций для компьютеров. Даже если взять более простую операцию — умножение разреженной матрицы на плотный вектор, то Xeon Phi далеко не достигает своей пиковой производительности (см. здесь). Для разреженного умножения матрицы на матрицу его использование вообще сомнительно.


            1. RomanArzumanyan
              11.12.2017 13:27

              Работа с разреженными матрицами — хлеб и соль CFD (Computational Fluid Dynamics). Существуют различные способы их хранения и представления в памяти. Из простейших — хранение только диагональных элементов, которое не только улучшает шаблон обращения к памяти, но и уменьшает объём занимаемой памяти с O(N^2) до O(N).


              1. AndrewSu
                11.12.2017 23:36

                То, что разреженные матрицы не очень хорошо ложатся на современные архитектуры, никоим образом не умаляет их достоинств. Некоторые задачи и вовсе нельзя решить за разумное время, используя плотные матрицы, и задачи, аналогичные вашей, хорошее этому подтверждение.
                Для ленточных матриц, безусловно доступ к памяти более оптимален, чем для разреженных матриц в более общих форматах CSR и COO.
                Ленточные матрицы для себя я всегда выделял в некий отдельный класс в силу высокой плотности хранения.


        1. Flux
          11.12.2017 00:47

          Эти терафлопсы довольно таки кукурузные, потому что оперируют с fp16. По крайней мере в большинстве ML задач требуется минимум fp32, а квантизуют уже после обучения.


    1. Randl
      11.12.2017 01:28

      Впрочем, больше ничего менять не придется, ведь памяти все так же 12 гигов.


  1. RomanArzumanyan
    11.12.2017 13:26

    del


  1. brickerino
    11.12.2017 22:07

    Не очень понятно про «ядра» от OpenAI.

    Речь идет про gpu-kernel (что является синонимом функции, выполняющей на GPU), или они ввели какие-то новые высокоуровневые абстракции?