ML Meta Verileri (MLMD) , ML geliştiricisi ve veri bilimcisi iş akışlarıyla ilişkili meta verileri kaydetmek ve almak için bir kitaplıktır. MLMD, TensorFlow Extended'ın (TFX) ayrılmaz bir parçasıdır, ancak bağımsız olarak kullanılabilecek şekilde 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, işlem hattı bileşenlerinin kökenini analiz etmek ve hata ayıklama sorunları için bu meta verilerden yararlanı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 adlı bir veritabanına aşağıdaki meta veri türlerini kaydeder.
- ML ardışık düzenlerinizin bileşenleri/adımları aracılığıyla oluşturulan yapılar hakkında meta veriler
- Bu bileşenlerin/adımların yürütülmesiyle ilgili meta veriler
- İş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.
Meta veri depolama arka uçları ve mağaza bağlantısı yapılandırması
MetadataStore
nesnesi, kullanılan depolama arka ucuna karşılık gelen bir bağlantı yapılandırması alır.
- Sahte Veritabanı , hızlı deneme ve yerel çalıştırmalar 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 dosyaları diskten okur ve 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 , bir 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)
Benzer şekilde, Google CloudSQL ile bir MySQL örneği kullanırken ( hızlı başlangıç , bağlantı-genel bakış ), varsa SSL seçeneği de kullanılabilir.
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
, bir yapıtın türünü ve meta veri deposunda depolanan ö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. -
Artifact
, belirli birArtifactType
örneğini ve meta veri deposuna yazılan özelliklerini açıklar. -
ExecutionType
, iş akışındaki bir bileşen veya adım türünü ve çalışma zamanı parametrelerini açıklar. -
Execution
, bir bileşen çalıştırmasının veya bir makine öğrenimi iş akışındaki bir adımın ve çalıştırma zamanı parametrelerinin kaydıdır. Bir yürütme, birExecutionType
örneği olarak düşünülebilir. Bir ML ardışık düzeni veya adımı çalıştırdığınızda, yürütmeler kaydedilir. - Bir
Event
, eserler ve yürütmeler 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 sonuç olarak 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ışındaki bir tür kavramsal yapıtlar ve yürütmeler grubunu ve yapısal özelliklerini açıklar. Örneğin: projeler, işlem hattı çalıştırmaları, deneyler, sahipler vb. -
Context
,ContextType
örneğinin bir örneğidir. Grup içinde paylaşılan bilgileri yakalar. Örneğin: proje adı, değişiklik listesi taahhüt kimliği, deney açıklamaları vb.ContextType
içinde kullanıcı tanımlı benzersiz bir ada sahiptir. - Bir
Attribution
, eserler ve bağlamlar arasındaki ilişkinin bir kaydıdır. -
Association
, yürütmeler 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 bunların bir bağlamın girdi ve çıktı yapılarını gösterin. Örnek: hata ayıklama ve keşif için bir deneyin 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.
- Özellikler ve 1-atlamalı komşu düğümler üzerinde bildirime dayalı düğümler filtreleme yetenekleri. Örnekler: bir tür yapıtları ve bazı ardışık düzen bağlamı altında arayın; belirli bir özelliğin değerinin bir aralık içinde olduğu durumlarda türetilen yapıları döndürür; Aynı girdilerle bir bağlamda önceki yürütmeleri bulun.
Köken bilgilerini almak için MLMD API'sini ve meta veri deposunu nasıl kullanacağınızı gösteren bir örnek için MLMD eğiticisine bakın.
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.
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)
artifacts_with_conditions = store.get_artifacts(
list_options=mlmd.ListOptions(
filter_query='uri LIKE "%/data" AND properties.day.int_value > 0'))
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])
# Similarly, the same execution can be queried with conditions.
executions_with_conditions = store.get_executions(
list_options = mlmd.ListOptions(
filter_query='type = "Trainer" AND properties.state.string_value IS NOT NULL'))
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)
# You can also use neighborhood queries to fetch these artifacts and executions
# with conditions.
experiment_artifacts_with_conditions = store.get_artifacts(
list_options = mlmd.ListOptions(
filter_query=('contexts_a.type = "Experiment" AND contexts_a.name = "exp1"')))
experiment_executions_with_conditions = store.get_executions(
list_options = mlmd.ListOptions(
filter_query=('contexts_a.id = {}'.format(experiment_id))))
MLMD'yi uzak bir gRPC sunucusuyla kullanma
MLMD'yi aşağıda gösterildiği gibi uzak gRPC sunucularıyla 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. SQLite dosyalarını veya MySQL örneklerini kullanmak için bir MLMD MetadataStoreServerConfig
ile de yapılandırılabilir. Yapılandırma bir metin protobuf dosyasında saklanabilir ve --metadata_store_server_config_file=path_to_the_config_file
ile ikili dosyaya geçirilebilir.
Metin protobuf biçiminde örnek bir MetadataStoreServerConfig
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. Daha fazla ayrıntı için MLMD API belgelerine bakın.
Özellikler ve 1 sekmeli komşu düğümler üzerinde MLMD bildirimsel düğüm filtreleme yeteneklerinin nasıl kullanılacağını öğrenmek için MLMD Bildirimli Düğüm Filtreleme'ye göz atın.
Ayrıca, işlem hattı bileşenlerinizin kökenini izlemek için MLMD'yi nasıl kullanacağınızı öğrenmek için MLMD eğiticisine göz atın.
MLMD, sürümler arasında şema ve veri geçişlerini işlemek için yardımcı programlar sağlar. Daha fazla ayrıntı için MLMD Kılavuzuna bakın.