091创建大型模型实例(如何加载大型模型)
创建大型模型实例(如何加载大型模型)¶
大型预训练模型的访问障碍之一是其所需的内存量。加载预训练的 PyTorch 模型通常需要以下步骤:
- 创建一个带有随机权重的模型。
- 加载预训练权重。
- 将这些预训练权重放到模型中。
前两个步骤都需要完整的模型副本在内存中,如果模型有几 GB 大小,那么你可能没有足够的内存来存储两个副本。在分布式训练环境中,这个问题更加严重,因为每个进程都会加载预训练模型并在内存中存储两个副本。
为了解决这个问题,_fast_init 参数默认设置为 True,以跳过随机初始化,从而提高加载速度。接下来,本文将介绍如何使用 Transformers 加载大型预训练模型,即使这些模型有较高的内存需求。
分区检查点(Sharded Checkpoints)¶
从 Transformers v4.18.0 开始,大于 10GB 的检查点会由 save_pretrained() 方法自动分区。模型会拆分成多个较小的检查点,并创建一个索引文件,将参数名映射到它们所在的文件。
最大分区大小可以通过 max_shard_size 参数控制,默认为 5GB,这样可以更轻松地在免费 GPU 实例上运行而不会耗尽内存。
例如,我们将 BioMistral/BioMistral-7B 模型分区: