开发者社区 > 大数据与机器学习 > 人工智能平台PAI > 正文

机器学习PAI在使用dino训练自己数据时,显存在不停的增加,,请问如何排查呢?

使用的训练命令: python tools/train.py configs/detection/dino/dino_5sc_swinl_center_iou_memoryreduce_26e_obj365.py --pretrained checkpoints/epoch_22.pth --work_dir work_dir/

日志如下: 2023-06-02 15:50:02,481 - easycv - INFO - Epoch [1][420/13236] lr: 1.000e-04, eta: 3 days, 2:49:58, time: 0.690, data_time: 0.012, memory: 8668, loss_ce: 1.9952, class_error: 85.8944, loss_bbox: 0.9517, loss_giou: 1.7226, loss_center: 0.9545, loss_iouaware: 1.1281, loss_ce_0: 1.8327, loss_bbox_0: 0.9776, loss_giou_0: 1.7397, loss_center_0: 0.9458, loss_iouaware_0: 1.1103, loss_ce_1: 1.9569, loss_bbox_1: 0.9610, loss_giou_1: 1.7214, loss_center_1: 0.9410, loss_iouaware_1: 1.1258, loss_ce_2: 2.0271, loss_bbox_2: 0.9531, loss_giou_2: 1.7204, loss_center_2: 0.9518, loss_iouaware_2: 1.1275, loss_ce_3: 2.0033, loss_bbox_3: 0.9523, loss_giou_3: 1.7213, loss_center_3: 0.9589, loss_iouaware_3: 1.1285, loss_ce_4: 2.0029, loss_bbox_4: 0.9524, loss_giou_4: 1.7215, loss_center_4: 0.9594, loss_iouaware_4: 1.1272, loss_ce_interm: 1.9905, loss_bbox_interm: 0.9592, loss_giou_interm: 1.7260, loss_center_interm: 0.9149, loss_iouaware_interm: 1.1416, loss_ce_dn: 1.1557, loss_bbox_dn: 0.4540, loss_giou_dn: 1.3770, loss_center_dn: 1.3841, loss_iouaware_dn: 1.3356, loss_ce_dn_0: 0.9538, loss_bbox_dn_0: 0.4562, loss_giou_dn_0: 1.3734, loss_center_dn_0: 1.3862, loss_iouaware_dn_0: 1.3380, loss_ce_dn_1: 0.9745, loss_bbox_dn_1: 0.4554, loss_giou_dn_1: 1.3742, loss_center_dn_1: 1.3856, loss_iouaware_dn_1: 1.3368, loss_ce_dn_2: 1.0250, loss_bbox_dn_2: 0.4549, loss_giou_dn_2: 1.3748, loss_center_dn_2: 1.3849, loss_iouaware_dn_2: 1.3365, loss_ce_dn_3: 1.0980, loss_bbox_dn_3: 0.4545, loss_giou_dn_3: 1.3756, loss_center_dn_3: 1.3842, loss_iouaware_dn_3: 1.3360, loss_ce_dn_4: 1.1567, loss_bbox_dn_4: 0.4542, loss_giou_dn_4: 1.3763, loss_center_dn_4: 1.3843, loss_iouaware_dn_4: 1.3356, loss: 80.7759 Traceback (most recent call last): File "/home/EasyCV/tools/train.py", line 322, in main() File "/home/EasyCV/tools/train.py", line 310, in main train_model( File "/home/EasyCV/package/easycv/apis/train.py", line 312, in train_model runner.run(data_loaders, cfg.workflow, cfg.total_epochs) File "/usr/local/python3.9/lib/python3.9/site-packages/mmcv/runner/epoch_based_runner.py", line 136, in run epoch_runner(data_loaders[i], **kwargs) File "/home/EasyCV/package/easycv/runner/ev_runner.py", line 107, in train self.run_iter(data_batch, train_mode=True) File "/home/EasyCV/package/easycv/runner/ev_runner.py", line 72, in run_iter outputs = self.model.train_step(data_batch, self.optimizer, File "/usr/local/python3.9/lib/python3.9/site-packages/mmcv/parallel/data_parallel.py", line 77, in train_step return self.module.train_step(*inputs[0], **kwargs[0]) File "/home/EasyCV/package/easycv/models/base.py", line 105, in train_step losses = self(**data, mode='train') File "/usr/local/python3.9/lib/python3.9/site-packages/torch/nn/modules/modul 机器学习PAI在使用dino训练自己数据时,显存在不停的增加,出现CUDA out of memory 的问题,修改了batch、尺寸都没有解决,请问如何排查呢?

展开
收起
冰激凌甜筒 2023-06-05 16:26:48 137 0
3 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在使用阿里云机器学习PAI进行dino训练的时候,如果显存不停的增加,可以从以下几个方面进行排查:

    1. 调整batch size:大多数情况下,显存增加过快是由于模型batch size设置过大导致的。可以尝试将batch size调整为更小的值,比如减半或者减少到原来的1/4, 这样可以有效降低显存的占用。

    2. 检查代码是否存在内存泄漏:检查代码是否存在内存泄漏,若存在内存泄漏则及时修复,以避免显存占用不断增加。可以使用Python中的memory_profiler库对代码进行分析,查看哪些地方存在内存泄漏。

    3. 降低图片分辨率:如果输入的图片分辨率过高,可以尝试将其降低到合适的大小,以减小占用显存的数量。

    4. 使用更小的模型:如果上述方法无法缓解显存不断增加的问题,可以考虑使用更小的模型。对于一些简单的任务来说,使用小模型不仅可以节省时间和资源,并且还可以获得更好的性能。

    2023-06-05 21:33:31
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    根据您提供的日志信息,可以看到显存在训练过程中不断增加,并且在训练过程中出现了CUDA out of memory的错误。这通常是由于显存不足导致的,可能是由于模型太大或批量大小太大等原因导致的。

    为了解决这个问题,可以尝试以下方法:

    1. 减小批量大小:可以尝试减小批量大小以减少显存的使用量。可以通过修改配置文件中的batch_size参数来实现。

    2. 减小输入图像的尺寸:可以尝试减小输入图像的尺寸以减少显存的使用量。可以通过修改配置文件中的input_shape参数来实现。

    3. 减小模型的复杂度:可以尝试减小模型的复杂度以减少显存的使用量。可以通过使用更小的模型或者删除一些无关的层来实现。

    4. 使用混合精度训练:可以尝试使用混合精度训练来减少显存的使用量。可以通过在配置文件中设置fp16_enabled参数为True来启用混合精度训练。

    5. 使用多卡训练:如果您有多张GPU,可以尝试使用多卡训练来分摊显存的使用量。可以通过在配置文件中设置gpus参数来指定使用的GPU数量。

    6. 选择更大的GPU机型:如果您的显存仍然不足,可以尝试选择更大的GPU机型来增加显存的大小。

    另外,您可以通过在训练过程中使用torch.cuda.memory_allocated()和torch.cuda.max_memory_allocated()等函数来监测显存的使用量,以便更好地排查问题。

    2023-06-05 18:20:01
    赞同 展开评论 打赏
  • 您的训练日志中显示显存不停增加,最终导致 CUDA out of memory 的错误。

    这通常是由于模型过大、图像分辨率过高以及 batch size 过大所导致的。另外,您可以通过使用梯度累积的方法来降低内存占用。

    为了解决这个问题,以下是几个建议:

    1. 降低 batch size。您可以修改配置文件中的 batch size 参数为较小的值,重新执行训练命令,观察是否能够解决显存增加的问题。

    2. 降低图像分辨率。如果将图像分辨率降低到适当的大小,也可以减少显存的使用。您可以在配置文件中修改图像输入的尺寸大小。

    3. 降低模型复杂度。如果模型过于复杂,也会占用较多的显存,可以考虑选择轻量级模型或通过减少模型层数、参数量等来降低模型复杂度。

    4. 使用梯度累积。通过梯度累积的方法,可以在减少 batch size 的同时保证模型精度。具体来说,就是在每个 epoch 中,将多个小的 batch 的梯度累积到一个较大的 batch 中进行更新。

    2023-06-05 17:25:25
    赞同 展开评论 打赏

相关产品

  • 人工智能平台 PAI
  • 热门讨论

    热门文章

    相关电子书

    更多
    基于机器学习的阿里智能助理-- 在电商领域的架构构建与实践 立即下载
    机器能预报多久后的天气——机器学习和可预报性 立即下载
    PAI分布式机器学习平台 立即下载