1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/topnetfish-Production-Level-Deep-Learning

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

:bulb: Руководство по глубокому обучению на уровне производства :clapper: :scroll: :ferry:

[Примечание: этот репозиторий всё ещё находится в разработке, и мы будем рады любым отзывам и вкладам :blush:]

Развёртывание моделей глубокого обучения на производстве может быть сложной задачей, поскольку это выходит далеко за рамки обучения моделей с хорошей производительностью. Для развёртывания системы глубокого обучения производственного уровня необходимо разработать несколько отдельных компонентов (см. ниже):

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

Материал, представленный здесь, заимствован из Full Stack Deep Learning Bootcamp (от Питера Аббела из Калифорнийского университета в Беркли, Джоша Тобина из OpenAI и Сергея Караяева из Turnitin), TFX workshop от Роберта Кроу и Pipeline.ai's Advanced KubeFlow Meetup от Криса Фреди.

Проекты машинного обучения

Забавный факт: 85% проектов ИИ терпят неудачу. 1 Возможные причины включают:

  • Техническую неосуществимость или плохо определённые границы проекта
  • Отсутствие перехода к производству
  • Неясные критерии успеха (метрики)
  • Плохое управление командой

1. Жизненный цикл проектов ML

  • Важность понимания передовых достижений в вашей области:
    • Помогает понять, что возможно
    • Помогает знать, что попробовать дальше

2. Ментальная модель для проекта ML

Два важных фактора, которые следует учитывать при определении и приоритизации проектов ML:

  • Высокая значимость:
    • Сложные части вашего конвейера
    • Где «дешёвое предсказание» ценно
    • Где автоматизация сложного ручного процесса ценна
  • Низкая стоимость:
    • Стоимость определяется:
      • Доступностью данных
      • Требованиями к производительности: затраты, как правило, растут сверхлинейно в зависимости от требований к точности
      • Сложностью задачи:
        • Некоторые сложные задачи включают неконтролируемое обучение, обучение с подкреплением и некоторые категории контролируемого обучения

Полный стек конвейера

На следующем рисунке представлен общий обзор различных компонентов системы глубокого обучения производственного уровня:

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

1. Управление данными

1.1 Источники данных

  • Глубокое обучение под наблюдением требует большого количества размеченных данных
  • Разметка собственных данных стоит дорого!
  • Вот некоторые ресурсы для данных:
    • Открытые исходные данные (хорошо для начала, но не преимущество)
    • Увеличение объёма данных (обязательно для компьютерного зрения, вариант для НЛП)
    • Синтетические данные (почти всегда стоит начинать с них, особенно в НЛП)

1.2 Маркировка данных

  • Требуется: отдельный программный стек (платформы маркировки), временный персонал и контроль качества

  • Источники рабочей силы для маркировки:

    • Краудсорсинг (Mechanical Turk): дёшево и масштабируемо, менее надёжно, требуется контроль качества
    • Наём собственных аннотаторов: меньше контроля качества, дорого, медленно масштабируется
    • Компании, предоставляющие услуги по маркировке данных:
  • Платформы для маркировки:

    • Diffgram: Программное обеспечение для обучения данным Компьютерное зрение
  • Prodigy: инструмент аннотирования, основанный на активном обучении (разработчики Spacy), текст и изображение.

  • HIVE: платформа искусственного интеллекта для компьютерного зрения.

  • Supervisely: целая платформа компьютерного зрения.

  • Labelbox: компьютерное зрение.

  • Scale: платформа данных ИИ (компьютерное зрение и NLP).

1.3. Хранение данных

Варианты хранения данных:

  • Хранилище объектов: хранение двоичных данных (изображения, звуковые файлы, сжатые тексты).

    • Amazon S3.
    • Ceph Object Store.
  • База данных: хранение метаданных (пути к файлам, метки, активность пользователей и т. д.).

    • Postgres — правильный выбор для большинства приложений, с лучшим в своём классе SQL и отличной поддержкой неструктурированных JSON.
  • Озеро данных: агрегирование функций, которые невозможно получить из базы данных (например, журналы).

    • Amazon Redshift.
  • Магазин функций: хранение, доступ и совместное использование функций машинного обучения. Извлечение функций может быть вычислительно затратным и практически невозможным для масштабирования, поэтому повторное использование функций различными моделями и командами является ключом к высокой производительности команд машинного обучения.

    • FEAST (Google cloud, Open Source).
    • Michelangelo Palette (Uber).

Предложение: во время обучения копируйте данные в локальную или сетевую файловую систему (NFS).

1.4. Управление версиями данных

Это «ОБЯЗАТЕЛЬНО» для развёрнутых моделей машинного обучения: развёрнутые модели машинного обучения являются частью кода, частью данных. Отсутствие управления версиями данных означает отсутствие управления версиями моделей.

Платформы управления версиями данных:

  • DVC: система управления версиями с открытым исходным кодом для проектов машинного обучения.
  • Pachyderm: управление версиями для данных.
  • Dolt: управление версиями для базы данных SQL.

1.5. Обработка данных

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

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

Make-файлы не масштабируются. В этом отношении становятся весьма важными «менеджеры рабочих процессов».

Управление рабочим процессом:

  • Luigi от Spotify.
  • Airflow от Airbnb: динамичный, расширяемый, элегантный и масштабируемый (наиболее широко используемый).
    • Рабочий процесс DAG.
    • Надёжное условное выполнение: повторная попытка в случае сбоя.
    • Pusher поддерживает образы Docker с TensorFlow Serving.
    • Весь рабочий процесс в одном файле .py.

Победитель в номинации «Язык программирования»: Python.

Редакторы:

  • Vim.
  • Emacs.
  • VS Code (рекомендуется автором): встроенные git-стадии и diff, проверка кода, удалённое открытие проектов через ssh.

Ноутбуки: отличная отправная точка для проектов, трудно масштабировать (забавный факт: архитектура Notebook-Driven от Netflix является исключением, полностью основанным на наборах nteract).

  • nteract: новый пользовательский интерфейс React для Jupyter ноутбуков.
  • Papermill: библиотека nteract, созданная для параметризации, выполнения и анализа Jupyter ноутбуков.
  • Commuter: ещё один проект nteract, который обеспечивает отображение ноутбуков только для чтения (например, из корзин S3).
  • Streamlit: интерактивный инструмент для работы с данными с апплетами.

Вычислительные ресурсы. Рекомендации

1:

  • Для физических лиц или стартапов:
    • Разработка: ПК с архитектурой Тьюринга, 4x.
    • Обучение/оценка: Используйте тот же ПК с 4x GPU. При проведении множества экспериментов купите общие серверы или используйте облачные экземпляры.
  • Для крупных компаний:
    • Разработка: Купите ПК с архитектурой Тьюринга 4x на каждого специалиста по машинному обучению (ML) или позвольте им использовать экземпляры V100.
    • Обучение/Оценка: Используйте облачные экземпляры с надлежащим предоставлением ресурсов и обработкой сбоев.

Облачные провайдеры:

  • GCP: возможность подключения графических процессоров к любому экземпляру + наличие TPU.
  • AWS:

2.2. Управление ресурсами

  • Распределение свободных ресурсов между программами.
  • Варианты управления ресурсами:
    • Старое кластерное планирование заданий (например, менеджер рабочей нагрузки Slurm).
    • Docker + Kubernetes.
    • Kubeflow.
    • Polyaxon (платные функции).

2.3. DL-фреймворки

  • Если нет веской причины не делать этого, используйте Tensorflow/Keras или PyTorch.
  • На следующей диаграмме представлено сравнение различных фреймворков с точки зрения их возможностей для разработки и производства.

2.4. Управление экспериментами

  • Стратегия разработки, обучения и оценки:
    • Всегда начинайте просто.
      • Обучите небольшую модель на небольшой партии данных. Только если это работает, переходите к большим данным и моделям, а также настройке гиперпараметров!
    • Инструменты управления экспериментами:
    • Tensorboard (https://www.tensorflow.org/tensorboard) — предоставляет визуализацию и инструменты, необходимые для экспериментов в области машинного обучения.
    • Losswise (Мониторинг для ML) (https://losswise.com/).
    • Comet (https://comet.ml/) — позволяет отслеживать код, эксперименты и результаты проектов машинного обучения.
    • Weights & Biases (https://wandb.com/) — записывайте и визуализируйте каждую деталь вашего исследования с возможностью лёгкого сотрудничества.
    • MLFlow Tracking (https://mlflow.org/docs/latest/tracking.html#tracking) — для регистрации параметров, версий кода, метрик и выходных файлов, а также визуализации результатов.
      • Автоматическое отслеживание экспериментов с помощью одной строки кода на Python.
      • Сравнение экспериментов бок о бок.
      • Настройка гиперпараметров.
      • Поддержка заданий на основе Kubernetes.

2.5. Настройка гиперпараметров

  • Подходы:

    • Поиск по сетке.
    • Случайный поиск.
    • Байесовская оптимизация.
    • HyperBand (и ASHA).
    • Популяционное обучение.
  • Платформы:

    • Ray Tune (http://tune.io/) — библиотека Python для настройки гиперпараметров в любом масштабе (с акцентом на глубокое обучение и глубокое обучение с подкреплением). Поддерживает любую среду машинного обучения, включая PyTorch, XGBoost, MXNet и Keras.
    • Katib (https://github.com/kubeflow/katib) — система Kubernetes для настройки гиперпараметров и поиска нейронной архитектуры, вдохновлённая Google Vizier (https://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/bcb15507f4b52991a0783013df4222240e942381.pdf) и поддерживающая несколько сред ML/DL (например, TensorFlow, MXNet, PyTorch).
    • Hyperas (https://maxpumperla.com/hyperas/) — простая оболочка вокруг hyperopt для Keras с простой нотацией шаблона для определения диапазонов гиперпараметров для настройки.
    • SIGOPT (https://sigopt.com/) — масштабируемая платформа оптимизации корпоративного уровня.
    • Sweeps от Weights & Biases (https://docs.wandb.com/library/sweeps) — параметры явно не задаются разработчиком. Вместо этого они аппроксимируются и изучаются моделью машинного обучения.
    • Keras Tuner (https://github.com/keras-team/keras-tuner) — тюнер гиперпараметров для Keras, специально для tf.keras с TensorFlow 2.0.

2.6. Распределённое обучение

  • Параллелизм данных: используйте его, когда время итерации слишком велико (поддерживается как TensorFlow, так и PyTorch).
  • Модель. Параллелизм: когда модель не помещается на одном GPU

Другие решения:

  • Horovod.

3. Устранение неполадок [TBD]

4. Тестирование и развёртывание

4.1. Тестирование и CI/CD

Для программного обеспечения машинного обучения требуется более разнообразный набор тестовых наборов, чем для традиционного программного обеспечения:

  • Модульное и интеграционное тестирование:
    • Типы тестов:
      • Тесты системы обучения: тестирование конвейера обучения;
      • Валидационные тесты: тестирование системы прогнозирования на валидационном наборе;
      • Функциональные тесты: тестирование системы прогнозирования по нескольким важным примерам.
  • Непрерывная интеграция: запуск тестов после каждого нового изменения кода, отправленного в репозиторий.

SaaS для непрерывной интеграции:

  • Argo (https://argoproj.github.io/): открытый исходный код Kubernetes native workflow engine для организации параллельных заданий (включая рабочие процессы, события, CI и CD).
  • CircleCI (https://circleci.com/): языковая поддержка, настраиваемые среды, гибкое распределение ресурсов, используется instacart, Lyft и StackShare.
  • Travis CI (https://travis-ci.org/).
  • Buildkite (https://buildkite.com/): быстрые и стабильные сборки, агент с открытым исходным кодом работает практически на любой машине и архитектуре, свобода использования собственных инструментов и сервисов.
  • Jenkins: старая система сборки.

4.2. Веб-развёртывание

Состоит из системы прогнозирования и обслуживающей системы.
Система прогнозирования обрабатывает входные данные и делает прогнозы. Обслуживающая система (веб-сервер) обслуживает прогнозы с учётом масштаба. Использует REST API для обслуживания HTTP-запросов прогнозирования. Вызывает систему прогнозирования для ответа.
Варианты обслуживания:

  1. Развертывание на виртуальных машинах, масштабирование путём добавления экземпляров.
  2. Развёртывание в виде контейнеров, масштабирование через оркестровку. Контейнеры: Docker. Оркестровка контейнеров: Kubernetes (самый популярный сейчас), MESOS, Marathon.
  3. Развёртывание кода как «бессерверной функции».
  4. Развёртывание через решение для обслуживания модели.
    Обслуживание модели: специализированное веб-развёртывание для моделей машинного обучения. Пакетирует запросы для вывода на GPU. Фреймворки: Tensorflow serving, MXNet Model server, Clipper (Berkeley), SaaS-решения.
    Принятие решения: CPU или GPU?
    Вывод на CPU предпочтительнее, если он соответствует требованиям. Масштабируется путём добавления большего количества серверов или перехода на бессерверную архитектуру.
    Вывод на GPU: TF serving или Clipper. Адаптивное пакетирование полезно.
    (Бонус) Развёртывание Jupyter Notebooks: Kubeflow Fairing (https://github.com/kubeflow/fairing) — это гибридный пакет развёртывания, который позволяет развёртывать коды Jupyter notebook!

4.5. Сервисная сетка и маршрутизация трафика

Переход от монолитных приложений к распределённой микросервисной архитектуре может быть сложным. Сервисная сетка (состоящая из сети микросервисов) снижает сложность таких развёртываний и облегчает нагрузку на команды разработчиков. Istio (https://istio.io/) — сервисная сетка для упрощения создания сети развёрнутых сервисов с балансировкой нагрузки, аутентификацией между сервисами, мониторингом, с небольшими изменениями или без изменений в коде сервиса.

4.4. Мониторинг

Цель мониторинга: оповещения о простоях, ошибках и сдвигах распределения, выявление сервисных и регрессий данных. Решения облачных провайдеров вполне приличные. Kiali (https://kiali.io/) — консоль наблюдаемости для Istio с возможностями настройки конфигурации сервисной сетки. Отвечает на вопросы: как связаны микросервисы? Как они работают?

Мы закончили? 4.5. Развёртывание на встраиваемых и мобильных устройствах

  • Основная проблема: использование памяти и ограничения вычислительных ресурсов.

  • Решения:

    • квантизация;
    • уменьшение размера модели: MobileNets;
    • дистилляция знаний: DistillBERT (для обработки естественного языка).
  • Встраиваемые и мобильные фреймворки:

    • Tensorflow Lite;
    • PyTorch Mobile;
    • Core ML;
    • ML Kit;
    • FRITZ;
    • OpenVINO.
  • Преобразование моделей:

    • формат обмена моделями для глубокого обучения с открытым исходным кодом — Open Neural Network Exchange (ONNX).

4.6. Комплексные решения

* TensorFlow Extended (TFX);
* Michelangelo (Uber);
* Google Cloud AI Platform;
* Amazon SageMaker;
* Neptune;
* FLOYD;
* Paperspace;
* Determined AI;
* Domino data lab.

TensorFlow Extended (TFX)

[TBD]

Airflow и KubeFlow ML-конвейеры

[TBD]

Другие полезные ссылки:

  • Уроки, извлечённые из создания практических систем глубокого обучения.
  • Машинное обучение: кредитная карта технического долга с высокими процентами.

Вклад

Ссылки:

[1]: Полноценный курс глубокого обучения, ноябрь 2019 года.

[2]: Расширенный семинар по KubeFlow от Pipeline.ai, 2019 год.

[3]: TFX: машинное обучение в реальных условиях в производстве.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

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

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/topnetfish-Production-Level-Deep-Learning.git
git@api.gitlife.ru:oschina-mirror/topnetfish-Production-Level-Deep-Learning.git
oschina-mirror
topnetfish-Production-Level-Deep-Learning
topnetfish-Production-Level-Deep-Learning
master