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
veyabytes
.Işın ardışık düzeni için, tür ipucu açıklamasını
BeamComponentParameter[beam.Pipeline]
. Varsayılan değeriNone
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
veyabytes
) için ipucuT
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 yerineParameter
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
veyabytes
), bu çıktıları birOutputDict
örneği kullanarak döndürebilirsiniz. Bileşeninizin dönüş değeri olarakOutputDict
tür ipucunu uygulayın.Her çıktı için
<output_name>=<T>
bağımsız değişkeniniOutputDict
yapıcısına ekleyin; burada<output_name>
çıktı adıdır ve<T>
çıktı türüdür, örneğin:int
,float
,str
veyabytes
.
İş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.