Как полностью отключить сериализацию модели / веса с помощью настроек AllenNLP?

Я хочу отключить сериализацию всех весов модели / состояния в стандартном обучении модели AllenNLP с использованием jsonnet файлов конфигурации.

Причина в том, что я запускаю автоматическую оптимизацию гиперпараметров с помощью Optuna. Тестирование десятков моделей довольно быстро заполняет драйв. Я уже отключил контрольную точку, установив num_serialized_models_to_keep на 0:

trainer +: {
    checkpointer +: {
        num_serialized_models_to_keep: 0,
    },

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

Помимо параметра, который я установил выше, существуют ли какие-либо параметры тренера или контрольной точки по умолчанию для отключения всей сериализации весов моделей? Я проверил документы API и веб-страницу, но не нашел их.

Если мне нужно самому определить функциональность для такой опции, какие базовые функции из AllenNLP я должен переопределить в моем подклассе модели?

В качестве альтернативы, есть ли у них какая-либо полезность для очистки промежуточного состояния модели после завершения обучения?

РЕДАКТИРОВАТЬ: ответ @petew показывает решение для настраиваемого контрольного указателя, но я не понимаю как сделать этот код доступным для allennlp train для моего варианта использования.

Я хочу сделать custom_checkpointer вызываемым из файла конфигурации, как показано ниже:

trainer +: {
    checkpointer +: {
        type: empty,
    },

Как лучше всего загружать контрольную точку при вызове allennlp train --include-package <$my_package>?

У меня есть my_package с подмодулями в подкаталогах, таких как my_package/modelss и my_package/training. Я хочу разместить собственный код контрольной точки в my_package/training/custom_checkpointer.py Моя основная модель находится в my_package/models/main_model.py. Нужно ли мне редактировать или импортировать какой-либо код / ​​функции в моем классе main_model, чтобы использовать настраиваемую контрольную точку?


person GJacobs    schedule 12.10.2020    source источник


Ответы (1)


Вы можете создать и зарегистрировать собственный Checkpointer, который в основном ничего не делает:

@Checkpointer.register("empty")
class EmptyCheckpointer(Registrable):
    def maybe_save_checkpoint(
        self, trainer: "allennlp.training.trainer.Trainer", epoch: int, batches_this_epoch: int
    ) -> None:
        pass

    def save_checkpoint(
        self,
        epoch: Union[int, str],
        trainer: "allennlp.training.trainer.Trainer",
        is_best_so_far: bool = False,
        save_model_only=False,
    ) -> None:
        pass

    def find_latest_checkpoint(self) -> Optional[Tuple[str, str]]:
        pass

    def restore_checkpoint(self) -> Tuple[Dict[str, Any], Dict[str, Any]]:
        return {}, {}

    def best_model_state(self) -> Dict[str, Any]:
        return {}
person petew    schedule 12.10.2020
comment
Спасибо, это, вероятно, сработает, но я понятия не имею, что лучше всего для AllenNLP найти этот настраиваемый контрольный указатель. См. Мою правку в OP для получения более подробной информации о том, почему мне нужны разъяснения. - person GJacobs; 13.10.2020
comment
Если ваш настраиваемый контрольный указатель находится в my_package/training/custom_checkpointer.py, вы можете вызвать allennlp train с помощью --include-package my_package.training.custom_checkpointer, или вы можете создать файл с именем .allennlp_plugins в своем репо и поместить my_package.training.custom_checkpointer в его собственную строку в этом файле. - person petew; 14.10.2020
comment
Вот пример .allennlp_plugins файла: github.com/allenai/allennlp -template-config-files / blob / master / - person petew; 14.10.2020