Я пытаюсь выполнить выравнивание текста для большого набора файлов партиями, используя обученную модель 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()