RSVP untuk acara TensorFlow Everywhere lokal Anda hari ini!
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Metadata ML

ML Metadata (MLMD) adalah library untuk merekam dan mengambil metadata yang terkait dengan alur kerja developer ML dan data scientist. MLMD adalah bagian integral dari TensorFlow Extended (TFX) , tetapi dirancang agar dapat digunakan secara independen.

Setiap proses pipeline ML produksi menghasilkan metadata yang berisi informasi tentang berbagai komponen pipeline, pelaksanaannya (misalnya proses pelatihan), dan artefak yang dihasilkan (misalnya model terlatih). Jika terjadi kesalahan atau perilaku pipeline yang tidak terduga, metadata ini dapat dimanfaatkan untuk menganalisis garis keturunan komponen pipeline dan masalah debug. Anggap metadata ini setara dengan logging dalam pengembangan perangkat lunak.

MLMD membantu Anda memahami dan menganalisis semua bagian pipeline ML yang saling berhubungan, bukan menganalisisnya secara terpisah, dan dapat membantu Anda menjawab pertanyaan tentang pipeline ML Anda seperti:

  • Dataset mana yang dilatih model?
  • Apa hyperparameter yang digunakan untuk melatih model?
  • Jalur pipa mana yang membuat model?
  • Pelatihan mana yang menghasilkan model ini?
  • Versi TensorFlow mana yang membuat model ini?
  • Kapan model yang gagal didorong?

Penyimpanan metadata

MLMD mendaftarkan jenis metadata berikut dalam database yang disebut Penyimpanan Metadata .

  1. Metadata tentang artefak yang dihasilkan melalui komponen / langkah pipeline ML Anda
  2. Metadata tentang pelaksanaan komponen / langkah ini
  3. Metadata tentang saluran pipa dan informasi garis keturunan terkait

Metadata Store menyediakan API untuk merekam dan mengambil metadata ke dan dari backend penyimpanan. Backend penyimpanan dapat dicolokkan dan dapat diperpanjang. MLMD menyediakan implementasi referensi untuk SQLite (yang mendukung dalam memori dan disk) dan MySQL di luar kotak.

Grafik ini menunjukkan gambaran umum tingkat tinggi dari berbagai komponen yang merupakan bagian dari MLMD.

Ringkasan Metadata ML

Backend penyimpanan metadata dan menyimpan konfigurasi koneksi

Objek MetadataStore menerima konfigurasi koneksi yang sesuai dengan backend penyimpanan yang digunakan.

  • Fake Database menyediakan DB dalam memori (menggunakan SQLite) untuk eksperimen cepat dan pengoperasian lokal. Database dihapus saat objek penyimpanan dihancurkan.
0750 muka 50
  • SQLite membaca dan menulis file dari disk.
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 terhubung ke server MySQL.
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)

Model data

Penyimpanan Metadata menggunakan model data berikut untuk merekam dan mengambil metadata dari backend penyimpanan.

  • ArtifactType menjelaskan jenis artefak dan propertinya yang disimpan di penyimpanan metadata. Anda dapat mendaftarkan jenis ini dengan cepat dengan penyimpanan metadata dalam kode, atau Anda dapat memuatnya di penyimpanan dari format serial. Setelah Anda mendaftarkan suatu tipe, definisinya tersedia sepanjang masa penyimpanan.
  • Artifact mendeskripsikan contoh spesifik dari ArtifactType , dan propertinya yang ditulis ke penyimpanan metadata.
  • ExecutionType menjelaskan tipe komponen atau langkah dalam alur kerja, dan parameter runtime-nya.
  • Execution adalah catatan proses komponen atau langkah dalam alur kerja ML dan parameter runtime. Eksekusi dapat dianggap sebagai contoh dari ExecutionType . Eksekusi dicatat saat Anda menjalankan pipeline atau langkah ML.
  • Event adalah catatan hubungan antara artefak dan eksekusi. Saat eksekusi terjadi, peristiwa merekam setiap artefak yang digunakan oleh eksekusi, dan setiap artefak yang diproduksi. Catatan ini memungkinkan pelacakan garis keturunan di seluruh alur kerja. Dengan melihat semua peristiwa, MLMD mengetahui eksekusi apa yang terjadi dan artefak apa yang dibuat sebagai hasilnya. MLMD kemudian dapat mengulang kembali dari artefak mana pun ke semua masukan hulu.
  • ContextType mendeskripsikan tipe grup konseptual artefak dan eksekusi dalam alur kerja, dan properti strukturalnya. Misalnya: project, pipeline run, eksperimen, pemilik, dll.
  • Context adalah turunan dari ContextType . Ini menangkap informasi yang dibagikan di dalam grup. Sebagai contoh: nama proyek, ID komit daftar perubahan, penjelasan percobaan, dll. Memiliki nama unik yang ditentukan pengguna dalam Jenis ContextType .
  • Attribution adalah catatan hubungan antara artefak dan konteks.
  • Association adalah catatan hubungan antara eksekusi dan konteks.

Fungsi MLMD

Melacak input dan output semua komponen / langkah dalam alur kerja ML dan garis keturunannya memungkinkan platform ML mengaktifkan beberapa fitur penting. Daftar berikut memberikan gambaran umum tidak lengkap tentang beberapa manfaat utama.

  • Buat daftar semua Artefak dari jenis tertentu. Contoh: semua Model yang telah dilatih.
  • Muat dua Artefak dengan jenis yang sama untuk perbandingan. Contoh: bandingkan hasil dari dua percobaan.
  • Menampilkan DAG dari semua eksekusi terkait dan artefak input dan outputnya dari sebuah konteks. Contoh: memvisualisasikan alur kerja eksperimen untuk debugging dan penemuan.
  • Mengulangi kembali semua peristiwa untuk melihat bagaimana artefak dibuat. Contoh: melihat data apa yang menjadi model; menegakkan rencana retensi data.
  • Identifikasi semua artefak yang dibuat menggunakan artefak tertentu. Contoh: lihat semua Model yang dilatih dari kumpulan data tertentu; tandai model berdasarkan data yang buruk.
  • Tentukan apakah eksekusi telah dijalankan pada input yang sama sebelumnya. Contoh: tentukan apakah sebuah komponen / langkah telah menyelesaikan pekerjaan yang sama dan keluaran sebelumnya dapat digunakan kembali.
  • Rekam dan kueri konteks alur kerja yang dijalankan. Contoh: melacak pemilik dan daftar perubahan yang digunakan untuk menjalankan alur kerja; kelompokkan garis keturunan dengan eksperimen; mengelola artefak berdasarkan proyek.

Lihat tutorial MLMD untuk contoh yang menunjukkan kepada Anda bagaimana menggunakan MLMD API dan penyimpanan metadata untuk mengambil informasi garis keturunan.

Integrasikan Metadata ML ke dalam Alur Kerja ML Anda

Jika Anda adalah pengembang platform yang tertarik untuk mengintegrasikan MLMD ke dalam sistem Anda, gunakan contoh alur kerja di bawah ini untuk menggunakan API MLMD tingkat rendah untuk melacak pelaksanaan tugas pelatihan. Anda juga dapat menggunakan Python API tingkat yang lebih tinggi di lingkungan notebook untuk merekam metadata eksperimen.

Alur Contoh Metadata ML

1) Daftarkan jenis artefak

# 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)

2) Daftarkan jenis eksekusi untuk semua langkah dalam alur kerja ML

# 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)

3) Buat artefak dari DataSet ArtifactType

# 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])[0]

4) Buat eksekusi untuk run Trainer (biasanya tfx.components.Trainer ExecutionType)

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])[0]

5) Tentukan event input dan baca data

# 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) Nyatakan artefak keluaran

# 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])[0]

7) Rekam acara keluaran

# 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) Tandai eksekusi sebagai selesai

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

9) Kelompokkan artefak dan eksekusi di bawah konteks menggunakan atribusi dan artefak pernyataan

# 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])[0]

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])

Gunakan MLMD dengan server gRPC jarak jauh

Anda dapat menggunakan MLMD dengan server gRPC jarak jauh seperti yang ditunjukkan di bawah ini:

  • Mulai server
bazel run -c opt --define grpc_no_ares=true  //ml_metadata/metadata_store:metadata_store_server
  • Buat rintisan klien dan gunakan dengan Python
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)
  • Gunakan MLMD dengan panggilan RPC
# 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)

Sumber daya

Pustaka MLMD memiliki API tingkat tinggi yang dapat Anda gunakan dengan mudah dengan pipeline ML Anda. Lihat dokumentasi API MLMD untuk lebih jelasnya.

Lihat juga tutorial MLMD untuk mempelajari cara menggunakan MLMD untuk melacak garis keturunan komponen pipeline Anda.