Trang này được dịch bởi Cloud Translation API.
Switch to English

Siêu dữ liệu ML

Siêu dữ liệu ML (MLMD) là một thư viện để ghi và truy xuất siêu dữ liệu được liên kết với quy trình làm việc của nhà phát triển ML và nhà khoa học dữ liệu. MLMD là một phần không thể thiếu của TensorFlow Extended (TFX) , nhưng được thiết kế để nó có thể được sử dụng độc lập. Là một phần của nền tảng TFX rộng hơn, hầu hết người dùng chỉ tương tác với MLMD khi kiểm tra kết quả của các thành phần đường ống, ví dụ như trong sổ ghi chép hoặc trong TensorBoard.

Biểu đồ dưới đây cho thấy các thành phần là một phần của MLMD. Phần phụ trợ lưu trữ có thể cắm được và có thể mở rộng. MLMD cung cấp các triển khai tham chiếu cho SQLite (hỗ trợ trong bộ nhớ và đĩa) và MySQL bên ngoài. MetadataStore cung cấp các API để ghi và truy xuất siêu dữ liệu đến và đi từ phần phụ trợ lưu trữ. MLMD có thể đăng ký:

  • siêu dữ liệu về các tạo tác được tạo thông qua các thành phần / bước của đường ống
  • siêu dữ liệu về việc thực thi các thành phần / bước này
  • siêu dữ liệu về đường ống và thông tin dòng dõi liên quan

Các khái niệm được giải thích chi tiết hơn bên dưới.

Tổng quan về siêu dữ liệu ML

Chức năng được MLMD kích hoạt

Theo dõi đầu vào và đầu ra của tất cả các thành phần / bước trong quy trình làm việc ML và dòng của chúng cho phép nền tảng ML kích hoạt một số tính năng quan trọng. Danh sách sau đây cung cấp một cái nhìn tổng quan không đầy đủ về một số lợi ích chính.

  • Liệt kê tất cả các Đồ tạo tác của một loại cụ thể. Ví dụ: tất cả các Mô hình đã được đào tạo.
  • Tải hai Đồ tạo tác cùng loại để so sánh. Ví dụ: so sánh kết quả từ hai thí nghiệm.
  • Hiển thị một DAG của tất cả các lần thực thi liên quan và các tạo tác đầu vào và đầu ra của chúng của một ngữ cảnh. Ví dụ: trực quan hóa quy trình làm việc của một thử nghiệm để gỡ lỗi và khám phá.
  • Lặp lại qua tất cả các sự kiện để xem cách tạo tác được tạo ra. Ví dụ: xem dữ liệu nào được đưa vào một mô hình; thực thi các kế hoạch lưu giữ dữ liệu.
  • Xác định tất cả các hiện vật đã được tạo ra bằng cách sử dụng một hiện vật nhất định. Ví dụ: xem tất cả các Mô hình được đào tạo từ một tập dữ liệu cụ thể; đánh dấu các mô hình dựa trên dữ liệu xấu.
  • Xác định xem một thực thi đã được chạy trên cùng một đầu vào trước đó hay chưa. Ví dụ: xác định xem một thành phần / bước đã hoàn thành công việc tương tự và đầu ra trước đó có thể được sử dụng lại hay không.
  • Ghi lại và truy vấn ngữ cảnh của dòng công việc chạy. Ví dụ: theo dõi chủ sở hữu và danh sách thay đổi được sử dụng để chạy dòng công việc; nhóm dòng dõi bằng các thí nghiệm; quản lý hiện vật theo dự án.

Phần bổ trợ lưu trữ siêu dữ liệu và cấu hình kết nối cửa hàng

Trước khi thiết lập kho dữ liệu, bạn sẽ cần thiết lập nhập.

from ml_metadata import metadata_store
from ml_metadata.proto import metadata_store_pb2

Đối tượng MetadataStore nhận cấu hình kết nối tương ứng với phần phụ trợ lưu trữ được sử dụng.

  • Cơ sở dữ liệu giả mạo cung cấp một DB trong bộ nhớ (sử dụng SQLite) để thử nghiệm nhanh và chạy cục bộ. Cơ sở dữ liệu bị xóa khi đối tượng lưu trữ bị phá hủy.
connection_config = metadata_store_pb2.ConnectionConfig()
connection_config.fake_database.SetInParent() # Sets an empty fake database proto.
store = metadata_store.MetadataStore(connection_config)
  • SQLite đọc và ghi tệp từ đĩa.
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 kết nối với máy chủ 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)

Cửa hàng siêu dữ liệu

Các khái niệm

Cửa hàng siêu dữ liệu sử dụng mô hình dữ liệu sau để ghi và truy xuất siêu dữ liệu từ phần phụ trợ lưu trữ.

  • ArtifactType mô tả loại phần mềm và thuộc tính của nó được lưu trữ trong Cửa hàng siêu dữ liệu. Các loại này có thể được đăng ký nhanh chóng với Cửa hàng siêu dữ liệu bằng mã hoặc chúng có thể được tải trong cửa hàng từ định dạng được tuần tự hóa. Khi một loại được đăng ký, định nghĩa của nó sẽ có sẵn trong suốt thời gian tồn tại của cửa hàng.
  • Artifact mô tả các phiên bản cụ thể của ArtifactType và các thuộc tính của nó được ghi vào Metadata Store.
  • ExecutionType mô tả một loại thành phần hoặc bước trong quy trình làm việc và các tham số thời gian chạy của nó.
  • Execution là bản ghi của một thành phần chạy hoặc một bước trong dòng công việc ML và các tham số thời gian chạy. Một Execution có thể được coi là một phiên bản của ExecutionType . Mỗi khi nhà phát triển chạy đường ống hoặc bước ML, các lần thực thi được ghi lại cho mỗi bước.
  • Event là bản ghi về mối quan hệ giữa ArtifactExecutions . Khi Execution xảy ra, Event sẽ ghi lại mọi Tạo tác đã được Execution sử dụng và mọi Artifact đã được tạo ra. Những hồ sơ này cho phép theo dõi xuất xứ trong suốt quy trình làm việc. Bằng cách xem xét tất cả các Sự kiện, MLMD biết được Điều gì đã xảy ra, Kết quả là Tạo tác nào được tạo ra và có thể lặp lại từ bất kỳ Artifact nào đến tất cả các đầu vào ngược dòng của nó.
  • ContextType mô tả một loại nhóm khái niệm của ArtifactsExecutions trong một quy trình làm việc và các thuộc tính cấu trúc của nó. Ví dụ: dự án, chạy đường ống, thử nghiệm, chủ sở hữu.
  • Context là một phiên bản của ContextType . Nó nắm bắt thông tin được chia sẻ trong nhóm. Ví dụ: tên dự án, id cam kết danh sách thay đổi, chú thích thử nghiệm. Nó có một tên duy nhất do người dùng xác định trong ContextType của nó.
  • Attribution là bản ghi về mối quan hệ giữa Phần tạo tác và Bối cảnh.
  • Association là một bản ghi về mối quan hệ giữa Executions và Contexts.

Theo dõi quy trình làm việc ML với Siêu dữ liệu ML

Dưới đây là biểu đồ mô tả cách API siêu dữ liệu ML cấp thấp có thể được sử dụng để theo dõi việc thực thi nhiệm vụ đào tạo, sau đó là các ví dụ về mã. Lưu ý rằng mã trong phần này hiển thị API siêu dữ liệu ML sẽ được các nhà phát triển nền tảng ML sử dụng để tích hợp nền tảng của họ với Siêu dữ liệu ML chứ không phải trực tiếp bởi nhà phát triển. Ngoài ra, chúng tôi sẽ cung cấp các API Python cấp cao hơn có thể được các nhà khoa học dữ liệu sử dụng trong môi trường sổ ghi chép để ghi lại siêu dữ liệu thử nghiệm của họ.

Luồng ví dụ về siêu dữ liệu ML

1) Trước khi thực hiện có thể được ghi lại, ArtifactTypes phải được đăng ký.

# 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) Trước khi có thể ghi lại các lần thực thi, ExecutionTypes phải được đăng ký cho tất cả các bước trong quy trình làm việc ML của chúng tôi.

# Create 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) Sau khi các loại được đăng ký, chúng tôi tạo một Tạo tác DataSet.

# Declare 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) Với DataSet Artifact được tạo, chúng tôi có thể tạo Thực thi cho một lần chạy 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])[0]

5) Khai báo sự kiện đầu vào và đọc dữ liệu.

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

# Submit input event to the Metadata Store
store.put_events([input_event])

6) Bây giờ đầu vào đã được đọc, chúng ta khai báo tạo tác đầu ra.

# Declare 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) Với Tạo tác mô hình được tạo, chúng ta có thể ghi lại sự kiện đầu ra.

# 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) Bây giờ mọi thứ đã được ghi lại, việc thực thi có thể được đánh dấu là đã hoàn thành.

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

9) Sau đó, các tạo tác và quá trình thực thi có thể được nhóm vào một Bối cảnh (ví dụ: thử nghiệm).

# Similarly, 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])

Với máy chủ grpc từ xa

1) Khởi động máy chủ với

bazel run -c opt --define grpc_no_ares=true  //ml_metadata/metadata_store:metadata_store_server

2) Tạo sơ khai máy khách và sử dụng nó trong 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)

3) Sử dụng MLMD với các cuộc gọi 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)