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:
- Python Kodu ve Bağımlılıklarının Kaynak Paket Olarak Sağlanması
- [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:
- Python paketlemeye aşinadır ve
- 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
tfxhem 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.26kullanan 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/tfxgörüntüsünün ilgili sürümünü genişletmektir:
- (1)
# 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_argssağ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([...])