Краткий анализ инструмента автоматического машинного обучения (AutoML) NNI

искусственный интеллект
Краткий анализ инструмента автоматического машинного обучения (AutoML) NNI

Это 30-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления

Введение в ННИ

NNI (Neural Network Intelligence) — это легкий, но мощный набор инструментов для автоматического машинного обучения (AutoML), который помогает пользователям автоматизировать разработку функций, поиск нейронной архитектуры, настройку гиперпараметров и сжатие моделей, а также поддерживает одномашинные, локальные многомашинные, облачные и другие различные операционные среды.

nni架构.png

Ключевые особенности NNI

Характеристики NNI в основном включают в себя: простоту использования, расширяемость, гибкость и эффективность.

  • легко использовать: NNI может пройтиpipУстановить. Всего несколькими строками кода вы можете использовать NNI для настройки параметров. Можно просматривать с помощью инструментов командной строки или веб-интерфейсаExperiment.
  • Масштабируемость: Настройка гиперпараметров или сетевых структур обычно требует много вычислительных ресурсов. NNI предназначен для поддержки множества различных вычислительных ресурсов, таких как группы удаленных серверов, обучающие платформы (например, OpenPAI, Kubernetes) и так далее. В зависимости от возможностей настроенной вами обучающей платформы, сотниTrial.
  • гибкий: Помимо встроенных алгоритмов легко интегрируется в NNI.Пользовательский алгоритм настройки гиперпараметров, алгоритм поиска архитектуры нейронной сети, алгоритм досрочного завершенияи Т. Д. Также можно подключить NNI к большему количеству обучающих платформ, таких как кластеры виртуальных машин в облачных средах, сервисы Kubernetes и т. д. Кроме того, NNI можно подключать к специальным приложениям и моделям во внешней среде.
  • эффективный: NNI постоянно оптимизируется на уровне системы и алгоритма. Например: ускорить процесс настройки с помощью ранней обратной связи.

Основные понятия ННИ

  • Эксперимент: представляет задачу, например, поиск наилучшего сочетания гиперпараметров для модели или наилучшей архитектуры нейронной сети и т. д. это состоит изTrialи自动机器学习算法составлен.
  • Пространство поиска: область настройки модели. Например, диапазон значений гиперпараметров.
  • Конфигурация: конфиг есть搜索空间的实例化, фиксируется определенный гиперпараметр из пространства поиска, и каждый гиперпараметр будет иметь определенное значение.
  • Испытание (попробовать): это независимая попытка, которая использует определенный набор конфигураций (например, набор значений гиперпараметров или определенную архитектуру нейронной сети). Испытание будет основано на предоставленном配置бежать.
  • Тюнер: алгоритм автоматического машинного обучения, которыйTrialСоздайте новую конфигурацию. новыйTrialбудет использовать этот набор конфигураций для запуска.
  • Оценщик (оценщик):анализироватьTrialпромежуточные результаты (например, периодическая оценка точности набора данных), чтобы определитьTrialследует прекратить досрочно.
  • учебная платформа:ДаTrialсреда выполнения. в соответствии сExperimentконфигурация, которая может быть локальной, удаленной группой серверов или другими крупномасштабными учебными платформами (такими какOpenPAI,KubernetesЖдать).

Архитектура NNI

体系结构.png

Архитектура NNI показана на рисунке выше и включает в себя:

  • Контроллер NNI (nnictl): это инструмент командной строки, используемый для управления веб-сервером и другими функциями управления, пользователи могут использовать эту команду для управления. Например, начать эксперимент.
  • NNI Core: Это ядро ​​NNI и реализуетWeb UI, nnimanager, услуги по обучению и другие основные функции. Если в эксперименте есть серьезная ошибка, причину можно найти в журнале. (например, не открывается веб-интерфейс или не работает обучающая платформа)
  • Advisor: Advisor — это система настройки гиперпараметров NNI, включающаяTunerиAssessor, соответственно ответственные за генерацию следующегоtrialи оценитьtrial.
  • учебная платформа: Учебная платформа справа может быть本机/远程服务器/OpenPAI/Kubernetesд., многоtrialРаспределите по каждой платформе и завершите пробную версию.

На приведенном выше рисунке мы также видим, что текущий процесс эксперимента NNI выглядит следующим образом:

  • Тюнер получает пространство для поиска и генерирует конфигурацию.
  • Эти конфигурации будут привязаны к учебным платформам, таким как локальные компьютеры, группы удаленных серверов или учебные кластеры.
  • Результат исполнения будет возвращен тюнеру.
  • Затем создайте и отправьте новую конфигурацию.

Каждый раз, когда выполняется эксперимент, пользователю нужно только определить пространство поиска и изменить несколько строк кода, а затем использовать встроенный тюнер/оценщик и обучающую платформу NNI для поиска наилучшей комбинации гиперпараметров и структуры нейронной сети. . В основном есть три шага:

  • Шаг 1: Определите пространство поиска
  • Шаг 2. Измените код модели
  • Шаг 3: Определите конфигурацию эксперимента

Основные функции NNI

NNI позволяет запускать несколько экземпляров параллельно, чтобы найти наилучшее сочетание параметров. Эту возможность можно использовать в самых разных областях, например, для поиска лучших гиперпараметров для моделей глубокого обучения или для поиска лучших конфигураций для баз данных и других сложных систем с реальными данными.

NNI также надеется предоставить набор алгоритмов для машинного обучения и глубокого обучения, особенно алгоритмы поиска нейронной архитектуры (NAS), алгоритмы сжатия моделей и алгоритмы проектирования признаков.

Настройка гиперпараметров

Это основная и самая основная функция NNI, которая предоставляет множество популярныхАлгоритмы автоматической настройки(например, тюнер) иАлгоритм досрочного завершения(т.е. оценщик).

Тюнер, встроенный в NNI

NNI может настраивать алгоритмы настройки гиперпараметров простым и быстрым способом, который называетсяTuner.

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

Встроенные алгоритмы автоматической настройки NNI показаны в следующей таблице:

Обзор Введение в алгоритмы
TPE Оценщик Парцена с древовидной структурой (TPE) — это метод оптимизации на основе последовательной модели (SMBO, то есть оптимизация на основе последовательной модели). Метод SMBO последовательно строит модель на основе исторических данных метрик для оценки производительности гиперпараметров, а затем выбирает новые гиперпараметры на основе этой модели.Справочные документы
Случайный поиск Когда дело доходит до оптимизации гиперпараметров, алгоритм случайного поиска демонстрирует удивительную простоту и эффективность. Рекомендуется использовать случайный поиск в качестве эталона, когда неизвестно предварительное распределение гиперпараметров.Справочные документы
Отжиг Этот простой алгоритм отжига начинается с предыдущего семпла и сэмплирует все ближе и ближе к найденной оптимальной точке. Этот алгоритм представляет собой простой вариант случайного поиска, использующий гладкость поверхностей реакции. Скорость отжига не является адаптивной.
Наивная эволюция Naïve Evolution исходит из крупномасштабной эволюции классификаторов изображений. Он случайным образом генерирует популяцию на основе пространства поиска. В каждом поколении выбирается лучший результат, а следующее поколение подвергается некоторой мутации (например, изменению гиперпараметра, добавлению или удалению одного слоя). Наивный эволюционный алгоритм требует многих испытаний, чтобы быть эффективным, но он также очень прост и легко расширяется новыми функциями.Справочные документы
SMAC SMAC основан на последовательной оптимизации на основе моделей (SMBO или последовательная оптимизация на основе моделей). Он использует преимущество используемой существенной модели (модель случайного процесса Гаусса) и вводит случайные леса в SMBO для обработки параметров классификации. Алгоритм SMAC является оболочкой Github SMAC3. Примечание. SMAC должен пройтиpip install nni[SMAC]команда для установки.Справочные документы репозиторий кода
Пакетный тюнер Пакетная настройка позволяет пользователям легко предоставлять несколько наборов конфигураций (например, комбинации опций гиперпараметров). Когда все настройки завершены, эксперимент заканчивается. Пакетный тюнер поддерживает только тип выбора.
Поиск по сетке (обход) Поиск по сетке исчерпает все комбинации гиперпараметров, определенные в файле пространства поиска. Для обходного поиска можно использовать следующие типы: selection, quuniform, randint.
Hyperband Hyperband пытается изучить как можно больше комбинаций с ограниченными ресурсами и найти лучшие результаты. Основная идея состоит в том, чтобы сгенерировать множество конфигураций и запустить некоторые из них через небольшое количество испытаний. Половина конфигурации с низкой производительностью будет отброшена, а оставшаяся часть и вновь выбранная конфигурация будут обучены на следующем шаге. Сумма очень чувствительна к ограничениям ресурсов (например, выделенному времени поиска).Справочные документы
Network Morphism Сетевой морфизм предоставляет возможность автоматического поиска архитектур глубокого обучения. Он наследует знания родительской сети для создания деформированной дочерней сети. Включая изменения глубины, ширины, прыжковых соединений и т. д. Затем используйте историческую архитектуру и метрики, чтобы оценить ценность подсети. Затем наиболее перспективные модели отбираются для обучения.Справочные документы
Metis Tuner Большинство инструментов настройки только предсказывают оптимальную конфигурацию, и у Metis есть преимущество, заключающееся в том, что у нее есть два выхода: (а) текущий прогноз оптимальной конфигурации и (б) рекомендация для следующего испытания. Он не делает случайную выборку. Большинство инструментов предполагают, что обучающий набор свободен от зашумленных данных, но Metis будет знать, нужно ли передискретизировать гиперпараметр.Справочные документы
BOHB BOHB является продолжением алгоритма Hyperband. Hyperband не использует существующие результаты испытаний при создании новых конфигураций, и этот алгоритм использует результаты испытаний. В BOHB HB означает Hyperband, а BO означает Byesian Optimization. BOHB создает несколько моделей TPE для создания новых конфигураций на основе завершенных испытаний.Справочные документы
GP Tuner Gaussian Process Tuner — это метод оптимизации на основе сериализованной модели (SMBO), в котором вместо этого используется гауссовский процесс.Справочные документы, Репозиторий на гитхабе
PPO Tuner PPO Tuner — это тюнер обучения с подкреплением, основанный на алгоритме PPO.Справочные документы
PBT Tuner PBT Tuner — это простой алгоритм асинхронной оптимизации, который может эффективно совместно оптимизировать набор моделей и их гиперпараметров, чтобы максимизировать производительность при фиксированных вычислительных ресурсах.Справочные документы

Встроенный оценщик NNI

В целях экономии вычислительных ресурсов NNI поддерживает стратегию раннего прекращения и называетсяAssessorинтерфейс для этого.

Оценщик получает промежуточные результаты испытания и решает, должно ли это испытание быть прекращено по заданному алгоритму. Как только испытание удовлетворяет политике досрочного прекращения (что означает, что эксперт считает, что окончательный результат не будет слишком хорошим), он прекращает испытание и отмечает его статус как==EARLY_STOPPED==.

В настоящее время NNI поддерживает следующие алгоритмы досрочного завершения:

Assessor Введение в алгоритмы
Medianstop Medianstop — это простой алгоритм досрочного завершения. Если лучшее целевое значение на шаге S для попытки X значительно ниже среднего значения для шага S для всех завершенных попыток, то попытка X останавливается.Справочные документы
Curvefitting Curve Fitting Assessor — это алгоритм LPA (обучение, прогнозирование, оценка). Если прогнозируемое испытание X хуже, чем самое эффективное испытание на шаге S, оно прекращается досрочно. В этом алгоритме используется 12 кривых, соответствующих кривой точности.Справочные документы

Универсальная среда NAS

Эта структура NAS позволяет пользователям легко указывать возможные нейронные архитектуры, например, несколько операций-кандидатов (например, разделяемая конвекция, расширенная конвекция) могут быть указаны для одного уровня и, возможно, пропускать соединения. NNI автоматически найдет лучших кандидатов. С другой стороны, среда NAS предоставляет простой интерфейс для других типов пользователей (например, исследователей алгоритмов NAS) для реализации новых алгоритмов NAS.

ННИ прошелTrial SDKПоддерживает несколько одноразовых алгоритмов NAS, таких как: ENAS, DARTS. При использовании этих алгоритмов нет необходимости запускать эксперимент NNI. Добавьте алгоритм в пробный код и запустите его напрямую.Если вы хотите настроить гиперпараметры в своем алгоритме или запустить несколько экземпляров, вы можете использовать Tuner и запустить эксперимент NNI..

Кромеone-shot NASКроме того, NAS также можетрежим NNIзапусков, где каждая сетевая структура-кандидат запускается как независимая пробная задача.В этом режиме, аналогично настройке гиперпараметров, необходимо запустить эксперимент NNI и выбрать тюнер для NAS..

сжатие модели

NNI предоставляет простую в использовании структуру сжатия моделей для сжатия глубоких нейронных сетей.Сжатая сеть обычноИмеет меньший размер моделииболее быстрый вывод, производительность модели существенно не упадет. Сжатие модели на NNI включаетобрезкаиколичественноалгоритм. Эти алгоритмы проходят NNITrial SDKпоставка . Можно использовать непосредственно в пробном коде и запускать пробный код без запуска эксперимента NNI. Пользователи также могут интегрироваться со структурой сжатия моделей NNI.настроитьалгоритмы обрезки и квантования.

Автоматическая разработка функций

Автоматическая разработка функций для поиска наиболее эффективных функций для последующих задач. Автоматическая разработка функций поддерживается пробным SDK NNI. Вам не нужно создавать эксперимент NNI. Вам нужно только добавить встроенный алгоритм автоматической разработки функций в пробный код, а затем запустить пробный код напрямую.

Алгоритмы автоматического проектирования признаков обычно имеют некоторые гиперпараметры. Если вы хотите автоматически настроить эти гиперпараметры, вы можете использовать настройку гиперпараметров NNI, то есть выбрать алгоритм настройки (например, тюнер) и запустить эксперимент NNI.

Установить

Установить через пип

python3 -m pip install --upgrade nni

Сборка из исходников

# 拉取NNI源码并指定分支
git clone -b v2.0 https://github.com/Microsoft/nni.git

cd nni
# 设置环境变量
export NNI_RELEASE=2.0

# 构建
python3 -m pip install --upgrade pip setuptools wheel
python3 setup.py clean --all
python3 setup.py build_ts
python3 setup.py bdist_wheel -p manylinux1_x86_64
python3 -m pip install dist/nni-2.0-py3-none-manylinux1_x86_64.whl

Установка докера

# 拉取NNI镜像
docker pull msranni/nni:v2.2

# 启动NNI容器
docker run -i -t -p 9090:8080 msranni/nni:v2.0

Примечание:

При запуске NNI в Docer

Если вы используете официальное зеркало NNI напрямуюmsranni/nniЧтобы начать эксперимент, вы можете напрямую использоватьnnictl Заказ. Официальный образ NNI содержит самую базовую среду Python и структуру глубокого обучения.

Если вы используете собственный образ Docker, вам необходимо сначалаУстановить ННИ, какpython3 -m pip install --upgrade nni.

Простой пример эксперимента по настройке гиперпараметров NNI

Псевдокод, используемый NNI для помощи в настройке гиперпараметров, выглядит следующим образом:

  • Вход: пространство поиска, пробный код, файл конфигурации.
  • Выход: набор оптимальных конфигураций параметров
 1: For t = 0, 1, 2, ..., maxTrialNum,
 2:      hyperparameter = 从搜索空间选择一组参数
 3:      final result = run_trial_and_evaluate(hyperparameter)
 4:      返回最终结果给 NNI
 5:      If 时间达到上限,
 6:          停止实验
 7: 返回最好的实验结果

Разработайте и запустите эксперимент NNI

Чтобы начать эксперимент, нужно выполнить три шага:

первый шаг: писать в формате JSON搜索空间файл, включая все гиперпараметры, которые необходимо найти名称и分布(Доступны как дискретные, так и непрерывные значения).

search_space.json

{
    "batch_size": {"_type":"choice", "_value": [16, 32, 64, 128]},
    "hidden_size":{"_type":"choice","_value":[128, 256, 512, 1024]},
    "lr":{"_type":"choice","_value":[0.0001, 0.001, 0.01, 0.1]},
    "momentum":{"_type":"uniform","_value":[0, 1]}
}

второй шаг:ИсправлятьTrialКод для получения гиперпараметров от NNI и возврата конечного результата NNI.

mnist.py

import nni

def main(args):
    # 下载数据
    train_loader = torch.utils.data.DataLoader(datasets.MNIST(...), batch_size=args['batch_size'], shuffle=True)
    test_loader = torch.tuils.data.DataLoader(datasets.MNIST(...), batch_size=1000, shuffle=True)
    # 构造模型
    model = Net(hidden_size=args['hidden_size'])
    optimizer = optim.SGD(model.parameters(), lr=args['lr'], momentum=args['momentum'])
    # 训练
    for epoch in range(10):
        train(args, model, device, train_loader, optimizer, epoch)
        test_acc = test(args, model, device, test_loader)
        print(test_acc)
        nni.report_intermeidate_result(test_acc)    
    print('final accuracy:', test_acc)
    # 报告评估指标
    nni.report_final_result(test_acc)

if __name__ == '__main__':
    # 设置超参数默认值
    params = {'batch_size': 32, 'hidden_size': 128, 'lr': 0.001, 'momentum': 0.5}
    # 获取一次Trail的超参数
    params = nni.get_next_parameter()
    main(params)

третий шаг: определяет формат YAML配置файл, который объявляет пространство поиска и файл Trail路径. Он также предоставляет другую информацию, такую ​​как параметры настройки алгоритма, максимальное количество пробных запусков и максимальную продолжительность.

config.yml

authorName: default
experimentName: example_mnist
trialConcurrency: 1
maxExecDuration: 1h
maxTrialNum: 10
trainingServicePlatform: local
# 搜索空间文件路径
searchSpacePath: search_space.json
useAnnotation: false
tuner:
  builtinTunerName: TPE
# 运行的命令,以及 Trial 代码的路径
trial:
  command: python3 mnist.py
  codeDir: .
  gpuNum: 0

Наконец, из командной строки используйтеconfig.ymlФайл запускает эксперимент MNIST.

nnictl create --config config.yml

Уведомление

Если вы хотите использовать удаленный сервер или кластер в качествеучебная платформа, чтобы избежать чрезмерной сетевой нагрузки, NNI ограничивает максимальное количество файлов до 2000 и размер до 300 МБ. Если codeDir содержит слишком много файлов, добавьте.nniignoreфайл для исключения разделов, с.gitignoreИспользование файлов аналогично.

Ожидание вывода в командной строкеINFO: Successfully started experiment!. Это сообщение означает, что эксперимент успешно начался. Ожидаемый результат выглядит следующим образом:

INFO: Starting restful server...
INFO: Successfully started Restful server!
INFO: Setting local config...
INFO: Successfully set local config!
INFO: Starting experiment...
INFO: Successfully started experiment!
-----------------------------------------------------------------------
The experiment id is egchD4qy
The Web UI urls are: [Your IP]:8080
-----------------------------------------------------------------------

You can use these commands to get more information about the experiment
-----------------------------------------------------------------------
         commands                       description
1. nnictl experiment show        show the information of experiments
2. nnictl trial ls               list all of trial jobs
3. nnictl top                    monitor the status of running experiments
4. nnictl log stderr             show stderr log content
5. nnictl log stdout             show stdout log content
6. nnictl stop                   stop an experiment
7. nnictl trial kill             kill a trial job by id
8. nnictl --help                 get help information about nnictl
-----------------------------------------------------------------------

Если вы подготовили соответствующийTrial,搜索空间и配置и успешно создал задачу NNI. NNI автоматически начнет запускать различные наборы гиперпараметров через настроенное пространство поиска в поисках лучших гиперпараметров. За ходом NNI можно следить через веб-интерфейс.

Визуализируйте процесс эксперимента через веб-интерфейс

После запуска эксперимента в интерфейсе командной строки можно найти следующееWeb 界面地址:

The Web UI urls are: [Your IP]:8080

Открыть в браузереWeb 界面地址 (который:[IP地址]:8080), можно посмотреть подробности эксперимента, а также все пробные задания.

Посмотреть сводную страницу

Информация, связанная с экспериментом, будет отображаться в интерфейсе, например, конфигурация и пространство поиска. NNI также поддерживаетExperiment summaryкнопку для загрузки этой информации и параметров.

nni-full-oview.png

Просмотр страницы сведений о пробной версии

Показатели лучших попыток и графики гиперпараметров можно увидеть на этой странице. когда вы нажимаете кнопкуAdd/Remove columns, содержимое таблицы включает больше столбцов. когда вы нажимаете кнопкуAdd/Remove columns, содержимое таблицы включает больше столбцов.

尝试详情页面.png

Посетите страницу управления экспериментом

All experimentsстраницу для просмотра всех экспериментов на вашем компьютере.

实验管理页面.png

На данный момент был проведен один экспериментальный запуск настройки гиперпараметров AutoML.

Суммировать

В этой статье кратко представлены основные концепции, основные функциональные характеристики инструмента автоматического машинного обучения NNI и способы использования NNI для проведения эксперимента по настройке гиперпараметров, и мы надеемся помочь вам.

Справочная документация