设置GPU及显存大小

本文档记录了从旧版本升级到Keras 2.4.3和TensorFlow GPU 2.3.1后,如何调整GPU设备选择和内存分配的步骤,包括修复因API变化引起的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20210128 -

引言

之前搜索过设置GPU和显存大小的方式,但是升级了新的版本的keras以及tensorflow,导致之前的代码失效了,这里记录一下。

本质上,就是版本更换的原因,很多api可能被取消,或者改了别的。

原始代码

import os
import tensorflow as tf
from keras.backend.tensorflow_backend import set_session

def set_up_gpu_environment(gpu_devices_num = 2, memory_fraction = 1.0):
    available_gpu_num = ['0','1','2']
    if str(gpu_devices_num) not in available_gpu_num:
        print("The gpu deveices is not right")
    #设置GPU环境变量
    os.environ[ 'CUDA_VISIBLE_DEVICES'] = str(gpu_devices_num)
    #调整显存占用比例
    config = tf.ConfigProto()
    config.gpu_options.per_process_gpu_memory_fraction = memory_fraction
    set_session(tf.Session(config=config))

这部分代码我已经不知道是什么版本的tensorflow和keras了,上述代码主要由两部分,一部分通过设置环境变量来选择显卡,其中我使用的机器上有3个显卡,使用的时候,如果是全部,那么keras会占用所有的显卡,虽然在其他两块不工作的显卡上占用的显存不多,但还是通过环境变量来控制一下;另一部分工作是调整显存大小。

新版代码

新版的GPU环境按照之前的文章《Centos8安装英伟达显卡驱动并通过docker部署深度学习环境》,版本信息如下:

Keras 2.4.3
tensorflow-gpu 2.3.1

使用上述代码的时候会各种报错,例如第一条

ModuleNotFoundError: No module named 'keras.backend.tensorflow_backend'; 'keras.backend' is not a package

这条命令通过查询[1],修改如下:

from tensorflow.python.keras.backend import set_session

但是这里通过之后,由于tensorflow的问题也会出错,之前的时候这部分问题也遇到过,所以就比较轻松的解决了,这次参考了文章[2],那么整体上修改之后的代码如下:

import os
import tensorflow as tf
from tensorflow.python.keras.backend import set_session

def set_up_gpu_environment(gpu_devices_num = 2, memory_fraction = 1.0):
    available_gpu_num = ['0','1','2']
    if str(gpu_devices_num) not in available_gpu_num:
        print("The gpu deveices is not right")
    #设置GPU环境变量
    os.environ[ 'CUDA_VISIBLE_DEVICES'] = str(gpu_devices_num)
    #调整显存占用比例
    config = tf.compat.v1.ConfigProto()
    config.gpu_options.per_process_gpu_memory_fraction = memory_fraction
    set_session(tf.compat.v1.Session(config=config))

参考

[1]Import error: keras.backend.tensorflow_backend #197
[2]AttributeError: module ‘tensorflow’ has no attribute ‘ConfigProto’

### 如何查看或设置 Docker 容器中 GPU 占用的显存大小 #### 查看 GPU显存占用情况 可以通过 `nvidia-smi` 工具来监控 GPU 使用情况,包括显存占用。然而需要注意的是,在容器内部执行 `nvidia-smi` 并不会显示完整的 GPU 资源详情[^2]。因此建议在宿主机上运行该命令: ```bash nvidia-smi ``` 此命令会返回当前 GPU 的使用状态,其中包括每个进程所占的显存大小以及对应的 PID。 为了进一步确认哪些容器正在使用这些 GPU 资源,可以结合以下方法获取对应关系: 1. 获取容器 ID 和其关联的进程号 (PID),可利用如下命令实现: ```bash docker top <container_id> | grep <pid> ``` 其中 `<container_id>` 是目标容器的唯一标识符,而 `<pid>` 则是从前面提到的 `nvidia-smi` 输出中的具体数值[^3]。 #### 设置 Docker 容器内的 GPU 显存限制 目前官方版本的 Docker 支持通过参数控制分配给特定容器的 GPU 数量及其性能模式等选项,但对于具体的每张卡上的显存量尚无直接设定接口。不过有几种间接方式可以帮助管理这一需求: - **指定使用的设备数量**: 当创建新容器时可通过 `--gpus` 参数定义允许访问几张图形处理器卡片。例如仅提供两块可用硬件供应用调用的话,则写成这样子的形式:`--gpus 2` 。或者精确指明编号如 `"device=0,1"` 来选取第零片跟第一片作为候选对象[^1]。 - **调整驱动程序行为**: 对于某些应用程序来说可能接受环境变量影响从而改变它们请求多少实际物理储空间的行为。比如 TensorFlow 用户可以在启动脚本里加入下面这段配置代码片段以便更好地适配现有条件下的计算能力范围: ```python import os os.environ['CUDA_VISIBLE_DEVICES'] = '0' # 只让模型看到第一个GPU config = tf.compat.v1.ConfigProto() config.gpu_options.allow_growth = True # 动态申请显存 session = tf.compat.v1.Session(config=config) ``` 尽管如此上述手段并不能绝对保证终结果完全按照预想那样表现出来因为这还取决于框架本身的逻辑设计等因素共同作用的结果[^4]。 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值