【问题标题】:Sometimes get the error "err == cudaSuccess || err == cudaErrorInvalidValue Unexpected CUDA error: out of memory"有时会收到错误“err == cudaSuccess || err == cudaErrorInvalidValue Unexpected CUDA error: out of memory”
【发布时间】:2020-07-29 08:03:21
【问题描述】:

我对如何解决我的特定问题非常迷茫,这就是为什么我遵循Object Detection API 中的获取帮助指南并在 Stack Overflow 上发表了一篇文章。

首先,我的目标是在 Azure 上运行分布式训练作业。我以前使用gcloud ai-platform jobs submit training 非常轻松地运行分布式作业,但在 Azure 上有点困难。

我从 dockerfile here 为对象检测 API 构建了 tf1 docker 映像。

我有一个包含以下节点的集群(Azure Kubernetes 服务/AKS 集群):

4x Standard_DS2_V2 nodes
8x Standard_NC6 nodes

在 Azure 中,NC6 节点是每个由单个 K80 GPU 支持的 GPU 节点,而 DS2_V2 是典型的 CPU 节点。

我使用TFJob 使用以下副本设置配置我的作业:

Master (limit: 1 GPU) 1 replica
Worker (limit: 1 GPU) 7 replicas
Parameter Server (limit: 1 CPU) 3 replicas

这是我的难题:作业失败,因为其中一名工人抛出以下错误:

tensorflow/stream_executor/cuda/cuda_driver.cc:175] Check failed: err == cudaSuccess || err == cudaErrorInvalidValue Unexpected CUDA error: out of memory

我随机尝试减少工人的数量,令人惊讶的是,这项工作奏效了。只有当我有 3 个或更少的 Worker 副本 时,它才有效。 虽然花费了很多时间(一天多一点),但模型在 1 个 Master 和 3 个 Worker 的情况下可以成功完成训练

这有点令人烦恼,因为即使集群分配了 8 个 GPU,我也最多只能使用 4 个 GPU。我又跑了一个测试:当我的集群有 3 个 GPU 节点时,我只能成功运行 1 个 Master 和 1 个 Worker 的作业!似乎由于某种原因我无法充分利用 GPU。

最后,我遇到了另一个问题。上述运行是使用非常少量的数据(约 150 Mb)完成的,因为它们是测试。后来我用更多的数据(大约 12 GiB)运行了一项适当的工作。尽管集群有 8 个 GPU 节点,但只有 1 个 Master 和 1 个 Worker 才能成功完成工作。

将 Worker 副本数增加到 1 以上会立即导致与上述相同的 cuda 错误。

我不确定这是基于对象检测 API 的问题,还是由 Kubeflow/TFJob 引起的,或者是否是 Azure 特定的问题。我在 Kubeflow 页面上打开了一个类似的问题,但我现在也在看看是否可以从对象检测 API 社区获得一些指南。如果您需要更多详细信息(例如 tfjob yaml 或用于培训的 pipeline.config)或有任何疑问,请在 cmets 中告诉我。

【问题讨论】:

  • 嗨!你解决了这个问题了吗?
  • 不幸的是,没有。 : (
  • 似乎您的 nvidia 设备插件未安装或工作正常? docs.microsoft.com/en-us/azure/aks/gpu-cluster
  • @jpalma 我确实安装了设备插件,完全按照这个相同的链接

标签: tensorflow object-detection


【解决方案1】:

这可能与 API 使用的批量大小有关。
尝试控制批量大小,可能如this answer中所述: https://stackoverflow.com/a/55529875/2109287

【讨论】:

  • 我运行的所有示例都使用了 1 的批量大小。这是最低的可能。
  • 你在哪里设置批量大小?我的另一个猜测是 GPU 上的其他工作负载可能会导致问题。如果您尝试在 Standard_NC12 上运行并不麻烦。因为 Standard_NC6 与其他 VM 共享物理 GPU
【解决方案2】:

这是因为 gpu 内存不足: 试试下面的命令 希望对你有帮助

$ sudo fuser -v /dev/nvidia*

$ sudo kill -9 pid_no (Ex: 12345)

$ nvidia-smi --gpu-reset

:)

【讨论】:

    猜你喜欢
    • 2022-09-28
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2020-08-14
    • 2018-08-06
    • 1970-01-01
    • 2017-02-12
    相关资源
    最近更新 更多