Задний план

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

Хранение обучающих данных в озере данных имеет следующие преимущества:

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

2) Озеро данных может хранить больший объем обучающих данных. Емкость хранилища больше не ограничивается локальным диском вычислительного узла. Фактически, для глубокого обучения большее количество обучающих данных может способствовать лучшим результатам обучения.

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

Однако этот метод по-прежнему сталкивается со многими проблемами и проблемами:

1) Вы не можете увеличить задержку и пропускную способность удаленного извлечения данных в соответствии с вычислительными ресурсами. Возможности аппаратных вычислений постоянно совершенствуются, и использование графического процессора для вычислений может обеспечить более высокую скорость обучения. ECS Alibaba Cloud и контейнерные сервисы позволяют быстро планировать крупномасштабные вычислительные ресурсы. Кроме того, для доступа к OSS требуется сетевое окружение. Благодаря достижениям в области сетевых технологий в наши дни доступна высокоскоростная сеть для доступа к объектному хранилищу. Тем не менее, сетевая задержка и пропускная способность объектного хранилища не расширяются в соответствии с вычислительными ресурсами, что может стать узким местом для скорости обучения. Следовательно, эффективный доступ к данным в среде, разделенной между вычислительными ресурсами и хранилищем, является серьезной проблемой.

2) Требуются более удобные и часто используемые методы доступа к данным. TensorFlow и другие платформы глубокого обучения поддерживают GCS и HDFS, но поддержка многих сторонних служб хранения объектов недостаточна. Интерфейс переносимой операционной системы (POSIX) — гораздо лучший способ доступа к данным, аналогичный локальному диску. POSIX значительно упрощает разработчику адаптацию к системам хранения.

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

Архитектура ускорения обучения на основе кэша JindoFS

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

Кэш в памяти

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

Дисковый кэш

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

Интерфейс FUSE

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

Практика: создание учебного кластера Kubernetes + JindoFS + Tensorflow

1) Создать кластер Kubernetes

Посетите Alibaba Cloud → Container Service → Kubernetes, чтобы создать кластер Kubernetes.

2) Установите службу JindoFS

2.1) Нажмите «Служба контейнера» → «Kubernetes» → «Каталог приложений» и перейдите на страницу установки и настройки «JindoFS».

2.2) Настройка параметров

Полный шаблон конфигурации см. в разделе Служба контейнеров для Kubernetes — Каталог приложений — Инструкции по установке JindoFS

Настройте OSS Bucket и AK. Пример в документации использует развертывание схемы JFS. Итак, вам необходимо изменить следующие элементы конфигурации:

jfs.namespaces: test
jfs.namespaces.test.mode :  cache
jfs.namespaces.test.oss.uri :  oss://xxx-sh-test.oss-cn-shanghai-internal.aliyuncs.com/xxx/k8s_c1
jfs.namespaces.test.oss.access.key :  xx
jfs.namespaces.test.oss.access.secret :  xx

На основе этих элементов конфигурации создается пространство имен с именем test, которое указывает на chengli-sh-test, каталог xxx/k8s_c1 корзины OSS. При этом работа с пространством имен через JindoFS аналогична работе с каталогом OSS.

2.3) Установка служб

2.3.1) Проверка установки

# kubectl get pods
NAME                               READY   STATUS      RESTARTS   AGE
jindofs-fuse-267vq                 1/1     Running     0          143m
jindofs-fuse-8qwdv                 1/1     Running     0          143m
jindofs-fuse-v6q7r                 1/1     Running     0          143m
jindofs-master-0                   1/1     Running     0          143m
jindofs-worker-mncqd               1/1     Running     0          143m
jindofs-worker-pk7j4               1/1     Running     0          143m
jindofs-worker-r2k99               1/1     Running     0          143m

2.3.2) Посещение каталога /mnt/jfs/ на хост-компьютере эквивалентно доступу к файлам в JindoFS

ls /mnt/jfs/test/
15885689452274647042-0  17820745254765068290-0  entrypoint.sh

2.3.3) Установите Kubeflow (Арена)

Kubeflow — это облачная платформа искусственного интеллекта на основе Kubernetes с открытым исходным кодом. Основное внимание уделяется разработке, организации, развертыванию и запуску масштабируемых и переносимых рабочих нагрузок машинного обучения. Kubeflow поддерживает два типа распределенного обучения в TensorFlow, а именно режим сервера параметров и режим AllReduce. На основе Arena, разработанной командой обслуживания контейнеров Alibaba Cloud, пользователи могут отправлять распределенные обучающие фреймворки этих двух типов.

Обратитесь к этому руководству по установке Kubeflow.

2.3.4) Запустить задание TF

arena submit mpi \
--name job-jindofs\
 --gpus=8 \
 --workers=4 \
 --working-dir=/perseus-demo/tensorflow-demo/ \
 --data-dir /mnt/jfs/test:/data/imagenet \
 -e DATA_DIR=/data/imagenet -e num_batch=1000 \
 -e datasets_num_private_threads=8  \
 --image=registry.cn-hangzhou.aliyuncs.com/tensorflow-samples/perseus-benchmark-dawnbench-v2:centos7-cuda10.0-1.2.2-1.14-py36 \
 ./launch-example.sh 4 8

В этой статье отправляется задание модели ResNet-50 с использованием набора данных ImageNet размером 144 ГБ. Данные хранятся в формате TFRecord, каждый из которых занимает около 130 МБ. Вы можете найти как задание модели, так и набор данных ImageNet в Интернете. Среди этих параметров /mnt/jfs/ — это каталог, смонтированный на хост-компьютере через JindoFS FUSE, а test — это пространство имен, соответствующее корзине OSS. Каталог /mnt/jfs/ сопоставляется с каталогом /data/imagenet в контейнере через --data-dir, чтобы задание могло считывать данные в OSS. Уже прочитанные данные будут автоматически кэшироваться в кластере JindoFS.

Резюме

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

Оригинальный источник: