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 | Словарь, содержащий информацию о состоянии обработки данных. Например, величину ошибки на валидации | - |
Пояснения
-