не могу освободить TrainingGraphCompiler в pykaldi - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь выполнить выравнивание текста для большого набора файлов партиями, используя обученную модель acousti c, сгенерированную по рецепту librispeech, но я заметил, что каждый раз, когда я повторно инициализирую TrainingGraphCompiler (I l oop набор данных в меньшем размере) подпакеты и повторная инициализация TrainingGraph в каждой итерации) увеличивает использование памяти на ~ 300 МБ. Я попытался удалить скомпилированный график после использования, но он не освобождает память. Я проверил документацию для TrainingGraphCompiler, но не нашел метод удаления.

Вот пример сценария, демонстрирующий проблему, я устанавливаю все необходимые параметры перед l oop и генерирую компилятор в l oop создает 300 МБ за итерацию. Для этого требуется модель acousti c с использованием рецепта модели librispeech

def main():
    exp_dir = 'Path/to/exp/dir/for/acoustic/model'
    lang_dir = 'Path/to/lang/dir/for/acoustic/model'

    mdl_file_path = os.path.join(exp_dir, "final.mdl")
    with xopen(mdl_file_path) as ki:
        _transition_model = TransitionModel().read(ki.stream(), ki.binary)
        _acoustic_model = AmDiagGmm().read(ki.stream(), ki.binary)


    _ctx_dep = ContextDependency()
    tree_path = os.path.join(exp_dir, "tree")
    with xopen(tree_path) as ki:
        _ctx_dep.read(ki.stream(), ki.binary)


    disambig_path = os.path.join(model_dir_path, "lang", "phones", "disambig.int")
    with open(disambig_path) as f:
        disambig_list = [int(s) for s in f.readlines()]

    for i in range(10):
        print(i)
        lex_path = os.path.join(lang_dir, "L.fst")
        _lex_fst = read_fst_kaldi(lex_path)
        a = TrainingGraphCompiler(_transition_model,  _ctx_dep, _lex_fst, disambig_list, TrainingGraphCompilerOptions())
        del a

if __name__ == "__main__":
    main()
...