Как экспортировать метрики из контейнерного компонента в конвейерах kubeflow 0.2.5
У меня есть конвейер, состоящий из 3 контейнерных компонентов. В последнем компоненте я записываю метрики, которые хочу, в файл с именем/mlpipeline-metrics.json
, как это объясняется здесь. Это код Python, который я использовал.
metrics = {
'metrics': [
{
'name': 'accuracy',
'numberValue': accuracy,
'format': 'PERCENTAGE',
},
{
'name': 'average-f1-score',
'numberValue': average_f1_score,
'format': 'PERCENTAGE'
},
]
}
with open('/mlpipeline-metrics.json', 'w') as f:
json.dump(metrics, f)
Я также попытался написать файл со следующим кодом, как в приведенном выше примере.
with file_io.FileIO('/mlpipeline-metrics.json', 'w') as f:
json.dump(metrics, f)
Конвейер работает нормально, без ошибок. Но он не будет отображать показатели во внешнем интерфейсе пользователя.
Я думаю, это как-то связано со следующим кодовым блоком.
def metric_op(accuracy, f1_scores):
return dsl.ContainerOp(
name='visualize_metrics',
image='gcr.io/mgcp-1190085-asml-lpd-dev/kfp/jonas/container_tests/image_metric_comp',
arguments=[
'--accuracy', accuracy,
'--f1_scores', f1_scores,
]
)
Это код, который я использую для создания ContainerOp
из контейнерного компонента. Обратите внимание, я не указал ни одногоfile_outputs
. В другихContainerOp
Я должен указать file_outputs
чтобы иметь возможность передавать переменные на следующие этапы конвейера. Следует ли мне сделать что-то подобное, чтобы сопоставить/mlpipeline-metrics.json
на что-то, чтобы конвейеры kubeflow это обнаружили?
Я использую развертывание управляемых конвейеров платформы AI с Kubeflow Pipelines 0.2.5 с Python 3.6.8.
Любая помощь приветствуется.
2 ответа
Итак, после некоторых проб и ошибок я наконец пришел к решению. И я счастлив сказать, что моя интуиция была правильной. Это имело какое-то отношение кfile_outputs
Я не уточнил. Чтобы иметь возможность экспортировать свои метрики, вам нужно будет установитьfile_outputs
следующим образом.
def metric_op(accuracy, f1_scores):
return dsl.ContainerOp(
name='visualize_metrics',
image='gcr.io/mgcp-1190085-asml-lpd-dev/kfp/jonas/container_tests/image_metric_comp',
arguments=[
'--accuracy', accuracy,
'--f1_scores', f1_scores,
],
file_outputs={
'mlpipeline-metrics': '/mlpipeline-metrics.json'
}
)
Вот еще один способ показать метрики, когда вы пишете метод на основе функций Python:
# Define your components code as standalone python functions:======================
def add(a: float, b: float) -> NamedTuple(
'AddOutput',
[
('sum', float),
('mlpipeline_metrics', 'Metrics')
]
):
'''Calculates sum of two arguments'''
sum = a+b
metrics = {
'add_metrics': [
{
'name': 'sum',
'numberValue': float(sum),
}
]
}
print("Add Result: ", sum) # this will print it online in the 'main-logs' of each task
from collections import namedtuple
addOutput = namedtuple(
'AddOutput',
['sum', 'mlpipeline_metrics'])
return addOutput(sum, metrics) # the metrics will be uploaded to the cloud
Примечание. Здесь я просто использую базовую функцию. Я не использую вашу функцию.