Apache Beam ve TFX

Apache Beam, çeşitli yürütme motorlarında çalışan toplu ve akışlı veri işleme işlerini çalıştırmak için bir çerçeve sağlar. TFX kitaplıklarının birçoğu, görevleri yürütmek için Beam'i kullanır ve bu, bilgi işlem kümeleri arasında yüksek düzeyde ölçeklenebilirlik sağlar. Beam, tek bir hesaplama düğümünde çalışan ve geliştirme, test etme veya küçük dağıtımlar için çok yararlı olan doğrudan çalıştırıcı da dahil olmak üzere çeşitli yürütme motorları veya "çalıştırıcılar" için destek içerir. Beam, TFX'in desteklenen herhangi bir koşucuda kod değişikliği olmadan çalışmasını sağlayan bir soyutlama katmanı sağlar. TFX, Beam Python API'sini kullandığından Python API tarafından desteklenen koşucularla sınırlıdır.

Dağıtım ve Ölçeklenebilirlik

İş yükü gereksinimleri arttıkça Beam, büyük bilgi işlem kümeleri genelinde çok büyük dağıtımlara ölçeklenebilir. Bu yalnızca temel koşucunun ölçeklenebilirliği ile sınırlıdır. Büyük dağıtımlardaki çalıştırıcılar, uygulama dağıtımını, ölçeklendirmesini ve yönetimini otomatikleştirmek için genellikle Kubernetes veya Apache Mesos gibi bir konteyner düzenleme sistemine dağıtılacaktır.

Apache Beam hakkında daha fazla bilgi için Apache Beam belgelerine bakın.

Google Cloud kullanıcıları için, kaynakların otomatik ölçeklendirilmesi, dinamik iş dengeleme, diğer Google Cloud hizmetleriyle derin entegrasyon, yerleşik güvenlik ve izleme yoluyla sunucusuz ve uygun maliyetli bir platform sağlayan Dataflow , önerilen çalıştırıcıdır.

Özel Python Kodu ve Bağımlılıkları

Beam'i bir TFX kanalında kullanmanın dikkate değer karmaşıklıklarından biri, özel kodun ve/veya ek Python modüllerinden ihtiyaç duyulan bağımlılıkların yönetilmesidir. Bunun ne zaman sorun olabileceğine dair bazı örnekleri burada bulabilirsiniz:

  • preprocessing_fn'nin kullanıcının kendi Python modülüne başvurması gerekiyor
  • Evaluator bileşeni için özel bir çıkarıcı
  • TFX bileşeninden alt sınıflara ayrılan özel modüller

TFX, Python bağımlılıklarını yönetmek için Beam'in Python Pipeline Bağımlılıklarını Yönetme desteğine güveniyor. Şu anda bunu yönetmenin iki yolu var:

  1. Python Kodu ve Bağımlılıklarının Kaynak Paket Olarak Sağlanması
  2. [Yalnızca Dataflow] Kapsayıcı Görüntüsünü Çalışan Olarak Kullanma

Bunlar daha sonra tartışılacaktır.

Python Kodu ve Bağımlılıklarının Kaynak Paket Olarak Sağlanması

Bu, aşağıdaki özelliklere sahip kullanıcılar için önerilir:

  1. Python paketlemeye aşinadır ve
  2. Yalnızca Python kaynak kodunu kullanın (yani C modülleri veya paylaşılan kitaplıklar kullanmayın).

Aşağıdaki ışın_pipeline_args'dan birini kullanarak bunu sağlamak için lütfen Python Boru Hattı Bağımlılıklarını Yönetme bölümündeki yollardan birini izleyin:

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

Uyarı: Yukarıdaki durumların herhangi birinde, lütfen aynı tfx sürümünün bağımlılık olarak listelendiğinden emin olun.

[Yalnızca Dataflow] Bir Çalışan için Kapsayıcı Görüntüsü Kullanma

TFX 0.26.0 ve üzeri, Dataflow çalışanları için özel kapsayıcı görüntüsünün kullanılmasına yönelik deneysel desteğe sahiptir.

Bunu kullanmak için şunları yapmanız gerekir:

  • Hem tfx hem de kullanıcıların özel kodunun ve bağımlılıklarının önceden yüklendiği bir Docker görüntüsü oluşturun.
    • (1) tfx>=0.26 kullanan ve (2) işlem hatlarını geliştirmek için Python 3.7 kullanan kullanıcılar için bunu yapmanın en kolay yolu, resmi tensorflow/tfx görüntüsünün ilgili sürümünü genişletmektir:
# 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
  • Oluşturulan görüntüyü, Dataflow tarafından kullanılan proje tarafından erişilebilen bir kapsayıcı görüntü kaydına aktarın.
    • Google Cloud kullanıcıları, yukarıdaki adımları güzel bir şekilde otomatikleştiren Cloud Build'i kullanmayı düşünebilir.
  • Aşağıdaki beam_pipeline_args sağlayın:
beam_pipeline_args.extend([
    '--runner=DataflowRunner',
    '--project={project-id}',
    '--worker_harness_container_image={image-ref}',
    '--experiments=use_runner_v2',
])

YAPILACAKLAR(b/171733562): Dataflow için varsayılan olduğunda use_runner_v2'yi kaldırın.

YAPILACAKLAR(b/179738639): https://issues.Apache.org/jira/browse/BEAM-5440 sonrasında özel konteynerin yerel olarak nasıl test edileceğine ilişkin belgeler oluşturun

Kiriş Boru Hattı Tartışmaları

Birçok TFX bileşeni, dağıtılmış veri işleme için Beam'e güveniyor. İşlem hattı oluşturma sırasında belirtilen beam_pipeline_args ile yapılandırılırlar:

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

TFX 0.30 ve üzeri, bileşen başına ardışık düzen seviyesindeki ışın argümanlarını genişletmek için with_beam_pipeline_args bir arayüz ekler:

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