376
Приложения
для таких операций, как свертка и умножение матриц, а затем специфицируют моде-
ли в терминах обращений к библиотеке. Например, в библиотеке машинного обуче-
ния Pylearn2 (Goodfellow et al., 2013c) все алгоритмы специфицированы в терминах
обращений к библиотекам Тheano (Bergstra et al., 2010; Bastien et al., 2012) и cuda-
convnet (Krizhevsky, 2010), предоставляющих высокопроизводительные операции.
Такое распределение обязанностей заодно упрощает поддержку разнородного обору-
дования. Например, одна и та же программа, использующая Тheano, может работать
как на CPU, так и на GPU безо всякого изменения обращений к самой Theano. Другие
библиотеки, например ТensorFlow (Abadi et al., 2015) и Тorch (Collobert et al., 2011b),
предлагают похожие возможности.
12.1.3. Крупномасштабные распределенные реализации
Часто вычислительных ресурсов одной машины недостаточно. Поэтому хотелось бы
распределить рабочую нагрузку обучения и вывода между несколькими машинами.
Распределить вывод просто, потому что каждый входной пример можно обрабо-
тать на отдельной машине. Это называется
распараллеливанием по данным
.
Существует также режим
распараллеливания модели
, когда несколько машин
сов местно работает над одним примером, причем каждая машина выполняет свою
часть модели. Это возможно как для обучения, так и для вывода.
Распараллеливание по данным на этапе обучения несколько сложнее. Мы можем
увеличить размер мини-пакета, используемого на одном шаге СГС, но обычно вы-
игрыш в терминах производительности оптимизации получается меньше линейного.
Было бы лучше, чтобы несколько машин параллельно вычисляли несколько шагов
градиентного спуска. К сожалению, в стандартной формулировке алгоритм градиент-
ного спуска строго последовательный: градиент на шаге
t
является функцией пара-
метров, найденных на шаге
t
– 1.
Эту проблему можно решить с помощью асинхронного стохастического гради-
ентного спуска (Bengio et al., 2001; Recht et al., 2011). В этом случае несколько про-
цессорных ядер сообща использует память для представления параметров. Каждое
ядро читает параметры без блокировки, затем вычисляет градиент, после чего инкре-
ментирует параметры без блокировки. Это уменьшает среднее улучшение на каждом
шаге градиентного спуска, потому что некоторые ядра перезаписывают достигнутое
другими ядрами, но за счет увеличенного темпа выполнения шагов процесс обучения
в целом протекает быстрее. В работе Dean et al. (2012) этот подход к градиентному
спуску без блокировок впервые реализован на нескольких машинах, когда параметры
хранятся не в разделяемой памяти, а на сервере параметров. Распределенный асин-
хронный градиентный спуск остается основной стратегией обучения больших глубо-
ких сетей и применяется большинством групп, занимающих лидирующие позиции
в индустрии (Chilimbi et al., 2014; Wu et al., 2015). Академические учреждения обыч-
но не могут позволить себе распределенные системы обучения такого масштаба, но
в ряде исследований изучается вопрос о построении распределенных сетей на срав-
нительно дешевом оборудовании, имеющемся в университетах (Coates et al., 2013).
Do'stlaringiz bilan baham: |