Присоединяйтесь к TensorFlow на Google I/O, 11-12 мая Зарегистрируйтесь сейчас

Apache Beam и TFX

Apache Beam обеспечивает основу для работы партии и потоковой обработки заданий , которые работают на различных исполнительных двигателей данных. Некоторые библиотеки TFX используют Beam для выполнения задач, что обеспечивает высокую степень масштабируемости в вычислительных кластерах. Beam включает поддержку множества механизмов выполнения или «бегунов», в том числе прямого бегуна, который работает на одном вычислительном узле и очень полезен для разработки, тестирования или небольших развертываний. Beam предоставляет уровень абстракции, который позволяет TFX работать на любом поддерживаемом средстве выполнения без модификации кода. TFX использует Beam Python API, поэтому он ограничен бегунами, которые поддерживаются Python API.

Развертывание и масштабируемость

По мере увеличения требований к рабочей нагрузке Beam может масштабироваться до очень больших развертываний в больших вычислительных кластерах. Это ограничено только масштабируемостью основного бегуна. Среды выполнения в крупных развертываниях обычно развертываются в системе оркестровки контейнеров, такой как Kubernetes или Apache Mesos, для автоматизации развертывания, масштабирования и управления приложениями.

См Apache Beam документации для получения дополнительной информации о Apache Beam.

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

Пользовательский код Python и зависимости

Одной из заметных сложностей использования Beam в конвейере TFX является обработка пользовательского кода и / или зависимостей, необходимых от дополнительных модулей Python. Вот несколько примеров, когда это может быть проблемой:

  • preprocessing_fn должен ссылаться на собственный модуль Python пользователя
  • настраиваемый экстрактор для компонента Evaluator
  • настраиваемые модули, которые являются подклассами компонента TFX

TFX опирается на поддержку радиолуча Управление Python Pipeline зависимостями для обработки зависимостей Python. В настоящее время есть два способа справиться с этим:

  1. Предоставление кода Python и зависимостей в виде исходного пакета
  2. [Только поток данных] Использование образа контейнера в качестве рабочего

Они обсуждаются далее.

Предоставление кода Python и зависимостей в качестве исходного пакета

Это рекомендуется для пользователей, которые:

  1. Знакомы с упаковкой Python и
  2. Используйте только исходный код Python (т.е. без модулей C или разделяемых библиотек).

Пожалуйста , следуйте одному из путей в Управлении Python Pipeline зависимостей , чтобы обеспечить это , используя один из следующего beam_pipeline_args:

  • --setup_file
  • --extra_package
  • --requirements_file

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

[Только поток данных] Использование образа контейнера для работника

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

Чтобы использовать это, вам необходимо:

  • Построить Docker изображение , которое имеет как tfx и пользователи пользовательский код и зависимости предварительно установлены.
    • Для пользователей , которые (1) использования tfx>=0.26 и (2) использует питон 3.7 для разработки своих трубопроводов, самый простой способ сделать это состоит в расширении соответствующей версии официального tensorflow/tfx изображения:
# You can use a build-arg to dynamically pass in the
# version of TFX being used to your Dockerfile.

ARG TFX_VERSION
FROM tensorflow/tfx:${TFX_VERSION}
# COPY your code and dependencies in
  • Отправьте созданный образ в реестр образов контейнера, доступный для проекта, используемого Dataflow.
    • Пользователи Google Cloud можно рассмотреть с помощью Cloud Построить который хорошо автоматизирует описанные выше шаги.
  • Обеспечить следующие beam_pipeline_args :
beam_pipeline_args.extend([
    '--runner=DataflowRunner',
    '--project={project-id}',
    '--worker_harness_container_image={image-ref}',
    '--experiments=use_runner_v2',
])

TODO (b / 171733562): удалите use_runner_v2, если он используется по умолчанию для потока данных.

TODO (б / 179738639): Создать документацию для того, как тест на заказ контейнера на месте после того, как https://issues.apache.org/jira/browse/BEAM-5440

Аргументы трубопровода пучка

Некоторые компоненты TFX полагаются на Beam для распределенной обработки данных. Они настраиваются с beam_pipeline_args , который указан во время создания трубопровода:

my_pipeline = Pipeline(
    ...,
    beam_pipeline_args=[...])

TFX 0,30 и выше , добавляет интерфейс, with_beam_pipeline_args , для расширения арг луча уровня трубопроводов на компонент:

example_gen = CsvExampleGen(input_base=data_root).with_beam_pipeline_args([...])