首页 > 解决方案 > AWS Sagemaker - “在数据路径中找到隐藏文件!在训练之前将其删除。”

问题描述

我正在尝试使用 Amazon Sagemaker 训练模型(xgboost: eu-west-1': '685385470294.dkr.ecr.eu-west-1.amazonaws.com/xgboost:latest')。但我总是在开始培训工作后不久收到相同的错误消息:

“ClientError:在数据路径中找到隐藏文件!在训练之前将其删除。”

S3 控制台显示输出路径为空(我也尝试创建一个新目录,但无济于事)。未为存储桶启用版本控制。

令人惊讶的是,谷歌在此错误消息下没有发现任何内容。

我已将输入和输出配置如下:

   "InputDataConfig": [
        {
            "ChannelName": "train",
            "DataSource": {
                "S3DataSource": {
                    "S3DataType": "S3Prefix",
                    "S3Uri": "s3://{}/{}-inputdata/train".format(s3_utils.bucket, LABEL)
                }
            },
            "ContentType": "csv",
            "CompressionType": "None"
        },
        {
            "ChannelName": "validation",
            "DataSource": {
                "S3DataSource": {
                    "S3DataType": "S3Prefix",
                    "S3Uri": "s3://{}/{}-inputdata/validation".format(s3_utils.bucket, LABEL)
                }
            },
            "ContentType": "csv",
            "CompressionType": "None"
        }
    ],
    "OutputDataConfig": {
        "S3OutputPath": "s3://{}/{}-xgboost-output".format(s3_utils.bucket, LABEL)        },

    "RoleArn": role,

角色从何而来

    from sagemaker import get_execution_role
    role = get_execution_role()

并且是

    arn:aws:iam::<ACCOUNT>:role/service-role/AmazonSageMaker-ExecutionRole-<HIDDEN>

这是显示数据路径的屏幕截图:数据路径的 S3 仪表板视图。这两个 csv 文件就是全部。特别是,没有可能是“隐藏文件”可能意味着的空“目录”。

标签: amazon-web-servicesamazon-s3amazon-ec2xgboostamazon-sagemaker

解决方案


好的,您在S3Uri此处设置的前缀。根据您的屏幕截图,我认为您的存储桶看起来像这样(树形):

s3://bucket
└── LABEL-inputdata
    ├── train.csv
    └── validation.csv

根据您的InputDataConfig上述情况,SageMaker 必须将其下载到文件系统上的文件夹中xgboost才能运行训练算法。它基于频道名称和S3Uri您提供的前缀来执行此操作。前缀被切掉以确定要下载到的文件夹/文件的名称。因此,在您的示例中,train频道下载为:

/opt/ml/input/data/train/.csv

最后,xgboost实现将该.csv文件视为隐藏文件并抱怨它。

为了让它工作,你可以像这样在 s3 中重新排列你的数据......

s3:bucket
└── LABEL-inputdata
    ├── train
    │   └── data.csv
    └── validation
        └── data.csv

..并将您的输入数据配置更改为:

   "InputDataConfig": [
        {
            "ChannelName": "train",
            "DataSource": {
                "S3DataSource": {
                    "S3DataType": "S3Prefix",
                    "S3Uri": "s3://{}/{}-inputdata/train/".format(s3_utils.bucket, LABEL)
                }
            },
            "ContentType": "csv",
            "CompressionType": "None"
        },
        {
            "ChannelName": "validation",
            "DataSource": {
                "S3DataSource": {
                    "S3DataType": "S3Prefix",
                    "S3Uri": "s3://{}/{}-inputdata/validation/".format(s3_utils.bucket, LABEL)
                }
            },
            "ContentType": "csv",
            "CompressionType": "None"
        }

推荐阅读