6. Устранение неполадок и оптимизация
При использовании EvoX вы можете столкнуться с проблемами или захотеть тонко настроить свои алгоритмы. В этой главе описаны распространённые проблемы и их решения, а также стратегии отладки и советы по настройке производительности, которые помогут вам решить проблемы и оптимизировать работу.
6.1 Распространённые проблемы и решения
Вот некоторые часто встречающиеся проблемы и способы их решения:
(1) Ошибки установки или импорта:
- Симптом: Ошибка при выполнении
import evox. - Решение:
- Проверьте установку: Выполните
pip show evoxдля проверки. Если пакет не установлен, проверьте виртуальное окружение и переустановите. - Отсутствующие зависимости: Если вы видите
ModuleNotFoundError: No module named 'torch', установите PyTorch, как описано в Главе 2. - Несоответствие CUDA: Убедитесь, что версия PyTorch соответствует установленным драйверам CUDA.
- Проверьте установку: Выполните
(2) GPU не используется:
- Симптом: EvoX работает на CPU вместо GPU.
- Решение:
- Проверьте с помощью
torch.cuda.is_available(). ЕслиFalse, переустановите GPU-совместимый PyTorch и проверьте установку CUDA. - Если
True, но EvoX всё ещё использует CPU, убедитесь, что ваши тензоры перемещены на GPU (см. Главу 3 для настройки).
- Проверьте с помощью
(3) Нехватка памяти (RAM/VRAM):
- Симптом: Вы видите
OutOfMemoryError. - Решение:
- Уменьшите размер популяции, размерность задачи или частоту оценки.
- Используйте float16 (половинная точность) или разделение пакетной оценки.
- Отключите режимы отладки/детерминизма в PyTorch.
- Сохраняйте только статистику вместо полных фронтов Парето (для многоцелевых задач).
- Обновление оборудования — окончательное решение проблем с памятью.
(4) Стагнация сходимости:
- Симптом: Алгоритм застревает в локальном оптимуме.
- Решение:
- Увеличьте разнообразие популяции (например, повысьте частоту мутаций).
- Попробуйте другие алгоритмы или параметры.
- Убедитесь, что целевая функция хорошо определена (не слишком зашумлена или плоска).
- Запустите несколько испытаний и выберите лучшее — EvoX упрощает параллельные запуски.
(5) Плохие результаты оптимизации:
- Симптом: Конечные результаты ниже ожиданий.
- Решение:
- Проверьте определение задачи: Убедитесь, что приспособленность вычисляется правильно (например, знаки, масштабирование).
- Соответствие алгоритма: Попробуйте другие или настройте гиперпараметры.
- Используйте кривые сходимости:
- Ранняя стабилизация -> преждевременная сходимость.
- Колебания -> слишком высокая случайность.
- Настройте параметры алгоритма и анализируйте поведение во времени.
(6) Конфликты бэкендов (JAX vs PyTorch):
- Симптом: Случайно установлена JAX-версия EvoX при использовании примеров PyTorch.
- Решение: По умолчанию
pip install evoxустанавливает версию PyTorch. Если вы установили JAX-версию, переустановите по инструкциям для PyTorch (см. Главу 2). Функции JAX документированы отдельно.
(7) Несоответствие версий:
- Симптом: Вызовы API не соответствуют установленной версии.
- Решение:
- Обновления EvoX могут изменять имена методов (например,
ask/tell->step). - Используйте последнюю стабильную версию и обращайтесь к её документации.
- Адаптируйте код к вашей версии EvoX или рассмотрите обновление.
- Обновления EvoX могут изменять имена методов (например,
6.2 Советы по отладке
Отладка эволюционных алгоритмов может быть сложной из-за их стохастической природы. Вот практические советы:
(1) Используйте тестирование малого масштаба:
- Уменьшите размер популяции и количество итераций для упрощения отладки.
- Пример:
pop_size=5,iterations=20. - Это облегчает отслеживание поведения популяции и изоляцию проблем.
(2) Вставляйте операторы вывода:
- Выводите приспособленность популяции, лучших особей и промежуточные значения.
- Для больших тензоров выводите формы или используйте
.tolist()для меньших. - Помогает понять сходимость и эффекты операторов.
(3) Используйте точки останова в IDE:
- Используйте PyCharm или VS Code для установки точек останова внутри
step()алгоритма или логики оценки. - Проверяйте значения переменных, содержимое тензоров или переходы состояний.
- Будьте осторожны с большими тензорами — ограничьте то, что вы проверяете, чтобы избежать сбоев.
(4) Модульное тестирование пользовательских компонентов:
- Тестируйте функции скрещивания/мутации отдельно.
- Используйте синтетические входные данные для проверки форм выходных данных и логики перед полной интеграцией.
(5) Профилирование выполнения:
- Используйте
torch.autograd.profiler.profileилиtime.time()для измерения времени шагов. - Помогает найти узкие места или бесконечные циклы.
- Определите, связаны ли замедления с оценкой или логикой алгоритма.
(6) Запись вывода в файл:
- Записывайте логи в файлы
.csvдля длительных запусков. - Включайте лучшую приспособленность за поколение, статистику разнообразия и т.д.
- Полезно, когда сбои не позволяют увидеть вывод в консоли.
В целом, отладка проектов EvoX требует баланса между проверками корректности и анализом результатов. Сначала сосредоточьтесь на обеспечении правильной работы алгоритма, затем оптимизируйте его эффективность.
6.3 Руководство по настройке производительности
Эти советы помогут вам выжать больше скорости и качества из EvoX:
(1) Постепенное масштабирование:
- Начните с малого: Тестируйте логику с малыми входными данными.
- Масштабируйте постепенно и наблюдайте, как увеличивается время выполнения.
- Выявляйте неэффективности, если масштабирование нелинейно (например, 10x популяция -> >10x время).
(2) Мониторинг использования оборудования:
- Используйте
nvidia-smiдля GPU,htopдля CPU. - Высокая загрузка GPU (>50%) — идеально.
- Низкая загрузка GPU может означать, что данные не на GPU или частые передачи CPU-GPU замедляют работу.
(3) Настройка параллелизма:
- Установите потоки CPU:
torch.set_num_threads(n). - Избегайте избыточной подписки при использовании многопоточных инструментов оценки.
- Для GPU оптимизируйте потоки
DataLoader, если используете пакетные среды или наборы данных.
(4) Используйте пакетную оценку:
- Пакетная оценка быстрее, чем оценка по отдельным особям.
- Всегда векторизуйте
Problem.evaluate()для обработки целых популяций.
(5) Уменьшите накладные расходы Python:
- Перенесите тяжёлую логику внутрь
AlgorithmилиProblem, избегайте сложного кода Python в основном цикле. - Используйте
workflow.step()для большинства операций. - Минимизируйте диагностику за поколение, если она замедляет запуски.
(6) Настройте выбор алгоритма:
- Попробуйте CMA-ES, GA, PSO, RVEA и т.д. — ни один алгоритм не является лучшим для всех задач.
- Быстрее сходящийся алгоритм может сэкономить больше времени, чем микрооптимизация медленно сходящегося.
Настройка производительности — итеративный процесс. С терпением вы можете перейти от часов выполнения к минутам. EvoX предоставляет множество «рычагов» — используйте их разумно для баланса скорости и качества решений.