AWS Sagemaker - "Hidden file found in the data path! Remove that before training."

AWS Sagemaker - "Hidden file found in the data path! Remove that before training."

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

"ClientError: Hidden file found in the data path! Remove that before training."

S3控制台显示输出路径为空(我也尝试新建目录无果)。未为存储桶启用版本控制。

令人惊讶的是,google在此错误消息下找不到任何内容。

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

   "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 文件就是全部。特别是,没有空 "directory" 这可能是 "hidden file" 的意思。

我想我以前见过这个...你能检查一下 S3 训练和验证位置吗?除了训练和验证文件,那里不应该有任何东西。

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

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

根据您上面的 InputDataConfig,SageMaker 必须将其下载到文件系统上的文件夹,以便 xgboost 训练算法到 运行。它根据频道名称和您提供的 S3Uri 前缀执行此操作。前缀被截断以确定要下载到的 folder/file 的名称。因此,在您的示例中,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"
        }

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

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

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