首页 > 其他分享 >tensorflow 2.x 多机单卡 分布式训练配置笔记.18010232

tensorflow 2.x 多机单卡 分布式训练配置笔记.18010232

时间:2024-02-06 20:33:26浏览次数:23  
标签:18010232 keras worker train 多机 tf tensorflow mnist

tensorflow 2.x 多机单卡 分布式训练配置笔记

tensorflow 2.x 多机单卡 demo代码演示。配置笔记
多机多卡属于 tensorflow的 tf.distribute.MultiWorkerMirroredStrategy 策略,下面为详细的环境配置和demo代码

环境、版本

操作系统:Ubuntu 22.04
Python环境:anaconda 23.11.0、Python 3.8
Tensorflow:2.12.0
硬件环境:通过vmwere安装两个Ubuntu虚拟机,网络配置为NAT方式

配置步骤

  1. 创建虚拟环境
conda create -n tensorflow2 python=3.8
  1. 安装tensorflow
conda install tensorflow=2.12
  1. 分别查看两台虚拟机的ip地址,ip addr 例如我的输出如下图
    img
    我的ip地址为172.27.83.12,另一台虚拟机同理

  2. 编写代码

代码来源tensorflow 文档中的[Google Colab连接]原始代码为ipython形式,这里进行了少量修改以python文件的形式运行(https://colab.research.google.com/github/tensorflow/docs-l10n/blob/master/site/zh-cn/guide/distributed_training.ipynb?hl=zh-cn) 此示例程序实现手写数字识别

主程序代码 保存为 main.py

import os
import json

import tensorflow as tf
import mnist_setup


tf_config = {
    'cluster': {
        'worker': ['192.168.91.128:12345', '172.27.83.12:23456'] # 工作节点的ip和端口列表,根据实际情况修改
    },
    'task': {'type': 'worker', 'index': 0}
}
os.environ['TF_CONFIG'] = json.dumps(tf_config) # 将配置转为json字符串并配置环境变量,此配置非常重要,不可跳过
per_worker_batch_size = 64
# tf_config = json.loads(os.environ['TF_CONFIG']) # 从环境变量中获取配置,此处可删除,因为tf_config变量已经赋值了
num_workers = len(tf_config['cluster']['worker'])

strategy = tf.distribute.MultiWorkerMirroredStrategy() # 配置多机单卡策略

global_batch_size = per_worker_batch_size * num_workers
multi_worker_dataset = mnist_setup.mnist_dataset(global_batch_size)

with strategy.scope():
  # Model building/compiling need to be within `strategy.scope()`.
  multi_worker_model = mnist_setup.build_and_compile_cnn_model()


multi_worker_model.fit(multi_worker_dataset, epochs=3, steps_per_epoch=70)

非核心代码 保存为mnist_setup

import os
import tensorflow as tf
import numpy as np

def mnist_dataset(batch_size):
  (x_train, y_train), _ = tf.keras.datasets.mnist.load_data()
  # The `x` arrays are in uint8 and have values in the [0, 255] range.
  # You need to convert them to float32 with values in the [0, 1] range.
  x_train = x_train / np.float32(255)
  y_train = y_train.astype(np.int64)
  train_dataset = tf.data.Dataset.from_tensor_slices(
      (x_train, y_train)).shuffle(60000).repeat().batch(batch_size)
  return train_dataset

def build_and_compile_cnn_model():
  model = tf.keras.Sequential([
      tf.keras.layers.InputLayer(input_shape=(28, 28)),
      tf.keras.layers.Reshape(target_shape=(28, 28, 1)),
      tf.keras.layers.Conv2D(32, 3, activation='relu'),
      tf.keras.layers.Flatten(),
      tf.keras.layers.Dense(128, activation='relu'),
      tf.keras.layers.Dense(10)
  ])
  model.compile(
      loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
      optimizer=tf.keras.optimizers.SGD(learning_rate=0.001),
      metrics=['accuracy'])
  return model

  1. 前面创建了两个虚拟机,需要根据虚拟机ip修改代码中tf_config中的worker数组,并且修改index值,如下图所示
    img

  2. 运行程序,两台虚拟机分别执行python main.py运行程序

常见问题

  1. 两台虚拟机相互ping,确保网络相互可达再运行程序
  2. 如下图所示错误,原因是下载数据集失败,修改 mnist_setup示例程序使用其他数据集或者自行解决网络问题
    img
  3. 两端运行不同步,各自执行。检查是否配置了环境变量即os.environ['TF_CONFIG'] = json.dumps(tf_config)

参考资料

tensorflow 中文文档

标签:18010232,keras,worker,train,多机,tf,tensorflow,mnist
From: https://www.cnblogs.com/idongliming/p/18010258

相关文章

  • Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(七)
    原文:Hands-OnMachineLearningwithScikit-Learn,Keras,andTensorFlow译者:飞龙协议:CCBY-NC-SA4.0第十六章:使用RNN和注意力进行自然语言处理当艾伦·图灵在1950年想象他著名的Turing测试时,他提出了一种评估机器匹配人类智能能力的方法。他本可以测试许多事情,比如......
  • Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(二)
    原文:Hands-OnMachineLearningwithScikit-Learn,Keras,andTensorFlow译者:飞龙协议:CCBY-NC-SA4.0第三章:分类在第一章中,我提到最常见的监督学习任务是回归(预测值)和分类(预测类)。在第二章中,我们探讨了一个回归任务,使用各种算法(如线性回归、决策树和随机森林)来预测房屋价......
  • Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(五)
    原文:Hands-OnMachineLearningwithScikit-Learn,Keras,andTensorFlow译者:飞龙协议:CCBY-NC-SA4.0第十二章:使用TensorFlow进行自定义模型和训练到目前为止,我们只使用了TensorFlow的高级API,Keras,但它已经让我们走得很远:我们构建了各种神经网络架构,包括回归和分类......
  • Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(六)
    原文:Hands-OnMachineLearningwithScikit-Learn,Keras,andTensorFlow译者:飞龙协议:CCBY-NC-SA4.0第十四章:使用卷积神经网络进行深度计算机视觉尽管IBM的DeepBlue超级计算机在1996年击败了国际象棋世界冠军加里·卡斯帕罗夫,但直到最近计算机才能可靠地执行看似......
  • Distribute tensorflow model training on a kubernetes cluster
    [ERRRO:AttributeError:module'tensorflow'hasnoattribute'app'](base)maye@maye-Inspiron-5547:~/github_repository/tensorflow_ecosystem/distribution_strategy$kubectldescribepoddist-strat-example-worker-0-w6rsbName:......
  • 一种在新版本Cuda上运行TensorFlow V1版本程序的方法
    这年头了我居然还得跑TensorFlowV1版本的程序,居然还有人写TensorFlowV1版本的程序,然而服务器上CUDA版本已经更新到最新,着实让人头大。。。一番苦苦搜索后,在社区里找到了一个解决方案:https://github.com/tensorflow/tensorflow/issues/43629 具体来说就是Nvidia自己维护了一......
  • tensorflow1.15与numpy、keras以及Python兼容版本对照
    https://blog.csdn.net/m0_74181960/article/details/134253013 报错信息:numpy库版本不兼容问题NotImplementedError:CannotconvertasymbolicTensor(bi_lstm/lstm_encoder_a/fw/fw/strided_slice:0)toanumpyarray.根据错误信息中提到的内容,可能是在创建初始状态时使......
  • Tensorflow环境配置
    参考资料机器学习:完整配置TensorFlow开发环境tensorflow与高版本numpy不兼容的问题环境配置安装Anaconda安装过程需要注意选择自动添加环境变量检查项。选择该项后安装包会自动将安装路径注册到Windows系统变量,命令行窗口运行Anaconda时,不会出现找不到Anaconda问题。创建......
  • 【深度学习】从0完整讲透深度学习第2篇:TensorFlow介绍和基本操作(代码文档已分享)
    本系列文章md笔记(已分享)主要讨论深度学习相关知识。可以让大家熟练掌握机器学习基础,如分类、回归(含代码),熟练掌握numpy,pandas,sklearn等框架使用。在算法上,掌握神经网络的数学原理,手动实现简单的神经网络结构,在应用上熟练掌握TensorFlow框架使用,掌握神经网络图像相关案例。具体包......
  • 文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
    一、介绍文本分类系统,使用Python作为主要开发语言,通过选取的中文文本数据集("体育类","财经类","房产类","家居类","教育类","科技类","时尚类","时政类","游戏类","娱乐类"),基于TensorFlow搭建CNN卷积神经网络算法模型,并进行多轮迭代训练最后得到一个识......