Образ невесты Подготовка к свадьбе Организация свадьбы Развлечения на свадьбе Поздравления и тосты на свадьбу Свадебные приметы, горосокопы и гадания

Требуется модель на окрашивание


Международная Aкадемия парикмахерского искусства KEUNE DESIGN

Как стать моделью?

1 - Подайте заявку Позвоните по номеру телефона +7 903 545-99-64, напишите письмо на адрес [email protected] или заполните форму заявки на сайте. Желательно приложить ваше фото, а также озвучить все свои пожелания и ограничения.

2 - Проконсультируйтесь с менеджером Наш менеджер свяжется с вами в кратчайшие сроки. Обсудите с ним длину, состояние волос, желаемую процедуру, а также рекомендации по восстановлению перед визитом в Академию.

3 - Выберите время Далее необходимо выбрать курс и дату визита. Менеджер расскажет, как добраться до Академии, обозначит точную дату курса, количество времени, которое вам потребуется потратить, и примерную стоимость расходных материалов.

4 - Подтвердите участие и приходите к нам Требуется подтверждение своей записи за день до визита до 12:00. В противном случае ваше место автоматически будет занято моделью из резервной записи. За 10 минут до назначенного времени приходите в Международную Академию KEUNE DESIGN и получите новый роскошный образ.

Отправить заявку

Откуда вы знаете, что у вас достаточно данных для обучения? | Автор: Теофано Мита

© pathdoc / AdobeStock

В последнее время ведутся споры о том, являются ли данные новым маслом [1] или нет [2]. В любом случае получение данных обучения для нашей работы по машинному обучению может быть дорогостоящим (человеко-часы, лицензионные сборы, время работы оборудования и т. Д.). Таким образом, ключевой проблемой в проектах машинного обучения является определение того, сколько обучающих данных необходимо для достижения конкретной цели производительности (т. Е. Точности классификатора).В этом посте мы сделаем быстрый, но широкий обзор результатов эмпирической и исследовательской литературы, касающихся размера обучающих данных, в различных областях, от регрессионного анализа до глубокого обучения. Проблема размера обучающих данных также известна в литературе как сложность выборки . В частности, мы:

· Представим ограничения на размер эмпирических обучающих данных для задач регрессии и компьютерного зрения.

· Учитывая желаемую мощность статистического теста, обсудите, как определить размер выборки.Это статистическая тема; однако, учитывая его близость к определению размера обучающих данных в машинном обучении, уместно включить его в это обсуждение.

· Представьте результаты изучения статистической теории, касающиеся того, что контролирует размер обучающих данных.

· Дайте ответ на вопрос: будет ли улучшаться производительность по мере увеличения объема обучающих данных? Что происходит в случае глубокого обучения?

· Мы представим методику определения размера обучающих данных при классификации.

· Наконец, мы дадим ответ на вопрос: является ли рост обучающих данных лучшим способом борьбы с несбалансированными данными?

Эмпирические границы для размера обучающих данных

Давайте сначала обсудим некоторые широко используемые эмпирические способы определения размера обучающих данных в соответствии с типом модели, которую мы используем:

· Регрессионный анализ: согласно 1 в 10 практических правил, нам нужно 10 наблюдений на предсказатель [3]. Различные варианты этого, такие как 1 из 20 для решения проблемы уменьшения коэффициента регрессии, обсуждаются в [4].Один интересный, недавно разработанный вариант бинарной логистической регрессии представлен в [5]. В частности, авторы оценивают размер обучающих данных, принимая во внимание количество переменных-предикторов, общий размер выборки и долю положительных выборок / общий размер выборки.

· Компьютерное зрение: для классификации изображений с использованием глубокого обучения, эмпирическое правило - 1000 изображений на класс, где это число может значительно уменьшиться, если использовать предварительно обученные модели [6].

Проверка гипотез Определение размера выборки

Проверка гипотез - один из инструментов, который специалист по анализу данных может использовать для проверки различий между популяциями, определения эффекта нового лекарства и т. Д.Здесь довольно часто желательно определить размер выборки, учитывая мощность теста.

Давайте рассмотрим следующий пример: технологический гигант переехал в город А, и цены на жилье там резко выросли. Репортер хочет узнать, какова новая средняя цена квартир. Сколько цен продажи кондоминиумов он должен усреднить с доверием 95%, учитывая стандартное отклонение цен на кондоминиумы в 60 тысяч и допустимую погрешность в 10 тысяч? Соответствующая формула показана ниже; N - размер выборки, который ему понадобится, 1.96 - это число из стандартного нормального распределения, соответствующее доверительной вероятности 95%.

Оценка размера выборки

В соответствии с приведенным выше уравнением, докладчику необходимо будет рассмотреть приблизительно 138 цен на квартиры.

Приведенная выше формула изменяется в соответствии с конкретным тестом, но всегда будет включать доверительный интервал, допустимую погрешность и меру стандартного отклонения. Хорошее обсуждение этой темы можно найти в [7].

Статистическая теория обучения для размера обучающих данных

Давайте сначала представим знаменитое измерение Вапника-Шевроненкиса (ВК) [8].Размер VC - это мера сложности модели; чем сложнее модель, тем выше размер ее VC. В следующем абзаце мы представим формулу, которая определяет размер обучающих данных в терминах VC.

Во-первых, давайте посмотрим на пример, который часто используется, чтобы показать, как рассчитывается VC: представьте, что наш классификатор представляет собой прямую линию на 2-D плоскости, и у нас есть 3 точки, которые необходимо классифицировать. Какой бы ни была комбинация положительного / отрицательного из этих трех точек (все положительные, 2 положительных, 1 положительные и т. Д.)), прямая линия может правильно классифицировать / отделить положительные образцы от отрицательных. Итак, мы говорим, что линейный классификатор может разбить любых точек, и, следовательно, его размер VC составляет не менее 3. И поскольку мы можем найти примеры 4 точек, которые НЕ могут быть точно разделены линией, мы говорим, что VC of линейный классификатор равен точно 3. Оказывается, размер обучающих данных N является функцией VC [8]:

Оценка размера обучающих данных из измерения VC

, где d - вероятность отказа, а эпсилон. - ошибка обучения. Следовательно, как отмечено в [9], количество данных, необходимых для обучения, зависит от сложности модели. Побочным эффектом этого является хорошо известная жадность нейронных сетей для обучающих данных, учитывая их значительную сложность.

Будет ли производительность улучшаться по мере роста объема обучающих данных? Что происходит в случае глубокого обучения?

Рисунок 1.

Рисунок 1 показывает, как производительность алгоритмов машинного обучения изменяется с увеличением размера данных в случае традиционных алгоритмов машинного обучения [10] (регрессия и т. Д.)) и в случае глубокого обучения [11]. В частности, для традиционных алгоритмов машинного обучения производительность растет по степенному закону, а затем достигает плато. Что касается глубокого обучения, в настоящее время ведутся серьезные исследования того, как производительность масштабируется с увеличением размера данных [12] - [16], [18]. На рисунке 1 показано текущее согласие по большей части этого исследования; для глубокого обучения производительность растет с увеличением размера данных в соответствии с степенным законом. Например, в [13] авторы использовали методы глубокого обучения для классификации 300 миллионов изображений и обнаружили, что производительность логарифмически увеличивается с увеличением размера обучающих данных.

Приведем сюда некоторые примечательные, противоречащие вышеизложенному, результаты в области глубокого обучения. В частности, в [15] авторы использовали сверточные сети для набора данных из 100 миллионов изображений Flickr и подписей. Что касается размера обучающих данных, они сообщают, что производительность увеличивается с увеличением размера данных; однако после 50 миллионов изображений он выходит на плато. В [16] авторы обнаружили, что точность классификации изображений увеличивается с размером обучающих данных; однако надежность модели, которая также изначально увеличивалась, после определенной точки, зависящей от модели, начала снижаться.

Методика определения размера обучающих данных в классификации

Это основано на хорошо известной кривой обучения, которая в целом представляет собой график зависимости ошибки от размера обучающих данных. [17] и [18] - отличные ссылки, чтобы узнать больше о кривых обучения в машинном обучении и о том, как они меняются с увеличением систематической ошибки или дисперсии. Python предлагает функцию кривой обучения в scikit-learn [17].

При классификации мы обычно используем несколько иную форму кривой обучения; это график зависимости точности классификации от размера обучающих данных.Методология определения размера обучающих данных проста: определите точную форму кривой обучения для своей области, а затем просто найдите соответствующую точку на графике для желаемой точности классификации. Например, в ссылках [19], [20] авторы используют подход кривой обучения в медицинской области и представляют его с помощью функции степенного закона:

Уравнение кривой обучения

где y - точность классификации, x - обучение set, а b1, b2 соответствуют скорости обучения и скорости затухания.Параметры меняются в зависимости от предметной области, и их можно оценить с помощью нелинейной регрессии или взвешенной нелинейной регрессии.

Является ли рост обучающих данных лучшим способом борьбы с несбалансированными данными?

© hin255 / AdobeStock

Этот вопрос рассматривается в [9]. Авторы поднимают интересный момент; в случае несбалансированных данных точность не лучший показатель эффективности классификатора. Причина интуитивно понятна: предположим, что отрицательный класс является доминирующим.Тогда мы сможем достичь высокой точности, прогнозируя в большинстве случаев отрицательные результаты. Вместо этого они предлагают точность и отзыв (также известную как чувствительность) как наиболее подходящий показатель производительности для несбалансированных данных. В дополнение к очевидной проблеме точности, описанной выше, авторы заявляют, что точность измерения по своей природе более важна для несбалансированных областей. Например, в больничной системе сигнализации [9] высокая точность означает, что когда звучит сигнал тревоги, весьма вероятно, что действительно существует проблема с пациентом.

Вооружившись соответствующими показателями производительности, авторы сравнили методы коррекции дисбаланса в пакете imbalanced-learn [21] (библиотека Python scikit-learn) с простым использованием большего набора обучающих данных. В частности, они использовали метод K-Nearest Nearest с методами коррекции дисбаланса в наборе данных, связанных с открытием лекарств, из 50 000 примеров, а затем сравнили с K-NN в исходном наборе данных из примерно 1 миллиона примеров. Методы коррекции дисбаланса в вышеупомянутом пакете включают недостаточную выборку, избыточную выборку и ансамблевое обучение.Авторы повторили эксперимент 200 раз. Их вывод прост и глубок: Ни один метод коррекции дисбаланса не может сравниться с добавлением дополнительных тренировочных данных, когда дело касается точности измерения и отзыва.

На этом мы подошли к концу нашего краткого обзора. Ссылки ниже могут помочь вам узнать больше по этому вопросу. Спасибо за чтение!

Ссылки

[1] Самый ценный ресурс в мире - это уже не нефть, а данные, https: // www.Economist.com/leaders/2017/05/06/the-worlds-most-valuable-resource-is-no-longer-oil-but-data Май 2017 г.

[2] Martinez, AG, Нет, Data Is Не новая нефть, https://www.wired.com/story/no-data-is-not-the-new-oil/ Февраль 2019 г.

[3] Халдан М., Сколько тренировочных данных Тебе нужно? , https://medium.com/@malay.haldar/how-much-training-data-do-you-need-da8ec091e956

[4] Википедия , Правило одного из десяти , https: // en. wikipedia.org/wiki/One_in_ten_rule

[5] Ван Смеден, М.и др., Размер выборки для моделей двоичного логистического прогнозирования: помимо событий по переменным критериям , Статистические методы в медицинских исследованиях, 2018.

[6] Блог Пита Уордена, Сколько изображений нужно для обучения нейронной сети? , https://petewarden.com/2017/12/14/how-many-images-do-you-need-to-train-a-neural-network/

[7] Салливан, Л., Пауэр и распределение размеров выборки, http://sphweb.bumc.bu.edu/otlt/MPH-Modules/BS/BS704_Power/BS704_Power_print.html

[8] Wikipedia, Vapnik-Chevronenkis Dimension , https://en.wikipedia.org/wiki/Vapnik%E2%80%93Chervonenkis_dimension

[9] Джуба, Б. и HS Le, Precision- Напоминание против точности и роль больших наборов данных, Association for the Advancement of Artificial Intelligence, 2018.

[10] Zhu, X. et al., Нужны ли нам дополнительные данные для обучения? https://arxiv.org/abs/1503.01508, март 2015.

[11] Щуцкая В., Последние тенденции рынка компьютерного зрения, https: // indatalabs.com / blog / data-science / Trends-computer-vision-software-market? cli_action = 1555888112.716

[12] Де Беркер, А., Predicting the Performance of Deep Learning Models, https://medium.com/ @ archydeberker / predicting-the-performance-of-deep-learning-models-9cb50cf0b62a

[13] Sun, C. et al., Возвращение к необоснованной эффективности данных в глубоком обучении Era , https: // arxiv .org / abs / 1707.02968, август 2017 г.

[14] Hestness, J., Масштабирование глубокого обучения предсказуемо, эмпирически, https: // arxiv.org / pdf / 1712.00409.pdf

[15] Джоулин, A ., Изучение визуальных функций из больших данных со слабым контролем, https://arxiv.org/abs/1511.02251, ноябрь 2015 г.

[16] Лей, S. et al., Как обучающие данные влияют на точность и надежность нейронных сетей для классификации изображений , Конференция ICLR, 2019.

[17] Учебник: кривые обучения для машинного обучения в Python , https: // www .dataquest.io / блог / кривые обучения-машинное обучение /

[18] Нг, Р., Learning Curve , https://www.ritchieng.com/machinelearning-learning-curve/

[19] Фигероа, Р.Л. и др., Прогнозирование размера выборки, необходимой для выполнения классификации , Медицинская информатика и решение BMC Makeing, 12 (1): 8, 2012.

[20] Cho, J. et al., Сколько данных необходимо для обучения системы глубокого обучения медицинских изображений для достижения необходимой высокой точности? , https://arxiv.org/abs/1511.06348, январь 2016 г.

[21] Lemaitre, G., Ф. Ногейра и К. К. Аридас, Несбалансированное обучение: набор инструментов Python для борьбы с проклятием несбалансированных наборов данных в машинном обучении , https://arxiv.org/abs/1609.06570

.

DeepSpeed: обучение экстремальных моделей для всех

В феврале мы анонсировали DeepSpeed, библиотеку оптимизации обучения глубокого обучения с открытым исходным кодом, и ZeRO (оптимизатор нулевой избыточности), новую технологию оптимизации памяти в библиотеке, которая значительно продвигает обучение больших моделей за счет улучшения масштабирования, скорости, стоимости и удобство использования. DeepSpeed ​​позволил исследователям создать Turing Natural Language Generation (Turing-NLG), самую большую языковую модель с 17 миллиардами параметров и высочайшей точностью на момент ее выпуска.В мае мы выпустили ZeRO-2, поддерживающую обучение модели с 200 миллиардами параметров до 10 раз быстрее по сравнению с современными технологиями, а также список оптимизаций вычислений, ввода-вывода и конвергенции, обеспечивающих самое быстрое обучение BERT. С этого момента мы продолжаем быстро внедрять инновации, раздвигая границы скорости и масштаба для обучения глубокому обучению.

Сегодня мы рады поделиться нашими новыми достижениями, которые не только доводят обучение глубокому обучению до крайности, но и делают его доступным для большего числа людей - от специалистов по обработке данных, обучающихся на огромных суперкомпьютерах, до тех, кто обучается на кластерах низкого уровня или даже на одном GPU.В частности, DeepSpeed ​​добавляет четыре новые системные технологии, которые способствуют реализации инициативы AI at Scale по внедрению инноваций в продукты и платформы Microsoft AI. Они предлагают исключительную эффективность вычислений, памяти и связи, а также обеспечивают обучение модели с миллиардами или триллионами параметров. Эти технологии также позволяют использовать чрезвычайно длинные входные последовательности и питание аппаратных систем с одним графическим процессором, высокопроизводительные кластеры с тысячами графических процессоров или низкоуровневые кластеры с очень медленными сетями Ethernet.

  • Обучение модели с триллионами параметров с трехмерным параллелизмом: DeepSpeed ​​позволяет гибко комбинировать три подхода к параллелизму - параллелизм данных на базе ZeRO, параллелизм конвейера и параллелизм моделей с тензорным срезом. Трехмерный параллелизм адаптируется к изменяющимся потребностям требований рабочих нагрузок для обеспечения работы чрезвычайно больших моделей с более чем триллионом параметров, обеспечивая при этом практически идеальное масштабирование памяти и эффективность масштабирования пропускной способности. Кроме того, улучшенная эффективность связи позволяет пользователям обучать модели с многомиллиардными параметрами в 2–7 раз быстрее на обычных кластерах с ограниченной пропускной способностью сети.
  • Обучение модели в 10 раз больше на одном графическом процессоре с ZeRO-Offload: Мы расширяем ZeRO-2, чтобы использовать память как процессора, так и графического процессора для обучения больших моделей. Используя машину с и одним графическим процессором NVIDIA V100 , наши пользователи могут запускать модели с 13 миллиардами параметров без нехватки памяти, что в 10 раз больше, чем существующие подходы, при этом обеспечивая конкурентоспособную пропускную способность. Эта функция демократизирует обучение многомиллиардным моделям и открывает для многих практиков глубокого обучения окно для изучения более крупных и лучших моделей.
  • Увеличение длины последовательностей в 10 раз и ускорение выполнения в 6 раз с помощью DeepSpeed ​​Sparse Внимание: DeepSpeed ​​предлагает ядра с разреженным вниманием - инструментальную технологию для поддержки длинных последовательностей входных данных модели, будь то текст, изображение или звук. По сравнению с классическими преобразователями высокой плотности он обеспечивает питание на порядок большей входной последовательности и обеспечивает до 6 раз более быстрое выполнение при сопоставимой точности. Он также превосходит современные разреженные реализации с 1.В 5–3 раза быстрее выполнение. Более того, наши разреженные ядра поддерживают эффективное выполнение гибкого разреженного формата и дают пользователям возможность вносить новшества в свои собственные разреженные структуры.
  • 1-битный Adam с пятикратным сокращением объема связи: Adam - эффективный и (вероятно, наиболее часто используемый) оптимизатор для обучения многих крупномасштабных моделей глубокого обучения. Однако, как правило, Адам несовместим с алгоритмами оптимизации, обеспечивающими эффективное взаимодействие. Следовательно, стоимость связи может стать узким местом при масштабировании между распределенными устройствами.Мы представляем новый алгоритм, 1-битный Adam с эффективной реализацией, который сокращает объем связи до 5x , достигая при этом эффективности сходимости, аналогичной Adam. Мы наблюдаем до 3,5 раз более быстрое распределенное обучение в сценариях с ограниченным обменом данными, что позволяет масштабировать его до различных типов кластеров и сетей графических процессоров.

В этом сообщении блога эти четыре направления технологий рассматриваются более подробно. Мы сделали все эти захватывающие новые оптимизации доступными в библиотеке с открытым исходным кодом DeepSpeed.

Трехмерный параллелизм: масштабирование до моделей с триллионом параметров

С быстрым ростом объема вычислений, доступных на современных кластерах графических процессоров, обучение мощной модели с триллионами параметров с невероятными возможностями больше не является надуманной мечтой, а скорее реальностью ближайшего будущего. DeepSpeed ​​объединил три мощные технологии для обучения моделей в триллионном масштабе и масштабирования до тысяч графических процессоров: параллельное обучение данных, параллельное обучение моделей и конвейерное параллельное обучение.Этот симбиоз масштабирует обучение глубокому обучению далеко за пределы того, что каждая из стратегий может предложить по отдельности. Трехмерный параллелизм одновременно решает две фундаментальные проблемы при обучении моделей с триллионом параметров: эффективность памяти и эффективность вычислений . В результате DeepSpeed ​​может масштабироваться для размещения в памяти самых массивных моделей без ущерба для скорости.

Эффективность памяти: Требования к памяти для обучения модели с триллионом параметров намного превышают то, что доступно в устройстве с одним графическим процессором.Для обучения с использованием оптимизатора Adam со смешанной точностью требуется примерно 16 терабайт (ТБ) памяти только для хранения состояний модели (параметров, градиентов и состояний оптимизатора). Для сравнения: современные графические процессоры NVIDIA A100 имеют всего 40 гигабайт (ГБ) памяти. Потребуется коллективная память из 400 таких графических процессоров только для хранения состояний модели.

Активации потребляют дополнительную память, которая увеличивается с увеличением размера пакета. Модель с триллионом параметров, обученная только с единичным размером пакета, дает более 1 ТБ памяти активации.Активация контрольная точка уменьшает эту память примерно до 20 ГБ за счет обмена на дополнительные вычислительные ресурсы, но требования к памяти остаются чрезмерно большими для обучения.

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

Эффективность вычислений: Для сквозного обучения модели с триллионом параметров требуется примерно 5000 зеттафлопс (это 5 с 24 нулями после ; на основе законов масштабирования из OpenAI).Для обучения такой модели потребуется 4000 NVIDIA A100 GPUS, работающих с 50% вычислительной эффективностью около 100 дней.

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

Одна из самых больших моделей в мире, GPT-3, была обучена с использованием партии размером около 1500. С 4000 графических процессоров даже либеральный размер пакета в 4000 позволил бы иметь размер пакета только 1 на графический процессор и ограничить масштабируемость.

Параллелизм данных - это повсеместный метод глубокого обучения, в котором каждый входной пакет обучающих данных распределяется между параллельными работниками данных. Градиенты должны передаваться и агрегироваться после обратного распространения, чтобы оптимизатор выполнял последовательные шаги.Параллелизм данных имеет несколько явных преимуществ, включая эффективность вычислений и минимальные затраты на реализацию. Однако параллелизм данных основан на масштабировании размера пакета с учетом количества параллельных обработчиков данных, что не может выполняться бесконечно, не влияя на сходимость.

  • Эффективность памяти: Параллелизм данных реплицирует модель и оптимизатор для всех рабочих процессов и, следовательно, не является эффективным с точки зрения памяти. DeepSpeed ​​разработала ZeRO, набор оптимизаций, повышающих эффективность использования памяти при параллелизме данных.Эта работа опирается на этап 1 ZeRO, который разделяет состояния оптимизатора между параллельными рабочими процессами данных, чтобы уменьшить избыточность.
  • Эффективность вычислений: Объем вычислений, выполняемых каждым исполнителем, остается постоянным по мере увеличения степени параллелизма. Параллелизм данных может обеспечить почти идеальное масштабирование в небольших масштабах. Однако коммуникационные затраты на агрегирование градиентов между обработчиками параллельных данных масштабируются в зависимости от размера модели и ограничивают эффективность вычислений на больших моделях или системах с низкой пропускной способностью связи. Накопление градиента - это обычная стратегия для амортизации этой стоимости связи путем дальнейшего увеличения размера пакета и выполнения множественных прямых и обратных распространений для микропакетов при локальном накоплении градиентов перед агрегированием и выполнением шага оптимизатора.

Параллелизм моделей - это широкий класс методов, которые разделяют отдельные слои модели между рабочими. По своей природе вычисления и взаимодействие модели параллелизма специфичны для архитектуры модели и, следовательно, могут потребовать значительных усилий для начальной реализации.DeepSpeed ​​использует NVIDIA Megatron-LM в этой работе для создания массивных языковых моделей на основе параллельных моделей Transformer. Параллелизм модели уменьшает объем памяти пропорционально количеству рабочих процессов. Параллелизм моделей является наиболее эффективным с точки зрения памяти среди трех типов параллелизма за счет минимальной вычислительной эффективности.

  • Эффективность памяти: Параллелизм моделей сокращает объем памяти пропорционально количеству рабочих. Важно отметить, что это единственный подход, который уменьшает память активации для отдельных сетевых уровней.DeepSpeed ​​дополнительно повышает эффективность использования памяти за счет разделения памяти активации между рабочими процессами, параллельными модели.
  • Эффективность вычислений: Параллелизм моделей имеет низкую вычислительную эффективность из-за дополнительной передачи активаций при каждом прямом и обратном распространении. Для эффективного параллелизма модели требуется высокая пропускная способность, и он не масштабируется далеко за пределы одного узла, где полоса пропускания связи ограничена. Кроме того, каждый рабочий, параллельный модели, уменьшает объем вычислений, выполняемых между каждым этапом связи, влияя на эффективность вычислений.Параллелизм моделей часто используется в сочетании с параллелизмом данных для обмена между памятью и эффективностью вычислений.

Параллелизм конвейера обучающий модуль включен в этот выпуск DeepSpeed! Параллелизм конвейера разделяет слои модели на этапов , которые могут обрабатываться параллельно. Когда один этап завершает прямой проход микропакета, память активации передается на следующий этап конвейера. Точно так же, когда следующая стадия завершает обратное распространение, градиенты передаются в обратном направлении по конвейеру.Чтобы обеспечить параллельное вычисление этапов конвейера, необходимо поддерживать несколько микропакетов. Несколько подходов, таких как PipeDream, были разработаны для компромисса между памятью и эффективностью вычислений, а также поведением конвергенции. Подход DeepSpeed ​​извлекает параллелизм за счет накопления градиента для поддержания того же поведения конвергенции, что и при традиционном параллельном обучении данных и моделей с тем же общим размером пакета.

  • Эффективность памяти: Конвейерный параллелизм уменьшает объем памяти пропорционально количеству стадий конвейера, позволяя масштабировать размер модели линейно с количеством рабочих процессов.Однако конвейерный параллелизм не уменьшает объем памяти, занимаемой активациями каждого уровня. Кроме того, каждый рабочий должен сохранять активации для всех микропакетов в полете. Фактически, память активации на первом этапе конвейера примерно такая же, как общая память активации для одного микропакета. Модель с триллионом параметров потребует примерно 19 ГБ памяти для активации микропакета, потребляя почти половину доступной памяти нового графического процессора NVIDIA A100.
  • Эффективность вычислений: У конвейерного параллелизма самый низкий объем обмена, поскольку он передает только данные, пропорциональные размеру активации слоев между границами этапов. Однако он не может масштабироваться бесконечно. Как и в случае с параллелизмом моделей, увеличение размера конвейера уменьшает количество вычислений для каждого этапа конвейера, что также снижает соотношение вычислений и обмена данными. Параллелизм конвейера также требует, чтобы каждая из его стадий была идеально сбалансирована по нагрузке для достижения хорошей эффективности.

    Кроме того, параллелизм конвейера приводит к увеличению накладных расходов из-за заполнения и опорожнения конвейера в начале и в конце каждого обучающего пакета. Обучение с шагами накопления градиента (и, следовательно, размером пакета), которые в 4 или 8 раз превышают количество стадий конвейера, обеспечивает эффективность масштабирования 81% и 90% от одного этапа конвейера, соответственно.

Достижение эффективности памяти и вычислений с помощью 3D-параллелизма

Параллелизм данных, модели и конвейера - каждый играет определенную роль в улучшении памяти и эффективности вычислений.Рисунок 1 иллюстрирует нашу трехмерную стратегию.

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

Эффективность вычислений: Чтобы позволить количеству рабочих масштабироваться за пределы параллелизма моделей и конвейера без ущерба для эффективности вычислений, мы используем параллелизм данных на базе ZeRO (ZeRO-DP).ZeRO-DP не только дополнительно повышает эффективность памяти за счет разделения состояний оптимизатора, но также позволяет масштабировать до произвольно большого количества графических процессоров с минимальными затратами на связь, используя отображение с учетом топологии.

Трехмерное отображение с учетом топологии (Рис. 2) : Каждое измерение в трехмерном параллелизме тщательно отображается на рабочих для достижения максимальной эффективности вычислений за счет использования двух ключевых архитектурных свойств.

  1. Оптимизация полосы пропускания внутри- и межузловой связи : Параллелизм модели имеет самые большие накладные расходы на связь из трех стратегий, поэтому мы отдаем приоритет размещению модельных параллельных групп внутри узла, чтобы использовать большую пропускную способность внутри узла.Здесь мы применяем NVIDIA Megatron-LM для тензорно-срезающего стиля параллелизма моделей. Параллельные группы данных размещаются внутри узла, когда параллелизм модели не охватывает всех рабочих в аноде. В противном случае они размещаются по узлам. У конвейерного параллелизма самый низкий объем связи, поэтому мы можем планировать этапы конвейера между узлами, не ограничиваясь пропускной способностью связи.
  2. Увеличение полосы пропускания за счет параллелизма при обмене данными: Размер градиентов, передаваемых каждой параллельной группой данных, уменьшается линейно через конвейерный параллелизм и параллелизм модели, и, таким образом, общий объем коммуникации уменьшается по сравнению с чистым параллелизмом данных.Кроме того, каждая группа параллельных данных осуществляет обмен данными независимо и параллельно между подмножеством локализованных рабочих. В результате эффективная полоса пропускания для параллельной передачи данных увеличивается за счет сочетания уменьшенного объема связи и повышенной локальности и параллелизма.
Рис. 1. Пример трехмерного параллелизма с 32 рабочими. Слои нейронной сети разделены на четыре этапа конвейера. Слои внутри каждой стадии конвейера дополнительно разделяются между четырьмя модельными параллельными рабочими процессами.Наконец, каждый конвейер реплицируется на два параллельных экземпляра данных, а ZeRO разделяет состояние оптимизатора на параллельные реплики данных. Рисунок 2: Сопоставление рабочих процессов на рисунке 1 с графическими процессорами в системе с восемью узлами, каждый с четырьмя графическими процессорами. Цветом обозначены графические процессоры на одном узле.

Модель с триллионом параметров может быть масштабирована на 4096 графических процессоров NVIDIA A100 с использованием 8-стороннего параллелизма моделей, 64-канального конвейерного параллелизма и 8-стороннего параллелизма данных.

Комбинируя параллелизм моделей и конвейерный параллелизм, трехмерный параллелизм обеспечивает превосходную эффективность использования памяти и эффективность вычислений на нескольких узлах.Параллелизм моделей обеспечивает эффективность использования памяти для активаций и состояний модели внутри узла, в то время как конвейерный параллелизм позволяет повысить эффективность использования памяти для состояний модели по узлам без ущерба для эффективности вычислений по сравнению с использованием только параллелизма модели. В нашем примере с триллионом параметров с размером микропакета 1 наша модель будет потреблять 30 ГБ памяти для состояний модели и 2,5 ГБ для секционированных активаций после контрольной точки активации с вышеупомянутым трехмерным параллелизмом. В результате общий объем памяти равен 32.5 ГБ. В такой конфигурации графические процессоры NVIDIA A100 с 40 ГБ памяти имеют более чем достаточно места для установки и обучения такой модели.

Сочетание параллелизма моделей и конвейерного параллелизма также позволяет конвейерному параллелизму достигать высокой вычислительной эффективности с минимальными накладными расходами даже при очень малых размерах пакетов. При 8-стороннем параллелизме моделей использование микропакета из 1 на модель приведет к эффективному микропакету 1/8 на графический процессор. Следовательно, конвейерный параллелизм может достичь 90% эффективности вычислений с использованием шага накопления градиента, в 8 раз превышающего степень конвейерного параллелизма, и с совокупным размером пакета для каждого графического процессора, равным только 1.В сочетании с параллелизмом данных это приводит к эффективному размеру пакета 4096 на 4096 графических процессорах, что позволяет достичь эффективности конвейера 90%.

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

Параллелизм моделей может уменьшить эффективный размер пакета до менее 1 на графический процессор. Это позволяет конвейерному параллелизму скрыть накладные расходы конвейера даже при небольших размерах партии.Обратите внимание, что, используя конвейерный параллелизм между узлами, мы эффективно позволяем обмену данными между параллельными узлами данных на каждом этапе конвейера происходить независимо и параллельно с другими этапами конвейера. Фактически, в топологии полностью подключенной сети, распространенной в высокопроизводительных кластерах GPU, это оказывает значительное влияние на эффективную полосу пропускания, доступную для параллельного обучения данных. Поскольку каждый узел на этапе конвейера может обмениваться данными параллельно со своими соответствующими параллельными узлами данных, эффективная пропускная способность связи прямо пропорциональна количеству этапов конвейера.При 64 параллельных конвейерных этапах эффективная полоса пропускания в 64 раза превышает пропускную способность к одному узлу и от него. Благодаря такой большой эффективной полосе пропускания конвейерный параллелизм позволяет эффективно масштабировать параллелизм данных даже при небольших размерах пакетов, когда соотношение вычислений к обмену данными очень низкое.

Обучение модели с триллионами параметров с линейным масштабированием эффективности

DeepSpeed ​​может обучать языковую модель с одним триллионом параметров, используя всего 800 графических процессоров NVIDIA V100 (рисунок 3).Мы демонстрируем одновременную память и эффективность вычислений, масштабируя размер модели и наблюдая линейный рост, как с точки зрения размера модели, так и с точки зрения пропускной способности обучения. В каждой конфигурации мы можем обучить примерно 1,4 миллиарда параметров на каждый графический процессор, что является самым большим размером модели, который может поддерживать один графический процессор без нехватки памяти, что указывает на идеальное масштабирование памяти. Мы также получаем масштабирование эффективности вычислений, близкое к идеальному, и пропускную способность в 47 терафлопс на графический процессор V100.Это впечатляющее масштабирование и производительность для данного оборудования.

Рис. 3. Размер модели (в миллиардах параметров) и пропускная способность обучения (в петафлопсах) в зависимости от графических процессоров. DeepSpeed ​​может обучить модель с 1 триллионом параметров, используя 800 графических процессоров NVIDIA V100 Tensor Core с 32 ГБ памяти. В каждой конфигурации используется 16-позиционный параллелизм моделей, обеспечиваемый NVIDIA Megatron-LM, а остальные графические процессоры организованы с использованием конвейерного параллелизма. Модель с триллионом параметров имеет 298 слоев трансформаторов со скрытым размером 17 408 и обучается с длиной последовательности 2048 и размером пакета 2048.Для моделей меньшего размера мы уменьшаем количество слоев Transformer и размер пакета пропорционально количеству графических процессоров.

Рисунок 4. Производительность системы с использованием 800 графических процессоров для обучения масштабной модели GPT-3 со 180 миллиардами параметров с использованием двухмерного и трехмерного параллелизма. Модель имеет 100 слоев Transformer со скрытым размером 12 288 и 96 головок внимания. Модель обучается с размером пакета 2048 и длиной последовательности 2048. ZeRO-1 включен наряду с параллелизмом данных. P, M и D обозначают параллельные измерения конвейера, модели и данных соответственно.

На рисунке 4 мы используем последнюю архитектуру модели GPT-3 с более чем 175 миллиардами параметров в качестве эталона для трехмерного параллелизма:

  • Сначала мы оценим конфигурацию 2D (C1-C3). В конфигурациях C1 и C2 используется только конвейерный параллелизм и параллелизм модели - они могут обучать модель, но обеспечивают низкую пропускную способность из-за чрезмерной декомпозиции проблемы и низкого использования графического процессора. C3 пытается использовать только конвейерный параллелизм и параллелизм данных, но не может уложить проблему в памяти без уменьшения размера активаций с помощью параллелизма моделей Megatron.
  • Конфигурации 3D (C4-C10) расположены путем увеличения степени параллелизма трубопроводов; Лучшая производительность достигается за счет средних конфигураций, которые уравновешивают параллелизм, чтобы быть эффективными с точки зрения памяти, вычислений и обмена данными.
  • Лучшие подходы к 3D позволяют достичь 49 терафлопс на графический процессор, что составляет более 40% от теоретической пиковой мощности оборудования.

Мы демонстрируем коммуникационные преимущества гибридного параллелизма на рисунке 5 при обучении 1.Модель GPT-2 с 5 миллиардами параметров. Мы обучаем на четырех узлах кластера с низкой пропускной способностью между узлами, чтобы выделить этапы обучения связи:

  • Параллелизм моделей в этом случае не дает преимуществ из-за низкой пропускной способности внутри узла и меньшего размера модели.
  • Конвейерный параллелизм передает на порядок меньший объем, чем параллельные конфигурации данных и моделей, и в 7 раз быстрее при небольших размерах пакетов.
  • Параллелизм данных использует накопление градиента для снижения накладных расходов на передачу данных по мере увеличения размера пакета, но параллельные конфигурации конвейера по-прежнему обеспечивают более чем вдвое большую производительность параллелизма данных при больших размерах пакета.
  • Гибридный конвейер и конфигурация параллельной передачи данных позволяет избежать узких мест в градиентной связи, ограничивая параллельные группы данных графическими процессорами внутри узла, поэтому градиентная связь выигрывает от более быстрой внутриузловой полосы пропускания.
.

моделей / train.py у мастера · tensorflow / models · GitHub

перейти к содержанию Зарегистрироваться
  • Почему именно GitHub? Особенности →
    • Обзор кода
    • Управление проектами
    • Интеграции
    • Действия
    • Пакеты
    • Безопасность
    • Управление командой
    • Хостинг
    • мобильный
    • Истории клиентов →
    • Безопасность →
  • Команда
.Учебник по классификации изображений

: модели обучения - Машинное обучение Azure

  • 13 минут на чтение

В этой статье

В этом руководстве вы обучаете модель машинного обучения на удаленных вычислительных ресурсах. Вы будете использовать рабочий процесс обучения и развертывания для машинного обучения Azure в записной книжке Python Jupyter.Затем вы можете использовать записную книжку в качестве шаблона для обучения собственной модели машинного обучения с использованием собственных данных. Этот учебник является первой частью серии руководств , состоящей из двух частей.

В этом руководстве обучается простая логистическая регрессия с использованием набора данных MNIST и scikit-learn с машинным обучением Azure. MNIST - популярный набор данных, состоящий из 70 000 изображений в оттенках серого. Каждое изображение представляет собой рукописную цифру размером 28 x 28 пикселей, представляющую число от нуля до девяти. Цель состоит в том, чтобы создать мульти-классификатор для идентификации цифры, которую представляет данное изображение.

Узнайте, как выполнять следующие действия:

  • Настройте среду разработки.
  • Получите доступ и изучите данные.
  • Обучите простую модель логистической регрессии на удаленном кластере.
  • Просмотрите результаты обучения и зарегистрируйте лучшую модель.

Вы узнаете, как выбрать модель и развернуть ее во второй части этого руководства.

Если у вас нет подписки Azure, прежде чем начать, создайте бесплатную учетную запись. Попробуйте бесплатную или платную версию Машинного обучения Azure уже сегодня.

Предварительные требования

  • Завершите руководство: приступите к созданию своего первого эксперимента по машинному обучению Azure на:

    • Создать рабочее пространство
    • Клонируйте записную книжку с обучающими материалами в свою папку в рабочей области.
    • Создайте экземпляр облачных вычислений.
  • В клонированной папке tutorials / image-Classification-mnist-data откройте записную книжку img-classification-part1-training.ipynb .

Учебное пособие и сопутствующие ему утилит.Файл py также доступен на GitHub, если вы хотите использовать его в своей локальной среде. Запустите pip install azureml-sdk [notebooks] azureml-opendatasets matplotlib , чтобы установить зависимости для этого руководства.

Важно

Остальная часть этой статьи содержит то же содержание, что и в записной книжке.

Переключитесь на записную книжку Jupyter сейчас, если хотите читать во время выполнения кода. Чтобы запустить одну ячейку кода в записной книжке, щелкните ячейку кода и нажмите Shift + Enter .Или запустите всю записную книжку, выбрав Запустить все на верхней панели инструментов.

Настройте среду разработки

Все настройки для вашей разработки могут быть выполнены в записной книжке Python. Настройка включает в себя следующие действия:

  • Импорт пакетов Python.
  • Подключитесь к рабочей области, чтобы ваш локальный компьютер мог связываться с удаленными ресурсами.
  • Создайте эксперимент для отслеживания всех ваших пробежек.
  • Создайте целевой объект удаленных вычислений для обучения.

Импортные упаковки

Импортируйте пакеты Python, необходимые в этом сеансе. Также отобразите версию пакета SDK для машинного обучения Azure:

 % встроенный matplotlib импортировать numpy как np импортировать matplotlib.pyplot как plt импортировать azureml.core из azureml.core import Workspace # проверить номер версии основного SDK print ("Версия пакета SDK для Azure ML:", azureml.core.VERSION)  

Подключиться к рабочей области

Создайте объект рабочего пространства из существующего рабочего пространства. Workspace.from_config () читает файл config.json и загружает детали в объект с именем ws :

  # загрузить конфигурацию рабочего пространства из файла config.json в текущую папку. ws = Workspace.from_config () print (ws.name, ws.location, ws.resource_group, sep = '\ t')  

Создать эксперимент

Создайте эксперимент для отслеживания пробежек в вашем рабочем пространстве. В рабочем пространстве может быть несколько экспериментов:

  от azureml.основной эксперимент по импорту эксперимент_имя = 'sklearn-mnist' exp = эксперимент (рабочая область = ws, name = имя_эксперимента)  

Создать или присоединить существующую цель вычислений

Используя Azure Machine Learning Compute, управляемую службу, специалисты по данным могут обучать модели машинного обучения на кластерах виртуальных машин Azure. Примеры включают виртуальные машины с поддержкой графического процессора. В этом руководстве вы создадите вычислительную среду машинного обучения Azure в качестве учебной среды. Вы отправите код Python для запуска на этой виртуальной машине позже в руководстве.

Приведенный ниже код создает для вас вычислительные кластеры, если они еще не существуют в вашей рабочей области. Он устанавливает кластер, который будет масштабироваться до 0, когда он не используется, и может масштабироваться максимум до 4 узлов.

Создание целевого объекта вычислений занимает около пяти минут. Если вычислительный ресурс уже находится в рабочей области, код использует его и пропускает процесс создания.

  из azureml.core.compute import AmlCompute из azureml.core.compute import ComputeTarget импорт ОС # выберите имя для вашего кластера compute_name = os.Environment.get ("AML_COMPUTE_CLUSTER_NAME", "cpu-cluster") compute_min_nodes = os.environ.get ("AML_COMPUTE_CLUSTER_MIN_NODES", 0) compute_max_nodes = os.environ.get ("AML_COMPUTE_CLUSTER_MAX_NODES", 4) # В этом примере используется ЦП ВМ. Для использования виртуальной машины с графическим процессором установите для SKU значение STANDARD_NC6. vm_size = os.environ.get ("AML_COMPUTE_CLUSTER_SKU", "STANDARD_D2_V2") если compute_name в ws.compute_targets: compute_target = ws.compute_targets [compute_name] если compute_target и тип (compute_target) - AmlCompute: print ('найден целевой объект вычислений.просто используйте это. '+ compute_name) еще: print ('создание новой цели вычислений ...') provisioning_config = AmlCompute.provisioning_configuration (vm_size = vm_size, min_nodes = compute_min_nodes, max_nodes = compute_max_nodes) # создаем кластер compute_target = ComputeTarget.create ( ws, compute_name, provisioning_config) # может опрашивать минимальное количество узлов и определенный тайм-аут.# если минимальное количество узлов не указано, будут использоваться настройки масштаба для кластера compute_target.wait_for_completion ( show_output = True, min_node_count = None, timeout_in_minutes = 20) # Для более подробного просмотра текущего статуса AmlCompute используйте get_status () печать (compute_target.get_status (). serialize ())  

Теперь у вас есть необходимые пакеты и вычислительные ресурсы для обучения модели в облаке.

Посмотреть данные

Прежде чем обучать модель, вам необходимо понять, какие данные вы используете для ее обучения.В этом разделе вы узнаете, как:

  • Загрузите набор данных MNIST.
  • Покажите несколько примеров изображений.

Скачать набор данных MNIST

Используйте открытые наборы данных Azure, чтобы получить файлы необработанных данных MNIST. Открытые наборы данных Azure - это тщательно отобранные общедоступные наборы данных, которые можно использовать для добавления функций для конкретных сценариев в решения машинного обучения для получения более точных моделей. Каждый набор данных имеет соответствующий класс, в данном случае MNIST , для получения данных разными способами.

Этот код извлекает данные как объект FileDataset , который является подклассом Dataset . FileDataset ссылается на один или несколько файлов любого формата в ваших хранилищах данных или общедоступных URL. Класс предоставляет вам возможность загружать или подключать файлы к вашему вычислению, создавая ссылку на расположение источника данных. Кроме того, вы регистрируете набор данных в своей рабочей области для облегчения поиска во время обучения.

Следуйте инструкциям, чтобы узнать больше о наборах данных и их использовании в SDK.

  из набора данных импорта azureml.core из azureml.opendatasets импортировать MNIST data_folder = os.path.join (os.getcwd (), 'данные') os.makedirs (data_folder, exist_ok = True) mnist_file_dataset = MNIST.get_file_dataset () mnist_file_dataset.download (data_folder, overwrite = True) mnist_file_dataset = mnist_file_dataset.register (рабочая область = ws, name = 'mnist_opendataset', description = 'обучающий и тестовый набор данных', create_new_version = True)  

Показать образцы изображений

Загрузить сжатые файлы в массивы numpy .Затем используйте matplotlib для построения 30 случайных изображений из набора данных с их метками над ними. Для этого шага требуется функция load_data , которая включена в файл utils.py . Этот файл находится в папке с образцами. Убедитесь, что он находится в той же папке, что и этот блокнот. Функция load_data просто разбирает сжатые файлы в массивы numpy.

  # убедитесь, что utils.py находится в том же каталоге, что и этот код из утилит import load_data импортный глобус # обратите внимание, что мы также уменьшаем значения интенсивности (X) с 0-255 до 0-1.Это помогает модели быстрее сходиться. X_train = load_data (glob.glob (os.path.join (data_folder, "** / train-images-idx3-ubyte.gz"), рекурсивный = True) [0], False) / 255,0 X_test = load_data (glob.glob (os.path.join (data_folder, "** / t10k-images-idx3-ubyte.gz"), рекурсивный = True) [0], False) / 255.0 y_train = load_data (glob.glob (os.path.join (data_folder, "** / train-labels-idx1-ubyte.gz"), рекурсивный = True) [0], True) .reshape (-1) y_test = load_data (glob.glob (os.path.join (data_folder, "** / t10k-labels-idx1-ubyte.gz"), рекурсивный = True) [0], True).изменить форму (-1) # а теперь покажем несколько случайно выбранных изображений из обучающего набора. count = 0 sample_size = 30 plt.figure (figsize = (16, 6)) для i в np.random.permutation (X_train.shape [0]) [: sample_size]: count = count + 1 plt.subplot (1, размер_элемента, количество) plt.axhline ('') plt.axvline ('') plt.text (x = 10, y = -10, s = y_train [i], fontsize = 18) plt.imshow (X_train [i] .reshape (28, 28), cmap = plt.cm.Greys) plt.show ()  

Отображается случайная выборка изображений:

Теперь у вас есть представление о том, как выглядят эти изображения и ожидаемый результат прогноза.

Обучить на удаленном кластере

Для этой задачи вы отправляете задание на выполнение в кластере удаленного обучения, который вы настроили ранее. Чтобы отправить вакансию вам:

  • Создать каталог
  • Создание сценария обучения
  • Создание конфигурации запуска сценария
  • Отправить задание

Создать каталог

Создайте каталог для доставки необходимого кода с вашего компьютера на удаленный ресурс.

  импорт ОС script_folder = os.path.join (os.getcwd (), "sklearn-mnist") os.makedirs (script_folder, exist_ok = True)  

Создать сценарий обучения

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

  %% writefile $ script_folder / train.py import argparse импорт ОС импортировать numpy как np импортный глобус из sklearn.linear_model import LogisticRegression импорт joblib из azureml.основной импорт Выполнить из утилит import load_data # разрешить пользователю вводить 2 параметра, набор данных для монтирования или загрузки и скорость регуляризации модели логистической регрессии parser = argparse.ArgumentParser () parser.add_argument ('- папка данных', type = str, dest = 'папка_данных', help = 'точка подключения папки данных') parser.add_argument ('- регуляризация', type = float, dest = 'reg', по умолчанию = 0,01, help = 'скорость регуляризации') args = parser.parse_args () data_folder = args.data_folder print ('Папка данных:', папка_данных) # загружаем поезд и набор тестов в массивы numpy # обратите внимание, что мы масштабируем значения яркости пикселей до 0-1 (разделив его на 255.0), чтобы модель могла сойтись быстрее. X_train = load_data (glob.glob (os.path.join (data_folder, '** / train-images-idx3-ubyte.gz'), recursive = True) [0], False) / 255,0 X_test = load_data (glob.glob (os.path.join (data_folder, '** / t10k-images-idx3-ubyte.gz'), рекурсивный = True) [0], False) / 255.0 y_train = load_data (glob.glob (os.path.join (data_folder, '** / train-labels-idx1-ubyte.gz'), рекурсивный = True) [0], True) .reshape (-1) y_test = load_data (glob.glob (os.path.join (data_folder, '** / t10k-labels-idx1-ubyte.gz'), recursive = True) [0], True).изменить форму (-1) print (X_train.shape, y_train.shape, X_test.shape, y_test.shape, sep = '\ n') # получить текущий запуск run = Run.get_context () print ('Обучите модель логистической регрессии со скоростью регуляризации', args.reg) clf = LogisticRegression (C = 1.0 / args.reg, solver = "liblinear", multi_class = "auto", random_state = 42) clf.fit (X_train, y_train) print ('Предсказать набор тестов') y_hat = clf.predict (X_test) # вычислить точность прогноза acc = np.average (y_hat == y_test) print ('Точность', соотв.) запустить.log ('уровень регуляризации', np.float (args.reg)) run.log ('точность', np.float (согласно)) os.makedirs ('выходы', exist_ok = True) # файл заметки, сохраненный в папке выходов, автоматически загружается в запись эксперимента joblib.dump (значение = clf, filename = 'output / sklearn_mnist_model.pkl')  

Обратите внимание, как сценарий получает данные и сохраняет модели:

  • Сценарий обучения считывает аргумент, чтобы найти каталог, содержащий данные. Когда вы отправляете задание позже, вы указываете на хранилище данных для этого аргумента: парсер.add_argument ('- папка данных', type = str, dest = 'папка_данных', help = 'точка подключения каталога данных')

  • Сценарий обучения сохраняет вашу модель в каталоге с именем , выводит . Все, что написано в этом каталоге, автоматически загружается в ваше рабочее пространство. Вы получите доступ к своей модели из этого каталога позже в руководстве. joblib.dump (значение = clf, filename = 'output / sklearn_mnist_model.pkl')

  • Для обучающего скрипта требуется файл utils.py , чтобы правильно загрузить набор данных. Следующий код копирует utils.py в script_folder , чтобы к файлу можно было получить доступ вместе со сценарием обучения на удаленном ресурсе.

      импортный шутил shutil.copy ('utils.py', папка_скрипта)  

Настроить задание на обучение

Создайте объект ScriptRunConfig, чтобы указать детали конфигурации вашего учебного задания, включая ваш обучающий сценарий, среду, которую нужно использовать, и цель вычислений, в которой нужно запускать.Настройте ScriptRunConfig, указав:

  • Каталог, содержащий ваши сценарии. Все файлы в этом каталоге загружаются в узлы кластера для выполнения.
  • Цель вычислений. В этом случае вы используете созданный вами вычислительный кластер Машинного обучения Azure.
  • Имя обучающего скрипта, train.py .
  • Среда, содержащая библиотеки, необходимые для запуска сценария.
  • Требуемые аргументы из обучающего сценария.

В этом руководстве целью является AmlCompute. Все файлы в папке сценария загружаются в узлы кластера для запуска. --data_folder настроен на использование набора данных.

Сначала создайте среду, которая содержит: библиотеку scikit-learn, среду выполнения azureml-dataset-runtime, необходимую для доступа к набору данных, и azureml-defaults, которая содержит зависимости для метрик ведения журнала. Azureml-defaults также содержит зависимости, необходимые для развертывания модели в качестве веб-службы позже во второй части руководства.

После того, как среда определена, зарегистрируйте ее в Рабочей области, чтобы повторно использовать ее в части 2 руководства.

  из azureml.core.environment import Environment из azureml.core.conda_dependencies импорт CondaDependencies # для установки необходимых пакетов env = Среда ('учебник-env') cd = CondaDependencies.create (pip_packages = ['azureml-dataset-runtime [pandas, fuse]', 'azureml-defaults'], conda_packages = ['scikit-learn == 0.22.1']) env.python.conda_dependencies = cd # Зарегистрируйте среду для повторного использования позже окр.зарегистрироваться (рабочая область = ws)  

Затем создайте ScriptRunConfig, указав обучающий сценарий, цель вычисления и среду.

  из скрипта импорта azureml.core ScriptRunConfig args = ['--data-folder', mnist_file_dataset.as_mount (), '--regularization', 0,5] src = ScriptRunConfig (source_directory = script_folder, script = 'train.py', аргументы = аргументы, compute_target = compute_target, среда = env)  

Отправить задание в кластер

Запустите эксперимент, отправив объект ScriptRunConfig:

  пробег = эксп.отправить (config = src) пробег  

Поскольку вызов является асинхронным, он возвращает состояние Подготовка или Выполняется , как только задание запускается.

Мониторинг удаленного запуска

В общей сложности первый прогон занимает около 10 минут . Но для последующих запусков, пока зависимости скрипта не изменяются, то же изображение используется повторно. Таким образом, время запуска контейнера намного быстрее.

Что происходит, пока вы ждете:

  • Создание образа : создается образ Docker, соответствующий среде Python, заданной средой Azure ML.Изображение загружено в рабочую область. Создание и загрузка изображения занимает около пяти минут .

    Этот этап происходит один раз для каждой среды Python, поскольку контейнер кэшируется для последующих запусков. Во время создания образа журналы передаются в журнал запусков. Вы можете отслеживать процесс создания образа с помощью этих журналов.

  • Масштабирование : Если удаленному кластеру требуется больше узлов для выполнения, чем доступно в настоящее время, дополнительные узлы добавляются автоматически.Масштабирование обычно занимает около пяти минут.

  • Запуск : на этом этапе необходимые сценарии и файлы отправляются в целевой объект вычислений. Затем подключаются или копируются хранилища данных. Затем запускается entry_script . Во время выполнения задания stdout и каталог ./logs передаются в журнал выполнения. Вы можете отслеживать ход выполнения с помощью этих журналов.

  • Постобработка : .Каталог / output выполнения копируется в историю запусков в вашем рабочем пространстве, поэтому вы можете получить доступ к этим результатам.

Проверить ход выполнения задания можно несколькими способами. В этом руководстве используется виджет Jupyter и метод wait_for_completion .

Виджет Jupyter

Наблюдайте за ходом выполнения с помощью виджета Jupyter. Как и отправка запуска, виджет является асинхронным и предоставляет обновления в реальном времени каждые 10–15 секунд до завершения задания:

  от azureml.виджеты импортируют RunDetails RunDetails (запустить) .show ()  

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

Если вам нужно отменить запуск, вы можете следовать этим инструкциям.

Получить результаты журнала по завершении

Обучение и мониторинг модели происходят в фоновом режиме. Подождите, пока модель завершит обучение, прежде чем запускать новый код. Используйте wait_for_completion , чтобы показать, когда обучение модели завершено:

  пробег.wait_for_completion (show_output = False) # укажите True для подробного журнала  

Показать результаты выполнения

Теперь у вас есть модель, обученная на удаленном кластере. Получить точность модели:

  печать (run.get_metrics ())  

Выходные данные показывают, что удаленная модель имеет точность 0,9204:

.

{'уровень регуляризации': 0,8, 'точность': 0,9204}

В следующем руководстве вы исследуете эту модель более подробно.

Регистровая модель

Последний шаг в обучающем скрипте записал файл output / sklearn_mnist_model.pkl в каталоге с именем выводит в виртуальной машине кластера, в котором выполняется задание. выводит - это специальный каталог, в котором все содержимое этого каталога автоматически загружается в вашу рабочую область. Это содержимое отображается в записи запуска эксперимента в вашей рабочей области. Таким образом, файл модели теперь также доступен в вашем рабочем пространстве.

Вы можете увидеть файлы, связанные с этим запуском:

  печать (run.get_file_names ())  

Зарегистрируйте модель в рабочей области, чтобы вы или другие соавторы могли позже запросить, изучить и развернуть эту модель:

  # модель регистра модель = запустить.register_model (model_name = 'sklearn_mnist', model_path = 'выходы / sklearn_mnist_model.pkl') print (имя модели, идентификатор модели, версия модели, sep = '\ t')  

Очистить ресурсы

Важно

Созданные вами ресурсы можно использовать в качестве предварительных условий для других руководств по машинному обучению Azure и статей с практическими рекомендациями.

Если вы не планируете использовать созданные вами ресурсы, удалите их, чтобы не платить за вас:

  1. На портале Azure выберите Группы ресурсов в крайнем левом углу.

  2. Из списка выберите созданную вами группу ресурсов.

  3. Выберите Удалить группу ресурсов .

  4. Введите имя группы ресурсов. Затем выберите Удалить .

Вы также можете удалить только вычислительный кластер машинного обучения Azure. Однако автомасштабирование включено, и минимум кластера равен нулю. Таким образом, этот конкретный ресурс не требует дополнительных затрат на вычисления, когда он не используется:

  # При желании удалите вычислительный кластер машинного обучения Azure compute_target.удалять()  

Следующие шаги

В этом руководстве по машинному обучению Azure вы использовали Python для следующих задач:

  • Настройте среду разработки.
  • Получите доступ и изучите данные.
  • Обучите несколько моделей в удаленном кластере с помощью популярной библиотеки машинного обучения scikit-learn
  • Просмотрите подробности обучения и зарегистрируйте лучшую модель.

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

.

Смотрите также



Образ невесты Подготовка к свадьбе Организация свадьбы Развлечения на свадьбе Поздравления и тосты на свадьбу Свадебные приметы, горосокопы и гадания
Club Brides - Клуб Невест

Как показывают статистика и практика, в подавляющем большинстве случаев именно невеста является главным идеологом и главной движущей силой процесса подготовки к свадьбе.
Как подобрать счастливую дату свадьбы, как стильно и оригинально оформить свадебные приглашения, как выбрать самое красивое свадебное платье, какую сделать прическу, каким должен быть букет невесты, во что одеть подружек невесты, где организовать банкет, как оформить банкетный зал, какого фотографа и видеооператора пригласить… Вопросов при подготовке к свадьбе возникает сотни… Без совета и помощи не обойтись.
Свадебный портал «Клуб Невест» (Club Brides) посвящен всем самым главным вопросам, которые возникают у будущих молодоженов в процессе подготовки к свадьбе, а также всем тем вопросам и нюансам, которые необходимо учесть, чтобы свадьба стала действительно красивым, ярким, веселым и запоминающимся событием.
Мы подскажем вам, как подобрать счастливую дату свадьбы, как стильно и оригинально оформить свадебные приглашения, как выбрать самое красивое свадебное платье, какую сделать прическу, каким должен быть букет невесты, во что одеть подружек невесты, где организовать банкет, как оформить банкетный зал, какого фотографа и видеооператора пригласить и многое-многое другое…


2015- © Club Brides - Клуб Невест | Содержание | Карта сайта
Копировать материалы без размещения прямой активной ссылки на CLUBBRIDES.RU запрещено!