Развертывание

Помимо определения вычислений, TFF предоставляет инструменты для их выполнения. Хотя основное внимание уделяется моделированию, предоставляемые нами интерфейсы и инструменты носят более общий характер. В этом документе описаны варианты развертывания на различных типах платформ.

Обзор

Существует два основных режима развертывания вычислений TFF:

  • Родной бэкэнд . Мы будем называть бэкэнд « родным» , если он способен интерпретировать синтаксическую структуру вычислений TFF, как определено в computation.proto . Собственный бэкэнд не обязательно должен поддерживать все языковые конструкции или встроенные функции. Собственные серверные части должны реализовывать один из стандартных интерфейсов исполнителя TFF, например tff.framework.Executor для использования кодом Python, или его независимую от языка версию, определенную в executor.proto , представленную как конечная точка gRPC.

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

  • Неродные бэкэнды . Неродные бэкэнды, в отличие от собственных, не могут напрямую интерпретировать структуру вычислений TFF и требуют ее преобразования в другое целевое представление , понятное бэкэнду. Ярким примером такого бэкэнда может быть кластер Hadoop или аналогичная платформа для конвейеров статических данных. Чтобы вычисление можно было развернуть на таком бэкэнде, его сначала необходимо преобразовать (или скомпилировать ). В зависимости от настройки это может быть сделано прозрачно для пользователя (т. е. неродной бэкэнд может быть обернут стандартным интерфейсом исполнителя, таким как tff.framework.Executor , который выполняет преобразования под капотом), или это может быть представлено как инструмент, который позволяет пользователю вручную преобразовать вычисление или набор вычислений в соответствующее целевое представление, понятное определенному классу серверных частей. Код, поддерживающий определенные типы неродных бэкэндов, можно найти в пространстве имен tff.backends . На момент написания этой статьи единственным поддерживаемым типом неродных бэкэндов был класс систем, способных выполнять MapReduce за один раунд.

Собственные бэкэнды

Более подробная информация скоро появится.

Неродные бэкэнды

Уменьшение карты

Более подробная информация скоро появится.