使用查看器在KUBEFLOW管道中集成Tensorboard

问题描述 投票:1回答:1

我正在使用KUBEFLOW管道来用TF训练KERAS模型,我从一个非常简单的模型开始。

模型训练得很好,并且管道可以正常工作,但是我无法将输出查看器正确地用于TENSORBOARD。从documentation中读取,似乎只需在训练容器(/mlpipeline-ui-metadata.json)的根路径中添加适当的json文件就足够了,但是即使这样做,实验运行的工件部分也没有出现任何内容(同时可以正确看到KERAS日志)。

这是我的配置方式:

mlpipeline-ui-metadata.json(直接从DOCKERFILE添加)

{
    "version": 1,
    "outputs": [
    {
        "type": "tensorboard",
        "source": "/tf-logs"  #Just a placeholder at the moment
    }
    ]
}

管道

import kfp
from kfp import dsl

from kubernetes.client.models import V1EnvVar

def train_op(epochs,batch_size,dropout,first_layer_size,second_layer_size):
    dsl.ContainerOp(
        image='MY-IMAGE',
        name='my-train',
        container_kwargs={"image_pull_policy": "Always", 'env': [
            V1EnvVar('TRAIN_EPOCHS', epochs),
            V1EnvVar('TRAIN_BATCH_SIZE', batch_size),
            V1EnvVar('TRAIN_DROPOUT', dropout),
            V1EnvVar('TRAIN_FIRST_LAYER_SIZE', first_layer_size),
            V1EnvVar('TRAIN_SECOND_LAYER_SIZE', second_layer_size),
            ]},
        command=['sh', '-c', '/src/init_script.sh'],
    ).set_memory_request('2G').set_cpu_request('2')

@dsl.pipeline(
    name='My model pipeline',
    description='Pipeline for model training'
)
def my_model_pipeline(epochs,batch_size,dropout,first_layer_size,second_layer_size):

    train_task = train_op(epochs,batch_size,dropout,first_layer_size,second_layer_size)

if __name__ == '__main__':
    kfp.compiler.Compiler().compile(my_model_pipeline, 'my_model.zip')

我已经尝试访问运行中的POD(kubectl exec ..),并且确认该文件确实在正确的位置。

通过我使用KUBEFLOW v0.5的方式

kubernetes tensorboard kubeflow
1个回答
0
投票

TL; DRsource部分应指向共享存储上的位置,而不是Pod的本地文件系统路径

source中的mlpipeline-ui-metadata.json部分应指向pipeline-ui pod以后可以引用它的位置,即它应该位于共享存储s3(如果在AWS上),已安装的Kubernetes卷(如果在- prem)。

Kubeflow的工作方式是,在运行结束时,它只需压缩mlpipeline-ui-metadata.json并将其存储在微型存储器中。当您单击Artifacts部分时,UI在压缩的json中查找此source部分,并尝试读取tf事件文件。如果tf事件文件未从Pod移到共享存储中,则它们将不会被读取,因为它仅在临时Pod文件系统上。

© www.soinside.com 2019 - 2024. All rights reserved.