tensorflow - 在小批量的多 GPU 上进行训练
问题描述
我在一台有两个 GPU 的机器上运行 TensorFlow,每个 GPU 有 3 GB 内存。我的批量大小只有 2GB,因此可以放在一个 GPU 上。CUDA_VISIBLE_DEVICES
使用两个 GPU(使用)进行训练有什么意义吗?如果我这样做了,TensorFlow 将如何分配训练?
解决方案
关于内存:我假设您的意思是一个数据批次是 2GB。然而,Tensorflow 也需要内存来存储变量以及隐藏层结果等(计算梯度)。因此,内存是否足够也取决于您的特定型号。最好的办法是尝试使用一个 GPU,看看程序是否由于内存错误而崩溃。
关于分发:Tensorflow 根本不会自动执行此操作。每个操作都放置在某个设备上。默认情况下,如果您有任意数量的 GPU 可用,所有与 GPU 兼容的操作都将放在第一个 GPU 上,其余的放在 CPU 上。尽管默认情况下 TensorFlow 会在所有 GPU 上保留所有内存。
您应该查看Tensorflow 网站上的 GPU 指南。最重要的是您可以使用with tf.device
上下文管理器将操作放置在其他 GPU 上。使用这个,想法是将您的批次分成 X 个块(X = GPU 数量)并在每个设备上定义您的模型,每次都将相应的块作为输入并确保重用变量。
如果您正在使用,则此问题中tf.Estimator
有一些信息。在这里只需使用两个简单的包装器就可以很容易地进行分布式执行,但我个人无法成功使用它(非常慢并且由于段错误而随机崩溃)。
推荐阅读
- azure - 在 IISExpress 与 Service Fabric 群集上托管时 I/O 流量行为的差异。为什么?
- c# - 允许在可浏览属性的组合框中复制/粘贴
- css - R shinydashboardPlus 2.0.0 相当于 sidebar_fullCollapse(或 css)
- iis - ASP.net MVC 站点无法在 Windows Server 2019 上运行
- javascript - 如何使用 React hook 修复渲染的钩子比上一次渲染时更多的钩子
- firebase - Firebase 云消息传递对于在 Web 应用程序中开发聊天系统是否可靠?
- performance - Julia - 加快字符串到日期或日期时间的转换
- html - 图像位置推出元素
- html - 内联文本居中对齐
- algorithm - 求解斐波那契数列的非齐次递归关系