Глубокое обучение для MATLAB на нескольких графических процессорах

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 наблюдения на итерацию.

Поскольку увеличение мини-пакетного размера улучшает значение каждой итерации, можно увеличить скорость обучения. Хорошее общее руководство должно увеличить скорость обучения пропорционально до увеличения мини-пакетного размера. В зависимости от вашего приложения больший мини-пакетный размер и скорость обучения могут ускорить обучение без уменьшения в точности, до некоторого предела.

Выберите Particular GPUs to Use for Training

Если вы не хотите использовать все свои графические процессоры, можно выбрать 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], ...)
В этом случае четвертый рабочий является частью пула, но неактивный, который не является идеальным использованием параллельных ресурсов. Более эффективно выбрать GPU для обучения вручную с помощью 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.

Смотрите также

| | (Parallel Computing Toolbox) | (Parallel Computing Toolbox) |

Похожие темы