TensorFlow指定GPU运行及资源分配的几种方式

南乔
南乔
发布时间:2026-10-13 | 5人浏览过
原创

本文总结了在TensorFlow中指定使用特定GPU及进行GPU资源分配的几种常用方法。包括通过终端环境变量和代码中tf.device指定单卡或多卡运行,以及利用ConfigProto配置允许GPU内存增长或固定分配比例,帮助开发者优化多GPU环境下的模型训练效率。

终端指定GPU运行方式

在终端环境中执行命令时,可以通过以下两种方式指定当前进程所使用的GPU设备。

第一种方式是通过设置环境变量来实现。具体操作是执行export语句,该配置只需执行一次即可生效,后续运行相关代码时无需重复执行此命令。

第二种方式同样涉及环境变量的配置,具体语法与第一种类似,旨在限制可见的GPU设备范围。

代码中指定GPU设备

在Python代码内部指定GPU资源,主要有两种不同的实现路径。

第一种方法是通过设置环境变量来限制可见设备。在代码开头引入os模块,并修改CUDA_VISIBLE_DEVICES环境变量,从而指定程序只能看到指定的GPU编号。


import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1"

第二种方法是在构建计算图时,利用tf.device上下文管理器明确指定操作所在的GPU设备。例如,可以将常量定义和矩阵乘法操作放置在特定的GPU设备上执行,并通过Session配置开启设备放置日志以便调试。


# Creates a graph.
with tf.device('/gpu:1'):
 a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
 b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
 c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print sess.run(c)

如果需要利用多个GPU进行并行计算或数据分割,可以通过遍历不同的GPU设备ID,在每个设备上构建子图,最后在CPU上进行结果汇总。这种方式允许在多个GPU上分别执行部分计算任务,再合并输出。


c = []
for d in ['/gpu:0', '/gpu:1']:
 with tf.device(d):
  a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3])
  b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2])
  c.append(tf.matmul(a, b))
with tf.device('/cpu:0'):
 sum = tf.add_n(c)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print sess.run(sum)

GPU资源分配策略

除了指定具体的GPU设备外,合理分配GPU资源对于防止显存溢出至关重要。TensorFlow提供了两种主要的资源分配策略。

第一种策略是允许GPU内存按需增长。通过配置ConfigProto的gpu_options,设置allow_growth为True,TensorFlow将根据实际计算需求动态分配显存,而不是预先占用全部显存,这有助于提高多任务环境下的资源利用率。


config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)

第二种策略是固定每个GPU进程可使用的显存比例。通过设置per_process_gpu_memory_fraction参数,可以限制单个进程占用的显存上限,例如设置为0.4表示最多使用40%的显存,从而避免显存耗尽导致其他进程无法运行。


config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = tf.Session(config=config, ...)

以上关于在TensorFlow中指定GPU运行及进行GPU资源分配的方法总结完毕,希望这些技巧能为您的模型训练和部署提供参考。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表