我在 Sagemaker Studio 中使用 PyTorch 启动了 CelebA 数据集的二元分类训练。
我已确保所有模型、张量都发送到 cuda()。
我的图像数据集在 S3 中,我正在通过此导入和代码访问它:
from PIL import Image
import s3fs
fs = s3fs.S3FileSystem()
# example
f = fs.open(f's3://aoha-bucket/img_celeba/dataset/000001.jpg')
当然还有我的 PyTorch DataLoader 类,它使用 s3fs 将数据加载到 DataLoader 中。
class myDataset(Dataset):
def __init__(self, csv_file, root_dir, target, length, adv = None, transform=None):
self.annotations = pd.read_csv(csv_file).iloc[:length,:]
self.root_dir = root_dir
self.transform = transform
self.target = target
self.length = length
self.adv = adv
def __len__(self):
return len(self.annotations)
def __getitem__(self, index):
img_path = fs.open(os.path.join(self.root_dir, self.annotations.loc[index, 'image_id']))
image = Image.open(img_path)
image = np.array(image)
if self.transform:
image = self.transform(image=image)["image"]
image = np.transpose(image, (2, 0, 1)).astype(np.float32)
image = torch.Tensor(image)
y_label = torch.tensor(int(self.annotations.loc[index, str(self.target)]))
if self.adv is None:
return image, y_label
if self.adv :
z_label = torch.tensor(int(self.annotations.loc[index, 'origin']))
return image, y_label, z_label
当我运行这个函数时,我得到真:
next(model.parameters()).is_cuda
我的问题是,我不知道训练太慢,甚至比我的本地 CPU 还慢(不是那么强大)。例如,它说一个 epoch 需要 1h45 分钟,这太多了。
我使用的是经过 GPU 优化的 Studio 的 PyTorch 实例。
您是否曾经使用 PyTorch 在 Sagemaker 中启动过 GPU 培训? 你能帮忙吗?
非常感谢, 哈比