ML Meta Verileri

ML Meta Verileri (MLMD), ML geliştiricisi ve veri bilimci iş akışlarıyla ilişkili meta verileri kaydetmeye ve almaya yönelik 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.

Üretim ML ardışık düzeninin her çalıştırılması, çeşitli ardışık düzen bileşenleri, bunların uygulamaları (örneğin eğitim çalıştırmaları) ve sonuçta ortaya çıkan yapılar (ö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 sorunları ayıklamak için kullanılabilir. Bu meta verileri, yazılım geliştirmede oturum açmanın eşdeğeri olarak düşünün.

MLMD, ML ardışık düzeninizin birbirine bağlı tüm parçalarını ayrı ayrı analiz etmek yerine anlamanıza ve analiz etmenize yardımcı olur ve ML ardışık düzeninizle ilgili aşağıdaki gibi soruları yanıtlamanıza yardımcı olabilir:

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

Meta veri deposu

MLMD, aşağıdaki meta veri türlerini Meta Veri Deposu adı verilen bir veritabanına kaydeder.

  1. Makine öğrenimi ardışık düzenlerinizin bileşenleri/adımları aracılığıyla oluşturulan yapılar hakkındaki meta veriler
  2. Bu bileşenlerin/adımların yürütülmesine ilişkin meta veriler
  3. Boru hatları ve ilgili köken bilgileri hakkındaki meta veriler

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

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

ML Meta Verilerine Genel Bakış

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

MetadataStore nesnesi, kullanılan depolama arka ucuna karşılık gelen bir bağlantı yapılandırmasını alır.

  • Sahte Veritabanı, hızlı denemeler ve yerel çalıştırmalar için bellek içi bir veritabanı (SQLite kullanarak) sağlar. Mağaza 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 diskteki dosyaları 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, 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ğini kullanırken ( hızlı başlangıç , bağlantıya genel bakış ), uygunsa 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)
  • PostgreSQL, PostgreSQL sunucusuna bağlanır.
connection_config = metadata_store_pb2.ConnectionConfig()
connection_config.postgresql.host = '...'
connection_config.postgresql.port = '...'
connection_config.postgresql.user = '...'
connection_config.postgresql.password = '...'
connection_config.postgresql.dbname = '...'
store = metadata_store.MetadataStore(connection_config)

Benzer şekilde, Google CloudSQL ile bir PostgreSQL örneği kullanıldığında ( hızlı başlangıç , bağlantıya genel bakış ), uygunsa SSL seçeneği de kullanılabilir.

connection_config.postgresql.ssloption.sslmode = '...' # disable, allow, verify-ca, verify-full, etc.
connection_config.postgresql.ssloption.sslcert = '...'
connection_config.postgresql.ssloption.sslkey = '...'
connection_config.postgresql.ssloption.sslpassword = '...'
connection_config.postgresql.ssloption.sslrootcert = '...'
store = metadata_store.MetadataStore(connection_config)

Veri modeli

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

  • ArtifactType bir yapının türünü ve meta veri deposunda depolanan özelliklerini açıklar. Bu türleri kod halinde meta veri deposuna anında kaydedebilir veya bunları serileştirilmiş bir biçimde depoya yükleyebilirsiniz. Bir türü kaydettikten sonra tanımı, mağazanın ömrü boyunca kullanılabilir.
  • Artifact ArtifactType belirli bir örneğini ve meta veri deposuna yazılan özelliklerini açıklar.
  • ExecutionType bir iş akışındaki bir bileşen türünü veya adımı ve bunun çalışma zamanı parametrelerini açıklar.
  • Execution bir bileşen çalıştırmasının veya ML iş akışındaki bir adımın ve çalışma zamanı parametrelerinin kaydıdır. Bir yürütme, bir ExecutionType örneği olarak düşünülebilir. Bir makine öğrenimi hattını veya adımını çalıştırdığınızda yürütmeler kaydedilir.
  • Event yapılar 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 yapıyı ve üretilen her yapıyı kaydeder. Bu kayıtlar, iş akışı boyunca köken takibine olanak tanır. MLMD, tüm olaylara bakarak hangi infazların gerçekleştiğini ve bunun sonucunda hangi eserlerin yaratıldığını biliyor. MLMD daha sonra herhangi bir yapıdan tüm yukarı akış girişlerine geri dönebilir.
  • ContextType bir iş akışındaki bir tür kavramsal yapıt ve yürütme grubunu ve bunun yapısal özelliklerini açıklar. Örneğin: projeler, boru hattı çalışmaları, deneyler, sahipler vb.
  • Context , ContextType bir örneğidir. Grup içinde paylaşılan bilgileri yakalar. Örneğin: proje adı, değişiklik listesi taahhüt kimliği, deney ek açıklamaları vb. ContextType içinde kullanıcı tanımlı benzersiz bir ada sahiptir.
  • Attribution eserler ve bağlamlar arasındaki ilişkinin bir kaydıdır.
  • Bir Association infazlar ve bağlamlar arasındaki ilişkinin bir kaydıdır.

MLMD İşlevselliği

Bir makine öğrenimi iş akışındaki tüm bileşenlerin/adımların giriş ve çıkışlarının ve bunların kökeninin izlenmesi, makine öğrenimi platformlarının birçok önemli özelliği etkinleştirmesine olanak tanır. Aşağıdaki liste, bazı önemli faydalara kapsamlı olmayan bir genel bakış sunmaktadır.

  • Belirli bir türdeki tüm Eserleri listeleyin. Örnek: eğitilmiş tüm Modeller.
  • Karşılaştırma için aynı türden iki Yapı yükleyin. Örnek: iki deneyin sonuçlarını karşılaştırın.
  • İlgili tüm yürütmelerin ve bunların bir bağlamın girdi ve çıktı yapıtlarının bir DAG'sini gösterin. Örnek: hata ayıklama ve keşif için bir denemenin iş akışını görselleştirin.
  • Bir eserin nasıl yaratıldığını 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ı uygulayın.
  • Belirli bir yapıt kullanılarak oluşturulan tüm yapıtları tanımlayın. Örnekler: Belirli bir veri kümesinden eğitilen tüm Modellere bakın; Kötü verilere dayalı modelleri işaretleyin.
  • Daha önce aynı girişlerde bir yürütmenin çalıştırılıp çalıştırılmadığını belirleyin. Örnek: Bir bileşenin/adımın aynı işi tamamlayıp tamamlamadığını ve önceki çıktının yeniden kullanılıp kullanılamayacağını belirleyin.
  • İş akışı çalıştırmalarının içeriğini kaydedin ve sorgulayın. Örnekler: bir iş akışı çalıştırması için kullanılan sahibi ve değişiklik listesini izleme; soyları deneylerle gruplandırın; eserleri projelere göre yönetin.
  • Özellikler ve 1-atlamalı komşu düğümler üzerindeki bildirimsel düğüm filtreleme yetenekleri. Örnekler: bir türdeki ve bazı işlem hattı bağlamı altındaki yapıtları arayın; belirli bir özelliğin değerinin bir aralık içinde olduğu durumlarda yazılan yapıtları döndürür; aynı girdilere sahip 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ğitimine 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 amacıyla düşük düzeyli MLMD API'lerini kullanmak için aşağıdaki örnek iş akışını kullanın. Deneme meta verilerini kaydetmek için not defteri ortamlarında daha üst düzey Python API'lerini de kullanabilirsiniz.

ML Meta Veri Örnek Akışı

1) Yapı 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) ML 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ıştırması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) Atıflar ve iddia yapıtlarını kullanarak yapıtları ve yürütmeleri 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ın
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 veri tabanı kullanır ve meta verileri çağrılar arasında sürdürmez. Ayrıca 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 aktarılabilir.

Metin protobuf formatında örnek bir MetadataStoreServerConfig dosyası:

connection_config {
  sqlite {
    filename_uri: '/tmp/test_db'
    connection_mode: READWRITE_OPENCREATE
  }
}
  • İstemci saplamasını oluşturun ve bunu 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 üst düzey bir API'ye sahiptir. Daha fazla ayrıntı için MLMD API belgelerine bakın.

Özellikler ve 1 atlamalı komşu düğümler üzerinde MLMD bildirime dayalı düğüm filtreleme yeteneklerinin nasıl kullanılacağını öğrenmek için MLMD Bildirime Dayalı Düğüm Filtreleme'ye göz atın.

Ayrıca ardışık düzen bileşenlerinizin kökenini izlemek için MLMD'yi nasıl kullanacağınızı öğrenmek üzere MLMD eğitimine de göz atın.

MLMD, sürümler arasında şema ve veri geçişlerini yönetmeye yönelik yardımcı programlar sağlar. Daha fazla ayrıntı için MLMD Kılavuzuna bakın.