एमएल मेटाडेटा

एमएल मेटाडेटा (एमएलएमडी) एमएल डेवलपर और डेटा वैज्ञानिक वर्कफ़्लो से जुड़े मेटाडेटा को रिकॉर्ड करने और पुनर्प्राप्त करने के लिए एक लाइब्रेरी है। एमएलएमडी टेन्सरफ्लो एक्सटेंडेड (टीएफएक्स) का एक अभिन्न अंग है, लेकिन इसे इस तरह से डिज़ाइन किया गया है कि इसे स्वतंत्र रूप से उपयोग किया जा सकता है।

उत्पादन एमएल पाइपलाइन का प्रत्येक रन मेटाडेटा उत्पन्न करता है जिसमें विभिन्न पाइपलाइन घटकों, उनके निष्पादन (जैसे प्रशिक्षण रन), और परिणामी कलाकृतियों (जैसे प्रशिक्षित मॉडल) के बारे में जानकारी होती है। अप्रत्याशित पाइपलाइन व्यवहार या त्रुटियों की स्थिति में, इस मेटाडेटा का लाभ पाइपलाइन घटकों और डीबग मुद्दों की वंशावली का विश्लेषण करने के लिए किया जा सकता है। इस मेटाडेटा को सॉफ़्टवेयर विकास में लॉग इन करने के समतुल्य समझें।

एमएलएमडी आपकी एमएल पाइपलाइन के सभी परस्पर जुड़े हिस्सों को अलग-अलग विश्लेषण करने के बजाय उन्हें समझने और उनका विश्लेषण करने में आपकी मदद करता है और आपकी एमएल पाइपलाइन के बारे में सवालों के जवाब देने में आपकी मदद कर सकता है जैसे:

  • मॉडल किस डेटासेट पर प्रशिक्षित हुआ?
  • मॉडल को प्रशिक्षित करने के लिए उपयोग किए जाने वाले हाइपरपैरामीटर क्या थे?
  • किस पाइपलाइन रन ने मॉडल बनाया?
  • कौन से प्रशिक्षण कार्यक्रम ने इस मॉडल को जन्म दिया?
  • TensorFlow के किस संस्करण ने यह मॉडल बनाया?
  • असफल मॉडल को कब आगे बढ़ाया गया?

मेटाडेटा स्टोर

एमएलएमडी निम्नलिखित प्रकार के मेटाडेटा को मेटाडेटा स्टोर नामक डेटाबेस में पंजीकृत करता है।

  1. आपके एमएल पाइपलाइनों के घटकों/चरणों के माध्यम से उत्पन्न कलाकृतियों के बारे में मेटाडेटा
  2. इन घटकों/चरणों के निष्पादन के बारे में मेटाडेटा
  3. पाइपलाइनों और संबंधित वंशावली जानकारी के बारे में मेटाडेटा

मेटाडेटा स्टोर स्टोरेज बैकएंड से मेटाडेटा को रिकॉर्ड करने और पुनर्प्राप्त करने के लिए एपीआई प्रदान करता है। स्टोरेज बैकएंड प्लग करने योग्य है और इसे बढ़ाया जा सकता है। MLMD बॉक्स से बाहर SQLite (जो इन-मेमोरी और डिस्क का समर्थन करता है) और MySQL के लिए संदर्भ कार्यान्वयन प्रदान करता है।

यह ग्राफ़िक एमएलएमडी का हिस्सा बनने वाले विभिन्न घटकों का उच्च-स्तरीय अवलोकन दिखाता है।

एमएल मेटाडेटा अवलोकन

मेटाडेटा स्टोरेज बैकएंड और स्टोर कनेक्शन कॉन्फ़िगरेशन

MetadataStore ऑब्जेक्ट एक कनेक्शन कॉन्फ़िगरेशन प्राप्त करता है जो उपयोग किए गए स्टोरेज बैकएंड से मेल खाता है।

  • नकली डेटाबेस तेज़ प्रयोग और स्थानीय रन के लिए इन-मेमोरी DB (SQLite का उपयोग करके) प्रदान करता है। स्टोर ऑब्जेक्ट नष्ट होने पर डेटाबेस हटा दिया जाता है।
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 डिस्क से फ़ाइलें पढ़ता और लिखता है।
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 सर्वर से जुड़ता है।
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 ( क्विकस्टार्ट , कनेक्ट-ओवरव्यू ) के साथ MySQL इंस्टेंस का उपयोग करते समय, यदि लागू हो तो कोई 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)
  • PostgreSQL एक PostgreSQL सर्वर से जुड़ता है।
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)

इसी तरह, Google CloudSQL ( क्विकस्टार्ट , कनेक्ट-ओवरव्यू ) के साथ PostgreSQL इंस्टेंस का उपयोग करते समय, यदि लागू हो तो कोई SSL विकल्प का भी उपयोग कर सकता है।

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)

डेटा मॉडल

मेटाडेटा स्टोर स्टोरेज बैकएंड से मेटाडेटा को रिकॉर्ड करने और पुनर्प्राप्त करने के लिए निम्नलिखित डेटा मॉडल का उपयोग करता है।

  • ArtifactType एक आर्टिफैक्ट के प्रकार और उसके गुणों का वर्णन करता है जो मेटाडेटा स्टोर में संग्रहीत होते हैं। आप इन प्रकारों को कोड में मेटाडेटा स्टोर के साथ तुरंत पंजीकृत कर सकते हैं, या आप उन्हें क्रमबद्ध प्रारूप से स्टोर में लोड कर सकते हैं। एक बार जब आप किसी प्रकार को पंजीकृत कर लेते हैं, तो उसकी परिभाषा स्टोर के पूरे जीवनकाल के दौरान उपलब्ध रहती है।
  • एक Artifact , ArtifactType के एक विशिष्ट उदाहरण और उसके गुणों का वर्णन करता है जो मेटाडेटा स्टोर में लिखे गए हैं।
  • ExecutionType वर्कफ़्लो में एक प्रकार के घटक या चरण और उसके रनटाइम पैरामीटर का वर्णन करता है।
  • Execution एक घटक रन या एमएल वर्कफ़्लो में एक चरण और रनटाइम पैरामीटर का रिकॉर्ड है। किसी निष्पादन को ExecutionType के उदाहरण के रूप में सोचा जा सकता है। जब आप एमएल पाइपलाइन या चरण चलाते हैं तो निष्पादन रिकॉर्ड किया जाता है।
  • एक Event कलाकृतियों और निष्पादन के बीच संबंधों का एक रिकॉर्ड है। जब कोई निष्पादन होता है, तो घटनाएँ प्रत्येक कलाकृति को रिकॉर्ड करती हैं जिसका उपयोग निष्पादन द्वारा किया गया था, और प्रत्येक कलाकृति को जो उत्पादित किया गया था। ये रिकॉर्ड पूरे वर्कफ़्लो में वंशावली ट्रैकिंग की अनुमति देते हैं। सभी घटनाओं को देखकर, एमएलएमडी को पता चलता है कि क्या निष्पादन हुआ और परिणामस्वरूप कौन सी कलाकृतियाँ बनाई गईं। एमएलएमडी फिर किसी भी आर्टिफैक्ट से उसके सभी अपस्ट्रीम इनपुट पर वापस लौट सकता है।
  • एक ContextType वर्कफ़्लो में कलाकृतियों और निष्पादन के एक प्रकार के वैचारिक समूह और उसके संरचनात्मक गुणों का वर्णन करता है। उदाहरण के लिए: परियोजनाएं, पाइपलाइन रन, प्रयोग, मालिक आदि।
  • Context ContextType का एक उदाहरण है। यह समूह के भीतर साझा की गई जानकारी को कैप्चर करता है। उदाहरण के लिए: प्रोजेक्ट का नाम, चेंजलिस्ट कमिट आईडी, प्रयोग एनोटेशन आदि। इसके ContextType के भीतर एक उपयोगकर्ता-परिभाषित अद्वितीय नाम है।
  • Attribution कलाकृतियों और संदर्भों के बीच संबंधों का एक रिकॉर्ड है।
  • Association निष्पादन और संदर्भों के बीच संबंधों का एक रिकॉर्ड है।

एमएलएमडी कार्यक्षमता

एमएल वर्कफ़्लो में सभी घटकों/चरणों के इनपुट और आउटपुट और उनके वंश को ट्रैक करने से एमएल प्लेटफ़ॉर्म कई महत्वपूर्ण सुविधाओं को सक्षम करने की अनुमति देता है। निम्नलिखित सूची कुछ प्रमुख लाभों का एक गैर-विस्तृत अवलोकन प्रदान करती है।

  • एक विशिष्ट प्रकार की सभी कलाकृतियों की सूची बनाएं। उदाहरण: सभी मॉडल जिन्हें प्रशिक्षित किया गया है।
  • तुलना के लिए एक ही प्रकार की दो कलाकृतियाँ लोड करें। उदाहरण: दो प्रयोगों के परिणामों की तुलना करें।
  • किसी संदर्भ के सभी संबंधित निष्पादन और उनके इनपुट और आउटपुट कलाकृतियों का डीएजी दिखाएं। उदाहरण: डिबगिंग और खोज के लिए एक प्रयोग के वर्कफ़्लो की कल्पना करें।
  • यह देखने के लिए सभी घटनाओं पर दोबारा गौर करें कि एक कलाकृति कैसे बनाई गई थी। उदाहरण: देखें कि मॉडल में कौन सा डेटा गया; डेटा अवधारण योजनाएं लागू करें.
  • किसी दिए गए आर्टिफैक्ट का उपयोग करके बनाई गई सभी कलाकृतियों की पहचान करें। उदाहरण: विशिष्ट डेटासेट से प्रशिक्षित सभी मॉडल देखें; खराब डेटा के आधार पर मॉडल चिह्नित करें।
  • निर्धारित करें कि क्या निष्पादन पहले समान इनपुट पर चलाया गया है। उदाहरण: निर्धारित करें कि क्या किसी घटक/चरण ने पहले ही वही कार्य पूरा कर लिया है और पिछले आउटपुट का पुन: उपयोग किया जा सकता है।
  • वर्कफ़्लो रन का रिकॉर्ड और क्वेरी संदर्भ। उदाहरण: वर्कफ़्लो चलाने के लिए उपयोग किए गए स्वामी और चेंजलिस्ट को ट्रैक करें; प्रयोगों द्वारा वंश को समूहित करें; परियोजनाओं द्वारा कलाकृतियों का प्रबंधन करें।
  • संपत्तियों और 1-हॉप पड़ोस नोड्स पर घोषणात्मक नोड्स फ़िल्टरिंग क्षमताएं। उदाहरण: एक प्रकार की और कुछ पाइपलाइन संदर्भ के तहत कलाकृतियों की तलाश करें; टाइप की गई कलाकृतियाँ लौटाएँ जहाँ किसी दी गई संपत्ति का मूल्य एक सीमा के भीतर है; समान इनपुट के साथ संदर्भ में पिछले निष्पादन खोजें।

उदाहरण के लिए एमएलएमडी ट्यूटोरियल देखें जो आपको दिखाता है कि वंशावली जानकारी प्राप्त करने के लिए एमएलएमडी एपीआई और मेटाडेटा स्टोर का उपयोग कैसे करें।

एमएल मेटाडेटा को अपने एमएल वर्कफ़्लो में एकीकृत करें

यदि आप एक प्लेटफ़ॉर्म डेवलपर हैं जो अपने सिस्टम में एमएलएमडी को एकीकृत करने में रुचि रखते हैं, तो प्रशिक्षण कार्य के निष्पादन को ट्रैक करने के लिए निम्न-स्तरीय एमएलएमडी एपीआई का उपयोग करने के लिए नीचे दिए गए उदाहरण वर्कफ़्लो का उपयोग करें। प्रयोग मेटाडेटा रिकॉर्ड करने के लिए आप नोटबुक वातावरण में उच्च-स्तरीय पायथन एपीआई का भी उपयोग कर सकते हैं।

एमएल मेटाडेटा उदाहरण प्रवाह

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) एमएल वर्कफ़्लो में सभी चरणों के लिए निष्पादन प्रकार पंजीकृत करें

# 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) डेटासेट आर्टिफैक्टटाइप का एक आर्टिफैक्ट बनाएं

# 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) ट्रेनर रन का एक निष्पादन बनाएं

# 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) इनपुट इवेंट को परिभाषित करें और डेटा पढ़ें

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

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

रिमोट जीआरपीसी सर्वर के साथ एमएलएमडी का उपयोग करें

आप एमएलएमडी का उपयोग दूरस्थ जीआरपीसी सर्वर के साथ कर सकते हैं जैसा कि नीचे दिखाया गया है:

  • एक सर्वर प्रारंभ करें
bazel run -c opt --define grpc_no_ares=true  //ml_metadata/metadata_store:metadata_store_server

डिफ़ॉल्ट रूप से, सर्वर प्रति अनुरोध एक नकली इन-मेमोरी डीबी का उपयोग करता है और कॉल के दौरान मेटाडेटा को जारी नहीं रखता है। इसे SQLite फ़ाइलों या MySQL इंस्टेंसेस का उपयोग करने के लिए MLMD MetadataStoreServerConfig के साथ भी कॉन्फ़िगर किया जा सकता है। कॉन्फ़िगरेशन को टेक्स्ट प्रोटोबफ़ फ़ाइल में संग्रहीत किया जा सकता है और --metadata_store_server_config_file=path_to_the_config_file के साथ बाइनरी में पास किया जा सकता है।

टेक्स्ट प्रोटोबफ़ प्रारूप में MetadataStoreServerConfig फ़ाइल का एक उदाहरण:

connection_config {
  sqlite {
    filename_uri: '/tmp/test_db'
    connection_mode: READWRITE_OPENCREATE
  }
}
  • क्लाइंट स्टब बनाएं और इसे पायथन में उपयोग करें
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)
  • आरपीसी कॉल के साथ एमएलएमडी का प्रयोग करें
# 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)

संसाधन

एमएलएमडी लाइब्रेरी में एक उच्च-स्तरीय एपीआई है जिसे आप अपनी एमएल पाइपलाइनों के साथ आसानी से उपयोग कर सकते हैं। अधिक विवरण के लिए एमएलएमडी एपीआई दस्तावेज़ देखें।

संपत्तियों और 1-हॉप पड़ोस नोड्स पर एमएलएमडी घोषणात्मक नोड्स फ़िल्टरिंग क्षमताओं का उपयोग करने का तरीका जानने के लिए एमएलएमडी घोषणात्मक नोड्स फ़िल्टरिंग देखें।

अपने पाइपलाइन घटकों की वंशावली का पता लगाने के लिए एमएलएमडी का उपयोग कैसे करें यह जानने के लिए एमएलएमडी ट्यूटोरियल भी देखें।

एमएलएमडी सभी रिलीज़ों में स्कीमा और डेटा माइग्रेशन को संभालने के लिए उपयोगिताएँ प्रदान करता है। अधिक विवरण के लिए एमएलएमडी गाइड देखें।