Как использовать параллельную обработку в 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 с помощью встроенной параллельной функциональности решателя.

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

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

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

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

Функция Поиска patternsearch

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

  • UseCompleteSearch true.

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

  • Если метод поиска является a 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 оценочные градиенты параллельно.

Установите опции для гибридной функции как описано в Гибридных Функциональных Опциях для 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 аргумент, чтобы протестировать или использовать параллельную функциональность.

Похожие темы