【问题标题】:PyTorch model take too much to load the first time in a new machinePyTorch 模型在新机器上第一次加载需要太多时间
【发布时间】:2025-12-15 12:40:01
【问题描述】:

我在 EC2 上进行了手动扩展设置,我在其中基于已在启动时运行我的代码(使用 Systemd)的 AMI 创建实例。我面临一个基本问题:在主实例上(我用来创建 AMI 的实例,启动映像后 Python 代码需要 8 秒才能准备好,这包括导入库、加载模型的状态字典等。 ..)。现在,在我使用 AMI 创建的图像上,代码第一次启动需要 5 分钟以上,将状态字典从磁盘加载到 GPU 内存需要特别长的时间,在第一次代码所花费的时间与要加载的主实例。

AMI 保留与主实例相同的 pycache 文件夹,因此我认为 AMI 应该包含所有内容,所以它不应该花费太多时间,不是吗?所以,我的问题是:是否有任何其他缓存可以使 CUDA / Python 更快,我没有考虑到?我只保留 pycache/ 文件夹,但我不知道我是否可以做任何事情来确保第一次启动所有东西不会花费太多时间。这是我的主要结构:

# Import libraries
import torch
import numpy as np

# Import personal models (takes 1 minute)
from model1 import model1
from model2 import model2

# Load first model
model1_object = model1()
model2_object = model2()

# Load state dicts (takes 3+ minutes, the first time in new instances, seconds other times)
# Note: the models are a bit heavy
model1_object.load_state_dict(torch.load("model1.pth"))
model2_object.load_state_dict(torch.load("model2.pth"))
 

注意:我正在使用 g4dn.xlarge 实例,用于 AWS 中的主实例和较新的实例。

【问题讨论】:

    标签: python amazon-ec2 pytorch


    【解决方案1】:

    这是由于还原 AWS EBS 快照时需要高延迟造成的。起初,当您恢复快照时,延迟非常高,这解释了为什么在我的示例中,当新创建实例时模型需要如此多的时间来加载。

    查看本文初始化部分:https://cloudonaut.io/ebs-snapshot-pitfalls/

    我发现在首次创建实例时快速使用实例的唯一解决方案是启用快速快照还原,每月费用约为 500 美元:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-fast-snapshot-restore.html

    如果你有时间,可以等到性能达到最大,或者尝试提前预热音量https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-initialize.html

    【讨论】:

    • 但似乎第二个选项dd 仅适用于手动恢复,而不是用于自动缩放目的(用于自动扩展),或者我错过了什么?
    最近更新 更多