Почему мой погрузчик данных на основе Numpy очень медленный и нестабильный, когда итерация по большим данным клещейPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему мой погрузчик данных на основе Numpy очень медленный и нестабильный, когда итерация по большим данным клещей

Сообщение Anonymous »

В настоящее время я работаю над моделью, похожей на DeepLob, используя высокочастотные финансовые данные на уровне клещей. Из -за огромного объема и необходимости структурировать данные в формат временных рядов, невозможно загрузить весь набор данных одновременно.

Код: Выделить всё

import numpy as np
import os
import gc

class Np_DataLoader_Cache:

def __init__(self, data_dir, file_list, batch_size, train_ratio=0.8):
self.data_dir = data_dir
self.batch_size = batch_size
self.file_list = file_list
self.train_ratio = train_ratio

self.current_file_id = -1
self.current_data = None

self.shapes = []
for file in file_list:
with open(os.path.join(data_dir, file), 'rb') as f:
version = np.lib.format.read_magic(f)
shape, fortran_order, dtype = np.lib.format.read_array_header_1_0(f)
self.shapes.append(shape[0])

self.prefix_sums = [0]
for s in self.shapes:
self.prefix_sums.append(self.prefix_sums[-1] + s)

self.total_samples = self.prefix_sums[-1]
self.train_end_idx = int(self.total_samples * self.train_ratio)
self.valid_start_idx = self.train_end_idx

def _load_file_if_needed(self, file_id):

if self.current_file_id != file_id:
if self.current_data is not None:
del self.current_data
gc.collect()
filename = self.file_list[file_id]
self.current_data = np.load(os.path.join(self.data_dir, filename), mmap_mode='r')
self.current_file_id = file_id

def _get_batch(self, start_row_global, end_row_global):

files_needed = []
current_row = start_row_global
file_id = 0

while current_row < end_row_global:

while file_id < len(self.prefix_sums) - 1 and self.prefix_sums[file_id + 1] = end_row:
return None
return self._get_batch(start_row, end_row)

def get_valid_batch(self, batch_index):
start_row = self.valid_start_idx + batch_index * self.batch_size
end_row = min(self.valid_start_idx + (batch_index + 1) * self.batch_size, self.total_samples)
if start_row >= end_row:
return None
return self._get_batch(start_row, end_row)

def close(self):
if self.current_data is not None:
del self.current_data
self.current_data = None
self.current_file_id = -1
gc.collect()
< /code>
Однако во время обучения я обнаружил, что процесс загрузки данных чрезвычайно медленная - не само вычисление модели, а в частности, время, необходимое для итерации над набором данных.import os
data_dir = './LOB_OFI_sortcode_NoResample/'
filelist = sorted([f for f in os.listdir(data_dir) if 'npy' in f])[:20]
from DataLoader_NP_Cache import Np_DataLoader_Cache
demo2 = Np_DataLoader_Cache(data_dir, filelist, batch_size = 4096, train_ratio = 0.8)
batch_nums = demo2.train_end_idx // demo2.batch_size + 1

import time
begin_t = time.time()
very_first = time.time()
for batch_index in range(batch_nums):

mini_batch = demo2.get_train_batch(batch_index)

if batch_index % 5000 == 0:

end_t = time.time()
print( f"Batch of {batch_index} Done.  Process Ratio is {batch_index / batch_nums}" )
elapsed_time = end_t - begin_t
print(f"This 5000Batchs using time: {elapsed_time:.2f} s")
begin_t = time.time()

end_t = time.time()
elapsed_time = end_t - very_first
print(f"Total: {elapsed_time:.2f} s")

Я заметил, что:
Загружена в разумную скорость (~ 15 секунд на 5000 -й платформы), preta Иногда партия внезапно займет более 100 секунд, а скорость сильно колеблется. И иногда это кажется довольно рано, и иногда это появляется позже, точно так же, как изображение, которую я разместил. Но на самом деле это часто появляется для третьих или четвертых 5000 партий. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/796 ... hen-iterat
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Очень неожиданная производительность fprintf против std::ofstream (fprintf очень медленный)
    Anonymous » » в форуме C++
    0 Ответы
    86 Просмотры
    Последнее сообщение Anonymous
  • Итерация в петле по большим числам [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Мой MMAP терпит неудачу, когда эльфийский погрузчик Linux не
    Anonymous » » в форуме Linux
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Мой MMAP терпит неудачу, когда эльфийский погрузчик Linux не
    Anonymous » » в форуме Linux
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Loadercallbacks.onloadfinired не вызывается, когда погрузчик ограничивается и содержит данные
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»