Apache Beam cung cấp một khung để chạy các công việc xử lý dữ liệu hàng loạt và truyền phát chạy trên nhiều công cụ thực thi khác nhau. 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 ở mức độ cao trên các cụm điện toán. Beam bao gồm hỗ trợ cho nhiều 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 điện toán 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 lớp trừu tượng cho phép TFX chạy trên mọi trình chạy được hỗ trợ mà không cần sửa đổi mã. TFX sử dụng API Beam Python, do đó, nó được giới hạn ở các trình chạy được API Python hỗ trợ.
Triển khai và khả năng mở rộng
Khi yêu cầu về khối lượng công việc tăng lên, Beam có thể mở rộng quy mô triển khai rất lớn trên các cụm điện toán lớn. Điều này chỉ bị giới hạn bởi khả năng mở rộng của Á hậu cơ bản. Những người chạy trong các triển khai lớn thường sẽ được triển khai vào 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 quy mô và quản lý ứng dụng.
Xem tài liệu Apache Beam để biết thêm thông tin về Apache Beam.
Đối với người dùng Google Cloud, Dataflow là công cụ chạy được đề xuất, cung cấp nền tảng không cần máy chủ và tiết kiệm chi phí thông qua việc tự động điều chỉnh quy mô tài nguyên, tái cân bằng công việc năng động, tích hợp sâu với các dịch vụ Google Cloud khác, bảo mật và giám sát tích hợp.
Mã Python tùy chỉnh và các phần phụ thuộc
Một điểm phức tạp đáng chú ý khi sử dụng Beam trong quy trình TFX là xử lý mã tùy chỉnh và/hoặc các phần phụ thuộc cần thiết từ các mô-đun Python bổ sung. Dưới đây là một số ví dụ khi điều này có thể là một vấn đề:
- preprocessing_fn cần tham khảo 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 Người đánh giá
- các 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ợ của Beam trong Quản lý các phụ thuộc đường ống Python để xử lý các phụ thuộc Python. Hiện nay có hai cách để quản lý việc này:
- Cung cấp mã Python và các phần phụ thuộc dưới dạng gói nguồn
- [Chỉ 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ã Python và các phần phụ thuộc dưới dạng gói nguồn
Điều này được khuyến nghị cho những người dùng:
- Làm quen với việc đóng gói Python và
- Chỉ sử dụng mã nguồn Python (nghĩa là không có mô-đun C hoặc thư viện dùng chung).
Vui lòng đi theo một trong các đường dẫn trong Quản lý phụ thuộc đường ống Python để cung cấp điều này bằng cách sử dụng một trong các Beam_pipeline_args sau:
- --setup_file
- --extra_package
- --requirements_file
Lưu ý: Trong bất kỳ trường hợp nào ở trên, vui lòng đảm bảo rằng cùng một phiên bản tfx
được liệt kê dưới dạng phụ thuộc.
[Chỉ luồng dữ liệu] Sử dụng hình ảnh vùng chứa cho một Worker
TFX 0.26.0 trở lên có hỗ trợ thử nghiệm để sử dụng hình ảnh vùng chứa tùy chỉnh cho nhân viên Dataflow.
Để sử dụng tính năng này, bạn phải:
- Xây dựng hình ảnh Docker có cả
tfx
và mã tùy chỉnh cũng như các phần phụ thuộc của người dùng được 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 quy trình của họ, cách dễ nhất để thực hiện việc này là mở rộng phiên bản tương ứng của hình ảnhtensorflow/tfx
chính thức:
- Đối với những người dùng (1) sử dụng
# 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 Dataflow sử dụng có thể truy cập được.
- Người dùng Google Cloud có thể cân nhắc sử dụng Cloud Build để tự động hóa các bước trên một cách hiệu quả.
- Cung cấp
beam_pipeline_args
sau:
beam_pipeline_args.extend([
'--runner=DataflowRunner',
'--project={project-id}',
'--worker_harness_container_image={image-ref}',
'--experiments=use_runner_v2',
])
TODO(b/171733562): Xóa use_runner_v2 sau khi nó được mặc định cho Dataflow.
TODO(b/179738639): Tạo tài liệu về cách kiểm tra vùng chứa tùy chỉnh cục bộ sau https://issues.apache.org/jira/browse/BEAM-5440
Đối số đường ống chùm tia
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 định cấu hình bằng beam_pipeline_args
, được chỉ định trong quá trình tạo đường ống:
my_pipeline = Pipeline(
...,
beam_pipeline_args=[...])
TFX 0.30 trở lên bổ sung một giao diện, with_beam_pipeline_args
, để mở rộng đối số chùm tia cấp độ đường ống cho mỗi thành phần:
example_gen = CsvExampleGen(input_base=data_root).with_beam_pipeline_args([...])