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
,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
,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
veyabytes
.Işın boru hattı için
BeamComponentParameter[beam.Pipeline]
tür ipucu ek açıklamasını kullanın. Varsayılan değeriNone
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
veyabytes
) için ipucuT
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ığı gibiParameter
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
veyabytes
) varsa, bu çıktıları, dönüş türü açıklaması olarakTypedDict
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 şöyle 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.