AWS SageMaker训练管道模式读取随机字节数。

3
我正在使用自己的算法,并从S3以JSON格式加载数据。由于数据量庞大,我需要设置pipe模式。我已经按照以下网址中给出的说明进行操作:https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/pipe_bring_your_own/train.py。结果,我能够成功设置pipe并成功读取数据。唯一的问题是fifo pipe没有按照指定的字节数读取数据。例如,给定s3-fifo-channel的路径,
    number_of_bytes_to_read = 555444333
    with open(fifo_path, "rb", buffering=0) as fifo:
        while True:
            data = fifo.read(number_of_bytes_to_read)

数据的长度应该为555444333字节,但通常少于12,123,123字节左右。S3中的数据如下所示:

s3://s3-bucket/1122/part1.json
s3://s3-bucket/1122/part2.json
s3://s3-bucket/1133/part1.json
s3://s3-bucket/1133/part2.json

等等。 有没有办法强制读取特定数量的字节?任何建议都将很有帮助。谢谢。

1个回答

2

我们只需要在缓冲区中添加一些正值,问题就解决了。代码将缓冲555444333字节,然后每次处理111222333字节。由于我们的文件是Json格式,我们可以轻松地将传入的字节转换为字符串,然后通过删除不完整的json部分来清除字符串。最终的代码如下:

number_of_bytes_to_read = 111222333
number_of_bytes_to_buffer = 555444333
with open(fifo_path, "rb", buffering=number_of_bytes_to_buffer) as fifo:
    while True:
      data = fifo.read(number_of_bytes_to_read)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接