You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单GPU服务器上并行运行多版本TensorFlow-DQN训练脚本?

当然可行!我之前在类似的单GPU服务器上试过同时跑两个强化学习脚本,只要控制好TensorFlow的显存分配策略,就能避免GPU占用冲突的问题。下面给你一步步讲怎么操作:

1. 让TensorFlow按需分配显存(最推荐)

默认情况下,TensorFlow会一启动就占满整个GPU的显存,这就是你报错的核心原因。你只需要在每个DQN脚本的开头加入一段代码,让TensorFlow用多少显存就申请多少,而不是一次性占满:

如果你用的是TensorFlow 2.x:

import tensorflow as tf

# 配置GPU显存按需增长
gpus = tf.config.list_physical_devices('GPU')
if gpus:
    try:
        for gpu in gpus:
            tf.config.experimental.set_memory_growth(gpu, True)
        print("GPU显存按需分配已启用")
    except RuntimeError as e:
        # 打印错误信息
        print(e)

如果你用的是TensorFlow 1.x + Keras:

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

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

这段代码会让每个脚本只占用当前训练需要的显存,给另一个脚本留出足够空间。

2. 手动限制每个脚本的显存占比

如果按需分配还是出现显存不足的情况,你可以直接给每个脚本设定最大显存使用量。比如你的GTX 780是3GB显存,你可以给每个脚本分配1.2GB左右(根据实际情况调整):

TensorFlow 2.x代码:

import tensorflow as tf

gpus = tf.config.list_physical_devices('GPU')
if gpus:
    try:
        # 给第一个GPU(你只有一个)设置显存限制,单位是MB
        tf.config.set_logical_device_configuration(
            gpus[0],
            [tf.config.LogicalDeviceConfiguration(memory_limit=1200)]
        )
        logical_gpus = tf.config.list_logical_devices('GPU')
        print(f"{len(gpus)} 物理GPU,{len(logical_gpus)} 逻辑GPU")
    except RuntimeError as e:
        print(e)

这样两个脚本各自占用固定的显存份额,不会互相抢占资源。

3. 后台运行脚本的正确姿势

因为你是通过SSH连接服务器,直接跑脚本的话,断开SSH进程就会终止。推荐用下面两种方式让脚本后台运行:

方式一:用nohup

分别在终端执行这两个命令,把两个脚本放到后台运行,同时把输出日志保存到文件里:

# 运行第一个版本的DQN脚本,日志输出到v1.log
nohup python your_dqn_script_v1.py > v1.log 2>&1 &

# 运行第二个版本的DQN脚本,日志输出到v2.log
nohup python your_dqn_script_v2.py > v2.log 2>&1 &

之后你可以用cat v1.log或者tail -f v1.log查看脚本的运行日志。

方式二:用tmux(更灵活)

如果你需要随时切换查看两个脚本的运行情况,tmux是更好的选择:

  1. 先创建一个名为dqn_v1的会话:tmux new -s dqn_v1
  2. 在这个会话里运行第一个DQN脚本
  3. 按Ctrl+B然后松开,再按D,把会话放到后台
  4. 再创建第二个会话:tmux new -s dqn_v2,运行第二个脚本
  5. 之后想看哪个脚本的输出,就用tmux attach -t dqn_v1或者tmux attach -t dqn_v2重新连接会话

4. 额外优化小技巧

  • 调整DQN的超参数时,可以适当减小batch_size、网络的神经元数量或者层数,这样每个脚本占用的显存会更少,更容易并行运行。
  • 用nvidia-smi命令查看显存使用情况,比如watch -n 1 nvidia-smi,每隔1秒刷新一次,确认两个脚本都在正常运行。

内容的提问来源于stack exchange,提问作者Antonio Serrano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:53:08