Tensorflow benchmark 实操指南

环境搭建篇见环境搭建-CentOS7下Nvidia Docker容器基于TensorFlow1.15测试GPU_东方狱兔的博客-CSDN博客

1. 下载Benchmarks源码

从 TensorFlow 的 Github 仓库上下载 TensorFlow Benchmarks,可以通过以下命令来下载

https://github.com/tensorflow/benchmarks

我的 - settings -SSH and GPG Keys 添加公钥id_rsa.pub

拉取代码 git clone git@github.com:tensorflow/benchmarks.git

git同步远程分支到本地,拉取tensorflow对应版本的分支

git fetch origin 远程分支名xxx:本地分支名xxx
使用这种方式会在本地仓库新建分支xxx,但是并不会自动切换到新建的分支xxx,需要手动checkout,当然了远程分支xxx的代码也拉取到了本地分支xxx中。采用这种方法建立的本地分支不会和远程分支建立映射关系

root@818d19092cdc:/gpu/benchmarks# git checkout -b tf1.15 origin/cnn_tf_v1.15_compatible

2. 运行不同模型

root@818d19092cdc:/gpu/benchmarks/scripts/tf_cnn_benchmarks# pwd
/gpu/benchmarks/scripts/tf_cnn_benchmarks
root@818d19092cdc:/gpu/benchmarks/scripts/tf_cnn_benchmarks# python3 tf_cnn_benchmarks.py

真实操作:

[root@gputest ~]# docker ps

进入CONTAINER ID  containerid

[root@gputest ~]# nvidia-docker exec -it 818d19092cdc /bin/bash

新开窗口 

[root@gputest ~]# nvidia-smi -l 3 

该命令将3秒钟输出一次GPU的状态和性能,可以通过查看输出结果来得出GPU的性能指标

一、resnet50模型

python3 tf_cnn_benchmarks.py --num_gpus=1 --batch_size=2 --model=resnet50 --variable_update=parameter_server

Running warm up
2023-07-21 09:50:55.398126: I tensorflow/stream_executor/platform/default/dso_loader.cc:50] Successfully opened dynamic library libcublas.so.12
2023-07-21 09:50:55.533068: I tensorflow/stream_executor/platform/default/dso_loader.cc:50] Successfully opened dynamic library libcudnn.so.8
Done warm up
Step    Img/sec    total_loss
1    images/sec: 10.1 +/- 0.0 (jitter = 0.0)    7.695
10    images/sec: 10.7 +/- 0.1 (jitter = 0.1)    8.022
20    images/sec: 10.7 +/- 0.1 (jitter = 0.2)    7.269
30    images/sec: 10.7 +/- 0.1 (jitter = 0.2)    7.889
40    images/sec: 10.7 +/- 0.1 (jitter = 0.2)    8.842
50    images/sec: 10.6 +/- 0.1 (jitter = 0.2)    6.973
60    images/sec: 10.6 +/- 0.1 (jitter = 0.2)    8.124
70    images/sec: 10.6 +/- 0.0 (jitter = 0.2)    7.644
80    images/sec: 10.6 +/- 0.0 (jitter = 0.2)    7.866
90    images/sec: 10.6 +/- 0.0 (jitter = 0.3)    7.687
100    images/sec: 10.6 +/- 0.0 (jitter = 0.3)    8.779
----------------------------------------------------------------
total images/sec: 10.63

二、vgg16模型

python3 tf_cnn_benchmarks.py --num_gpus=1 --batch_size=2 --model=vgg16 --variable_update=parameter_server

由于阿里云服务器申请的是2个G显存,所以只能跑size=1 2 和 4 ,超出会吐核

已放弃(吐核)--linux 已放弃(吐核) (core dumped) 问题分析

出现这种问题一般是下面这几种情况:

1.内存越界

2.使用了非线程安全的函数

3.全局数据未加锁保护

4.非法指针

5.堆栈溢出

也就是需要检查访问的内存、资源。

可以使用 strace 命令来进行分析

在程序的运行命令前加上 strace,在程序出现:已放弃(吐核),终止运行后,就可以通过 strace 打印在控制台的跟踪信息进行分析和定位问题

方法2:docker启动普通镜像的Tensorflow

$ docker pull tensorflow/tensorflow:1.8.0-gpu-py3
$ docker tag tensorflow/tensorflow:1.8.0-gpu-py3 tensorflow:1.8.0-gpu

# nvidia-docker run -it -p 8888:8888 tensorflow:1.8.0-gpu
$ nvidia-docker run -it -p 8033:8033 tensorflow:1.8.0-gpu

浏览器进入指定 URL(见启动终端回显) 就可以利用 IPython Notebook 使用 tensorflow

评测指标

  • 训练时间:在指定数据集上训练模型达到指定精度目标所需的时间

  • 吞吐:单位时间内训练的样本数

  • 加速效率:加速比/设备数*100%。其中,加速比定义为多设备吞吐数较单设备的倍数

  • 成本:在指定数据集上训练模型达到指定精度目标所需的价格

  • 功耗:在指定数据集上训练模型达到指定精度目标所需的功耗

在初版评测指标设计中,我们重点关注训练时间、吞吐和加速效率三项

3. 保存镜像的修改

执行以下命令,保存TensorFlow镜像的修改

docker commit   -m "commit docker" CONTAINER_ID  nvcr.io/nvidia/tensorflow:18.03-py3
# CONTAINER_ID可通过docker ps命令查看。

[root@gputest ~]# docker commit -m "commit docker" 818d19092cdc nvcr.io/nvidia/tensorflow:23.03-tf1-py3
sha256:fc14c7fdf361308817161d5d0cc018832575e7f2def99fe49876d2a41391c52c

 查看docker进程

[root@gputest ~]# docker ps

进入CONTAINER ID  containerid

[root@gputest ~]# nvidia-docker exec -it 818d19092cdc /bin/bash

4. TensorFlow支持的所有参数

参数名称

描述

备注

--help

查看帮助信息

--model

使用的模型名称,如alexnet、resnet50等,必须指定

请查阅所有支持的模型

--batch_size

batch size大小

默认值为32

--num_epochs

epoch的数量

默认值为1

--num_gpus

使用的GPU数量。设置为0时,仅使用CPU

  • 在单机多卡模式下,指定每台机器使用的GPU数量;

  • 在multi-worker模式下,指定每个worker使用的GPU数量

--data_dir

输入数据的目录,对于CV任务,当前仅支持ImageNet数据集;如果没有指定,表明使用合成数据

--do_train

执行训练过程

这三个选项必须指定其中的至少一个,可以同时指定多个选项。

--do_eval

执行evaluation过程

--do_predict

执行预测过程

--data_format

使用的数据格式,NCHW或NHWC,默认为NCHW。

  • 对于CPU设备,建议使用NHWC格式

  • 对于GPU设备,建议使用NCHW格式

--optimizer

所使用的优化器,当前支持SGD、Adam和Momentum,默认为SGD

--init_learning_rate

使用的初始learning rate的值

--num_epochs_per_decay

learning rate decay的epoch间隔

如果设置,这两项必须同时指定

--learning_rate_decay_factor

每次learning rate执行decay的因子

--minimum_learning_rate

最小的learning rate值

如果设置,需要同时指定面的两项

--momentum

momentum参数的值

用于设置momentum optimizer

--adam_beta1

adam_beta1参数的值

用于设置Adam

--adam_beta2

adam_beta2参数的值

--adam_epsilon

adam_epsilon参数的值

--use_fp16

是否设置tensor的数据类型为float16

--fp16_vars

是否将变量的数据类型设置为float16。如果没有设置,变量存储为float32类型,并在使用时转换为fp16格式。

建议:不要设置

必须同时设置--use_fp16

--all_reduce_spec

使用的AllReduce方式

--save_checkpoints_steps

间隔多少step存储一次checkpoint

--max_chkpts_to_keep

保存的checkpoint的最大数量

--ip_list

集群中所有机器的IP地址,以逗号分隔

用于多机分布式训练

--job_name

任务名称,如‘ps'、’worker‘

--job_index

任务的索引,如0,1等

--model_dir

checkpoint的存储目录

--init_checkpoint

初始模型checkpoint的路径,用于在训练前加载该checkpoint,进行finetune等

--vocab_file

vocabulary文件

用于NLP

--max_seq_length

输入训练的最大长度

用于NLP

--param_set

创建和训练模型时使用的参数集。

用于Transformer

--blue_source

包含text translate的源文件,用于计算BLEU分数

--blue_ref

包含text translate的源文件,用于计算BLEU分数

--task_name

任务的名称,如MRPC,CoLA等

用于Bert

--do_lower_case

是否为输入文本使用小写

--train_file

训练使用的SQuAD文件,如train-v1.1.json

用于Bert模型,运行SQuAD, --run_squad必须指定

--predict_file

预测所使用的SQuAD文件,如dev-v1.1.json或test-v1.1.json

--doc_stride

当将长文档切分为块时,块之间取的间距大小

--max_query_length

问题包含的最大token数。当问题长度超过该值时,问题将被截断到这一长度。

--n_best_size

nbest_predictions.json输出文件中生成的n-best预测的总数

--max_answer_length

生成的回答的最大长度

--version_2_with_negative

如果为True,表明SQuAD样本中含有没有答案(answer)的问题

--run_squad

如果为True,运行SQUAD任务,否则,运行sequence (sequence-pair)分类任务

5. GPU机器学习调研tensorflow

 如何在tensorflow中指定使用GPU资源

在配置好GPU环境的TensorFlow中 ,如果操作没有明确地指定运行设备,那么TensorFlow会优先选择GPU。在默认情况下,TensorFlow只会将运算优先放到/gpu:0上。如果需要将某些运算放到不同的GPU或者CPU上,就需要通过tf.device来手工指定

import tensorflow as tf# 通过tf.device将运算指定到特定的设备上。
with tf.device('/cpu:0'):a = tf.constant([1.0, 2.0, 3.0], shape=[3], name='a')b = tf.constant([1.0, 2.0, 3.0], shape=[3], name='b')
with tf.device('/gpu:1'):c = a + bsess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print sess.run(c)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/16549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity2D】粒子特效

为什么要使用粒子特效 Unity 的粒子系统是一种非常强大的工具,可以用来创建各种各样的游戏特效,如火焰、烟雾、水流、爆炸等等。使用粒子特效可以使一些游戏动画更加真实或者使游戏效果更加丰富。 粒子特效的使用 在Hierarchy界面右键添加Effects->…

shell执行mkdir build \ cd build\ cmake.. \ make命令

新建rebuild.sh,放入脚本代码 代码如下: #!/bin/bash if [ ! -d "build" ]; thenmkdir build elserm -rf build/* fi cd build Local_Dir$(cd "$(dirname "$0")"; pwd) echo "Now work at Dir:$Local_Dir" cm…

正则表达式中的大括号-花括号{}有什么用?

在正则表达式中,花括号 {} 是用于指定匹配次数的量词元字符。它可以用来表示匹配的次数范围或精确匹配次数。 具体来说,花括号 {m} 表示前面的模式匹配恰好出现 m 次,而 {m, n} 表示前面的模式匹配出现 m 到 n 次。 以下是一些常见的用法示…

软件测试工程师的职业规划,你都做好了吗?

第一阶段:初级测试工程师 一般刚刚入门,熟悉基本的测试流程,此时已打基础为主。入门薪资一般在6000-8000元之间。 具体工作是: (1) 按照测试方案和流程对产品进行功能测试,检查产品是否有缺陷…

c++ 派生类 文本查询程序再探

Query_base类和Query类 //这是一个抽象基类,具体的查询类型从中派生,所有成员都是private的 class Query_base {friend class Query;protected:using line_no TextQuery::line_no;//用于level函数virtual ~Query_base() default;private://eval返回与…

C#文件操作从入门到精通(2)——查看某个dll中有哪些函数

kernel32.dll中含有ini文件操作使用的函数,我们可以通过VisualStudio自带的dumpbin.exe查看dll所包含的函数,操作步骤如下: 1、找到dumpbin.exe所在的文件夹 我的电脑中安装了VisualStudio2019社区版以及VisualStudio2017Professional,但是我发现VisualStudio2019社区版中…

spring项目中idea提示Application context not configured for this file

今天在重构项目的时候,碰到一个问题。就是在spring底下,有一个包里面的所有配置类,在idea的开发工具类底下提示,Application context not configured for this file,如图所示 一开始以为是警告,不予处理&am…

大数据课程E7——Flume的Interceptor

文章作者邮箱:yugongshiyesina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Interceptor的概念和配置参数; ⚪ 掌握Interceptor的使用方法; ⚪ 掌握Interceptor的Host Interceptor; ⚪ 掌握Interceptor的…

MySQL中的函数

系列文章目录 MySQL常见的几种约束 文章目录 系列文章目录前言一、单行函数1.字符串函数 (String StringBuilder)2.数值函数 (Math)3.日期与时间函数4.流程函数( IF SWITCH)5.JSON函数6.其他函数 二、多行…

TreeMap的底层实现

0. 你需要知道的TreeMap的内置属性 0.1 节点属性 K key; // 键 V value; // 值 Entry<K,V> left; // 左子节点 Entry<K,V> right; // 右子节点 Entry<K,V> parent; // 父节点 boolean color; // 节点的颜色0.2 成员变量 //比较器对象private f…

rsync下行同步+inotify实时同步部署

目录 一、rsync简介 1.2 同步方式 1.2.1 全量备份 1.2.2 增量备份 1.2.3 差量备份 1.3 rsync的特点 1.4 rsync的优势与不足 1.5 rsync与cp、scp对比 1.6 rsync同类服务 二、rsync源服务器的关系 三、配置rsync源 3.1 基本思路 3.2 配置文件rsyncd.conf 3.3 独立…

代码随想录算法训练营19期第2天| 滑动窗口,螺旋矩阵模拟 (二刷)

【滑动窗口&#xff1a;209 长度最小子数组 904.水果成篮 76.最小覆盖子串】 209长度最小子数组 sum要达到target&#xff0c;自己滑动窗口法ac&#xff0c;不断往前囊括新的一个&#xff0c;然后试着从头减少一个个&#xff0c;看sum还够不够 mycode&#xff1a; int minS…

HDFS Erasure coding-纠删码介绍和原理

HDFS Erasure coding-纠删码介绍和原理 三副本策略弊端Erasure Coding&#xff08;EC&#xff09;简介Reed- Solomon&#xff08;RS&#xff09;码 EC架构 三副本策略弊端 为了提供容错能力&#xff0c;hdfs回根据replication factor&#xff08;复制因子&#xff09;在不同的…

ZooKeeper 选举的过半机制防止脑裂

结论&#xff1a; Zookeeper采用过半选举机制&#xff0c;防止了脑裂。 原因&#xff1a; 如果有5台节点&#xff0c;leader联系不上了&#xff0c;其他4个节点由于超过半数&#xff0c;所以又选出了一个leader&#xff0c;当失联的leader恢复网络时&#xff0c;发现集群中已…

idea application.yml配置文件没有提示或读不到配置

1.首先确定你的resources文件夹正常且yml文件图表和下面一样 不一样的右键去设置 2.确保你已经缩进了且层级关系正常 3.如果以上都不是&#xff0c;先考虑删除.idea重开试试 4.以上解决不了就装以下两个插件解决

目标检测之3维合成

现在有一系列的图片&#xff0c;图片之间可以按照z轴方向进行排列。图片经过了目标检测&#xff0c;输出了一系列的检测框&#xff0c;现在的需求是将检测框按类别进行合成&#xff0c;以在3维上生成检测结果。 思路&#xff1a;将图片按照z轴方向排列&#xff0c;以z轴索引作…

微分流形2:流形上的矢量场和张量场

来了来了&#xff0c;切向量&#xff0c;切空间。流形上的所有的线性泛函的集合&#xff0c;注意是函数的集合。然后取流形上的某点p&#xff0c;它的切向量为&#xff0c;线性泛函到实数的映射。没错&#xff0c;是函数到实数的映射&#xff0c;是不是想到了求导。我们要逐渐熟…

java源码-List源码解析

Java中的List是一个接口&#xff0c;它定义了一组操作列表的方法。List接口的常见子类包括ArrayList、LinkedList和Vector等。 以下是Java中List接口及其常见方法的源码解析&#xff1a; 1. List接口定义 public interface List<E> extends Collection<E> { …

Django模型将模型注释同步到数据库

1、安装django-comment-migrate库 pip install django-comment-migrate 2、将库注册到settings.py文件中 INSTALLED_APPS [...django_comment_migrate, # 表注释... ] 3、加注释 3.1、给模型&#xff08;表&#xff09;加注释 在模型的class Meta中编辑 verbose_name&…

Go和Java实现适配器模式

Go和Java实现适配器模式 我们通过下面的实例来演示适配器模式的使用&#xff0c;其中&#xff0c;音频播放器设备只能播放 mp3 文件&#xff0c;通过使用一个更高级 的音频播放器来播放 vlc 和 mp4 文件。 1、适配器模式 适配器模式是作为两个不兼容的接口之间的桥梁。这种…