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

nab*_*bla 2 amazon-s3 amazon-ec2 amazon-web-services 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)        },
Run Code Online (Sandbox Code Playgroud)

场

    "RoleArn": role,
Run Code Online (Sandbox Code Playgroud)

角色从何而来

    from sagemaker import get_execution_role
    role = get_execution_role()
Run Code Online (Sandbox Code Playgroud)

并且是

    arn:aws:iam::<ACCOUNT>:role/service-role/AmazonSageMaker-ExecutionRole-<HIDDEN>
Run Code Online (Sandbox Code Playgroud)

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

ish*_*aaq 5

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

s3://bucket
??? LABEL-inputdata
    ??? train.csv
    ??? validation.csv
Run Code Online (Sandbox Code Playgroud)

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

/opt/ml/input/data/train/.csv
Run Code Online (Sandbox Code Playgroud)

最后,xgboost实现将.csv文件视为隐藏文件并对其进行投诉。

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

s3:bucket
??? LABEL-inputdata
    ??? train
    ?   ??? data.csv
    ??? validation
        ??? data.csv
Run Code Online (Sandbox Code Playgroud)

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

   "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"
        }
Run Code Online (Sandbox Code Playgroud)