Apache Beam và TFX

Apache tia cung cấp một khuôn khổ cho chạy hàng loạt và luồng xử lý dữ liệu công việc mà chạy trên một loạt các động cơ thực hiện. Một số thư viện TFX sử dụng Beam để chạy các tác vụ, cho phép khả năng mở rộng cao trên các cụm máy tính. Beam bao gồm hỗ trợ cho nhiều loại công cụ thực thi hoặc "trình chạy", bao gồm cả trình chạy trực tiếp chạy trên một nút máy tính duy nhất và rất hữu ích cho việc phát triển, thử nghiệm hoặc triển khai nhỏ. Beam cung cấp một lớp trừu tượng cho phép TFX chạy trên bất kỳ trình chạy nào được hỗ trợ mà không cần sửa đổi mã. TFX sử dụng Beam Python API, vì vậy nó được giới hạn ở những người chạy được API Python hỗ trợ.

Khả năng triển khai và mở rộng

Khi yêu cầu khối lượng công việc tăng lên, Beam có thể mở rộng quy mô triển khai lên rất lớn trên các cụm máy tính lớn. Điều này chỉ bị hạn chế bởi khả năng mở rộng của người chạy bên dưới. Người chạy trong các đợt triển khai lớn thường sẽ được triển khai tới hệ thống điều phối vùng chứa như Kubernetes hoặc Apache Mesos để tự động hóa việc triển khai, mở rộng và quản lý ứng dụng.

Xem Apache tia tài liệu hướng dẫn để biết thêm thông tin về Apache Beam.

Đối với người dùng Google Cloud, Dataflow là Á hậu khuyến cáo, cung cấp một nền tảng serverless và chi phí-hiệu quả thông qua autoscaling các nguồn lực, tái cân bằng làm việc năng động, hội nhập sâu với dịch vụ Google Cloud khác, built-in bảo mật, và giám sát.

Mã Python tùy chỉnh và các thành phần phụ thuộc

Một sự phức tạp đáng chú ý của việc sử dụng Beam trong đường dẫn TFX là xử lý mã tùy chỉnh và / hoặc các phụ thuộc cần thiết từ các mô-đun Python bổ sung. Dưới đây là một số ví dụ về thời điểm đây có thể là sự cố:

  • preprocessing_fn cần tham chiếu đến mô-đun Python của chính người dùng
  • một trình trích xuất tùy chỉnh cho thành phần Trình đánh giá
  • mô-đun tùy chỉnh được phân loại phụ từ thành phần TFX

TFX dựa vào sự hỗ trợ Beam cho Quản lý Python Pipeline Dependencies để xử lý Python phụ thuộc. Hiện tại có hai cách để quản lý điều này:

  1. Cung cấp mã và phụ thuộc Python dưới dạng gói nguồn
  2. [Chỉ dành cho luồng dữ liệu] Sử dụng Hình ảnh vùng chứa làm Công nhân

Những điều này sẽ được thảo luận tiếp theo.

Cung cấp mã và phụ thuộc Python dưới dạng gói nguồn

Điều này được khuyến nghị cho những người dùng:

  1. Đã quen thuộc với bao bì Python và
  2. Chỉ sử dụng mã nguồn Python (tức là không có mô-đun C hoặc thư viện được chia sẻ).

Hãy làm theo một trong những con đường trong Quản lý Python Pipeline Dependencies để cung cấp này một cách sử dụng của beam_pipeline_args sau:

  • --tập tin cài đặt
  • --extra_package
  • --requirements_file

Chú ý: Trong bất kỳ trường hợp trên, hãy chắc chắn rằng cùng một phiên bản của tfx được liệt kê là phụ thuộc.

[Chỉ dành cho luồng dữ liệu] Sử dụng Hình ảnh vùng chứa cho Nhân viên

TFX 0.26.0 trở lên đã hỗ trợ thực nghiệm cho việc sử dụng hình ảnh chứa tùy chỉnh cho người lao động dataflow.

Để sử dụng điều này, bạn phải:

  • Xây dựng một hình ảnh Docker trong đó có cả tfx và mã tùy chỉnh và phụ thuộc của người sử dụng cài đặt sẵn.
    • Đối với những người dùng (1) sử dụng tfx>=0.26 và (2) sử dụng python 3.7 để phát triển đường ống của họ, cách dễ nhất để làm điều này là mở rộng các phiên bản tương ứng của các quan chức tensorflow/tfx hình ảnh:
# 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
  • Đẩy hình ảnh được tạo vào sổ đăng ký hình ảnh vùng chứa mà dự án có thể truy cập được bởi Dataflow.
    • Người sử dụng Google Cloud có thể xem xét sử dụng đám mây xây dựng mà độc đáo tự động hóa các bước trên.
  • Cung cấp sau beam_pipeline_args :
beam_pipeline_args.extend([
    '--runner=DataflowRunner',
    '--project={project-id}',
    '--worker_harness_container_image={image-ref}',
    '--experiments=use_runner_v2',
])

VIỆC CẦN LÀM (b / 171733562): Loại bỏ use_runner_v2 khi nó là mặc định cho Dataflow.

TODO (b / 179.738.639): Tạo tài liệu hướng dẫn về cách tùy chỉnh chứa thử nghiệm tại địa phương sau khi https://issues.apache.org/jira/browse/BEAM-5440

Đối số đường ống chùm

Một số thành phần TFX dựa vào Beam để xử lý dữ liệu phân tán. Chúng được cấu hình với beam_pipeline_args , được xác định trong quá trình trong quá trình tạo đường ống:

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

TFX 0,30 trở lên thêm một giao diện, with_beam_pipeline_args , cho việc mở rộng args chùm mức đường ống mỗi thành phần:

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