Введение в федеративное обучение: руководство для начинающих

Федеративное обучение

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

Представляем федеративное обучение

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

Случаи применения:

  • app company (приложение для прогнозирования текстовых сообщений)
  • профилактическое обслуживание (автомобили / промышленные двигатели)
  • носимые медицинские устройства
  • блокировщики рекламы / автозаполнение в браузерах (Firefox / Brave)

Описание задачи: данные распределены между источниками, но мы не можем их агрегировать по следующим причинам:

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

Установка PySyft

Чтобы выполнять федеративное обучение, нам необходимо иметь возможность использовать методы глубокого обучения на удаленных машинах. Для этого потребуется новый набор инструментов. В частности, мы будем использовать расширение PyTorch под названием PySyft.

Установите PySyft

Проще всего установить необходимые библиотеки с помощью Conda. Создайте новую среду, затем установите зависимости в этой среде. В вашем терминале:

Если у вас есть какие-либо ошибки, связанные с zstd - выполните следующее (если все вышеперечисленное установлено нормально, пропустите этот шаг):

а затем повторите попытку установки syft (pip install syft).

Если вы используете Windows, я предлагаю установить Anaconda и использовать Anaconda Prompt для работы из командной строки.

Когда эта среда активирована, и в каталоге репо запустите Jupyter Notebook:

jupyter notebook

Если какая-либо часть этого не работает для вас (или какой-либо из тестов не срабатывает) - сначала проверьте README для получения помощи по установке, а затем откройте проблему Github или пингуйте канал #beginner в открытой рабочей области майнинга Slack! Slack.openmined.org

PySyft = ›Удаленный PyTorch

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

Таким образом, вместо использования тензоров Torch мы теперь будем работать с указателями на тензоры. Позвольте мне показать вам, что я имею в виду. Во-первых, давайте создадим «воображаемую» машину, принадлежащую «воображаемому» человеку - назовем его Джеком.

Отправка данных удаленному работнику с помощью функции отправки, эта функция была введена с помощью инструментария pysyft.

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

Проект: Игра с удаленными тензорами

В этом проекте мы отправляем и получаем данные с помощью .send () и .get () в тензоре ДВУМ рабочим, вызывая .send (jack, alice). Для этого сначала потребуется создать еще один VirtualWorker с именем alice.

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

Удаленная арифметика

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

Здесь мы по-прежнему сильно полагаемся на инструментарий для вычислений с удаленными сотрудниками. Вот фрагмент кода, с которого можно начать:

Как видно с помощью функции отправки, мы можем отправлять данные удаленному работнику. Мы возвращаем тензорный объект Pointer, который указывает на работника, которому были отправлены данные.

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

Используя функцию объектов, введенную PySyft, можно увидеть тензорные объекты на удаленном работнике.

В целом pysyft предоставляет огромные возможности поверх pytorch, например, не забудьте заглянуть в OpenMined Blog