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

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

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

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

  • Войти

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

    parpool('local')

    Примечание

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

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

    РешательНастройки командной строкиНастройки приложения оптимизации
    ga

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

    • Options > User function evaluation > Evaluate fitness and constraint functions > in parallel

    gamultiobj

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

    • Options > User function evaluation > Evaluate fitness and constraint functions > in parallel

    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);

    • Options > User function evaluation > Evaluate objective and constraint functions > in parallel

    • Options > Complete poll > on

    surrogateopt

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

     

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

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

Чтобы остановить вычислительную оптимизацию параллельно, установите UseParallel на false или установите приложение Оптимизации не вычислять параллельно. Чтобы остановить все параллельное вычисление, войти

delete(gcp)

Сеть процессора

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

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

    Выполнять основную проверку:

    1. В командной строке войти

      parpool(prof)
      где prof является вашим кластерным профилем.

    2. Рабочие должны смочь получить доступ к вашему файлу целевой функции и, если применимо, вашему нелинейному ограничительному файлу функции. Существует два способа гарантировать доступ:

      1. Распределите файлы рабочим, использующим аргумент parpool AttachedFiles. Например, если objfun.m является вашим файлом целевой функции, и constrfun.m является вашим нелинейным ограничительным файлом функции, войти

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

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

      2. Дайте путь к сетевому файлу к своим файлам. Если network_file_path является сетевым путем к вашей цели или ограничительным файлам функции, войти

        pctRunOnAll('addpath network_file_path')

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

    3. Проверяйте, является ли файл на пути каждого рабочего путем ввода

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

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

    РешательНастройки командной строкиНастройки приложения оптимизации
    ga

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

    • Options > User function evaluation > Evaluate fitness and constraint functions > in parallel

    gamultiobj

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

    • Options > User function evaluation > Evaluate fitness and constraint functions > in parallel

    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);

    • Options > User function evaluation > Evaluate objective and constraint functions > in parallel

    • Options > Complete poll > on

    surrogateopt

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

     

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

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

Чтобы остановить вычислительную оптимизацию параллельно, установите UseParallel на false или установите приложение Оптимизации не вычислять параллельно. Чтобы остановить все параллельное вычисление, войти

delete(gcp)

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

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

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

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

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

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});

В приложении Оптимизации сначала создайте 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 смотрите Параллельные вычисления (Optimization Toolbox).

Разверните параллельную оптимизацию

Если вы развертываете код, который вызывает решатель оптимизации, и хотят, чтобы решатель использовал параллельные вычисления, гарантировал, что вы явным образом создаете параллельный пул в своем коде. В противном случае развернутый код может не запуститься параллельно, и так запускается только в сериале, потому что анализ зависимостей MATLAB Compiler™ может не сделать параллельную функциональность доступной. Например, вызовите parpool явным образом, в дополнение к установке опции UseParallel решателя к true.

Тестирование параллельной оптимизации

Чтобы протестировать видят, запускается ли проблема правильно параллельно,

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

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

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

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

Похожие темы