PyTorch 模型首次在新机器中加载需要太多时间

Mar*_*iaz 5 python amazon-ec2 pytorch

我在 EC2 上进行了手动扩展设置,我在其中基于 AMI 创建实例,该 AMI 已在启动时运行我的代码(使用 Systemd)。我面临一个基本问题:在主实例(我用来创建 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"))
 
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*iaz 3

这是由于恢复 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