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

时间:2018-07-11 20:06:54

标签: amazon-web-services amazon-s3 amazon-ec2 xgboost amazon-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 dashboard view of data-path。这两个csv文件全部存在。特别是,没有空的“目录”可能就是“隐藏文件”的含义。

3 个答案:

答案 0 :(得分:3)

好的,您在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"
        }

答案 1 :(得分:0)

我想我已经看过这一本书了……您能检查一下S3培训和验证位置吗?除了培训和有效文件之外,什么都没有。

答案 2 :(得分:0)

我遇到了同样的问题,并且没有隐藏文件

我使用了一系列的培训。 PCA,然后在XGBoost中使用PCA的结果。 我为PCA使用了 recordio-protobuf 格式,并选择了文件扩展名 rio 。第一次训练(PCA)顺利通过,第二次(XGBoost)失败。 删除文件 train.rio 后,第二次培训顺利通过。 然后,我决定将文件 train.rio 重命名为 train.bin ,现在一切正常。

对我来说这有点奇怪。扩展名为 rio 的文件是*隐藏文件** ...