Как использовать параллельную обработку в Global Optimization Toolbox

Многоядерные процессоры

Если у вас есть многоядерный процессор, можно увеличить скорость обработки при помощи параллельной обработки. Можно создать параллельный пул из нескольких работников с лицензией Parallel Computing Toolbox™. Описание программного обеспечения Parallel Computing Toolbox смотрите в Запуск с Parallel Computing Toolbox (Parallel Computing Toolbox).

Предположим, у вас есть двухъядерный процессор, и вы хотите использовать параллельные вычисления. Введите этот код в командной строке.

parpool

MATLAB® запускает пул рабочих процессов, использующих многоядерный процессор. Если вы ранее установили профиль кластера без параметров, можно применить многоядерные (локальные) вычисления, введя этот код.

parpool('local')

Примечание

В зависимости от ваших настроек MATLAB может автоматически запустить параллельный пул. Чтобы включить эту функцию, выберите Parallel > Parallel Preferences в группе Environment на вкладке Home, а затем выберите Automatically create a parallel pool.

Установите решатель, чтобы использовать параллельную обработку.

РешательНастройки командной строки
ga

options = optimoptions('ga','UseParallel', true, 'UseVectorized', false);

gamultiobj

options = optimoptions('gamultiobj','UseParallel', true, 'UseVectorized', false);

MultiStart

ms = MultiStart('UseParallel', true);

или

ms.UseParallel = true

paretosearch

options = optimoptions('paretosearch','UseParallel',true);

particleswarm

options = optimoptions('particleswarm', 'UseParallel', true, 'UseVectorized', false);

patternsearch

options = optimoptions('patternsearch','UseParallel', true, 'UseCompletePoll', true, 'UseVectorized', false);

surrogateopt

options = optimoptions('surrogateopt','UseParallel',true);

Начиная с R2019a, когда вы устанавливаете UseParallel опция для true, patternsearch внутренне переопределяет UseCompletePoll установка значения true так что он опрашивает параллельно.

Когда вы запускаете применимый решатель с options, применимые решатели автоматически используют параллельные вычисления.

Чтобы остановить вычисление оптимизации параллельно, установите UseParallel на false. Чтобы остановить все параллельные расчеты, введите этот код.

delete(gcp)

Примечание

Документация рекомендует не использовать parfor или parfeval при вызове Simulink®; см. Использование функции sim в parfor (Simulink). Поэтому вы можете столкнуться с проблемами при оптимизации параллельной симуляции Simulink с помощью встроенной параллельной функциональности решателя.

Процессорная сеть

Если у вас есть несколько процессоров в сети, используйте функции Parallel Computing Toolbox и программное обеспечение MATLAB Parallel Server™, чтобы установить параллельные расчеты.

Убедитесь, что ваша система настроена правильно для параллельных вычислений. Обратитесь к системному администратору или обратитесь к документации Parallel Computing Toolbox.

  1. Выполните базовую проверку путем ввода этого кода, где prof - ваш профиль кластера.

    parpool(prof)
  2. Работники должны иметь возможность доступа к файлу целевой функции и, если применимо, к нелинейным файлам функции ограничений. Выполните один из следующих шагов, чтобы гарантировать доступ:

    • Распространите файлы среди работников, используя parpool (Parallel Computing Toolbox) AttachedFiles аргумент. В этом примере objfun.m Ваш объективный файл функции, и constrfun.m является вашим нелинейным ограничением файл функции.

      parpool('AttachedFiles',{'objfun.m','constrfun.m'});

      Работники получают доступ к собственным копиям файлов.

    • Задайте путь к сетевому файлу для ваших целевых или ограничительных файлов функции.

      pctRunOnAll('addpath network_file_path')

      Рабочие получают доступ к файлам функции по сети.

  3. Проверьте, указан ли файл в пути каждого работника.

    pctRunOnAll('which filename')
    Если какой-либо рабочий процесс не имеет пути к файлу, он сообщает
    filename not found.

Установите решатель, чтобы использовать параллельную обработку.

РешательНастройки командной строки
ga

options = optimoptions('ga','UseParallel', true, 'UseVectorized', false);

gamultiobj

options = optimoptions('gamultiobj','UseParallel', true, 'UseVectorized', false);

MultiStart

ms = MultiStart('UseParallel', true);

или

ms.UseParallel = true

paretosearch

options = optimoptions('paretosearch','UseParallel',true);

particleswarm

options = optimoptions('particleswarm', 'UseParallel', true, 'UseVectorized', false);

patternsearch

options = optimoptions('patternsearch','UseParallel', true, 'UseCompletePoll', true, 'UseVectorized', false);

surrogateopt

options = optimoptions('surrogateopt','UseParallel',true);

Начиная с R2019a, когда вы устанавливаете UseParallel опция для true, patternsearch внутренне переопределяет UseCompletePoll установка значения true так что он опрашивает параллельно.

После того, как вы установили своё параллельное вычислительное окружение, применимые решатели автоматически используют параллельные вычисления всякий раз, когда вы вызываете их с options.

Чтобы остановить вычисление оптимизации параллельно, установите UseParallel на false. Чтобы остановить все параллельные расчеты, введите этот код.

delete(gcp)

Примечание

Документация рекомендует не использовать parfor или parfeval при вызове Simulink; см. Использование функции sim в parfor (Simulink). Поэтому вы можете столкнуться с проблемами при оптимизации параллельной симуляции Simulink с помощью встроенной параллельной функциональности решателя.

Функции параллельного поиска или гибридные функции

Иметь patternsearch поисковая функция запускается параллельно, или гибридная функция для ga или simulannealbnd выполняйте параллельно, делайте следующее.

  1. Настройте параллельную обработку, как описано в многоядерных процессорах или процессорной сети.

  2. Убедитесь, что ваша функция поиска или гибридная функция имеют условия, изложенные в следующих разделах:

Функция поиска pattersearch

patternsearch использует функцию параллельного поиска при следующих условиях:

  • UseCompleteSearch является true.

  • Метод поиска не @searchneldermead или custom.

  • Если метод поиска является patternsearch метод опроса или поиск по латинскому гиперкубу, UseParallel является true. Установите в командной строке с optimoptions:

    options = optimoptions('patternsearch','UseParallel',true,...
        'UseCompleteSearch',true,'SearchFcn',@GPSPositiveBasis2N);
  • Если метод поиска ga, опция метода поиска имеет UseParallel установлено на true. Установите в командной строке с optimoptions:

    iterlim = 1; % iteration limit, specifies # ga runs
    gaopt = optimoptions('ga','UseParallel',true);
    options = optimoptions('patternsearch','SearchFcn',...
        {@searchga,iterlim,gaopt});

Дополнительные сведения об опциях поиска см. в разделе Параметры поиска. Для получения примера смотрите Поиск и опрос.

Параллельные гибридные функции

ga, particleswarm, и simulannealbnd могут иметь другие решатели, запускаемые после или перемежающиеся с их итерациями. Эти другие решатели называются гибридными функциями. Для получения информации об использовании гибридной функции с gamultiobj, см. Параллельные вычисления с gamultiobj. Оба patternsearch и fmincon может быть гибридными функциями. Можно задать опции так, чтобы patternsearch проходит параллельно, или fmincon оценивает градиенты параллельно.

Установите опции для гибридной функции, как описано в Hybrid Function Options для ga, Гибридная Функция для particleswarm, или опции гибридной функции для simulannealbnd. Подводя итоги:

  • Если ваша гибридная функция patternsearch

    1. Создать patternsearch опции:

      hybridopts = optimoptions('patternsearch','UseParallel',true,...
          'UseCompletePoll',true);
    2. Установите ga или simulannealbnd опции для использования patternsearch как гибридная функция:

      options = optimoptions('ga','UseParallel',true); % for ga
      options = optimoptions('ga',options,...
          'HybridFcn',{@patternsearch,hybridopts});
      % or, for simulannealbnd:
      options = optimoptions(@simulannealbnd,'HybridFcn',{@patternsearch,hybridopts});

    Для получения дополнительной информации о параллели patternsearch, см. Поиск по шаблонам.

  • Если ваша гибридная функция fmincon:

    1. Создать fmincon опции:

      hybridopts = optimoptions(@fmincon,'UseParallel',true,...
          'Algorithm','interior-point');
      % You can use any Algorithm except trust-region-reflective
    2. Установите ga или simulannealbnd опции для использования fmincon как гибридная функция:

      options = optimoptions('ga','UseParallel',true);
      options = optimoptions('ga',options,'HybridFcn',{@fmincon,hybridopts});
      % or, for simulannealbnd:
      options = optimoptions(@simulannealbnd,'HybridFcn',{@fmincon,hybridopts});

    Для получения дополнительной информации о параллели fmincon, см. Параллельные вычисления.

Проверка параллельной оптимизации

Выполните следующие действия, чтобы проверить, правильно ли ваша проблема запускается параллельно.

  1. Попробуйте свою задачу без параллельных расчетов, чтобы убедиться, что она запускается последовательно. Убедитесь, что этот тест успешен (дает правильные результаты), прежде чем переходить к следующему тесту.

  2. Задайте UseParallel на true, и убедитесь, что никакого параллельного пула не существует путем ввода delete(gcp). Чтобы убедиться, что MATLAB не создает параллельный пул, выберите Parallel > Parallel Preferences в группе Environment на вкладке Home, а затем очистите Automatically create a parallel pool. Ваша задача запускается parfor последовательно, с итерациями цикла в обратном порядке от a for цикл. Убедитесь, что этот тест успешен (дает правильные результаты), прежде чем переходить к следующему тесту.

  3. Задайте UseParallel на true, и создать параллельный пул, используя parpool. Если у вас нет многоядерного процессора или сети, этот тест не увеличивает скорость обработки. Это тестирование просто для проверки правильности расчетов.

Не забудьте вызвать решатель с помощью options аргумент для тестирования или использования параллельных функций.

Похожие темы