Обучение глубоких сетей в вычислительном отношении интенсивно; однако, нейронные сети являются по сути параллельными алгоритмами. Можно обычно ускорять обучение сверточных нейронных сетей по распределительному образованию параллельно через многожильные центральные процессоры, высокоэффективные графические процессоры и кластеры с несколькими центральными процессорами и графическими процессорами. Используя графический процессор или параллельные опции требует Parallel Computing Toolbox™.
Поддержка графического процессора является автоматической, если у вас есть Parallel Computing Toolbox. По умолчанию функция trainNetwork
использует графический процессор при наличии.
Если у вас есть доступ к машине с несколькими графическими процессорами, то просто задают опцию обучения 'ExecutionEnvironment','multi-gpu'
.
Вам не нужны несколько компьютеров, чтобы решить проблемы с помощью наборов данных, слишком больших, чтобы уместиться в памяти. Можно использовать функцию augmentedImageDatastore
, чтобы работать с пакетами данных, не нуждаясь в кластере машин. Для примера смотрите, Обучат сеть с Увеличенными Изображениями. Однако, если вы имеете кластер в наличии, может быть полезно взять ваш код к репозиторию данных вместо того, чтобы переместить большие объемы данных вокруг.
Оборудование глубокого обучения и факторы памяти | Рекомендации | Необходимые продукты |
---|---|---|
Данные, слишком большие, чтобы уместиться в памяти | Чтобы импортировать данные из наборов изображений, которые являются слишком большими, чтобы уместиться в памяти, используйте функцию augmentedImageDatastore . Эта функция разработана, чтобы считать пакеты изображений для более быстрой обработки в приложениях компьютерного зрения и машинном обучении. | MATLAB® Deep Learning Toolbox™ |
Центральный процессор | Если у вас нет подходящего графического процессора, то можно обучаться на центральном процессоре вместо этого. По умолчанию функция trainNetwork использует центральный процессор, если никакой графический процессор не доступен. | MATLAB Deep Learning Toolbox |
Графический процессор | По умолчанию функция trainNetwork использует графический процессор при наличии. Требует, чтобы CUDA® включил NVIDIA®, графический процессор с вычисляет возможность 3.0 или выше. Проверяйте свой графический процессор с помощью gpuDevice . Задайте среду выполнения с помощью функции trainingOptions . | MATLAB Deep Learning Toolbox Parallel Computing Toolbox |
Найдите что-либо подобное на своей локальной машине с помощью нескольких графических процессоров или ядер процессора | Обманите несколько рабочих путем определения среды выполнения с функцией trainingOptions . Если вы имеете больше чем один графический процессор на своей машине, задаете 'multi-gpu' . В противном случае задайте 'parallel' . | MATLAB Deep Learning Toolbox Parallel Computing Toolbox |
Параллель на кластере или в облаке | Масштабируйте, чтобы использовать рабочих на кластерах или в облаке, чтобы ускорить ваши вычисления глубокого обучения. Используйте trainingOptions и задайте 'parallel' , чтобы использовать вычислить кластер. Для получения дополнительной информации смотрите Глубокое обучение в Облаке. | MATLAB Deep Learning Toolbox Parallel Computing Toolbox MATLAB Parallel Server™ |
Чтобы узнать больше, смотрите, Увеличивают Глубокое обучение параллельно и в Облаке.
Все функции для обучения глубокому обучению, прогноза и валидации в Deep Learning Toolbox выполняют вычисления с помощью арифметики с плавающей точкой, с одинарной точностью. Функции для глубокого обучения включают trainNetwork
, predict
, classify
и activations
. Программное обеспечение использует арифметику с одинарной точностью, когда вы обучаете нейронные сети с помощью и центральных процессоров и графических процессоров.
Поскольку производительность с двойной точностью и с одинарной точностью графических процессоров может отличаться существенно, важно знать, в котором выполняются вычисления точности. Если вы только используете графический процессор для глубокого обучения, то производительность с одинарной точностью является одной из самых важных характеристик графического процессора. Если вы также используете графический процессор для других вычислений с помощью Parallel Computing Toolbox, то высоко производительность с двойной точностью важна. Это вызвано тем, что много функций в MATLAB используют арифметику с двойной точностью по умолчанию. Для получения дополнительной информации смотрите Улучшают Производительность Используя Вычисления Одинарной точности (Parallel Computing Toolbox).
MATLAB поддерживает обучение одна сеть с помощью нескольких графических процессоров параллельно. Это может быть достигнуто с помощью нескольких графических процессоров на локальной машине, или на кластере или облаке с рабочими с графическими процессорами. Чтобы ускорить обучение с помощью нескольких графических процессоров, попытайтесь увеличить мини-пакетный размер и темп обучения.
Включите обучение мультиграфического процессора на своей локальной машине путем установки опции 'ExecutionEnvironment'
на 'multi-gpu'
с функцией trainingOptions
.
На кластере или облаке, набор опция 'ExecutionEnvironment'
к 'parallel'
с функцией trainingOptions
.
Сверточные нейронные сети обычно обучаются итеративно с помощью пакетов изображений. Это сделано, потому что целый набор данных слишком большой, чтобы поместиться в память графического процессора. Для оптимальной производительности можно экспериментировать с опцией MiniBatchSize
, которую вы задаете с функцией trainingOptions
.
Оптимальный пакетный размер зависит от вашей точной сети, набора данных и оборудования графического процессора. Когда обучение с несколькими графическими процессорами, каждый пакет изображений распределяется между графическими процессорами. Это эффективно увеличивает общую память графического процессора доступные, позволяющие большие пакетные размеры. Поскольку это улучшает значение каждого пакета, можно увеличить темп обучения. Хорошее общее руководство должно увеличить темп обучения пропорционально до увеличения пакетного размера. В зависимости от вашего приложения больший пакетный размер и темп обучения могут ускорить обучение без уменьшения в точности, до некоторого предела.
Используя несколько графических процессоров может значительно ускорить обучение. Чтобы решить, ожидаете ли вы обучение мультиграфического процессора поставить увеличение производительности, рассмотрите следующие факторы:
Какой длины итерация на каждом графическом процессоре? Если каждая итерация графического процессора коротка, то добавленные издержки связи между графическими процессорами могут доминировать. Попытайтесь увеличить вычисление на итерацию при помощи большего пакетного размера.
Действительно ли все - графические процессоры на одной машине? Связь между графическими процессорами на различных машинах вводит значительную коммуникационную задержку. Можно смягчить это, если у вас есть подходящее оборудование. Для получения дополнительной информации смотрите Усовершенствованную Поддержку Быстрого Мультиузла Коммуникация графического процессора.
Чтобы узнать больше, смотрите, Увеличивают Глубокое обучение параллельно и в Облаке и Выбирают Particular GPUs to Use for Training.
Если вы не имеете подходящий графический процессор в наличии для более быстрого обучения сверточной нейронной сети, можно попробовать применение глубокого обучения несколькими высокоэффективными графическими процессорами в облаке, такой как на Amazon® Elastic Compute Cloud (Amazon EC2®). MATLAB, который Deep Learning Toolbox обеспечивает примерам, которые показывают вам, как выполнить глубокое обучение в облаке с помощью Amazon EC2 с P2 или экземплярами машины P3 и данными, сохранил в облаке.
Можно ускорить обучение при помощи нескольких графических процессоров на одной машине или в кластере машин с несколькими графическими процессорами. Обучите одну сеть с помощью нескольких графических процессоров или обучите многоуровневые модели целиком на тех же данных.
Для получения дополнительной информации о полном рабочем процессе облака смотрите Глубокое обучение параллельно и в Облаке.
При обучении сети параллельно, можно выбрать и предварительно обработать данные в фоновом режиме. Чтобы выполнить отправку данных в фоновом режиме, включите фоновую отправку в мини-пакетном datastore, используемом trainNetwork
. Можно использовать встроенный мини-пакетный datastore, такой как augmentedImageDatastore
, denoisingImageDatastore
или pixelLabelImageDatastore
. Можно также использовать пользовательский мини-пакетный datastore с фоновой включенной отправкой. Для получения дополнительной информации о создании пользовательских мини-пакетных хранилищ данных смотрите, Разрабатывают Пользовательский Мини-пакетный Datastore.
Чтобы включить фоновую отправку, установите свойство DispatchInBackground
datastore к true
.
Можно подстроить учебное вычисление и загрузки отправки данных между рабочими путем определения аргумента пары "имя-значение" 'WorkerLoad'
trainingOptions
. Для расширенных настроек можно попытаться изменить количество рабочих параллельного пула. Для получения дополнительной информации смотрите, Задают Ваши Параллельные Настройки (Parallel Computing Toolbox)
trainNetwork
| trainingOptions