python - 在前向传递期间对层使用单独的设备
问题描述
我正在使用一个tf.custom_ops
名为PyroNN。我将此运算符包装在 atf.keras.layers.Layer
中,以便在使用功能 API 创建的模型中使用它。
问题是,这个算子不使用 tensorflows gpu 内存管理并且消耗大量内存。这会导致错误GPUassert: Out of memory
和终止训练。
是否可以将层的计算委托给单独的设备?我会想到这样的事情:
import tensorflow.keras as K
def crossd_unet_distributed():
inputs = K.layers.Input((200, 488, 488), dtype=tf.float32, name='line_integrals')
with tf.device('/GPU:0'):
x = K.layers.Conv3D(8, 3, padding="same", activation='relu')(inputs)
with tf.device('/GPU:1'):
# this custom layer messes with gpu memory, so we place it on its own gpu
x = SpinBackProjector(detector_shape=(488, 488), volume_shape=(256, 256, 256))(x)
with tf.device('/GPU:0'):
outputs = K.layers.Conv3D(1, 3, padding="same", activation='relu')(x)
return K.Model(inputs=inputs, outputs=outputs)
Keras 是否能够跟踪多个 GPU 上的梯度?我尝试阅读分布式培训文档,但我不确定这是否是我需要的。
解决方案
推荐阅读
- android - Android 12 目标 SDK 应用程序无法安装在低于 Android 12 的设备上
- mysql - 获取mysql和redis之间的数据差异
- spring-security - 如何在 JHipster 中配置 Spring OAuth2 以针对 GitLab 进行无状态身份验证?
- typescript - 打字稿元组错误:目标需要 3 个元素,但源可能有更少
- vue.js - Ag Grid Vue - 本地化
- javascript - 如何正确处理 redux 工具包 crud 中的加载状态
- python - 气流日志有很多星号字符
- java-7 - 如何使用 Calendar 类在 java 7 中获取 UTC 日期时间?
- spring - 仅使用 keycloak 进行身份验证并使用自定义过滤器进行授权(Spring Boot)
- python - 如果在硒中按下按钮,如何处理错误消息