به انجمن SIG TFX-Addons بپیوندید و به پیشرفت TFX کمک کنید!

ML فراداده

ML متاداده (MLMD) یک کتابخانه برای ضبط و بازیابی ابرداده در ارتباط با توسعه ML و دانشمند داده گردش است. MLMD بخشی جدایی ناپذیر از است TensorFlow تمدید یا TFX ، اما طراحی شده است به طوری که می توان آن را به طور مستقل استفاده می شود.

هر اجرای خط لوله تولید ML فراداده ای را در بر می گیرد که حاوی اطلاعاتی درباره اجزای مختلف خط لوله ، اجرای آنها (به عنوان مثال اجرای آموزش) و مصنوعات حاصله (به عنوان مثال مدل های آموزش دیده) است. در صورت بروز رفتار یا خطاهای غیرمنتظره خط لوله ، می توان از این فراداده برای تجزیه و تحلیل اصل و نسب اجزای خط لوله و اشکال زدایی استفاده کرد. درباره این فراداده به عنوان معادل ورود به سیستم در توسعه نرم افزار فکر کنید.

MLMD به شما کمک می کند تا به جای تجزیه و تحلیل جداگانه ، تمام قسمتهای بهم پیوسته خط لوله ML خود را درک کرده و تجزیه و تحلیل کنید و به شما کمک می کند به س questionsالات مربوط به خط لوله ML خود پاسخ دهید:

  • مدل روی کدام مجموعه داده آموزش دید؟
  • ابر پارامترهای مورد استفاده برای آموزش مدل چیست؟
  • کدام خط لوله مدل را ایجاد کرده است؟
  • کدام یک از تمرینات منجر به ایجاد این مدل شده است؟
  • کدام نسخه از TensorFlow این مدل را ایجاد کرده است؟
  • چه زمانی مدل شکست خورده تحت فشار قرار گرفت؟

فروشگاه فراداده

MLMD ثبت انواع زیر از ابرداده در یک پایگاه داده به نام فروشگاه متاداده.

  1. فراداده مربوط به مصنوعات تولید شده از طریق اجزای سازنده / مراحل خطوط لوله ML شما
  2. فراداده مربوط به اجرای این م componentsلفه ها / مراحل
  3. فراداده مربوط به خطوط لوله و اطلاعات مربوط به تبار

فروشگاه Metadata API ها را برای ضبط و بازیابی فراداده به داخل و خارج از فضای ذخیره سازی فراهم می کند. فضای ذخیره سازی قابل اتصال است و قابل تمدید است. MLMD پیاده سازی مرجع SQLite (که از حافظه و دیسک پشتیبانی می کند) و MySQL را خارج از جعبه ارائه می دهد.

این گرافیک نمای کلی از اجزای مختلفی را که بخشی از MLMD هستند ، نشان می دهد.

ML Metadata Overview

پیکربندی ذخیره سازی متاداده باطل می شود و ذخیره می شود

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)
  • خروجی متصل به یک سرور داده.
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)

مدل داده

Metadata Store از مدل داده زیر برای ضبط و بازیابی فراداده از فضای ذخیره سازی استفاده می کند.

  • ArtifactType نوع مصنوع و خواص آن که در فروشگاه ابرداده ذخیره شده توصیف می کند. می توانید این نوع ها را در حین پرواز با فروشگاه متادیتا به صورت کد ثبت کنید ، یا می توانید آنها را از یک قالب سریال در فروشگاه بارگیری کنید. به محض ثبت نام ، تعریف آن در طول عمر فروشگاه در دسترس است.
  • Artifact توصیف یک نمونه خاص از یک ArtifactType ، و خواص آن است که به فروشگاه ابرداده نوشته شده است.
  • ExecutionType توصیف یک نوع جزء و یا گام در گردش کار، و پارامترهای زمان اجرا آن است.
  • Execution یک رکورد از یک اجرا جزء یا یک گام در یک گردش کار ML و پارامترهای زمان اجرا است. اعدام می توان به عنوان یک نمونه از یک فکر ExecutionType . هنگام اجرای خط لوله یا مرحله ML ، اعدام ها ثبت می شوند.
  • Event یک رکورد از رابطه بین مصنوعات و اعدام است. وقتی یک اعدام اتفاق می افتد ، حوادث هر مصنوعی را که توسط اعدام استفاده شده است ، و هر مصنوعی را که تولید شده ضبط می کنند. این سوابق امکان ردیابی نسب را در سراسر گردش کار فراهم می کند. MLMD با نگاهی به همه وقایع می داند که چه اعدامی اتفاق افتاده و در نتیجه چه مصنوعاتی ایجاد شده است. سپس MLMD می تواند از هر مصنوع به تمام ورودی های بالادستی خود بازگردد.
  • ContextType یک نوع از گروه های مفهومی از مصنوعات و اعدام در یک گردش کار، و خواص ساختاری آن توصیف می کند. به عنوان مثال: پروژه ها ، اجرای خطوط لوله ، آزمایشات ، مالکان و غیره
  • Context یک نمونه از یک است ContextType . این اطلاعات مشترک در گروه را ضبط می کند. به عنوان مثال: نام پروژه، تغییرات شناسه مرتکب، آزمایش حاشیه نویسی و غیره این یک نام منحصر به فرد تعریف شده توسط کاربر در آن ContextType .
  • Attribution یک رکورد از رابطه بین مصنوعات و زمینه است.
  • Association یک رکورد از رابطه بین اعدام و زمینه است.

عملکرد MLMD

ردیابی ورودی و خروجی همه اجزا components / مراحل در گردش کار ML و تبار آنها به سیستم عامل های ML امکان می دهد چندین ویژگی مهم را فعال کنند. لیست زیر نمای کلی غیرمجاز از برخی از مزایای اصلی را ارائه می دهد.

  • لیست تمام مصنوعات از یک نوع خاص. مثال: همه مدل هایی که آموزش دیده اند.
  • دو مصنوعات از همان نوع را برای مقایسه بارگیری کنید. مثال: مقایسه نتایج حاصل از دو آزمایش.
  • یک DAG از همه اعدامهای مرتبط و مصنوعات ورودی و خروجی آنها از یک زمینه نشان دهید. مثال: گردش کار یک آزمایش برای اشکال زدایی و کشف را تجسم کنید.
  • برای دیدن چگونگی ایجاد یک مصنوع ، به همه رویدادها برگردید. مثالها: ببینید چه داده هایی به یک مدل وارد شده اند. برنامه های نگهداری داده را اجرا کنید.
  • تمام مصنوعاتی را که با استفاده از یک مصنوعات خاص ایجاد شده اند شناسایی کنید. مثالها: همه مدلهای آموزش دیده از یک مجموعه داده خاص را ببینید. مدل ها را بر اساس داده های بد علامت گذاری کنید.
  • تعیین کنید که اعدامی قبلاً روی همان ورودی ها اجرا شده باشد یا خیر. مثال: تعیین اینکه آیا یک م componentلفه / مرحله قبلاً همان کار را به پایان رسانده است یا خیر ، می توان خروجی قبلی را دوباره استفاده کرد.
  • ضبط و جستجوی زمینه های گردش کار. مثالها: مالک و لیست تغییرات مورد استفاده برای اجرای گردش کار را ردیابی کنید. نسب را با آزمایش گروه بندی کنید. با استفاده از پروژه ها ، مصنوعات را مدیریت کنید.

مراجعه کنید آموزش MLMD برای مثال نشان می دهد که شما چگونه به استفاده از API MLMD و فروشگاه ابرداده برای بازیابی اطلاعات اصل و نسب.

ML Metadata را در گردش کار ML خود ادغام کنید

اگر شما یک توسعه دهنده پلت فرم هستید که می خواهید MLMD را در سیستم خود ادغام کنید ، از مثال گردش کار زیر برای استفاده از API های سطح پایین MLMD برای پیگیری اجرای یک کار آموزشی استفاده کنید. همچنین می توانید از API سطح بالاتر 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) اجرای Runner Trainer را ایجاد کنید

# 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

به طور پیش فرض ، سرور از یک db حافظه جعلی برای هر درخواست استفاده می کند و فراداده را در طول تماس ها ادامه نمی دهد. همچنین می تواند با یک 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)
  • از 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 دارای یک API سطح بالا است که می توانید به راحتی با خطوط لوله ML خود استفاده کنید. را ببینید مستندات API MLMD برای جزئیات بیشتر.

همچنین از بررسی آموزش MLMD به یاد بگیرند که چگونه به استفاده از MLMD برای ردیابی اصل و نسب از اجزای خط لوله خود را.

MLMD برنامه هایی را برای کنترل طرحواره و انتقال داده ها در نسخه های مختلف ارائه می دهد. MLMD مشاهده راهنمای برای جزئیات بیشتر.