Распределенная генерация
Генерация ландшафта является сложной задачей и может потребовать значительного времени в зависимости от размера территории и разрешения данных. Sandworm позволяет использовать распределенные вычисления для создания ландшафта.
Концепция заключается в использовании нескольких компьютеров, объединенных в сеть, один из которых, Master, назначает задачи, а другие - Worker, которые выполняют часть работы (обработка исходных данных), возложенную на них. UnigineEditor с инструментом Sandworm и проектом, в который будет добавлен ландшафт, должен быть открыт на Master, в то время как на Worker-ах запускается консольное приложение. Исходные файлы (геоданные) и общий кэш должны храниться в общей папке. Если у Worker-а все еще есть доступные ресурсы, на нем могут быть запущены дополнительные процессы, которые немедленно участвуют в генерации ландшафта, т.е. без перезапуска процесса генерации. Master создает ресурс на основе результата.
Участники процесса:
Порядок запуска#
Перед запуском любого из участников сети отключите для него Microprofile — в \data\configs\default.user укажите:
<microprofile_enabled>0</microprofile_enabled>
В противном случае каждый экземпляр будет запускать Microprofile, что приведет к расходу памяти.
Вы можете запустить Master и Worker-ы в любой последовательности.
Вы можете запустить дополнительные Worker-ы после запуска процесса генерации ландшафта, и Master распределит задания для них.
На одной машине может быть запущено несколько Worker-ов. У Worker-а может быть несколько процессов (форков), которые активируются через меню на Master-е.
Использование распределенной генерации#
Процесс работы:
-
Подготовьте окружение.
Подключите все компьютеры к сети. Рекомендуется использовать сеть с пропускной способностью не менее 1 Гб. В противном случае могут возникнуть сетевые задержки (см. раздел Устранение неполадок). Убедитесь, что ваша сеть не блокирует широковещательную передачу, в противном случае распределенные вычисления будут недоступны.
Рекомендуется использовать SSD-накопитель для хранения кэша генерации и выходных файлов. При использовании жесткого диска производительность генерации значительно снижается из-за многократных операций чтения/записи и позиционирования головки. -
На каждом компьютере Worker запустите консольное приложение Worker.
Версии двоичных исполняемых файлов должны быть одинаковыми на всех компьютерах. -
На компьютере Master:
- Запустите UnigineEditor и откройте инструмент Sandworm (Tools -> Sandworm).
- Откройте ассет *.sworm, который вы собираетесь сгенерировать, и настройте параметры генерации.
- Включите опцию Distributed и укажите настройки мастера. Сохраните конфигурацию проекта.
-
Нажмите кнопку Generate. Откроется окно со списком доступных Worker-ов:
Если вы повторно создадите проект, это окно появится после предупреждения о потере любых изменений вручную.Как только это окно откроется, Worker-ы начнут анализировать общие исходные данные и генерировать кэш. В конце этого процесса отображается консольное сообщение Worker: Ready To Import.
-
Щелчок правой кнопкой мыши на Worker-е делает доступными следующие параметры:
Настройки Worker-аCreate Fork Создает еще один процесс на том же Worker-е. Мы оцениваем разумное количество форков от 4 до 6. Более высокие значения снижают производительность Worker-а.Shutdown Удаляет форк или Worker из списка. Clear Cache Очищает локальный кэш Worker-а. Установите нужное вам количество форков и нажмите Generate.
-
В процессе генерации вы можете подключить больше Worker-ов, если это необходимо: запустите консольное приложение на Worker-е (даже если на этом Worker-е уже запущен один или несколько процессов). Это консольное приложение автоматически подключится к Master-у, и Master назначит процесс этому Worker-у.
- Когда генерация ландшафта будет завершена, отключите все процессы на Worker-е.
Настройка Master-а#
Чтобы настроить Master, включите Distributed Generation в Generation Settings: включите опцию Enabled.
Настройки Master-а:
Enabled | Если переключатель включен, распределенные вычисления включены для генерации ландшафта, и машина, на которой запущен редактор с Sandworm, становится Master-ом. |
---|---|
Broadcast Port | Порт для прослушивания Sandworm с помощью Worker-ов. |
Server Port | Порт, используемый для обмена информацией. |
Workload on Master | Процент генерации ландшафта, выполняемый Master-ом. |
Настройка Worker#
Чтобы настроить Worker:
-
Создайте новый проект UNIGINE на компьютере Worker, включив соответствующую функцию:
-
Запустите консольное приложение SandwormNode_x64.exe, хранящееся в папке bin/ вашего проекта. В консоли должно появиться сообщение о том, что Worker готов:
- Задайте путь для хранения локального кэша с помощью консольной команды --sw_local_cache_path.
- Используйте --sw_broadcast_port, если вы хотите изменить широковещательный порт по умолчанию.
- Worker обнаруживает Master в сети, подключается к нему, загружает сцену, подготавливает все слои (проверяет их доступность) и готов к генерации ландшафта.
Вы можете запустить несколько консольных приложений на одном компьютере и / или разветвить один Worker через Master, чтобы создать больше процессов.
- Версии операционной системы на Master-е и Worker-ах должны быть идентичны.
- Версия SDK редактора, запущенного на Master-е, должна совпадать с версией консольного приложения (включая точность).
- версия SDK Development/Release не имеет значения.
Когда генерация ландшафта завершена и вам больше не нужны Worker-ы, закройте консольное приложение на Worker-ах или завершите процессы через Master.
Диагностика#
- Если задержка в сети слишком велика, несмотря на пропускную способность 1 Гб или выше, это может быть вызвано подключенным к сети устройством объемом 100 Мб или 10 Мб. Скорость обмена данными падает до максимальной скорости, поддерживаемой таким устройством, что замедляет скорость генерации.
- Убедитесь, что ваши проекты на Master и Worker-ах используют одинаковую точность (double или float), одни и те же версии движка и одни и те же версии GDAL, в противном случае Worker-ы отобразят ошибку Разные сборки.
- Используйте SSD для хранения общих исходных данных и кэша.
- Добавьте приложение в список исключений антивируса, так как это может снизить производительность.
- Убедитесь, что сетевые порты, используемые Master-ом и Worker-ами, разрешены брандмауэром.