MATLAB® обучение поддержек одна глубокая нейронная сеть с помощью нескольких графических процессоров параллельно. Это может быть достигнуто с помощью нескольких графических процессоров на локальной машине, или в кластере или облаке с помощью параллельных рабочих с помощью графических процессоров. Используя несколько графических процессоров может значительно ускорить обучение. Чтобы решить, ожидаете ли вы обучение мультиграфического процессора поставить увеличение производительности, рассмотрите следующие факторы:
Какой длины итерация на каждом графическом процессоре? Если каждая итерация графического процессора коротка, то добавленные издержки связи между графическими процессорами могут доминировать. Попытайтесь увеличить расчет на итерацию при помощи большего пакетного размера.
Действительно ли все - графические процессоры на одной машине? Связь между графическими процессорами на различных машинах вводит значительную коммуникационную задержку. Можно смягчить это, если у вас есть подходящее оборудование. Для получения дополнительной информации смотрите Усовершенствованную Поддержку Быстрого Мультиузла Коммуникация графического процессора.
Совет
Чтобы обучить одну сеть с помощью нескольких графических процессоров на локальной машине, можно просто задать ExecutionEnvironment
опция как "multi-gpu"
не изменяя остальную часть вашего кода. trainNetwork
автоматически использует ваши доступные графические процессоры для учебных расчетов.
Когда вы обучаетесь в удаленном кластере, задаете ExecutionEnvironment
опция как "parallel"
. Если кластер имеет доступ к одному или нескольким графическим процессорам, то trainNetwork
только использует графические процессоры для обучения. Рабочие без уникального графического процессора никогда не используются для учебного расчета.
Если вы хотите использовать больше ресурсов, можно увеличить обучение глубокому обучению к кластерам или облаку. Чтобы узнать больше о параллельных опциях, смотрите, Увеличивают Глубокое обучение параллельно, на графических процессорах, и в Облаке. Чтобы попробовать пример, смотрите, Обучат сеть в Облаке Используя Автоматическую Параллельную Поддержку.
Используя графический процессор или параллельные опции требует Parallel Computing Toolbox™. Используя графический процессор также требует поддерживаемого устройства графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox). Используя удаленный кластер также требует MATLAB Parallel Server™.
Примечание
Если при запуске MATLAB на одной машине в облаке, с которым вы соединяетесь через ssh или протокол удаленного рабочего стола (RDP), то сетевое выполнение и обучение используют тот же код, как будто вы работали на своей локальной машине.
Если у вас есть доступ к машине с помощью нескольких графических процессоров, можно просто задать ExecutionEnvironment
опция как "multi-gpu"
:
Для учебного использования trainNetwork
, используйте trainingOptions
функционируйте, чтобы установить ExecutionEnvironment
опция значения имени к "multi-gpu"
.
Для использования вывода classify
и predict
, установите ExecutionEnvironment
опция значения имени к "multi-gpu"
.
"multi-gpu"
опция позволяет вам использовать несколько графических процессоров в локальном параллельном пуле. Если нет никакого текущего параллельного пула, trainNetwork
, predict
, и classify
автоматически запустите локальный параллельный пул с помощью кластерных настроек профиля по умолчанию. Пул имеет столько же рабочих сколько количество доступных графических процессоров.
Для получения информации о том, как выполнить пользовательское обучение с помощью нескольких графических процессоров в локальной машине, смотрите Запуск Пользовательские Учебные Циклы на графическом процессоре и параллельно.
Для обучения и вывода с помощью нескольких графических процессоров в удаленном кластере, используйте "parallel"
опция:
Для учебного использования trainNetwork
, используйте trainingOptions
функционируйте, чтобы установить ExecutionEnvironment
опция значения имени к "parallel"
.
Для использования вывода classify
и predict
, установите ExecutionEnvironment
опция значения имени к "parallel"
.
Если нет никакого текущего параллельного пула, trainNetwork
, predict
, и classify
автоматически запустите параллельный пул с помощью кластерных настроек профиля по умолчанию. Если пул имеет доступ к графическим процессорам, то только рабочие с помощью уникального графического процессора выполняют учебный расчет. Если пул не имеет графических процессоров, то обучение происходит на всех доступных рабочих центрального процессора вместо этого.
Для получения информации о том, как выполнить пользовательское обучение с помощью нескольких графических процессоров в удаленном кластере, смотрите Запуск Пользовательские Учебные Циклы на графическом процессоре и параллельно.
Сверточные нейронные сети обычно обучаются итеративно с помощью мини-пакетов изображений. Это вызвано тем, что целый набор данных является обычно слишком большим, чтобы поместиться в память графического процессора. Для оптимальной эффективности можно экспериментировать с мини-пакетным размером путем изменения MiniBatchSize
опция значения имени с помощью trainingOptions
функция.
Оптимальный мини-пакетный размер зависит от вашей точной сети, набора данных и оборудования графического процессора. Когда обучение с помощью нескольких графических процессоров, каждый пакет изображений распределяется между графическими процессорами. Это эффективно увеличивает общую память графического процессора доступные, позволяющие большие пакетные размеры. Методические рекомендации должны увеличить мини-пакетный размер линейно с количеством графических процессоров, для того, чтобы сохранить рабочую нагрузку на каждом графическом процессоре постоянной. Например, если вы - обучение на одном графическом процессоре с помощью мини-пакетного размера 64, и вы хотите масштабировать до обучения с помощью четырех графических процессоров того же типа, можно увеличить мини-пакетный размер до 256 так, чтобы каждый графический процессор процессы 64 наблюдения на итерацию.
Поскольку увеличение мини-пакетного размера улучшает значение каждой итерации, можно увеличить скорость обучения. Хорошее общее руководство должно увеличить скорость обучения пропорционально до увеличения мини-пакетного размера. В зависимости от вашего приложения больший мини-пакетный размер и скорость обучения могут ускорить обучение без уменьшения в точности, до некоторого предела.
Если вы не хотите использовать все свои графические процессоры, можно выбрать GPU, который вы хотите использовать для обучения и заключить непосредственно. Выполнение так может быть полезным, чтобы избежать обучения на низкой производительности графический процессор, например, ваше отображение графический процессор.
Если ваши графические процессоры находятся в вашей локальной машине, можно использовать gpuDeviceTable
(Parallel Computing Toolbox) и gpuDeviceCount
(Parallel Computing Toolbox) функционирует, чтобы исследовать ваши ресурсы графического процессора и определить индекс графических процессоров, которые вы хотите использовать.
Для одного обучения графического процессора с "auto"
или "gpu"
опции, по умолчанию, MATLAB использует устройство графического процессора с индексом 1
. Можно использовать различный графический процессор путем выбора устройства, прежде чем вы запустите обучение. Использование gpuDevice
(Parallel Computing Toolbox), чтобы выбрать желаемый графический процессор с помощью его индекса:
gpuDevice(index)
trainNetwork
, predict
, и classify
автоматически используйте выбранный графический процессор, когда вы установите ExecutionEnvironment
опция к "auto"
или "gpu"
.Для нескольких обучения графического процессора с "multi-gpu"
опция, по умолчанию, MATLAB использует все доступные графические процессоры в вашей локальной машине. Если вы хотите исключить графические процессоры, можно запустить параллельный пул заранее и выбрать устройства вручную.
Например, предположите, что у вас есть три графических процессора, но вы только хотите использовать устройства с индексами 1
и 3
. Можно использовать следующий код, чтобы начать параллельный пул с двух рабочих и выбрать один графический процессор на каждом рабочем.
useGPUs = [1 3]; parpool('local', numel(useGPUs)); spmd gpuDevice(useGPUs(labindex)); end
trainNetwork
, predict
, и classify
автоматически используйте текущий параллельный пул, когда вы установите ExecutionEnvironment
опция к "multi-gpu"
(или "parallel"
для того же результата).
Другая опция должна выбрать рабочих, использующих WorkerLoad
аргумент значения имени в trainingOptions
. Например:
parpool('local', 5); opts = trainingOptions('sgdm', 'WorkerLoad', [1 1 1 0 1], ...)
gpuDevice
.Если вы хотите обучить многоуровневые модели параллельно с одним графическим процессором каждый, начните параллельный пул с одного рабочего на доступный графический процессор и обучите каждую сеть на различном рабочем. Использование parfor
или parfeval
одновременно выполнить сеть на каждом рабочем. Используйте trainingOptions
функционируйте, чтобы установить ExecutionEnvironment
опция значения имени к "gpu"
на каждом рабочем.
Например, используйте код следующей формы, чтобы обучить несколько сетей параллельно на всех доступных графических процессорах:
options = trainingOptions("sgdm","ExecutionEnvironment","gpu"); parfor i=1:gpuDeviceCount("available") trainNetwork(…,options); end
Чтобы запуститься в фоновом режиме, не блокируя ваш локальный MATLAB, использовать parfeval
. Для примеров, показывающих, как обучить несколько использований сетей parfor
и parfeval
, смотрите
Некоторый мультиграфический процессор показывает в MATLAB, включая trainNetwork
, оптимизированы для непосредственной связи через быстрые межсоединения для улучшенной производительности.
Если у вас есть соответствующие аппаратные связи, то передача данных между несколькими графическими процессорами использует быстро одноранговую коммуникацию, включая NVLink, при наличии.
Если вы используете Linux, вычисляют кластер с быстрыми межсоединениями между машинами, такими как Infiniband, или быстро соединяет между графическими процессорами на различных машинах, таких как GPUDirect RDMA, вы можете смочь использовать в своих интересах быструю поддержку мультиузла в MATLAB. Включите эту поддержку на всех рабочих в вашем пуле путем установки переменной окружения PARALLEL_SERVER_FAST_MULTINODE_GPU_COMMUNICATION
к 1
. Установите эту переменную окружения в Кластерном менеджере по Профилю.
Этой функцией является часть библиотеки NVIDIA NCCL для коммуникации графического процессора. Чтобы сконфигурировать его, необходимо установить переменные новой среды задавать протокол сетевого интерфейса, особенно NCCL_SOCKET_IFNAME
. Для получения дополнительной информации см. документацию NCCL и в частности раздел по Переменным окружения NCCL.
trainNetwork
| trainingOptions
| gpuDevice
(Parallel Computing Toolbox) | spmd
(Parallel Computing Toolbox) | imageDatastore