Handler

Info

Данный модуль предназначен, в первую очередь, для разработчиков, которые хотят глубже понять устройство библиотеки, а также для тех, кто собирается реализовывать свои модули.

Описание

Родительский класс для всех хэндлеров.

Info

В обработчиках, в зависимости от места размещения данных, может происходить их разбиение следующими способами:

  • данные размещены на диске - сначала производится разделение данных на макробатчи (macrobatch) - блоки, которые целиком размещаются на GPU, после чего идёт разбиение макробатча на более мелкие батчи (batch), которые уже подаются непосредственно на вход модели;
  • данные уже размещены на GPU - происходит только разбиение на батчи, подаваемые непосредственно на вход модели.

Инициализация

def __init__(self, mod, onBatchFinish=None, batchsize=128):

Параметры

Параметр Возможные типы Описание По умолчанию
mod Module Модель, на вход которой будут подаваться данные -
onBatchFinish callable Функция, которая будет вызываться по окончании обработки батча данных None
batchsize int Размер батча 128

Пояснения

-

Методы

handleFromHost

def handleFromHost(self, data, state=None, macroBatchSize=10000, onMacroBatchFinish=None, random=True):

Функционал

Метод для обработки данных, когда они размещены на диске. Разбивает данные на макробатчи и применяет к каждому из них метод handle().

Параметры

Параметр Возможные типы Описание По умолчанию
data tensor Тензор данных -
state dict Словарь, содержащий информацию о состоянии обработки данных. Например, величину ошибки на валидации None
macroBatchSize int Размер макробатча. Данные будут разбиты на макроблоки размера macroBatchSize 10000
onMacroBatchFinish callable Функция, которая будет вызываться после обработки макроблока None
random bool Перемешивать ли макробатчи в случайном порядке перед обработкой True

Пояснения

-

handle

def handle(self, data, state=None, random=True):

Функционал

Метод для обработки данных, когда они размещены на GPU. Разбивает данные на батчи и применяет к каждому из них метод handleBatch().

Параметры

Параметр Возможные типы Описание По умолчанию
data GPUArray Тензор данных (переданный макробатч), размещённый на GPU -
state dict Словарь, содержащий информацию о состоянии обработки данных, например, величину ошибки на валидации None
random bool Перемешивать ли блоки данных в случайном порядке перед обработкой True

Пояснения

-

getDataSize

@staticmethod
def getDataSize(data):

Функционал

Возвращает размер данных. Перед подсчетом размера избавляется от тривиальной вложенности данных в списки по типу [[[data]]].

Параметры

Параметр Возможные типы Описание По умолчанию
data tensor Тензор данных -

Пояснения

-

parseShapeTree

@classmethod
def parseShapeTree(cls, data, onData, auxdata=None):

Функционал

Проходит по дереву вложенных списков тензоров данных. Применяет к каждому листу дерева функцию onData. Если в качестве параметра указаны вспомогательные данные auxdata, в качестве второго аргумента функции onData передается соответствующий элемент из auxdata.

Параметры

Параметр Возможные типы Описание По умолчанию
data Union[tensor, list] Тензор или вложенные списки тензоров данных -
onData callable Функция, которой обрабатываются данные -
auxdata Union[tensor, list] Тензор вложенные списки тензоров вспомогательных данных None

Пояснения

-

sliceData

@classmethod
def sliceData(cls, data, idx, batchsize, postSlice):

Функционал

Возвращает нарезку тензора данных и возвращает блок размера batchsize порядкового номера idx. Перед тем, как вернуть блок, применяет к нему функцию postSlice.

Параметры

Параметр Возможные типы Описание По умолчанию
data tensor Тензор данных -
idx int Порядковый номер блока данных -
batchsize int Размер блока данных -
postSlice callable Функция, которая будет применена к блоку данных перед ее возвращением. Например, разместить данные на GPU -

Пояснения

-

onMacroBatchStart

def onMacroBatchStart(self, idx, macroBatchSize, state):

Функционал

Метод, который выполняется перед обработкой макробатча. По умолчанию не делает ничего, но может быть определён в классах-наследниках. Как правило, используется для вывода отладочной информации о состоянии обработки данных.

Параметры

Параметр Возможные типы Описание По умолчанию
idx int Порядковый номер блока данных -
macroBatchSize int Размер макроблока -
state dict Словарь, содержащий информацию о состоянии обработки данных. Например, величину ошибки на валидации -

Пояснения

-

onMacroBatchFinish

def onMacroBatchFinish(self, idx, macroBatchSize, state):

Функционал

Метод, который выполняется после обработки макробатча. По умолчанию не делает ничего, но может быть определён в классах-наследниках. Как правило, используется для вывода отладочной информации о состоянии обработки данных.

Параметры

Параметр Возможные типы Описание По умолчанию
idx int Порядковый номер блока данных -
macroBatchSize int Размер макроблока -
state dict Словарь, содержащий информацию о состоянии обработки данных. Например, величину ошибки на валидации -

Пояснения

-

handleBatch

def handleBatch(self, batch, idx, state):
Функционал

Абстрактный метод, обрабатывающий батч данных batch. Метод необходимо переопределить в классе-потомке.

Параметры

Параметр Возможные типы Описание По умолчанию
batch tensor Блок данных -
idx int Порядковый номер блока данных -
state dict Словарь, содержащий информацию о состоянии обработки данных. Например, величину ошибки на валидации -

Пояснения

-