Большие данные и большие данные HPC

Прежде чем мы начнем, нужно кое-что прояснить: различия между большими данными, о которых вы часто слышите, и большими данными HPC. Оба используют большие объемы данных в процессах, от многих ТБ до ПБ. Однако используемые технологии и инструменты отличаются фундаментальными концепциями. Эти базовые концепции вращаются вокруг того, насколько вычислительно дорого что-либо и какие типы компьютеров на нем работают.

Большие данные:

  • Перемещение данных › Стоимость вычислений
  • Пропускная способность › Эффективность
  • Меньшие фрагменты данных
  • Товарное оборудование
  • Расчет рядом с данными

Большие данные HPC:

  • Перемещение данных ‹ Стоимость вычислений
  • Пропускная способность ‹ Эффективность
  • Большие блоки данных
  • Дорогое оборудование
  • Вычисления рядом с машинами

Это не жесткие и быстрые правила, но обычно, когда вы слышите слова «Большие данные», вы слышите об инструментах и ​​принципах в первую очередь.

Почему это важно?

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

Чтобы подтвердить эту концепцию, давайте проверим стоимость мощной машины с графическим процессором в облаке.

Вам повезло получить их на спотовых узлах, а это означает, что вы тратите 41 час в час на 8 графических процессоров, когда стоимость передачи S3 в EC2 практически равна нулю.

В качестве альтернативы спотовые узлы AWS используются примерно (0,01 в час на ядро), а это означает, что если у вас есть значительные объемы данных, вы можете сделать альтернативу этому. Принципы работы с большими данными заключаются в хранении всех ваших данных, разделенных на множество компьютеров, и отправке кода для их обработки только туда. Это образ мышления Hadoop.

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

Проверьте библиотеку машинного обучения Sparks и обратите внимание, какие алгоритмы они считают правильными.

И чтобы вас сбить с толку: Большое глубокое обучение не всегда на GPUS

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

С этим из пути, ВПЕРЕД!

Как обрабатывать от десятков до сотен ТБ данных для обучения?

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

Очевидный первый вопрос: что делать, если ваш компьютер не может вместить набор данных из-за его размера? А что, если мне нравятся мои деньги?

Если вы обучите много моделей, вы увидите, что затраты становятся довольно значительными. Давайте посмотрим на этот график от aws о том, как сократить расходы с помощью: Amazon FSx for Lustre.

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

Но этот инструмент является эндшпилем. Начнем НАМНОГО проще.

У вас много данных и вы хотите эффективно обучить модель.

Как я сказал вначале, вы можете загрузить эти данные в узел. Давайте начнем здесь и улучшим его.

Что ж, давайте пройдемся по наивному методу ваших данных на S3:

  1. В вашем коде есть много файлов, которые ему нужны в S3.
  2. Он просматривает ваш список файлов для каждого файла, который отправляет запрос.
  3. Ждет ответа, где он находится.
  4. Потом скачивает.
  5. Затем переходит к следующему файлу.

Улучшите этот метод загрузки:

Это довольно медленно. Для каждого файла он должен ждать, пока S3 вернется к нему, прежде чем продолжить. Простым ускорением было бы использование потоков. Или, если применимо, с использованием асинхронных методов. "в деталях"

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

Увеличенный размер блоков данных:

Я настоятельно рекомендую вам прочитать эту статью.

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

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

  1. Запустите предыдущий код выше, загружая данные на этапе предварительной обработки. (НЕ ТРЕНИРОВОЧНЫЕ УЗЛЫ GPU)
  2. Если вы выполняете ML, перетасуйте эти данные.
  3. Предварительная обработка здесь также является хорошей идеей.
  4. Размещайте множество файлов в блоки размером в несколько ГБ.
  5. Сохраните эти блоки обратно в S3 с помощью сгенерированного списка этих новых файлов.

Используя эти блоки:

Итак, это добавило некоторую сложность. Как я должен передать большой файл из нескольких элементов в свою модель?

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

Первый шаг – доработать идею блоков данных:

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

Например, ваш тренировочный набор данных объемом 10 ТБ становится следующим:

  • 1000 блоков
  • Каждые 10 ГБ размером
  • С UUID.
  • Каждый блок последовательно нумеруется от 0 до 1000.

Идентификатор примера: «validationblockuuid_39» — это 39-й блок данных проверки.

2. Сохраните идентификатор и количество «осколков» (техническое имя для каждого блока) в хранилище метаданных. Даже самая простая БД будет работать.

3. Теперь нам нужно использовать эти блоки. Давайте посмотрим на пример PyTorch.

shards = my_range_of_shards

train_url = f"pipe:s3cmd get s3://{location_in_s3}_{shards}.tar"

train_dataset = wds.WebDataset(train_url, shardshuffle=True)

Здесь мы видим, что я получаю диапазон своих осколков и исходный идентификатор. Затем я создаю URL-адрес для своих осколков и помещаю все это в набор веб-данных. Обратите внимание на «shardshuffle=True». Это важно.

Существенной разницей между локальным и крупномасштабным обучением является концепция псевдоперетасовки. Здесь мы перемешиваем перетасованные осколки, поэтому наша модель получает «перетасованные» данные.

Поздравляю! Теперь вы тренируетесь на огромных объемах данных на любом S3, который может предоставить. Это может привести вас к очень впечатляющим масштабам. Это тот же метод, который я использую для одновременного обучения машин с одним GPU на 1000 моделях.

Раз уж мы здесь, предлагаю просмотреть это видео:

Введение в крупномасштабное глубокое обучение

Мы на финишной прямой. Что выходит за рамки текущей настройки?

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

ЧЕГО ВАМ ЕЩЕ НУЖНО?

пожалуйста, прекратите

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

Когда вы начинаете обучать модели на нескольких графических процессорах, пропускная способность каждого графического процессора настолько высока, что S3 больше не может справиться с требованиями сети. Теперь у нас полный круг. Вернем блеск!

Lustre — это буквально файловая система суперкомпьютеров.

Lustre — это файловая система, которую выбирают 7 из 10 самых быстрых компьютеров в мире на сегодняшний день, более 70 % из 100 лучших, а также более 60 % из 500 лучших. В этом документе описывается, почему Lustre доминирует в 500 лучших компьютерах. (www.top500.org) и почему вы можете использовать его для своих требований к высокопроизводительному вводу-выводу. "источник"

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

Это также отличный момент, чтобы рассказать о том, что Lustre действительно ненавидит крошечные файлы (как и я). Именно поэтому мы перешли к методу блокировки. Теперь мы можем интегрировать все предыдущие методы в файловую систему Lustre.

AWS предоставляет эту систему как услугу (спасибо, Джефф). При правильном подключении он дает путь к папке внутри ваших узлов, на котором мы можем работать. Это дорого, но создание Lustre fs для суперкомпьютерного кластера — сложная задача.

Предпочтительный метод объединяет предыдущую статью, которую я написал. Вы можете настроить создание FSX как DAG в воздушном потоке, чтобы при развертывании он создавал его ТОЛЬКО для обучающей последовательности, а затем уничтожал его.

Lustre также работает только в одной зоне доступности, что означает, что у нас ТАКЖЕ есть проблемы с планированием суперузлов, таких как p4, в определенной области. Kubernetes может помочь в этом благодаря множеству различных методов планирования. "в деталях"

Кроме того, p4 не может планироваться как стандартный узел. Вы должны планировать эти узлы, поэтому вам нужно: Резервирование мощности по требованию.

Если вам не нравится Kubernetes, вы можете пойти по пути, который предлагает aws: ссылка

Вывод:

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

Мы рассмотрели эти темы:

  • Большие данные против больших данных HPC
  • Загрузка файлов
  • Конвейерные файлы
  • Использование этих конвейерных файлов (осколков)
  • За гранью (блеск)

Есть ли что-то помимо этого?

Всегда есть! Многие люди выполняют много работы помимо этого, но я бы не советовал SWE идти по этому пути. Помимо этого, это в значительной степени чистое исследование. Мы могли бы подробно поговорить об обучении модели на этих распределенных суперкомпьютерах, но это лишняя статья, а я устал.

Если у вас есть какие-либо мысли или вы хотите пожаловаться на мою статью, напишите мне по электронной почте! Если есть какие-либо грамматические ошибки, сообщите об этом в Grammarly.

Курт.Чарльз[email protected]