SIG TFX-Addons topluluğuna katılın ve TFX'in daha da iyi olmasına yardımcı olun! SIG TFX Eklentilerine Katılın

ML Meta Verileri

ML Meta veri (MLMD) ML geliştirici ve veri bilim iş akışları ile ilgili meta kayıt ve almak için bir kütüphanedir. MLMD ayrılmaz bir parçası olan (TFX) Genişletilmiş TensorFlow fakat bağımsız olarak kullanılabilir ve böylece tasarlanmıştır.

Bir üretim ML işlem hattının her çalıştırması, çeşitli işlem hattı bileşenleri, bunların yürütmeleri (örneğin eğitim çalıştırmaları) ve sonuçta ortaya çıkan eserler (örneğin eğitilmiş modeller) hakkında bilgi içeren meta veriler üretir. Beklenmeyen işlem hattı davranışı veya hataları durumunda, bu meta veriler, işlem hattı bileşenlerinin kökenini analiz etmek ve hata ayıklama sorunları için kullanılabilir. Bu meta verileri, yazılım geliştirmede oturum açmaya eşdeğer olarak düşünün.

MLMD, ML işlem hattınızın birbirine bağlı tüm parçalarını ayrı ayrı analiz etmek yerine anlamanıza ve analiz etmenize yardımcı olur ve ML işlem hattınızla ilgili aşağıdaki gibi soruları yanıtlamanıza yardımcı olabilir:

  • Model hangi veri kümesinde eğitim aldı?
  • Modeli eğitmek için kullanılan hiperparametreler nelerdi?
  • Modeli hangi işlem hattı çalıştırması oluşturdu?
  • Hangi eğitim çalışması bu modele yol açtı?
  • Bu modeli hangi TensorFlow sürümü oluşturdu?
  • Başarısız model ne zaman itildi?

Meta veri deposu

MLMD Meta Veri Deposu adında bir veritabanında meta veri aşağıdaki türde kaydeder.

  1. ML ardışık düzenlerinizin bileşenleri/adımları aracılığıyla oluşturulan yapılar hakkında meta veriler
  2. Bu bileşenlerin/adımların yürütülmesiyle ilgili meta veriler
  3. İşlem hatları ve ilişkili köken bilgileri hakkında meta veriler

Meta Veri Deposu, depolama arka ucuna meta verileri kaydetmek ve almak için API'ler sağlar. Depolama arka ucu takılabilir ve genişletilebilir. MLMD, SQLite (bellek içi ve diski destekler) ve kullanıma hazır MySQL için referans uygulamaları sağlar.

Bu grafik, MLMD'nin parçası olan çeşitli bileşenlerin üst düzey bir genel görünümünü gösterir.

ML Meta Verilerine Genel Bakış

Meta veri depolama arka uçları ve mağaza bağlantısı yapılandırması

MetadataStore amacı ise, saklama için karşılık kullanılan arka uç bir bağlantı tasarımına sahip alır.

  • Sahte Veritabanı hızlı deneyler ve yerel ishal için bir bellek içi DB (SQLite kullanarak) sağlar. Depo nesnesi yok edildiğinde veritabanı silinir.
import ml_metadata as mlmd
from ml_metadata.metadata_store import metadata_store
from ml_metadata.proto import metadata_store_pb2

connection_config = metadata_store_pb2.ConnectionConfig()
connection_config.fake_database.SetInParent() # Sets an empty fake database proto.
store = metadata_store.MetadataStore(connection_config)
  • SQLite okur ve diskten dosyaları yazar.
connection_config = metadata_store_pb2.ConnectionConfig()
connection_config.sqlite.filename_uri = '...'
connection_config.sqlite.connection_mode = 3 # READWRITE_OPENCREATE
store = metadata_store.MetadataStore(connection_config)
  • MySQL MySQL sunucusuna bağlanır.
connection_config = metadata_store_pb2.ConnectionConfig()
connection_config.mysql.host = '...'
connection_config.mysql.port = '...'
connection_config.mysql.database = '...'
connection_config.mysql.user = '...'
connection_config.mysql.password = '...'
store = metadata_store.MetadataStore(connection_config)

Google CloudSQL (ile MySQL örneği kullanırken Benzer şekilde, hızlı başlangıç , bağlantı-bakış ), bir de SSL seçeneği varsa kullanabilirsiniz.

connection_config.mysql.ssl_options.key = '...'
connection_config.mysql.ssl_options.cert = '...'
connection_config.mysql.ssl_options.ca = '...'
connection_config.mysql.ssl_options.capath = '...'
connection_config.mysql.ssl_options.cipher = '...'
connection_config.mysql.ssl_options.verify_server_cert = '...'
store = metadata_store.MetadataStore(connection_config)

Veri örneği

Meta Veri Deposu, depolama arka ucundan meta verileri kaydetmek ve almak için aşağıdaki veri modelini kullanır.

  • ArtifactType meta deposunda saklanan bir obje türünü ve özelliklerini açıklar. Bu türleri koddaki meta veri deposuyla anında kaydedebilir veya bunları mağazaya serileştirilmiş bir biçimde yükleyebilirsiniz. Bir tür kaydettikten sonra, tanımı mağazanın ömrü boyunca kullanılabilir.
  • Bir Artifact bir belirli bir örneğini açıklar ArtifactType ve özellikleri meta deposuna yazıldığını.
  • Bir ExecutionType bir iş akışı bileşen veya adımının bir türü tarif etmektedir, ve çalışma parametreleridir.
  • Bir Execution bileşen vadede rekor veya ML iş akışı ve çalışma zamanı parametrelerinde bir adımdır. Bir uygulama bir örneği olarak düşünülebilir ExecutionType . Bir ML ardışık düzeni veya adımı çalıştırdığınızda, yürütmeler kaydedilir.
  • Bir Event eserler ve infaz arasındaki ilişkinin bir kaydıdır. Bir yürütme gerçekleştiğinde, olaylar yürütme tarafından kullanılan her eseri ve üretilen her eseri kaydeder. Bu kayıtlar, bir iş akışı boyunca köken takibine izin verir. MLMD, tüm olaylara bakarak, hangi infazların gerçekleştiğini ve bunun sonucunda hangi eserlerin yaratıldığını bilir. MLMD daha sonra herhangi bir yapıdan tüm yukarı akış girişlerine geri dönebilir.
  • Bir ContextType bir iş akışı eser ve infaz kavramsal grubu ve yapısal özellikleri bir türü tarif etmektedir. Örneğin: projeler, işlem hattı çalıştırmaları, deneyler, sahipler vb.
  • Bir Context bir örneğidir ContextType . Grup içinde paylaşılan bilgileri yakalar. Örnek: proje adı, kimliği işlemek değişiklik listesi, deneme ek açıklamalar vb Onun içinde bir kullanıcı tanımlı benzersiz bir adı vardır ContextType .
  • Bir Attribution eserler ve bağlamlar arasındaki ilişkinin bir kaydıdır.
  • Bir Association infaz ve bağlamlar arasındaki ilişkinin bir kaydıdır.

MLMD İşlevselliği

Bir ML iş akışındaki tüm bileşenlerin/adımların giriş ve çıkışlarını ve bunların kökenini izlemek, ML platformlarının birkaç önemli özelliği etkinleştirmesine olanak tanır. Aşağıdaki liste, bazı önemli faydalara ilişkin kapsamlı olmayan bir genel bakış sağlar.

  • Belirli bir türdeki tüm Eserleri listeleyin. Örnek: eğitilmiş tüm Modeller.
  • Karşılaştırma için aynı türden iki Eser yükleyin. Örnek: iki deneyden elde edilen sonuçları karşılaştırın.
  • Tüm ilgili yürütmelerin bir DAG'sini ve bir bağlamın girdi ve çıktı yapılarını gösterin. Örnek: hata ayıklama ve keşif için bir denemenin iş akışını görselleştirin.
  • Bir yapıtın nasıl oluşturulduğunu görmek için tüm olayları tekrar gözden geçirin. Örnekler: bir modele hangi verilerin girdiğini görün; veri saklama planlarını uygulamak.
  • Belirli bir yapı kullanılarak oluşturulan tüm yapıtları tanımlayın. Örnekler: belirli bir veri kümesinden eğitilen tüm Modellere bakın; modelleri kötü verilere dayalı olarak işaretleyin.
  • Daha önce aynı girişlerde bir yürütmenin yürütülüp yürütülmediğini belirleyin. Örnek: Bir bileşenin/adımın aynı işi tamamlayıp tamamlamadığını ve önceki çıktının yeniden kullanılabilir olup olmadığını belirleyin.
  • İş akışı çalıştırmalarının bağlamını kaydedin ve sorgulayın. Örnekler: bir iş akışı çalıştırması için kullanılan sahibi ve değişiklik listesini izleyin; soyu deneylerle gruplandırın; projeleri projelere göre yönetin.

Bkz MLMD öğretici gösterir size soy bilgilerini almak için MLMD API ve veriler belleğine nasıl kullanılacağı o bir örnek için.

ML Meta Verilerini ML İş Akışlarınıza entegre edin

MLMD'yi sisteminize entegre etmekle ilgilenen bir platform geliştiricisiyseniz, bir eğitim görevinin yürütülmesini izlemek için düşük seviyeli MLMD API'lerini kullanmak için aşağıdaki örnek iş akışını kullanın. Deneme meta verilerini kaydetmek için dizüstü bilgisayar ortamlarında daha yüksek seviyeli Python API'lerini de kullanabilirsiniz.

ML Meta Veri Örnek Akışı

1) Yapıt türlerini kaydedin

# Create ArtifactTypes, e.g., Data and Model
data_type = metadata_store_pb2.ArtifactType()
data_type.name = "DataSet"
data_type.properties["day"] = metadata_store_pb2.INT
data_type.properties["split"] = metadata_store_pb2.STRING
data_type_id = store.put_artifact_type(data_type)

model_type = metadata_store_pb2.ArtifactType()
model_type.name = "SavedModel"
model_type.properties["version"] = metadata_store_pb2.INT
model_type.properties["name"] = metadata_store_pb2.STRING
model_type_id = store.put_artifact_type(model_type)

# Query all registered Artifact types.
artifact_types = store.get_artifact_types()

2) Makine öğrenimi iş akışındaki tüm adımlar için yürütme türlerini kaydedin

# Create an ExecutionType, e.g., Trainer
trainer_type = metadata_store_pb2.ExecutionType()
trainer_type.name = "Trainer"
trainer_type.properties["state"] = metadata_store_pb2.STRING
trainer_type_id = store.put_execution_type(trainer_type)

# Query a registered Execution type with the returned id
[registered_type] = store.get_execution_types_by_id([trainer_type_id])

3) DataSet ArtifactType'ın bir yapıtını oluşturun

# Create an input artifact of type DataSet
data_artifact = metadata_store_pb2.Artifact()
data_artifact.uri = 'path/to/data'
data_artifact.properties["day"].int_value = 1
data_artifact.properties["split"].string_value = 'train'
data_artifact.type_id = data_type_id
[data_artifact_id] = store.put_artifacts([data_artifact])

# Query all registered Artifacts
artifacts = store.get_artifacts()

# Plus, there are many ways to query the same Artifact
[stored_data_artifact] = store.get_artifacts_by_id([data_artifact_id])
artifacts_with_uri = store.get_artifacts_by_uri(data_artifact.uri)

4) Trainer çalışmasının bir yürütmesini oluşturun

# Register the Execution of a Trainer run
trainer_run = metadata_store_pb2.Execution()
trainer_run.type_id = trainer_type_id
trainer_run.properties["state"].string_value = "RUNNING"
[run_id] = store.put_executions([trainer_run])

# Query all registered Execution
executions = store.get_executions_by_id([run_id])

5) Giriş olayını tanımlayın ve verileri okuyun

# Define the input event
input_event = metadata_store_pb2.Event()
input_event.artifact_id = data_artifact_id
input_event.execution_id = run_id
input_event.type = metadata_store_pb2.Event.DECLARED_INPUT

# Record the input event in the metadata store
store.put_events([input_event])

6) Çıktı eserini bildirin

# Declare the output artifact of type SavedModel
model_artifact = metadata_store_pb2.Artifact()
model_artifact.uri = 'path/to/model/file'
model_artifact.properties["version"].int_value = 1
model_artifact.properties["name"].string_value = 'MNIST-v1'
model_artifact.type_id = model_type_id
[model_artifact_id] = store.put_artifacts([model_artifact])

7) Çıkış olayını kaydedin

# Declare the output event
output_event = metadata_store_pb2.Event()
output_event.artifact_id = model_artifact_id
output_event.execution_id = run_id
output_event.type = metadata_store_pb2.Event.DECLARED_OUTPUT

# Submit output event to the Metadata Store
store.put_events([output_event])

8) Yürütmeyi tamamlandı olarak işaretleyin

trainer_run.id = run_id
trainer_run.properties["state"].string_value = "COMPLETED"
store.put_executions([trainer_run])

9) Yapıları ve yürütmeleri, nitelikler ve iddialar yapıtlarını kullanarak bir bağlam altında gruplayın

# Create a ContextType, e.g., Experiment with a note property
experiment_type = metadata_store_pb2.ContextType()
experiment_type.name = "Experiment"
experiment_type.properties["note"] = metadata_store_pb2.STRING
experiment_type_id = store.put_context_type(experiment_type)

# Group the model and the trainer run to an experiment.
my_experiment = metadata_store_pb2.Context()
my_experiment.type_id = experiment_type_id
# Give the experiment a name
my_experiment.name = "exp1"
my_experiment.properties["note"].string_value = "My first experiment."
[experiment_id] = store.put_contexts([my_experiment])

attribution = metadata_store_pb2.Attribution()
attribution.artifact_id = model_artifact_id
attribution.context_id = experiment_id

association = metadata_store_pb2.Association()
association.execution_id = run_id
association.context_id = experiment_id

store.put_attributions_and_associations([attribution], [association])

# Query the Artifacts and Executions that are linked to the Context.
experiment_artifacts = store.get_artifacts_by_context(experiment_id)
experiment_executions = store.get_executions_by_context(experiment_id)

MLMD'yi uzak bir gRPC sunucusuyla kullanma

MLMD'yi uzak gRPC sunucularıyla aşağıda gösterildiği gibi kullanabilirsiniz:

  • bir sunucu başlat
bazel run -c opt --define grpc_no_ares=true  //ml_metadata/metadata_store:metadata_store_server

Varsayılan olarak, sunucu istek başına sahte bir bellek içi db kullanır ve meta verileri çağrılar arasında kalıcı hale getirmez. Aynı zamanda bir MLMD ile yapılandırılabilir MetadataStoreServerConfig SQLite dosyaları veya MySQL örneklerini kullanmak. Yapılandırma Bir metin protobuf dosyasında saklanır ve birlikte ikili geçirilebilir --metadata_store_server_config_file=path_to_the_config_file .

Bir örnek MetadataStoreServerConfig metin protobuf formatında dosyası:

connection_config {
  sqlite {
    filename_uri: '/tmp/test_db'
    connection_mode: READWRITE_OPENCREATE
  }
}
  • İstemci saplamasını oluşturun ve Python'da kullanın
from grpc import insecure_channel
from ml_metadata.proto import metadata_store_pb2
from ml_metadata.proto import metadata_store_service_pb2
from ml_metadata.proto import metadata_store_service_pb2_grpc

channel = insecure_channel('localhost:8080')
stub = metadata_store_service_pb2_grpc.MetadataStoreServiceStub(channel)
  • MLMD'yi RPC çağrılarıyla kullanma
# Create ArtifactTypes, e.g., Data and Model
data_type = metadata_store_pb2.ArtifactType()
data_type.name = "DataSet"
data_type.properties["day"] = metadata_store_pb2.INT
data_type.properties["split"] = metadata_store_pb2.STRING

request = metadata_store_service_pb2.PutArtifactTypeRequest()
request.all_fields_match = True
request.artifact_type.CopyFrom(data_type)
stub.PutArtifactType(request)

model_type = metadata_store_pb2.ArtifactType()
model_type.name = "SavedModel"
model_type.properties["version"] = metadata_store_pb2.INT
model_type.properties["name"] = metadata_store_pb2.STRING

request.artifact_type.CopyFrom(model_type)
stub.PutArtifactType(request)

Kaynaklar

MLMD kitaplığı, ML ardışık düzenlerinizle kolayca kullanabileceğiniz yüksek düzeyli bir API'ye sahiptir. Bkz MLMD API belgelerine fazla ayrıntı için.

Ayrıca kontrol MLMD öğretici sizin boru hattı bileşenlerinin soyunu izlemek için MLMD kullanmayı öğrenmek için.

MLMD, sürümler arasında şema ve veri geçişlerini işlemek için yardımcı programlar sağlar. MLMD Bkz Kılavuzu'na fazla ayrıntı için.