Эта статья написана [Передовая линия ИИ] Оригинал, рекомендуемое чтение:t.cn/RHNgd73
Автор | Джозеф Грин
Редактор | Эмили
Руководство по передовой ИИ: "Недавно кто-то подумал, что создавать стек снова и снова слишком громоздко, поэтому он запустил на Reddit инструмент с открытым исходным кодом, Parris, который может помочь разработчикам автоматически обучать алгоритмы машинного обучения. Многие люди в комментариях хвалили инструмент за то, что он сэкономил им время на утомительной работе, не связанной с основной целью машинного обучения. Участники открытого исходного кода также говорят, что этот инструмент может помочь разработчикам не тратить время на такие вещи, как выделение и настройка схемы, сбор данных, очистка/маркировка данных и документация. "
Самое большое значение этого инструмента - экономия средств
Итак, как этот инструмент может помочь тем, кто плохо знаком с ИИ? Участники этого инструмента с открытым исходным кодом дали подробный ответ на этот вопрос в ветке Reddit:
Короче говоря, этот инструмент позволяет вам использовать преимущества облачных ресурсов (текущая версия использует только AWS, но в будущих версиях будут добавлены GCP, Azure и т. д.) и сократить временные затраты. Учитывая, что мы тратим слишком много времени на работу, связанную с машинным обучением, на вещи, не связанные с алгоритмами, такие как выделение и настройка схемы, сбор данных, очистка и маркировка данных, ведение журнала и т. д., мы создали этот инструмент, чтобы упростить весь процесс обучения Алгоритм может быть запущен одним нажатием кнопки.
В деталях, когда вы начинаете работу с алгоритмом машинного обучения, первое, что бросается в глаза, это то, сколько времени вам потребовалось для завершения работы алгоритма. При запуске алгоритма обучения с учителем нам нужен, по крайней мере, курируемый помеченный набор данных, алгоритм для обучения набора данных, архитектура для запуска обучения (что может занять часы, дни или даже недели, в зависимости от задания) и Установите операционную систему, драйверы графического процессора и параметры инфраструктуры, связанные с проектом. Инструмент Parris использует шаблон CloudFormation в учетной записи AWS, поэтому нам нужно только нажать кнопку или запустить команду CLI, чтобы начать обучение, включая все настройки сервера и связанные установки, и автоматически завершить обучение после завершения обучения. Кроме того, есть возможность установить время автоматической остановки сервера вне зависимости от того, завершено обучение или нет.
Кроме того, время, необходимое для фактического запуска обучения (наиболее ресурсоемкая часть задания), сильно зависит от аппаратного устройства (при условии, что ваш код оптимизирован для эффективной работы). При использовании графических процессоров многим практикам (будь то студенты, любители или профессионалы) либо приходится покупать NVIDIA Titan V для хранения данных, либо просто тренироваться на ЦП. Конечно, это не вопрос «или-или», потому что облако существует для этой цели. В этом случае вычислительная мощность поставщика облачных услуг может хорошо решить эту проблему, и вам нужно только потратить деньги, чтобы купить время обслуживания, чтобы получить конфигурацию виртуализированного сервера, соответствующую вашим потребностям. Конечно, это не идеальное решение, например, облачные сервисы AWS с поддержкой GPU довольно дороги, а цена сервиса p3.2xlarge составляет чуть более 2000 долларов в месяц. Конечно, есть несколько более дешевых серверов (например, когда мне не нужен графический процессор, я иногда использую c5.4xlarge, что удерживает стоимость на уровне 497 долларов в месяц). Но это только проблема облачного провайдера, вам также нужно планировать заранее и знать все, что вам нужно, до того, как проект стартует.
Хотя использование облачных ресурсов означает, что вам не нужен сервер для вашего проекта, настройка все равно может стать головной болью. Вот где этот инструмент вступает в игру: он может автоматически запускать сервер, устанавливать необходимые зависимости, загружать алгоритм и обучающий набор, запускать обучение и автоматически завершать работу по завершении. Поскольку сам сценарий обучения и файл конфигурации обучения зависят от индивидуальных требований к работе, предстоит еще много работы, чтобы начать обучение. Однако, если у вас уже есть скрипт для обучения алгоритма, поздравляем, большая часть работы, которую вам нужно сделать перед использованием этого инструмента, уже сделана, и вам просто нужно ввести его как часть файла train-script.sh.
Если вы только начинаете, этот инструмент поможет вам только после того, как вы закончите свой первый проект, так как вы не сможете использовать этот инструмент без какого-либо обучения. Как только алгоритм и набор данных будут готовы, руководство по началу работы расскажет вам, что делать дальше.
Обратите внимание, что в примере я привожу некоторые данные о стоимости дорогостоящих облачных услуг, но на самом деле я не очень часто пользуюсь этими услугами, эти затраты предназначены для информирования о стоимости услуги в «худшем случае», чтобы напомнить всем. Забудьте о последствиях. об отключении службы.
Руководство по началу работы:
Что такое Пэррис?
Parris — это инструмент обучения алгоритму машинного обучения со следующими возможностями:
- Создайте лямбда-функцию
- Запускайте стек CloudFormation при вызове функции Lambda.
- Запустите скрипт UserData в экземпляре EC2 стека, когда обучение начнется в первый раз.
- Остановите экземпляр EC2, когда закончите.
Цель:
Основная цель этого инструмента — уменьшить количество повторных настроек при обучении алгоритмов машинного обучения, что позволяет более эффективно использовать вычислительное время сервера для экономии затрат (сервер начинает обучение, как только оно начинается, и автоматически останавливается по окончании ).
Вот краткое введение в то, что вам нужно сделать перед использованием Parris:
Вам нужен готовый алгоритм машинного обучения с набором данных и скрипт Bash для начала обучения.
0: Конфигурации готовы
После завершения настройки главное, что вам нужно сделать, это отредактировать файл конфигурации traing-config.json и скрипт Trainer-Script.sh, который фактически запускает обучение. Поскольку это первая настройка, вам необходимо настроить файл конфигурации Lambda-config.json. (Это не должно быть сложно, так как есть только две строки, одна из которых необязательна.)
Я использую один из своих репозиториев на Github для базового обучения на примерах, чтобы вы могли быстро получить о нем представление. Кроме конкретных вещей, таких как значение ARN роли IAM и имя хранилища S3, больше ничего менять не нужно.
Конфигурация обучения:
- Измените свой идентификатор подсети на идентификатор одной из ваших подсетей. (Убедитесь, что вы настроили VPC, подсеть, группу безопасности и пару ключей EC2 для своей учетной записи AWS. Если вы используете AWS впервые, в вашей учетной записи должны быть доступны некоторые ресурсы по умолчанию.)
- Измените идентификатор группы безопасности на группу безопасности в вашем VPC.
- Измените свое имя пары ключей ec2 на свою собственную пару ключей EC2.
- Измените тип инстанса на t2.micro или другой небольшой тип инстанса.
лямбда-config.json:
- Обновите lambda-role-arn, указав собственное значение ARN роли IAM. (Если вы не знаете, что это такое, ознакомьтесь с «Руководством по ролям Lambda IAM», здесь приведен пример, который работает.
При настройке роли IAM вам необходимо добавить политику (или политики) к роли, чтобы определить все, к чему может получить доступ функция Lambda. Я использую следующий пример, чтобы позволить функции Lambda запустить новый стек CloudFormation для получения объектов из хранилища S3:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"cloudformation:CreateStack",
"cloudformation:UpdateStack",
"cloudformation:ValidateTemplate",
"ec2:DetachVolume",
"ec2:AttachVolume",
"ec2:ModifyVolume",
"ec2:ModifyVolumeAttribute",
"ec2:DescribeInstances",
"ec2:TerminateInstances",
"ec2:DescribeTags",
"ec2:CreateTags",
"ec2:DescribeVolumesModifications",
"ec2:RunInstances",
"ec2:StopInstances",
"ec2:DescribeVolumeAttribute",
"ec2:CreateVolume",
"ec2:DeleteVolume",
"ec2:DescribeVolumeStatus",
"ec2:StartInstances",
"ec2:DescribeVolumes",
"ec2:ModifyInstanceAttribute",
"ec2:DescribeInstanceStatus",
"s3:GetObject"
],
"Resource": "*"
}
]
}
Я настоятельно рекомендую (но не обязательно) иметь политику, которая позволяет Lambda записывать в журналы CloudWatch, поскольку она позволяет вам читать журналы, когда возникает проблема с вашей функцией Lambda, чтобы понять, что произошло. Вот все мои разрешения на запись в CloudWatch в одной политике:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"logs:DeleteSubscriptionFilter",
"logs:DeleteLogStream",
"logs:CreateExportTask",
"logs:DeleteResourcePolicy",
"logs:CreateLogStream",
"logs:DeleteMetricFilter",
"logs:TagLogGroup",
"logs:CancelExportTask",
"logs:DeleteRetentionPolicy",
"logs:GetLogEvents",
"logs:AssociateKmsKey",
"logs:FilterLogEvents",
"logs:PutDestination",
"logs:DisassociateKmsKey",
"logs:UntagLogGroup",
"logs:DeleteLogGroup",
"logs:PutDestinationPolicy",
"logs:TestMetricFilter",
"logs:DeleteDestination",
"logs:PutLogEvents",
"logs:CreateLogGroup",
"logs:PutMetricFilter",
"logs:PutResourcePolicy",
"logs:PutSubscriptionFilter",
"logs:PutRetentionPolicy"
],
"Resource": "*"
}
]
}
Наконец, нам нужно собрать train-script.sh и запустить обучение. Эту часть лучше всего написать самому, потому что зависимости соответствующих алгоритмов и метод получения результатов обучения всегда разные.
трейнер-скрипт.
Прокрутите до области редактирования и добавьте полный сценарий обучения под строкой. Помните, что, поскольку сценарий обучения запускается на новом сервере, перед запуском задания обучения необходимо настроить все зависимости, структуру каталогов и т. д.
Как только это будет сделано, вы почти готовы использовать инструмент! Если вы не используете значение s3-training-bucket в lambda-config.json, перейдите к следующему шагу. Если вы используете хранилище S3 для загрузки своей конфигурации, вам потребуется загрузить следующие файлы в хранилище S3 со следующими результатами (например, без подкаталогов или разных имен файлов):
+---your-s3-bucket
| \---trainer-script.sh
| \---training-config.json
| \---lambda-config.json
Затем перейдите к следующему шагу.
Подготовьте лямбда-функцию
Перед началом обучения требуется конфигурация Lambda для запуска процесса. На этом шаге вы создаете функцию AWS Lambda для нескольких сеансов обучения одному и тому же алгоритму или для обучения нескольких разных алгоритмов.
- В корне пакета Parris активируйте файл virtualenv.
- Используйте $ python setup.py для создания лямбда-функции.
- Если у вас уже есть функция Lambda, пакет кода будет обновлен.
- Если все пойдет хорошо, журнал подтвердит значение ARN.
Начать первую тренировку
- Откройте консоль AWS и перейдите к своей функции Lambda.
- Нажмите кнопку «Тест» в верхней части страницы, чтобы вручную вызвать функцию. Если тесты не настроены, вам необходимо:
- В раскрывающемся списке «Сохраненные тестовые события» рядом с кнопкой «Тест» нажмите «Настроить тестовые события», чтобы создать новое тестовое событие.
- Поскольку функция Lambda имеет только одно действие (запускает новый стек CloudFormation при вызове), нам не нужно передавать какие-либо параметры.
- Создайте тест с именем события Parris-Test-Event и {}. Щелкните Сохранить.
- После закрытия диалогового окна Create нажмите New Test Event Test в раскрывающемся меню и наблюдайте за результатом выполнения обновления.
Когда функция запустится, она получит "успешный" результат выполнения и выведет {}.
Переключитесь в представление CloudFormation консоли AWS и наблюдайте за запуском нового стека CloudFormation. Этот шаг должен занять всего минуту или две, но зависит от типа запускаемого экземпляра.
Переключитесь на экземпляр EC2 EC2 в представлении консоли AWS, чтобы увидеть последние результаты. Вскоре тренировочная работа начнется.
получить результаты обучения
Результат обучения во многом зависит от того, как мы настроим алгоритм сохранения параметров результата. В большинстве случаев эти результаты будут сохранены в локальном каталоге (т. е. где-то на сервере, возможно, в том же месте, где проходит обучение). Однако после обучения мы хотели бы экспортировать их в место, где они могут храниться дольше.
Завершить стек CloudFormation
Вы успешно создали свой стек CloudFormation и подтвердили, что он работает должным образом. Мы можем безопасно завершить процесс, чтобы сократить расходы.
- Откройте консоль AWS и войдите в представление CloudFormation.
- Выберите созданный вами стек CloudFormation из списка.
- Щелкните раскрывающееся меню «Действия» в верхней части страницы и выберите «Удалить стопку».
- Следите за вкладкой стека «События» (внизу страницы), чтобы отслеживать его ход, обновляйте страницу, чтобы добавлять новые события.
- В конце этот стек исчезнет из списка.
- Обновление функций Lanbda
- Обновить тренировочный стек
- Запустите обучение на устройстве за пределами AWS
настраивать:
Вам понадобится учетная запись AWS, учетные данные AWS (установленные с помощью $aws configure ), обученный алгоритм машинного обучения и, конечно же, набор данных для обучения. Вам также может понадобиться хранилище S3 или другое хранилище для хранения результатов обучения алгоритма.
ЮНИКС/Линукс:
$ git clone https://github.com/jgreenemi/parris.git && cd parris
$ virtualenv -p python3 env
$ source env/bin/activate
(env) $ pip --version
pip 9.0.1 from .../env/lib/python3.6/site-packages (python 3.6)
(env) $ pip install -r requirements.txt
Окна:
$ git clone https://github.com/jgreenemi/parris.git && cd parris
$ virtualenv -p python3.exe env
$ env\Scripts\activate
(env) $ pip --version
pip 9.0.1 from ...\python\python36\lib\site-packages (python 3.6)
(env) $ pip install -r requirements.txt
как пользоваться?
Для настройки следуйте инструкциям в "Руководстве по началу работы". Чтобы узнать больше об этом инструменте, вы также можете обратиться к "Руководству по настройке" для использования с "Руководством по началу работы".
Общая проблема
См. страницу часто задаваемых вопросов в документации.
Автор
Этот инструмент представляет собой проект с открытым исходным кодом, выпущенный под лицензией Apache 2.0.
Контакты
Джозеф Грин,jgreenemi@gmail.com
Ответить после подписки "AI"Знаешь