【发布时间】: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