在较少的内存中加载模型检查点

Loading a model checkpoint in lesser amount of memory

我有一个问题,我无法在网上找到任何答案。我训练了一个模型,其检查点文件约为 20 GB。由于我的系统内存不足(或者 Colaboratory/Kaggle - 限制为 16 GB),我无法使用我的模型进行预测。

我知道必须将模型加载到内存中才能进行推理。但是,是否有解决方法或方法可以:

  1. 节省一些内存并能够加载到 16 GB RAM(对于 CPU)或 TPU/GPU
  2. 中的内存
  3. 可以使用任何框架(因为我会同时使用两者)TensorFlow + Keras, or PyTorch(我现在正在使用)

是否可以在这些库中的任何一个中使用这种方法?我的一个初步解决方案可能不是分块加载它,本质上是为模型权重和偏差维护一个缓冲区并相应地执行计算——尽管我还没有找到任何实现。

I would also like to add that I wouldn't mind the performance slowdown since it is to be expected with low-specification hardware. As long as it doesn't take more than two weeks :) I can definitely wait that long...

Yoy 可以尝试以下方法:

  1. 将模型分成两部分
  2. 分别调用model.load_weights(by_name=True)
  3. 向两个部分加载权重
  4. 使用您的输入调用第一个模型
  5. 用第一个模型的输出调用第二个模型