Linux -- 使用多张gpu卡进行深度学习任务(以tensorflow为例)

在linux系统上进行多gpu卡的深度学习任务

  • 确保已安装最新的 TensorFlow GPU 版本。
python 复制代码
import tensorflow as tf
print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))
  • 1、确保你已经正确安装了tensorflow和相关的GPU驱动,这里可以通过在命令行输入nvidia-smi来查看:

    如果成功显示了类似上述的GPU信息和驱动版本信息,则说明NVIDIA驱动已经正确安装。

2、导入必要的库,设置可见的gpu设备列表:

python 复制代码
import tensorflow as tf
# 设置可见的GPU设备列表(例如,使用GPU 0、1、2和3)
gpu_devices = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_visible_devices(gpu_devices, 'GPU')
  • 3、创建一个MirroredStrategy对象,该对象将自动复制模型和数据到每个可见的GPU卡上:
python 复制代码
strategy = tf.distribute.MirroredStrategy()
  • 4、在strategy范围内创建和训练模型:
python 复制代码
with strategy.scope():
    # 创建和编译模型
    model = create_model()
    model.compile(...)
    
    # 加载数据
    train_dataset = load_train_data()
    test_dataset = load_test_data()
    
    # 训练模型
    model.fit(train_dataset, validation_data=test_dataset, ...)

以上,在MirroredStrategy范围内创建的模型将自动复制并分布到每个可见的GPU卡上,每个卡都将处理一部分数据。

使用多个 GPU 的最佳做法是使用 tf.distribute.Strategy

以下给出一个官网的简单示例:

python 复制代码
tf.debugging.set_log_device_placement(True)
gpus = tf.config.list_logical_devices('GPU')
strategy = tf.distribute.MirroredStrategy(gpus)
with strategy.scope():
  inputs = tf.keras.layers.Input(shape=(1,))
  predictions = tf.keras.layers.Dense(1)(inputs)
  model = tf.keras.models.Model(inputs=inputs, outputs=predictions)
  model.compile(loss='mse',
                optimizer=tf.keras.optimizers.SGD(learning_rate=0.2))

当然,也有手动的放置方法:

python 复制代码
tf.debugging.set_log_device_placement(True)

gpus = tf.config.list_logical_devices('GPU')
if gpus:
  # Replicate your computation on multiple GPUs
  c = []
  for gpu in gpus:
    with tf.device(gpu.name):
      a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
      b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
      c.append(tf.matmul(a, b))

  with tf.device('/CPU:0'):
    matmul_sum = tf.add_n(c)

  print(matmul_sum)

在tensorflow上使用gpu:https://www.tensorflow.org/guide/gpu?hl=zh-cn

相关推荐
都在酒里2 分钟前
Linux字符设备驱动开发(五):PWM调光——实现LED亮度控制与呼吸灯效果
linux·运维·驱动开发
Hani_9721 分钟前
Code Coverage系列(三)gcov 是什么?做什么?两个参数?检测原理?gcno文件内容?gcda文件内容?
linux·代码覆盖率
青梅橘子皮25 分钟前
Linux---进程状态与优先级
linux·运维·服务器
Biomamba生信基地26 分钟前
《Advanced Science》前沿工具发布:STAID,空间反卷积自优化深度学习框架
论文阅读·深度学习·生物信息学·模型训练
一次旅行30 分钟前
Deepseek-V4-Flash 快速部署与调用实战指南
人工智能·深度学习
H Journey39 分钟前
Linux VIM介绍与常用命令
linux·运维·vim
invicinble39 分钟前
设计模式(类的拓扑结构)(为什么会产生设计模式,以及什么是设计模式)
linux·服务器·设计模式
Arik~朽木1 小时前
Ubuntu 安装指南
linux·运维·ubuntu
難釋懷1 小时前
Nginx高可用配置
linux·nginx·php
IMPYLH1 小时前
Linux 的 yes 命令
linux·运维·服务器·数据库·bash