Это 30-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления
Введение в ННИ
NNI (Neural Network Intelligence) — это легкий, но мощный набор инструментов для автоматического машинного обучения (AutoML), который помогает пользователям автоматизировать разработку функций, поиск нейронной архитектуры, настройку гиперпараметров и сжатие моделей, а также поддерживает одномашинные, локальные многомашинные, облачные и другие различные операционные среды.
Ключевые особенности 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
Архитектура 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кнопку для загрузки этой информации и параметров.
Просмотр страницы сведений о пробной версии
Показатели лучших попыток и графики гиперпараметров можно увидеть на этой странице. когда вы нажимаете кнопкуAdd/Remove columns
, содержимое таблицы включает больше столбцов. когда вы нажимаете кнопкуAdd/Remove columns
, содержимое таблицы включает больше столбцов.
Посетите страницу управления экспериментом
All experiments
страницу для просмотра всех экспериментов на вашем компьютере.
На данный момент был проведен один экспериментальный запуск настройки гиперпараметров AutoML.
Суммировать
В этой статье кратко представлены основные концепции, основные функциональные характеристики инструмента автоматического машинного обучения NNI и способы использования NNI для проведения эксперимента по настройке гиперпараметров, и мы надеемся помочь вам.