Xây dựng đường ống TFX cục bộ

TFX giúp việc điều phối quy trình học máy (ML) của bạn dưới dạng một đường ống dễ dàng hơn để:

  • Tự động hóa quy trình ML của bạn, cho phép bạn thường xuyên đào tạo lại, đánh giá và triển khai mô hình của mình.
  • Tạo quy trình ML bao gồm phân tích sâu về hiệu suất mô hình và xác thực các mô hình mới được đào tạo để đảm bảo hiệu suất và độ tin cậy.
  • Giám sát dữ liệu đào tạo để phát hiện các điểm bất thường và loại bỏ sai lệch phục vụ đào tạo
  • Tăng tốc độ thử nghiệm bằng cách chạy một quy trình với các bộ siêu tham số khác nhau.

Một quy trình phát triển quy trình điển hình bắt đầu trên một máy cục bộ, với việc phân tích dữ liệu và thiết lập thành phần, trước khi triển khai vào sản xuất. Hướng dẫn này mô tả hai cách để xây dựng quy trình cục bộ.

  • Tùy chỉnh mẫu đường dẫn TFX để phù hợp với nhu cầu của quy trình làm việc ML của bạn. Mẫu đường dẫn TFX là các quy trình làm việc dựng sẵn thể hiện các phương pháp hay nhất bằng cách sử dụng các thành phần tiêu chuẩn TFX.
  • Xây dựng một đường ống bằng TFX. Trong trường hợp sử dụng này, bạn xác định quy trình mà không bắt đầu từ mẫu.

Khi bạn đang phát triển quy trình của mình, bạn có thể chạy nó với LocalDagRunner . Sau đó, khi các thành phần quy trình đã được xác định và thử nghiệm rõ ràng, bạn sẽ sử dụng bộ điều phối cấp sản xuất như Kubeflow hoặc Airflow.

Trước khi bạn bắt đầu

TFX là một gói Python, vì vậy bạn sẽ cần thiết lập môi trường phát triển Python, chẳng hạn như môi trường ảo hoặc vùng chứa Docker. Sau đó:

pip install tfx

Nếu bạn chưa quen với quy trình TFX, hãy tìm hiểu thêm về các khái niệm cốt lõi về quy trình TFX trước khi tiếp tục.

Xây dựng quy trình sử dụng mẫu

Mẫu quy trình TFX giúp bắt đầu phát triển quy trình dễ dàng hơn bằng cách cung cấp một bộ định nghĩa quy trình dựng sẵn mà bạn có thể tùy chỉnh cho trường hợp sử dụng của mình.

Các phần sau đây mô tả cách tạo bản sao của mẫu và tùy chỉnh mẫu đó để đáp ứng nhu cầu của bạn.

Tạo một bản sao của mẫu đường ống

  1. Xem danh sách các mẫu đường ống TFX có sẵn:

    tfx template list
    
  2. Chọn một mẫu từ danh sách

    tfx template copy --model=template --pipeline_name=pipeline-name \
    --destination_path=destination-path
    

    Thay thế như sau:

    • template : Tên của mẫu bạn muốn sao chép.
    • pipeline-name : Tên của đường ống cần tạo.
    • destination-path : Đường dẫn để sao chép mẫu vào.

    Tìm hiểu thêm về lệnh tfx template copy .

  3. Một bản sao của mẫu quy trình đã được tạo tại đường dẫn bạn đã chỉ định.

Khám phá mẫu quy trình

Phần này cung cấp cái nhìn tổng quan về giàn giáo được tạo bởi một mẫu.

  1. Khám phá các thư mục và tệp đã được sao chép vào thư mục gốc của đường dẫn của bạn

    • Một thư mục đường ống với
      • pipeline.py - xác định đường dẫn và liệt kê các thành phần nào đang được sử dụng
      • configs.py - giữ chi tiết cấu hình như dữ liệu đến từ đâu hoặc bộ điều phối nào đang được sử dụng
    • Một thư mục dữ liệu
      • Tệp này thường chứa tệp data.csv , là nguồn mặc định cho ExampleGen . Bạn có thể thay đổi nguồn dữ liệu trong configs.py .
    • Một thư mục mô hình với mã tiền xử lý và triển khai mô hình

    • Mẫu sao chép các trình chạy DAG cho môi trường cục bộ và Kubeflow.

    • Một số mẫu cũng bao gồm Sổ ghi chép Python để bạn có thể khám phá dữ liệu và tạo phẩm của mình bằng Siêu dữ liệu Machine Learning.

  2. Chạy các lệnh sau trong thư mục đường dẫn của bạn:

    tfx pipeline create --pipeline_path local_runner.py
    
    tfx run create --pipeline_name pipeline_name
    

    Lệnh tạo một đường dẫn chạy bằng cách sử dụng LocalDagRunner , lệnh này sẽ thêm các thư mục sau vào đường dẫn của bạn:

    • Thư mục tfx_metadata chứa kho siêu dữ liệu ML được sử dụng cục bộ.
    • Thư mục tfx_pipeline_output chứa các kết quả đầu ra tệp của đường ống.
  3. Mở tệp pipeline/configs.py của đường dẫn của bạn và xem lại nội dung. Tập lệnh này xác định các tùy chọn cấu hình được sử dụng bởi đường dẫn và các hàm thành phần. Đây là nơi bạn sẽ chỉ định những thứ như vị trí của nguồn dữ liệu hoặc số bước huấn luyện trong một lần chạy.

  4. Mở tệp pipeline/pipeline.py của đường dẫn của bạn và xem lại nội dung. Tập lệnh này tạo đường dẫn TFX. Ban đầu, đường dẫn chỉ chứa thành phần ExampleGen .

    • Làm theo hướng dẫn trong nhận xét TODO trong pipeline.py để thêm các bước khác vào quy trình.
  5. Mở tệp local_runner.py và xem lại nội dung. Tập lệnh này tạo một lần chạy quy trình và chỉ định các tham số của lần chạy, chẳng hạn như data_pathpreprocessing_fn .

  6. Bạn đã xem lại giàn giáo được tạo bởi mẫu và tạo một quy trình chạy bằng cách sử dụng LocalDagRunner . Tiếp theo, tùy chỉnh mẫu để phù hợp với yêu cầu của bạn.

Tùy chỉnh đường dẫn của bạn

Phần này cung cấp thông tin tổng quan về cách bắt đầu tùy chỉnh mẫu của bạn.

  1. Thiết kế đường ống của bạn. Khung mà mẫu cung cấp giúp bạn triển khai quy trình cho dữ liệu dạng bảng bằng cách sử dụng các thành phần tiêu chuẩn TFX. Nếu bạn đang chuyển quy trình làm việc ML hiện có thành một quy trình, bạn có thể cần phải sửa lại mã của mình để tận dụng tối đa các thành phần tiêu chuẩn TFX . Bạn cũng có thể cần tạo các thành phần tùy chỉnh để triển khai các tính năng dành riêng cho quy trình làm việc của mình hoặc chưa được các thành phần tiêu chuẩn TFX hỗ trợ.

  2. Khi bạn đã thiết kế quy trình của mình, hãy tùy chỉnh quy trình nhiều lần bằng cách sử dụng quy trình sau. Bắt đầu từ thành phần nhập dữ liệu vào quy trình của bạn, thường là thành phần ExampleGen .

    1. Tùy chỉnh quy trình hoặc thành phần để phù hợp với trường hợp sử dụng của bạn. Những tùy chỉnh này có thể bao gồm những thay đổi như:

      • Thay đổi các thông số đường ống.
      • Thêm các thành phần vào quy trình hoặc loại bỏ chúng.
      • Thay thế nguồn đầu vào dữ liệu. Nguồn dữ liệu này có thể là tệp hoặc truy vấn vào các dịch vụ như BigQuery.
      • Thay đổi cấu hình của một thành phần trong đường ống.
      • Thay đổi chức năng tùy chỉnh của một thành phần.
    2. Chạy thành phần cục bộ bằng cách sử dụng tập lệnh local_runner.py hoặc trình chạy DAG thích hợp khác nếu bạn đang sử dụng một trình điều phối khác. Nếu tập lệnh không thành công, hãy gỡ lỗi và thử chạy lại tập lệnh.

    3. Khi tùy chỉnh này hoạt động, hãy chuyển sang tùy chỉnh tiếp theo.

  3. Làm việc lặp đi lặp lại, bạn có thể tùy chỉnh từng bước trong quy trình làm việc của mẫu để đáp ứng nhu cầu của mình.

Xây dựng một đường ống tùy chỉnh

Hãy sử dụng các hướng dẫn sau để tìm hiểu thêm về cách xây dựng quy trình tùy chỉnh mà không cần sử dụng mẫu.

  1. Thiết kế đường ống của bạn. Các thành phần tiêu chuẩn TFX cung cấp chức năng đã được chứng minh để giúp bạn triển khai quy trình làm việc ML hoàn chỉnh. Nếu bạn đang di chuyển quy trình làm việc ML hiện có vào một quy trình, bạn có thể cần phải sửa lại mã của mình để tận dụng tối đa các thành phần tiêu chuẩn TFX. Bạn cũng có thể cần tạo các thành phần tùy chỉnh để triển khai các tính năng như tăng cường dữ liệu.

  2. Tạo một tệp tập lệnh để xác định quy trình của bạn bằng ví dụ sau. Hướng dẫn này gọi tệp này là my_pipeline.py .

    import os
    from typing import Optional, Text, List
    from absl import logging
    from ml_metadata.proto import metadata_store_pb2
    import tfx.v1 as tfx
    
    PIPELINE_NAME = 'my_pipeline'
    PIPELINE_ROOT = os.path.join('.', 'my_pipeline_output')
    METADATA_PATH = os.path.join('.', 'tfx_metadata', PIPELINE_NAME, 'metadata.db')
    ENABLE_CACHE = True
    
    def create_pipeline(
      pipeline_name: Text,
      pipeline_root:Text,
      enable_cache: bool,
      metadata_connection_config: Optional[
        metadata_store_pb2.ConnectionConfig] = None,
      beam_pipeline_args: Optional[List[Text]] = None
    ):
      components = []
    
      return tfx.dsl.Pipeline(
            pipeline_name=pipeline_name,
            pipeline_root=pipeline_root,
            components=components,
            enable_cache=enable_cache,
            metadata_connection_config=metadata_connection_config,
            beam_pipeline_args=beam_pipeline_args, <!-- needed? -->
        )
    
    def run_pipeline():
      my_pipeline = create_pipeline(
          pipeline_name=PIPELINE_NAME,
          pipeline_root=PIPELINE_ROOT,
          enable_cache=ENABLE_CACHE,
          metadata_connection_config=tfx.orchestration.metadata.sqlite_metadata_connection_config(METADATA_PATH)
          )
    
      tfx.orchestration.LocalDagRunner().run(my_pipeline)
    
    if __name__ == '__main__':
      logging.set_verbosity(logging.INFO)
      run_pipeline()

    Trong các bước tiếp theo, bạn xác định đường dẫn của mình trong create_pipeline và chạy đường dẫn cục bộ bằng cách sử dụng trình chạy cục bộ.

    Lặp lại việc xây dựng quy trình của bạn bằng quy trình sau.

    1. Tùy chỉnh quy trình hoặc thành phần để phù hợp với trường hợp sử dụng của bạn. Những tùy chỉnh này có thể bao gồm những thay đổi như:

      • Thay đổi các thông số đường ống.
      • Thêm các thành phần vào quy trình hoặc loại bỏ chúng.
      • Thay thế một tập tin đầu vào dữ liệu.
      • Thay đổi cấu hình của một thành phần trong đường ống.
      • Thay đổi chức năng tùy chỉnh của một thành phần.
    2. Chạy thành phần cục bộ bằng cách sử dụng trình chạy cục bộ hoặc bằng cách chạy tập lệnh trực tiếp. Nếu tập lệnh không thành công, hãy gỡ lỗi và thử chạy lại tập lệnh.

    3. Khi tùy chỉnh này hoạt động, hãy chuyển sang tùy chỉnh tiếp theo.

    Bắt đầu từ nút đầu tiên trong quy trình làm việc của quy trình, thường là nút đầu tiên nhập dữ liệu vào quy trình của bạn.

  3. Thêm nút đầu tiên trong quy trình làm việc vào quy trình của bạn. Trong ví dụ này, quy trình sử dụng thành phần tiêu chuẩn ExampleGen để tải CSV từ thư mục tại ./data .

    from tfx.components import CsvExampleGen
    
    DATA_PATH = os.path.join('.', 'data')
    
    def create_pipeline(
      pipeline_name: Text,
      pipeline_root:Text,
      data_path: Text,
      enable_cache: bool,
      metadata_connection_config: Optional[
        metadata_store_pb2.ConnectionConfig] = None,
      beam_pipeline_args: Optional[List[Text]] = None
    ):
      components = []
    
      example_gen = tfx.components.CsvExampleGen(input_base=data_path)
      components.append(example_gen)
    
      return tfx.dsl.Pipeline(
            pipeline_name=pipeline_name,
            pipeline_root=pipeline_root,
            components=components,
            enable_cache=enable_cache,
            metadata_connection_config=metadata_connection_config,
            beam_pipeline_args=beam_pipeline_args, <!-- needed? -->
        )
    
    def run_pipeline():
      my_pipeline = create_pipeline(
        pipeline_name=PIPELINE_NAME,
        pipeline_root=PIPELINE_ROOT,
        data_path=DATA_PATH,
        enable_cache=ENABLE_CACHE,
        metadata_connection_config=tfx.orchestration.metadata.sqlite_metadata_connection_config(METADATA_PATH)
        )
    
      tfx.orchestration.LocalDagRunner().run(my_pipeline)

    CsvExampleGen tạo các bản ghi ví dụ được tuần tự hóa bằng cách sử dụng dữ liệu trong CSV theo đường dẫn dữ liệu đã chỉ định. Bằng cách đặt tham số input_base của thành phần CsvExampleGen bằng gốc dữ liệu.

  4. Tạo một thư mục data trong cùng thư mục với my_pipeline.py . Thêm một tệp CSV nhỏ vào thư mục data .

  5. Sử dụng lệnh sau để chạy tập lệnh my_pipeline.py của bạn.

    python my_pipeline.py
    

    Kết quả sẽ giống như sau:

    INFO:absl:Component CsvExampleGen depends on [].
    INFO:absl:Component CsvExampleGen is scheduled.
    INFO:absl:Component CsvExampleGen is running.
    INFO:absl:Running driver for CsvExampleGen
    INFO:absl:MetadataStore with DB connection initialized
    INFO:absl:Running executor for CsvExampleGen
    INFO:absl:Generating examples.
    INFO:absl:Using 1 process(es) for Local pipeline execution.
    INFO:absl:Processing input csv data ./data/* to TFExample.
    WARNING:root:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.
    INFO:absl:Examples generated.
    INFO:absl:Running publisher for CsvExampleGen
    INFO:absl:MetadataStore with DB connection initialized
    INFO:absl:Component CsvExampleGen is finished.
    
  6. Tiếp tục thêm các thành phần vào quy trình của bạn theo cách lặp đi lặp lại.