Özel Python işlevi bileşenleri

Python işlev tabanlı bileşen tanımı, bileşen belirtim sınıfı, yürütücü sınıfı ve bileşen arabirim sınıfı tanımlama zahmetinden kurtararak TFX özel bileşenleri oluşturmanızı kolaylaştırır. Bu bileşen tanımlama stilinde, tür ipuçlarıyla açıklamalı bir işlev yazarsınız. Tür ipuçları, bileşeninizin girdi yapılarını, çıktı yapılarını ve parametrelerini açıklar.

Özel bileşeninizi bu tarzda yazmak, aşağıdaki örnekte olduğu gibi çok basittir.

@component
def MyValidationComponent(
    model: InputArtifact[Model],
    blessing: OutputArtifact[Model],
    accuracy_threshold: Parameter[int] = 10,
    ) -> OutputDict(accuracy=float):
  '''My simple custom model validation component.'''

  accuracy = evaluate_model(model)
  if accuracy >= accuracy_threshold:
    write_output_blessing(blessing)

  return {
    'accuracy': accuracy
  }

Başlık altında, bu, BaseComponent ve onun Spec ve Executor sınıflarının bir alt sınıfı olan özel bir bileşeni tanımlar.

TFX-pipeline-wise paylaşılan konfigürasyonlu bir ışın ardışık düzenini kullanabileceğiniz bir BaseBeamComponent alt sınıfını tanımlamak istiyorsanız, yani, boru hattını derlerken beam_pipeline_args ( Chicago Taksi Boru Hattı Örneği ) dekoratörde use_beam=True yapabilir ve ekleyebilirsiniz. Aşağıdaki örnekte olduğu gibi, işlevinizde varsayılan değer None olan başka bir BeamComponentParameter :

@component(use_beam=True)
def MyDataProcessor(
    examples: InputArtifact[Example],
    processed_examples: OutputArtifact[Example],
    beam_pipeline: BeamComponentParameter[beam.Pipeline] = None,
    ) -> None:
  '''My simple custom model validation component.'''

  with beam_pipeline as p:
    # data pipeline definition with beam_pipeline begins
    ...
    # data pipeline definition with beam_pipeline ends

TFX işlem hatları konusunda yeniyseniz , TFX işlem hatlarının temel kavramları hakkında daha fazla bilgi edinin .

Girişler, çıkışlar ve parametreler

TFX'te girdiler ve çıktılar, temel alınan verilerle ilişkili meta veri özelliklerini ve konumunu tanımlayan Artifact nesneleri olarak izlenir; bu bilgiler ML Meta Verilerinde saklanır. Yapılar, karmaşık veri türlerini veya int, kayan nokta, bayt veya unicode dizeleri gibi basit veri türlerini tanımlayabilir.

Parametre, ardışık düzen oluşturma zamanında bilinen bir bileşenin bağımsız değişkenidir (int, kayan nokta, bayt veya unicode dizesi). Parametreler, bileşeninize yönelik eğitim yineleme sayısı, bırakma oranı ve diğer yapılandırmalar gibi bağımsız değişkenleri ve hiper parametreleri belirtmek için kullanışlıdır. Parametreler, ML Meta Verilerinde izlendiğinde bileşen yürütmelerinin özellikleri olarak depolanır.

Tanım

Özel bir bileşen oluşturmak için, özel mantığınızı uygulayan bir işlev yazın ve onu tfx.dsl.component.experimental.decorators modülünden @component dekoratörle süsleyin. Bileşeninizin giriş ve çıkış şemasını tanımlamak için, tfx.dsl.component.experimental.annotations modülündeki ek açıklamaları kullanarak işlevinizin bağımsız değişkenlerine açıklama ekleyin ve değeri döndürün:

  • Her yapı girdisi için InputArtifact[ArtifactType] tipi ipucu açıklamasını uygulayın. ArtifactType öğesini, tfx.types.Artifact bir alt sınıfı olan yapıtın türüyle değiştirin. Bu girdiler isteğe bağlı argümanlar olabilir.

  • Her çıktı yapıtı için OutputArtifact[ArtifactType] türü ipucu açıklamasını uygulayın. ArtifactType öğesini, tfx.types.Artifact bir alt sınıfı olan yapıtın türüyle değiştirin. Bileşeninizin çıktıları sistem tarafından yönetilen bir konuma yazabilmesi ve uygun yapıt meta veri özelliklerini ayarlayabilmesi için, bileşen çıktı yapıtları işlevin girdi bağımsız değişkenleri olarak iletilmelidir. Bu argüman isteğe bağlı olabilir veya bu argüman varsayılan bir değerle tanımlanabilir.

  • Her parametre için, tür ipucu açıklamasını Parameter[T] kullanın. T parametrenin türüyle değiştirin. Şu anda yalnızca ilkel python türlerini destekliyoruz: bool , int , float , str veya bytes .

  • Işın ardışık düzeni için, tür ipucu açıklamasını BeamComponentParameter[beam.Pipeline] . Varsayılan değeri None olarak ayarlayın. None değeri, BaseBeamExecutor _make_beam_pipeline() tarafından oluşturulan örneklenmiş bir ışın ardışık düzeni ile değiştirilecektir.

  • İşlem hattı oluşturma zamanında bilinmeyen her basit veri türü girişi ( int , float , str veya bytes ) için ipucu T türünü kullanın. TFX 0.22 sürümünde, bu tür girdiler için boru hattı yapım süresinde somut değerlerin iletilemeyeceğine dikkat edin (önceki bölümde açıklandığı gibi bunun yerine Parameter açıklamasını kullanın). Bu argüman isteğe bağlı olabilir veya bu argüman varsayılan bir değerle tanımlanabilir. Bileşeninizin basit veri türü çıktıları varsa ( int , float , str veya bytes ), bu çıktıları bir OutputDict örneği kullanarak döndürebilirsiniz. Bileşeninizin dönüş değeri olarak OutputDict tür ipucunu uygulayın.

  • Her çıktı için <output_name>=<T> bağımsız değişkenini OutputDict yapıcısına ekleyin; burada <output_name> çıktı adıdır ve <T> çıktı türüdür, örneğin: int , float , str veya bytes .

İşlevinizin gövdesinde, giriş ve çıkış yapıtları tfx.types.Artifact nesneleri olarak iletilir; sistem tarafından yönetilen konumunu almak ve tüm özellikleri okumak/ayarlamak için .uri inceleyebilirsiniz. Giriş parametreleri ve basit veri tipi girişleri, belirtilen tipte nesneler olarak iletilir. Basit veri türü çıktıları, anahtarların uygun çıktı adları ve değerlerin istenen dönüş değerleri olduğu bir sözlük olarak döndürülmelidir.

Tamamlanan işlev bileşeni şöyle görünebilir:

import tfx.v1 as tfx
from tfx.dsl.component.experimental.decorators import component

@component
def MyTrainerComponent(
    training_data: tfx.dsl.components.InputArtifact[tfx.types.standard_artifacts.Examples],
    model: tfx.dsl.components.OutputArtifact[tfx.types.standard_artifacts.Model],
    dropout_hyperparameter: float,
    num_iterations: tfx.dsl.components.Parameter[int] = 10
    ) -> tfx.v1.dsl.components.OutputDict(loss=float, accuracy=float):
  '''My simple trainer component.'''

  records = read_examples(training_data.uri)
  model_obj = train_model(records, num_iterations, dropout_hyperparameter)
  model_obj.write_to(model.uri)

  return {
    'loss': model_obj.loss,
    'accuracy': model_obj.accuracy
  }

# Example usage in a pipeline graph definition:
# ...
trainer = MyTrainerComponent(
    examples=example_gen.outputs['examples'],
    dropout_hyperparameter=other_component.outputs['dropout'],
    num_iterations=1000)
pusher = Pusher(model=trainer.outputs['model'])
# ...

Yukarıdaki örnek, MyTrainerComponent Python işlevi tabanlı bir özel bileşen olarak tanımlar. Bu bileşen, girdisi olarak bir examples yapıtını tüketir ve çıktısı olarak bir model yapıtını üretir. Bileşen, yapıyı sistem tarafından yönetilen konumunda okumak veya yazmak için artifact_instance.uri kullanır. Bileşen, bir num_iterations giriş parametresi ve bir dropout_hyperparameter basit veri türü değeri alır ve bileşen, loss ve accuracy ölçümlerini basit veri türü çıkış değerleri olarak çıkarır. Çıktı model artefaktı daha sonra Pusher bileşeni tarafından kullanılır.