Три подхода к ускорению обучения XGBoost-моделей |
||||||||||||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2022-05-12 13:21 Фреймворк XGBoost (Extreme Gradient Boosting, экстремальный градиентный бустинг) — это эффективная опенсорсная реализация алгоритма градиентного бустинга. Этот фреймворк отличается высокой скоростью работы, а модели, построенные на его основе, обладают хорошей производительностью. Поэтому он пользуется популярностью при решении задач классификации и регрессии с использованием табличных наборов данных. Но процесс обучения XGBoost-моделей может занять много времени. В предыдущем материале мы говорили о плюсах и минусах различных подходов к ускорению обучения XGBoost-моделей. Ознакомившись с тем материалом, вы сможете получить общее представление об этих подходах. В этой статье мы рассмотрим три различных подхода к уменьшению времени обучения XGBoost-классификатора. Здесь вы найдёте примеры кода, что позволит вам самостоятельно испытать то, о чём мы будем говорить. А именно, речь пойдёт о трёх методах ускорения обучения XGBoost-моделей:
Прежде чем перейти к нашей основной теме — создадим XGBoost-модель, импортировав функцию С помощью этого кода создан XGBoost-классификатор, готовый к тому, чтобы его обучили. Поговорим теперь о том, как его обучить с использованием трёх вышеупомянутых подходов. Применение деревьев Параметр XGBoost-классификатора Выбирая алгоритм Обратите внимание на то, что при применении моделей, использующих деревья, можно указать максимальную глубину роста дерева. Дерево, расположенное в левой части следующей схемы, имеет глубину, равную 2. А глубина дерева, находящегося справа, равна 3. По умолчанию максимальная глубина дерева — 6. Более глубокие деревья могут лучше моделировать сложные взаимодействия между признаками, но если они оказываются слишком глубокими — это может привести к переобучению модели. Применение более глубоких деревьев, кроме того, означает, что на обучение модели понадобится больше времени. Есть и многие другие гиперпараметры, которые управляют процессом обучения. Подбор наилучшего набора гиперпараметров для конкретной задачи стоит автоматизировать с помощью специализированного инструмента вроде HyperOpt, Optuna или Ray Tune. Ниже показана кривая обучения XGBoost-модели с использованием GPU. Там же приведено сравнение времени обучения модели на CPU ( Видно, что при обучении XGBoost-модели на большом наборе данных с параметром Облачное обучение моделей Использование параметра Облачные GPU-провайдеры не предоставляют свои услуги бесплатно. Но среди предлагаемых ими тарифных планов можно подобрать именно то, что нужно. Например — такой, когда оплачивается лишь фактическое время использования оборудования. Это позволяет пользователю отключать используемые инстансы виртуальных или физических машин, применяемые для обучения модели. В результате платить приходится только за время реального использования ресурсов. XGBoost-модель, используемая в этой статье, обучается с использованием инстансов AWS EC2. Мы фиксируем время, которое тратится на обучение. Этот процесс довольно-таки прост. Ниже приведён пошаговый план обучения XGBoost-моделей на инстансах AWS EC2:
Для того чтобы облегчить себе жизнь — после входа в система выберите Amazon Machine Image (AMI) для запуска виртуальной машины с помощью EC2. Именно на этой виртуальной машине и можно будет произвести обучение XGBoost-модели. Для того чтобы узнать подробности об инстансах EC2 — обратитесь к этому материалу, посвящённому обучению XGBoost-моделей в облачной среде AWS. После того, как инстанс будет готов к работе, там можно запустить тот же код, который мы уже рассматривали. В частности, речь идёт об обучении модели, созданной с параметром Распределённое обучение XGBoost-моделей с использованием библиотеки xgboost_ray Мы уже разобрались с тем, что скорость обучения XGBoost-моделей на больших наборах данных в локальном окружении можно увеличить, прибегнув к XGBoost-деревьям, задействующим GPU. Дальнейшего роста скорости можно добиться, воспользовавшись облачными решениями наподобие AWS или Google Cloud. В дополнение к этим двум возможностям в нашем распоряжении имеется и ещё одна, при этом — самая интересная. Это — распределённое обучение XGBoost-моделей с использованием фреймворка Ray. Для краткости этот метод обучения моделей мы будем называть XGBoost-Ray. Метод XGBoost-Ray предусматривает использование Python-библиотеки, позволяющей организовать распределённое обучение XGBoost-моделей. Эта библиотека основана на фреймворке для распределённых вычислений Ray. Применение XGBoost-Ray позволяет без особого труда перенести вычислительную нагрузку, связанную с обучением, на ресурсы кластера, состоящего из сотен узлов. Этот метод, кроме того, даёт нам различные дополнительные возможности, в частности, обеспечивает отказоустойчивость, масштабирование обучения, интеграцию с Ray Tune для оптимизации гиперпараметров. Стандартная реализация XGBoost рассчитана на использование одного GPU или CPU на одном компьютере. Для того чтобы воспользоваться дополнительными вычислительными ресурсами, необходимо прибегнуть к механизму распределённого обучения наподобие XGBoost-Ray. А если наборы данных, с которыми вы работаете, очень велики и не помещаются в памяти отдельного компьютера, то вам просто необходимо прибегнуть к распределённому обучению. Вот схема организации распределённого обучения с применением XGBoost-Ray, когда задействованы несколько узлов с несколькими GPU. XGBoost-Ray, для организации обучения, создаёт агенты обучения для всего кластера. Потом каждый из агентов обучается на отдельном фрагменте данных. Это называется обучением с параллелизмом по данным. Агенты объединяют результаты вычисления градиентов с помощью операции Поговорим о том, что надо сделать для обучения XGBoost-модели с помощью Ray. Начнём с кода, который мы уже рассматривали. Импортируем в него зависимости Теперь, когда классификатор готов к работе, можно приступить к настройке фреймворка для распределённого обучения, организовав с его помощью обучение модели на нескольких GPU. Другими словами — нужно указать то, сколько агентов нужно использовать системе, задать распределение CPU и GPU по агентам. Делается это с помощью объекта Так как в нашем примере используется лишь один компьютер — оба агента будут выполняться на нём. Но тот же код можно использовать и в кластере, содержащем десятки или даже сотни машин. Обратите внимание на то, что данные передаются XGBoost-Ray с использованием объекта Как уже было сказано, компьютер, на котором мы обучаем модель, обладает шестью процессорными ядрами. Сравнение результатов Пришло время сравнить эффективность рассмотренных подходов к ускорению обучения XGBoost-моделей, узнать о том, какой из них позволяет обучать модели быстрее всего. Из следующей таблицы можно узнать, что самым эффективным методом ускорения обучения моделей является тот, который предусматривает применение фреймворка Ray. Это так благодаря тому, что он позволяет организовать распределённое обучение, задействовать несколько CPU и GPU, обеспечивает отказоустойчивость, поддерживает множество настраиваемых параметров. Этот метод, кроме того, позволяет ускорить обучение ещё сильнее. Мы воспользовались им, имея в распоряжении лишь один компьютер, а он способен организовать обучение на вычислительном кластере, состоящем из множества машин.
Вот, для наглядности, графическое представление этих результатов. Итоги В этом материале мы исследовали несколько методов, позволяющих ускорить обучение XGBoost-классификатора. В итоге мы выяснили, что распределённое обучение XGBoost-моделей с применением фреймворка Ray обходит все другие методы в плане скорости обучения. Это так из-за того, что XGBoost-Ray поддерживает обучение моделей с использованием вычислительных кластеров, позволяет полностью задействовать потенциал современных CPU и GPU, поддаётся тонкой настройке с помощью параметров наподобие В следующем материале мы поговорим о развёртывании XGBoost-моделей с помощью Ray Serve. А если вы хотите углубиться в изучение Ray и XGBoost — можете заглянуть сюда и сюда. О, а приходите к нам работать? ?Мы в wunderfund.io занимаемся высокочастотной алготорговлей с 2014 года. Высокочастотная торговля — это непрерывное соревнование лучших программистов и математиков всего мира. Присоединившись к нам, вы станете частью этой увлекательной схватки. Мы предлагаем интересные и сложные задачи по анализу данных и low latency разработке для увлеченных исследователей и программистов. Гибкий график и никакой бюрократии, решения быстро принимаются и воплощаются в жизнь. Сейчас мы ищем плюсовиков, питонистов, дата-инженеров и мл-рисерчеров. Источник: habr.com Комментарии: |
|||||||||||