คำถามเกี่ยวกับ TFX? เข้าร่วมกับเราที่ Google I / O!

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 อาศัยการสนับสนุนของ Beam ในการ จัดการ Python Pipeline Dependencies เพื่อจัดการการอ้างอิง Python ในปัจจุบันมีสองวิธีในการจัดการสิ่งนี้:

  1. ให้ Python Code และ Dependencies เป็น Source Package
  2. [กระแสข้อมูลเท่านั้น] การใช้อิมเมจคอนเทนเนอร์เป็นผู้ปฏิบัติงาน

สิ่งเหล่านี้จะกล่าวถึงต่อไป

ให้ Python Code และ Dependencies เป็น Source Package

ขอแนะนำสำหรับผู้ใช้ที่:

  1. คุ้นเคยกับบรรจุภัณฑ์ Python และ
  2. ใช้ซอร์สโค้ด Python เท่านั้น (เช่นไม่มีโมดูล C หรือไลบรารีที่ใช้ร่วมกัน)

โปรดทำตามหนึ่งในพา ในการ จัดการ Python Pipeline Dependencies เพื่อจัดเตรียมโดยใช้ beam_pipeline_args ต่อไปนี้:

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

หมายเหตุ: ในกรณีใด ๆ ข้างต้นโปรดตรวจสอบให้แน่ใจว่า tfx เวอร์ชันเดียวกันถูกระบุว่าเป็นการอ้างอิง

[กระแสข้อมูลเท่านั้น] การใช้อิมเมจคอนเทนเนอร์สำหรับผู้ปฏิบัติงาน

TFX 0.26.0 ขึ้นไปมีการสนับสนุนทดลองสำหรับการใช้ อิมเมจคอนเทนเนอร์ที่กำหนดเอง สำหรับผู้ปฏิบัติงาน Dataflow

ในการใช้สิ่งนี้คุณต้อง:

  • สร้างอิมเมจ Docker ซึ่งมีทั้ง tfx และโค้ดที่กำหนดเองของผู้ใช้และการอ้างอิงที่ติดตั้งไว้ล่วงหน้า
    • สำหรับผู้ใช้ที่ (1) ใช้ tfx>=0.26 และ (2) ใช้ python 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 Build ซึ่งทำตามขั้นตอนข้างต้นโดยอัตโนมัติ
  • ระบุ beam_pipeline_args ต่อไปนี้:
beam_pipeline_args.extend([
    '--runner=DataflowRunner',
    '--project={project-id}',
    '--worker_harness_container_image={image-ref}',
    '--experiments=use_runner_v2',
])

สิ่งที่ต้องทำ (b / 171733562): ลบ use_runner_v2 เมื่อเป็นค่าเริ่มต้นสำหรับ Dataflow

สิ่งที่ต้องทำ (b / 179738639): สร้างเอกสารสำหรับวิธีทดสอบคอนเทนเนอร์แบบกำหนดเองในเครื่องหลังจาก https://issues.apache.org/jira/browse/BEAM-5440

คานไปป์ไลน์อาร์กิวเมนต์

ส่วนประกอบ TFX หลายตัวอาศัย Beam สำหรับการประมวลผลข้อมูลแบบกระจาย มีการกำหนดค่าด้วย beam_pipeline_args ซึ่งระบุไว้ในระหว่างการสร้างไปป์ไลน์:

from tfx.orchestration import pipeline
my_pipeline = pipeline.Pipeline(
    ...,
    beam_pipeline_args=[...])

TFX 0.30 ขึ้นไปเพิ่มอินเทอร์เฟซ with_beam_pipeline_args สำหรับขยายขอบเขตลำแสงระดับไปป์ไลน์ต่อส่วนประกอบ

from tfx.components import CsvExampleGen
example_gen = CsvExampleGen(input_base=data_root).with_beam_pipeline_args([...])