Изменения

Перейти к: навигация, поиск

Многопоточность в машинном обучении

53 байта добавлено, 02:15, 24 декабря 2020
Переформулировка некоторых разделов
Следует выделить следующие виды параллелизма:
* Параллелизм на уровне инструкций (ILP): запускать несколько инструкций исполняются одновременно.* Параллелизм типа одна инструкция множество данных(SIMD): одна инструкция работает с вектором чиселоперация применяется к множеству данных
* Многопоточный параллелизм: несколько независимых рабочих потоков взаимодействуют через абстракцию совместно используемой памяти.
* Распределенные вычисления: несколько независимых рабочих компьютеров взаимодействуют по сети. (MLlib на Spark, Mahout на Hadoop)
== Идеи используемые для ускорения вычислений в ML ==
=== Параллелизм для ускорения линейной алгебры. ===
Мы можем значительно повысить производительность, создав ядра Многие операции линейной алгебры (, например, умножение матриц, векторное сложение , произведение матриц и твычисление нормы состоят из большого количества независимых операций.д.)Поэтому можно сильно повысить их производительность как за счёт ILP и SIMD параллелизма для маленьких данных, которые используют параллелизм так и за счёт многопоточности для больших данных. От ускорения работы. Поскольку умножение матриц занимает линейной алгебры особенно выигрывают нейронные сети, так как большую часть времени обучения нейронных сетей, это может привести к значительному сквозному ускорению обучающего конвейера. В основе этого лежит параллелизм ILP, SIMD а для больших их работы занимает умножение матриц также может использоваться многопоточность.
Примеры оптимизаций:
* Высоко оптимизированные тензорные библиотеки для арифметики.
* Алгоритмы в терминах матричных операций, а не векторных операций, насколько это возможно.
* Broadcast операции, а не циклывместо циклов.
* Распараллеленные реализации некоторых специальных операций (таких как свертки для [[Сверточные нейронные сети | CNN]]).
=== Параллелизм GPU ===
Типичное число потоков обработки графического процессора - десятки тысяч, что позволяет вычислять Графические процессоры позволяют применять одну и ту же операцию параллельно на множестве к десяткам тысяч элементовза счет большого числа потоков.
Фреймворки машинного обучения, такие как TensorFlow, PyTorch и MxNet используют эти возможности через библиотеки от компаний производителей графических ускорителей и открытые фреймворки:
C[globalCol * M + globalRow] = acc;
}
=== Параллелизм SGD в стохастическом градиентном спуске ===Запускаем Можно запустить внешний цикл [[Стохастический градиентный спуск|стохастического градиентного спуска (SGD)]] параллельно в пуле потоков и используем использовать конструкции синхронизации, такие как блокировки, чтобы предотвратить состояние гонки. Но это может работать медленно Однако из-за накладных расходов на синхронизациюускорение может получиться маленьким.
Еще более интересная идея (называемая называется асинхронным SGD или Hogwild): Несколько потоков запускают . SGD запускается параллельно в несколько потоков без какой-либо синхронизации. Теперь условия состояния гонки могут возникнуть, но оказывается, что во многих случаях это хорошо, потому что они просто немного изменяют шум/ошибка в условиях гонки просто добавляет небольшое количество к шуму/ошибке, и ошибки уже присутствующей в алгоритм присутствующие из-за случайной выборки случайного выбора градиента.
== Источники информации ==
10
правок

Навигация