انضم إلى مجتمع SIG TFX-Addons وساعد في جعل TFX أفضل! انضم إلى SIG TFX-Addons

بيانات تعريف ML

ML الفوقية (MLMD) هي مكتبة لتسجيل واسترجاع البيانات الوصفية المرتبطة مع ML المطور وعالم البيانات سير العمل. MLMD هو جزء لا يتجزأ من TensorFlow الموسعة (TFX) ، ولكن تم تصميمه بحيث يمكن استخدامها بشكل مستقل.

تقوم كل عملية تشغيل لخط أنابيب ML بإنتاج البيانات الوصفية التي تحتوي على معلومات حول مكونات خطوط الأنابيب المختلفة وتنفيذها (مثل عمليات التدريب) والقطع الأثرية الناتجة (مثل النماذج المدربة). في حالة حدوث أخطاء أو سلوك غير متوقع في خطوط الأنابيب ، يمكن الاستفادة من هذه البيانات الوصفية لتحليل تسلسل مكونات خطوط الأنابيب ومشكلات تصحيح الأخطاء. فكر في هذه البيانات الوصفية على أنها مكافئة لتسجيل الدخول في تطوير البرامج.

يساعدك MLMD على فهم وتحليل جميع الأجزاء المترابطة من خط أنابيب ML الخاص بك بدلاً من تحليلها بشكل منفصل ويمكن أن تساعدك في الإجابة على الأسئلة حول خط أنابيب ML الخاص بك مثل:

  • ما مجموعة البيانات التي تدرب عليها النموذج؟
  • ما هي المعلمات الفائقة المستخدمة لتدريب النموذج؟
  • ما هو مسار خط الأنابيب الذي أنشأ النموذج؟
  • ما هو مسار التدريب الذي أدى إلى هذا النموذج؟
  • ما هو إصدار TensorFlow الذي أنشأ هذا النموذج؟
  • متى تم دفع النموذج الفاشل؟

مخزن البيانات الوصفية

MLMD يسجل الأنواع التالية من البيانات الوصفية في قاعدة بيانات تسمى مخزن الفوقية.

  1. البيانات الوصفية حول القطع الأثرية التي تم إنشاؤها من خلال مكونات / خطوات خطوط أنابيب ML الخاصة بك
  2. بيانات وصفية حول عمليات تنفيذ هذه المكونات / الخطوات
  3. البيانات الوصفية حول خطوط الأنابيب ومعلومات النسب المرتبطة بها

يوفر متجر البيانات الوصفية واجهات برمجة تطبيقات لتسجيل واسترداد البيانات الوصفية من وإلى الواجهة الخلفية للتخزين. الواجهة الخلفية للتخزين قابلة للتوصيل ويمكن تمديدها. يوفر MLMD تطبيقات مرجعية لـ SQLite (التي تدعم الذاكرة الداخلية والقرص) و MySQL خارج الصندوق.

يُظهر هذا الرسم نظرة عامة عالية المستوى على المكونات المختلفة التي تشكل جزءًا من MLMD.

نظرة عامة على بيانات تعريف ML

خلفيات تخزين البيانات الوصفية وتخزين تكوين الاتصال

و MetadataStore يتلقى الكائن تكوين الاتصال الذي يتوافق مع التخزين الخلفية المستخدمة.

  • توفر قاعدة بيانات وهمية لDB في الذاكرة (باستخدام سكليتي) للتجريب سريع ويعمل المحلية. يتم حذف قاعدة البيانات عند إتلاف كائن المخزن.
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)
  • سكليتي يقرأ ويكتب الملفات من القرص.
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)
  • الخلية يصل إلى خادم ماي.
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)

وبالمثل، عند استخدام مثيل الخلية مع جوجل CloudSQL ( التشغيل السريع ، ربط-نظرة عامة )، يمكن للمرء أيضا خيار SSL إذا كان ذلك ممكنا استخدامها.

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)

نموذج البيانات

يستخدم متجر البيانات الوصفية نموذج البيانات التالي لتسجيل واسترداد البيانات الوصفية من الواجهة الخلفية للتخزين.

  • ArtifactType يصف نوع قطعة أثرية وخصائصه التي يتم تخزينها في مخزن بيانات التعريف. يمكنك تسجيل هذه الأنواع أثناء التنقل باستخدام مخزن البيانات الوصفية في رمز ، أو يمكنك تحميلها في المتجر من تنسيق متسلسل. بمجرد تسجيل نوع ، يكون تعريفه متاحًا طوال عمر المتجر.
  • على Artifact يصف مثيل محددة من ArtifactType ، وخصائصه التي تتم كتابتها إلى مخزن بيانات التعريف.
  • و ExecutionType يصف نوع من عنصر أو خطوة في سير العمل، والمعلمات وقت التشغيل.
  • ل Execution هو سجل لتشغيل عنصر أو خطوة في سير عمل ML والمعلمات وقت التشغيل. عملية إعدام يمكن اعتبار مثيل ExecutionType . يتم تسجيل عمليات التنفيذ عند تشغيل خط أنابيب أو خطوة ML.
  • و Event هو سجل للعلاقة بين القطع الأثرية والإعدام. عندما يحدث التنفيذ ، تسجل الأحداث كل قطعة أثرية استخدمها التنفيذ ، وكل قطعة أثرية تم إنتاجها. تسمح هذه السجلات بتتبع النسب خلال سير العمل. من خلال النظر في جميع الأحداث ، يعرف MLMD عمليات الإعدام التي حدثت وما هي القطع الأثرية التي تم إنشاؤها نتيجة لذلك. يمكن أن يتكرر MLMD مرة أخرى من أي قطعة أثرية إلى كافة مدخلات المنبع.
  • A ContextType يصف نوع من مجموعة من القطع الأثرية المفاهيمية والإعدام في سير العمل، وخصائصه البنيوية. على سبيل المثال: المشاريع ، خطوط الأنابيب ، التجارب ، الملاك ، إلخ.
  • و Context هو مثيل ContextType . يلتقط المعلومات المشتركة داخل المجموعة. على سبيل المثال: اسم المشروع، قائمة تغييرات ارتكاب الهوية، وتجربة الشروح وما إلى ذلك يحتوي على اسم المعرفة فريدة من نوعها ضمن نطاق ContextType .
  • و Attribution هذا رقم قياسي للعلاقة بين القطع الأثرية والسياقات.
  • و Association هو سجل للعلاقة بين الإعدام والسياقات.

وظائف MLMD

يتيح تتبع مدخلات ومخرجات جميع المكونات / الخطوات في سير عمل ML ونسبها لمنصات التعلم الآلي تمكين العديد من الميزات المهمة. توفر القائمة التالية نظرة عامة غير شاملة على بعض الفوائد الرئيسية.

  • قائمة بجميع القطع الأثرية من نوع معين. مثال: جميع النماذج التي تم تدريبها.
  • قم بتحميل قطعتين من نفس النوع للمقارنة. مثال: قارن نتائج تجربتين.
  • اعرض DAG لجميع عمليات التنفيذ ذات الصلة ومدخلاتها ومخرجاتها من السياق. مثال: تصور سير عمل تجربة لتصحيح الأخطاء والاكتشاف.
  • كرر مرة أخرى خلال جميع الأحداث لترى كيف تم إنشاء قطعة أثرية. أمثلة: انظر إلى البيانات التي تم إدخالها في النموذج ؛ فرض خطط الاحتفاظ بالبيانات.
  • حدد كل القطع الأثرية التي تم إنشاؤها باستخدام قطعة أثرية معينة. أمثلة: راجع جميع النماذج المدربة من مجموعة بيانات محددة ؛ نماذج علامة على أساس البيانات السيئة.
  • تحديد ما إذا كان قد تم تنفيذ التنفيذ على نفس المدخلات من قبل. مثال: حدد ما إذا كان المكون / الخطوة قد أكمل بالفعل نفس العمل ويمكن إعادة استخدام المخرجات السابقة.
  • سجل واستعلام سياق سير العمل يعمل. أمثلة: تعقب المالك وقائمة التغيير المستخدمة لتشغيل سير العمل ؛ جمع النسب بالتجارب ؛ إدارة القطع الأثرية من خلال المشاريع.

رؤية البرنامج التعليمي MLMD للحصول على مثال أن يظهر لك كيفية استخدام API MLMD وتخزين بيانات التعريف لاسترداد المعلومات النسب.

دمج البيانات الوصفية ML في مهام سير عمل ML الخاصة بك

إذا كنت مطور نظام أساسي مهتم بدمج MLMD في نظامك ، فاستخدم مثال سير العمل أدناه لاستخدام واجهات برمجة تطبيقات MLMD منخفضة المستوى لتتبع تنفيذ مهمة تدريبية. يمكنك أيضًا استخدام واجهات برمجة تطبيقات Python ذات المستوى الأعلى في بيئات دفتر الملاحظات لتسجيل البيانات الأولية للتجربة.

مثال تدفق بيانات تعريف ML

1) تسجيل أنواع القطع الأثرية

# 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

# 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

# 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) إنشاء تنفيذ لمسار المدرب

# 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) تحديد حدث الإدخال وقراءة البيانات

# 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) قم بتعريف الأداة الناتجة

# 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) سجل حدث الإخراج

# 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) ضع علامة على التنفيذ على أنه مكتمل

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

9) تجميع القطع الأثرية وعمليات الإعدام ضمن سياق باستخدام عناصر الإسناد والتأكيدات

# 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 مع خادم gRPC بعيد

يمكنك استخدام MLMD مع خوادم gRPC البعيدة كما هو موضح أدناه:

  • ابدأ الخادم
bazel run -c opt --define grpc_no_ares=true  //ml_metadata/metadata_store:metadata_store_server

بشكل افتراضي ، يستخدم الخادم ديسيبل مزيفًا في الذاكرة لكل طلب ولا يستمر في البيانات الوصفية عبر المكالمات. ويمكن أيضا أن يتم تكوين مع MLMD MetadataStoreServerConfig استخدام ملفات سكليتي أو الحالات الخلية. التهيئة يمكن تخزينها في ملف protobuf النص وتمريرها إلى ثنائي مع --metadata_store_server_config_file=path_to_the_config_file .

مثال MetadataStoreServerConfig الملف بتنسيق protobuf النص:

connection_config {
  sqlite {
    filename_uri: '/tmp/test_db'
    connection_mode: READWRITE_OPENCREATE
  }
}
  • أنشئ كعب العميل واستخدمه في 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)
  • استخدم MLMD مع مكالمات 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)

موارد

تحتوي مكتبة MLMD على واجهة برمجة تطبيقات عالية المستوى يمكنك استخدامها بسهولة مع خطوط أنابيب ML الخاصة بك. اطلع على وثائق API MLMD لمزيد من التفاصيل.

كما تحقق من البرنامج التعليمي MLMD لمعرفة كيفية استخدام MLMD لتتبع نسب مكونات خط أنابيب الخاص بك.

يوفر MLMD أدوات مساعدة للتعامل مع عمليات ترحيل البيانات والمخططات عبر الإصدارات. رؤية MLMD دليل لمزيد من التفاصيل.