Özel Python işlev bileşenleri

Python işlev tabanlı bileşen tanımı, sizi bir bileşen belirtimi sınıfı, yürütücü sınıfı ve bileşen arayüz 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 giriş yapıtlarını, çıktı yapıtlarını ve parametrelerini açıklar.

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

class MyOutput(TypedDict):
  accuracy: float

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

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

  return {
    'accuracy': accuracy
  }

Temel olarak bu, BaseComponent ve onun Spec ve Executor sınıflarının bir alt sınıfı olan özel bir bileşeni tanımlar.

BaseBeamComponent bir alt sınıfını, TFX boru hattı bazında paylaşımlı konfigürasyona sahip bir ışın boru hattını (örneğin, boru hattını derlerken beam_pipeline_args kullanabileceğiniz şekilde tanımlamak istiyorsanız ( Chicago Taksi Boru Hattı Örneği ), dekoratörde use_beam=True ayarını yapabilir ve ekleyebilirsiniz. Aşağıdaki örnekte, fonksiyonunuzda varsayılan değer None olan başka bir BeamComponentParameter vardır:

@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ına ilişkin temel kavramlar hakkında daha fazla bilgi edinin .

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

TFX'te girdiler ve çıktılar, temeldeki 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, float, bytes veya unicode dizeleri gibi basit veri türlerini tanımlayabilir.

Bir parametre, işlem hattı inşaatı sırasında bilinen bir bileşene yönelik bir argümandır (int, float, bytes veya unicode dize). Parametreler, eğitim yineleme sayısı, bırakma oranı ve bileşeninize yönelik 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 izlendiklerinde 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 bunu tfx.dsl.component.experimental.decorators modülündeki @component dekoratörüyle 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 ve dönüş değerine açıklama ekleyin:

  • Her yapay girdi için, InputArtifact[ArtifactType] türü ipucu açıklamasını uygulayın. ArtifactType öğesini, tfx.types.Artifact öğesinin bir alt sınıfı olan yapıtın türüyle değiştirin. Bu girişler 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 öğesinin bir alt sınıfı olan yapıtın türüyle değiştirin. Bileşen çıktı yapıtlarının, işlevin giriş bağımsız değişkenleri olarak iletilmesi gerekir; böylece bileşeniniz, çıktıları sistem tarafından yönetilen bir konuma yazabilir ve uygun yapay yapı meta veri özelliklerini ayarlayabilir. Bu argüman isteğe bağlı olabilir veya bu argüman varsayılan bir değerle tanımlanabilir.

  • Her parametre için, ipucu açıklaması Parameter[T] türünü 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 boru hattı için BeamComponentParameter[beam.Pipeline] tür ipucu ek açıklamasını kullanın. Varsayılan değeri None olarak ayarlayın. None değeri, BaseBeamExecutor _make_beam_pipeline() tarafından oluşturulan örneklenmiş bir ışın hattı ile değiştirilecektir.

  • İşlem hattı inşaatı sırası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 bir girdi için boru hattı inşaatı sırasında somut değerlerin aktarılamayacağını unutmayın (bunun yerine önceki bölümde açıklandığı gibi Parameter ek 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şeninizde basit veri türü çıktıları ( int , float , str veya bytes ) varsa, bu çıktıları, dönüş türü açıklaması olarak TypedDict kullanarak ve uygun bir dict nesnesi döndürerek döndürebilirsiniz.

İşlevinizin gövdesinde, giriş ve çıkış yapıtları tfx.types.Artifact nesneleri olarak iletilir; sistem tarafından yönetilen konumunu almak ve herhangi bir özelliği okumak/ayarlamak için .uri dosyasını inceleyebilirsiniz. Giriş parametreleri ve basit veri türü girişleri, belirtilen türdeki 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 fonksiyon bileşeni şu şekilde görünebilir:

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

class MyOutput(TypedDict):
  loss: float
  accuracy: float

@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
) -> MyOutput:
  '''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'])
# ...

Önceki örnek, MyTrainerComponent Python işlevi tabanlı özel bir bileşen olarak tanımlar. Bu bileşen, girdi olarak bir examples yapıt kullanır ve çıktı olarak bir model yapıt üretir. Bileşen, yapıtı sistem tarafından yönetilen konumunda okumak veya yazmak için artifact_instance.uri dosyasını 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. Çıkış model yapısı daha sonra Pusher bileşeni tarafından kullanılır.