aws sagemaker обучает трубе режим чтения случайного числа байтов - PullRequest
0 голосов
/ 07 февраля 2020

Я использую свой собственный алгоритм и загружаю данные в формате json из s3. Из-за огромного размера данных мне нужно настроить режим конвейера. Я следовал инструкциям, приведенным в: https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/pipe_bring_your_own/train.py. В результате я могу настроить конвейер и прочитать данные успешно. Единственная проблема заключается в том, что канал fifo не читает указанное количество байтов. Например, заданный путь к s3-fifo-каналу,

    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 Ответ

0 голосов
/ 10 февраля 2020

Нам просто нужно было добавить некоторое положительное значение в буферизацию, и проблема была решена. Код буферизует 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)
...