সাহায্য Kaggle উপর TensorFlow সঙ্গে গ্রেট বেরিয়ার রিফ রক্ষা চ্যালেঞ্জ যোগদান

এমএল মেটাটাটা

এমএল মেটাডেটা (MLMD) রেকর্ডিং এবং এমএল ডেভেলপার এবং তথ্য বিজ্ঞানী কর্মপ্রবাহ সঙ্গে যুক্ত মেটাডেটা পুনরুদ্ধারের জন্য একটি লাইব্রেরী। MLMD অবিচ্ছেদ্য অংশ TensorFlow সম্প্রসারিত (TFX) কিন্তু যাতে এটি স্বাধীনভাবে ব্যবহার করা যেতে পারে ডিজাইন করা হয়েছে।

একটি উত্পাদন এমএল পাইপলাইনের প্রতিটি রান মেটাডেটা তৈরি করে যাতে বিভিন্ন পাইপলাইন উপাদান, তাদের মৃত্যুদন্ড (যেমন প্রশিক্ষণ রান), এবং ফলস্বরূপ শিল্পকর্ম (যেমন প্রশিক্ষিত মডেল) সম্পর্কে তথ্য থাকে। অপ্রত্যাশিত পাইপলাইন আচরণ বা ত্রুটির ক্ষেত্রে, পাইপলাইন উপাদানগুলির বংশ এবং ডিবাগ সমস্যা বিশ্লেষণ করার জন্য এই মেটাডেটা ব্যবহার করা যেতে পারে।

এমএলএমডি আপনাকে আপনার এমএল পাইপলাইনের সমস্ত আন্তconসংযুক্ত অংশগুলি বিচ্ছিন্নভাবে বিশ্লেষণ করার পরিবর্তে বুঝতে এবং বিশ্লেষণ করতে সহায়তা করে এবং আপনার এমএল পাইপলাইন সম্পর্কে প্রশ্নের উত্তর দিতে আপনাকে সহায়তা করতে পারে যেমন:

  • মডেলটি কোন ডেটাসেটে প্রশিক্ষণ নিয়েছিল?
  • মডেলকে প্রশিক্ষণের জন্য হাইপারপ্যারামিটারগুলি কী ব্যবহার করা হয়েছিল?
  • কোন পাইপলাইন রান মডেল তৈরি করেছে?
  • কোন প্রশিক্ষণ রান এই মডেল নেতৃত্বে?
  • TensorFlow এর কোন সংস্করণটি এই মডেলটি তৈরি করেছে?
  • ব্যর্থ মডেলকে কখন ধাক্কা দেওয়া হয়েছিল?

মেটাডেটা স্টোর

MLMD মেটাডেটা নিম্নলিখিত প্রকারের খাতাপত্র একটি ডাটাবেস মেটাডেটা স্টোর নামক।

  1. আপনার এমএল পাইপলাইনের উপাদান/ধাপের মাধ্যমে উৎপন্ন শিল্পকর্ম সম্পর্কে মেটাডেটা
  2. এই উপাদান/ধাপগুলি কার্যকর করার বিষয়ে মেটাডেটা
  3. পাইপলাইন এবং সংশ্লিষ্ট বংশ তথ্য সম্পর্কে মেটাডেটা

মেটাডেটা স্টোর স্টোরেজ ব্যাকএন্ডে এবং থেকে মেটাডেটা রেকর্ড এবং পুনরুদ্ধার করার জন্য API সরবরাহ করে। স্টোরেজ ব্যাকএন্ড প্লাগযোগ্য এবং বাড়ানো যেতে পারে। এমএলএমডি এসকিউএলাইট (যা মেমরি এবং ডিস্ক সমর্থন করে) এবং মাইএসকিউএল বাক্সের বাইরে রেফারেন্স বাস্তবায়ন প্রদান করে।

এই গ্রাফিকটি MLMD- এর বিভিন্ন অংশের একটি উচ্চ-স্তরের ওভারভিউ দেখায়।

এমএল মেটাডেটা ওভারভিউ

মেটাডেটা স্টোরেজ ব্যাকএন্ড এবং স্টোর সংযোগ কনফিগারেশন

MetadataStore বস্তুর একটি সংযোগ কনফিগারেশন যে স্টোরেজে অনুরূপ ব্যবহার করা ব্যাকএন্ড পায়।

  • জাল ডাটাবেস একটি ইন-মেমোরি ডিবি (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)
  • মাইএসকিউএল একটি মাইএসকিউএল সার্ভারে সংযোগ করে।
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 (সঙ্গে একটি মাইএসকিউএল উদাহরণস্বরূপ ব্যবহার দ্রুতশুরু , কানেক্ট-ওভারভিউ ), একটি আরো 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 একটি উপাদান রান রেকর্ড অথবা একটি এমএল কর্মপ্রবাহ এবং রানটাইম পরামিতি একটি পদক্ষেপ। একটি মৃত্যুদন্ড একটি একটি দৃষ্টান্ত হিসাবে ভাবা যেতে পারে ExecutionType । যখন আপনি একটি এমএল পাইপলাইন বা ধাপ চালান তখন মৃত্যুদণ্ড রেকর্ড করা হয়।
  • একটি Event নিদর্শন এবং মৃত্যুদন্ড মধ্যে সম্পর্ক একটি রেকর্ড। যখন একটি এক্সিকিউশন ঘটে, ঘটনাগুলি এক্সিকিউশন দ্বারা ব্যবহৃত প্রতিটি শিল্পকর্ম এবং উত্পাদিত প্রতিটি শিল্পকর্ম রেকর্ড করে। এই রেকর্ডগুলি একটি ওয়ার্কফ্লো জুড়ে বংশ ট্র্যাকিংয়ের অনুমতি দেয়। সমস্ত ঘটনা দেখে, এমএলএমডি জানে কী মৃত্যুদণ্ড হয়েছিল এবং ফলস্বরূপ কী কী জিনিস তৈরি হয়েছিল। এমএলএমডি তারপরে কোনও আর্টিফ্যাক্ট থেকে তার সমস্ত আপস্ট্রিম ইনপুটগুলিতে ফিরে যেতে পারে।
  • একজন ContextType নিদর্শন এবং একটি কর্মপ্রবাহ মৃত্যুদণ্ডের ধারণাগত গ্রুপ, এবং তার কাঠামোগত বৈশিষ্ট্য হল এক ধরনের বর্ণনা করা হয়েছে। যেমন: প্রকল্প, পাইপলাইন রান, পরীক্ষা, মালিক ইত্যাদি।
  • একটি Context একটি একটি দৃষ্টান্ত হল ContextType । এটি গ্রুপের মধ্যে ভাগ করা তথ্য ক্যাপচার করে। উদাহরণস্বরূপ: প্রকল্পের নাম, তালিকা পরিবর্তনের আইডি কমিট, এক্সপেরিমেন্ট টীকা ইত্যাদি এটা তার মধ্যে একটি ব্যবহারকারী-সংজ্ঞায়িত অনন্য নাম আছে ContextType
  • একটি Attribution নিদর্শন এবং প্রেক্ষিতে মধ্যে সম্পর্ক একটি রেকর্ড।
  • একটি Association হত্যাকাণ্ড এবং প্রেক্ষিতে মধ্যে সম্পর্ক একটি রেকর্ড।

এমএলএমডি কার্যকারিতা

এমএল ওয়ার্কফ্লো এবং তাদের বংশের সমস্ত উপাদান/ধাপের ইনপুট এবং আউটপুটগুলি ট্র্যাক করা এমএল প্ল্যাটফর্মগুলিকে বেশ কয়েকটি গুরুত্বপূর্ণ বৈশিষ্ট্য সক্ষম করতে দেয়। নিম্নোক্ত তালিকাটি প্রধান কিছু সুবিধার একটি অ-বিস্তৃত ওভারভিউ প্রদান করে।

  • একটি নির্দিষ্ট ধরণের সমস্ত নিদর্শন তালিকাভুক্ত করুন। উদাহরণ: প্রশিক্ষণপ্রাপ্ত সমস্ত মডেল।
  • তুলনার জন্য একই ধরনের দুটি শিল্পকর্ম লোড করুন। উদাহরণ: দুটি পরীক্ষা -নিরীক্ষার ফলাফল তুলনা করুন।
  • সমস্ত সম্পর্কিত মৃত্যুদন্ডের একটি DAG এবং একটি প্রসঙ্গের তাদের ইনপুট এবং আউটপুট শিল্পকর্ম দেখান। উদাহরণ: ডিবাগিং এবং আবিষ্কারের জন্য একটি পরীক্ষার কর্মপ্রবাহ কল্পনা করুন।
  • কিভাবে একটি আর্টিফ্যাক্ট তৈরি করা হয়েছে তা দেখতে সমস্ত ইভেন্টের মাধ্যমে ফিরে যান। উদাহরণ: কোন মডেলে কোন ডেটা গেছে তা দেখুন; ডেটা ধরে রাখার পরিকল্পনা কার্যকর করা।
  • প্রদত্ত একটি নিদর্শন ব্যবহার করে তৈরি করা সমস্ত শিল্পকর্ম চিহ্নিত করুন। উদাহরণ: একটি নির্দিষ্ট ডেটাসেট থেকে প্রশিক্ষিত সমস্ত মডেল দেখুন; খারাপ ডেটার উপর ভিত্তি করে মডেল চিহ্নিত করুন।
  • আগে একই ইনপুটগুলিতে একটি এক্সিকিউশন চালানো হয়েছে কিনা তা নির্ধারণ করুন। উদাহরণ: একটি উপাদান/ধাপ ইতিমধ্যে একই কাজ সম্পন্ন করেছে কিনা তা নির্ধারণ করুন এবং আগের আউটপুটটি পুনরায় ব্যবহার করা যাবে কিনা।
  • ওয়ার্কফ্লো চলার রেকর্ড এবং কোয়েরি প্রসঙ্গ। উদাহরণ: ওয়ার্কফ্লো চালানোর জন্য ব্যবহৃত মালিক এবং পরিবর্তন তালিকা অনুসরণ করুন; পরীক্ষার মাধ্যমে বংশকে গোষ্ঠীভুক্ত করুন; প্রকল্প দ্বারা শিল্পকর্ম পরিচালনা।
  • বৈশিষ্ট্য এবং 1-হপ আশেপাশের নোডগুলিতে ঘোষণামূলক নোডগুলি ফিল্টার করার ক্ষমতা। উদাহরণ: একটি ধরনের এবং কিছু পাইপলাইন প্রসঙ্গে নিদর্শন দেখুন; টাইপ করা শিল্পকর্মগুলি ফেরত দিন যেখানে একটি প্রদত্ত সম্পত্তির মান একটি পরিসরের মধ্যে থাকে; একই ইনপুটগুলির সাথে একটি প্রসঙ্গে পূর্ববর্তী মৃত্যুদণ্ডগুলি সন্ধান করুন।

দেখুন MLMD টিউটোরিয়াল যে শো আপনি বংশ তথ্য পুনরুদ্ধার করতে MLMD এপিআই এবং মেটাডেটা দোকান কীভাবে ব্যবহার করবেন তা উদাহরণের জন্য।

আপনার এমএল ওয়ার্কফ্লোতে এমএল মেটাডেটা সংহত করুন

আপনি যদি আপনার সিস্টেমে এমএলএমডি সংহত করতে আগ্রহী একটি প্ল্যাটফর্ম ডেভেলপার হন, তাহলে প্রশিক্ষণ কার্য সম্পাদনের ট্র্যাক করার জন্য নিম্ন-স্তরের এমএলএমডি এপিআই ব্যবহার করতে নীচের ওয়ার্কফ্লো ব্যবহার করুন। আপনি পরীক্ষার মেটাডেটা রেকর্ড করতে নোটবুক পরিবেশে উচ্চ স্তরের পাইথন API ব্যবহার করতে পারেন।

এমএল মেটাডেটা উদাহরণ প্রবাহ

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

একটি দূরবর্তী gRPC সার্ভারের সাথে MLMD ব্যবহার করুন

আপনি নীচের দেখানো হিসাবে দূরবর্তী gRPC সার্ভারের সাথে MLMD ব্যবহার করতে পারেন:

  • একটি সার্ভার শুরু করুন
bazel run -c opt --define grpc_no_ares=true  //ml_metadata/metadata_store:metadata_store_server

ডিফল্টরূপে, সার্ভার প্রতি অনুরোধে একটি জাল ইন-মেমরি ডিবি ব্যবহার করে এবং কল জুড়ে মেটাডেটা স্থায়ী করে না। এটি একটি MLMD সঙ্গে কনফিগার করা যাবে MetadataStoreServerConfig SQLite ফাইল বা মাইএসকিউএল দৃষ্টান্ত ব্যবহার করতে। কনফিগ একটি টেক্সট 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
  }
}
  • ক্লায়েন্ট স্টাব তৈরি করুন এবং এটি পাইথনে ব্যবহার করুন
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)
  • RPC কল সহ MLMD ব্যবহার করুন
# 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 এপিআই ডকুমেন্টেশন আরো বিস্তারিত জানার জন্য।

পরীক্ষা করে দেখুন MLMD ঘোষণামূলক নোড ফিল্টারিং কিভাবে MLMD ঘোষণামূলক বৈশিষ্ট্য এবং 1-হপ আশপাশ নোড উপর ক্ষমতা ফিল্টারিং নোড ব্যবহার শিখতে।

এছাড়াও চেক আউট MLMD টিউটোরিয়াল MLMD কীভাবে ব্যবহার করবেন তা আপনার পাইপলাইন উপাদান বংশ ট্রেস জানতে।

MLMD রিলিজ জুড়ে স্কিমা এবং ডেটা মাইগ্রেশন পরিচালনা করার জন্য ইউটিলিটি সরবরাহ করে। MLMD দেখুন গাইড আরো বিস্তারিত জানার জন্য।