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