为什么用 joblib 一次又一次地加载 tf.keras.Sequential 成本增加时间

why load tf.keras.Sequential again and again with joblib cost increasing time

遇到这样一种情况,我需要一个一个地加载相同尺寸的模型(几乎相同的比例),joblib.load 保持成本增加时间。 例如,加载第一个模型令牌 3 秒,第二个模型令牌 5 秒。后一个总是比前一个花费更多的时间,而后一个模型并不复杂。即使我一直加载一个相同的模型,一次又一次,它也会花费越来越多的时间(耗时如下)。

0 4.4071619510650635 seconds
1 4.408193111419678 seconds
2 5.5284717082977295 seconds
3 7.223154306411743 seconds
4 8.955665111541748 seconds
5 10.984207153320312 seconds
6 12.934542179107666 seconds
7 14.573008298873901 seconds
8 17.183340311050415 seconds
9 19.3760027885437 seconds

我不知道为什么会这样,我怎样才能找到解决这个问题的方法。

因为keras.backend将所有的context加载到一个全局变量中,并一直保持运行,不能删除模型本身来清理环境。

采取下面的一段代码,释放上下文,让接下来的过程更容易。

import keras
keras.backend.clear_session()

顺便说一句,如果你正在考虑控制 joblib 进程的会话,请看一下 tf.InteractiveSessiontf.Session under with