Как экспортировать метрики из контейнерного компонента в конвейерах 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

Примечание. Здесь я просто использую базовую функцию. Я не использую вашу функцию.

Другие вопросы по тегам