首先如何计算CPU的flops:
输入 cat /proc/cpuinfo
物理CPU个数: cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
每个CPU物理核数: cat /proc/cpuinfo |grep "cpu cores"|uniq
每个CPU逻辑核数: cat /proc/cpuinfo |grep "siblings"|uniq
总CPU逻辑核数: cat /proc/cpuinfo |grep -c "processor"
我的服务器是两个芯片组,每个芯片组是10核,支持超线程,所以逻辑CPU是40。
超线程指物理内核+逻辑内核,芯片上只存在一个物理内核,但是这个物理内核可以模拟出一个逻辑内核,于是系统信息就显示了两个内核,一真一假。
图中第一行表示:这台机器又27+1=28个核心(processor的编号是从0开始),cpu cores =14表示这台机器的每个cpu有14个核心,所有28/14=2个cpu,第五行才是cpu型号和频率。
注意所谓的一台机器的总核心数就是:一台机器的总核心数=机器中processor的个数=cpu的个数*单个cpu的核心数。
例如上图:2.4GHz*28*16=1075.2Gflops
计算某个机器的浮点运算能力:CPU的峰值计算能力(每秒多少次浮点运算)=
CPU频率×CPU核心数*浮点运算单元数
注意:浮点运算单元数根据不同的CPU型号不同,intel一般是16,AMD的是8.可以去官网查询,太平洋在线也行。
sudo dmidecode|grep -P -A5 "Memory Device" |grep Size----------查看内存槽数、哪个槽位插了内存,大小是多少
sudo dmidecode -t memory |grep "Maximum Capacity"----------最大支持的内存数
sudo dmidecode|grep -A16 "Memory Device"|grep 'Speed'------查看内存速率
上述参考:https://blog.csdn.net/qq_25948717/article/details/80450301
模型打印
如果不知道自己模型的开头结点以及输出节点可以采用:
bazel build tensorflow / tools / graph_transforms:summarize_graph
先编译,然后
~/code/tensorflow/bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --in_graph=./input_graph.pb
计算自己图的flops
首先编译:
bazel build -c opt tensorflow/tools/benchmark:benchmark_model
然后:
~/code/tensorflow/bazel-bin/tensorflow/tools/benchmark/benchmark_model \
--graph=./hed_graph.pb --input_layer="node,is_training" \
--input_layer_shape=1,256,256,3: --input_layer_type="float,bool" \
--output_layer="node" --show_run_order=false --show_time=false \
--show_memory=false --show_summary=true --show_flops=true
这里不能像教程一样加0.
模型压缩
其实就是8比特定点量化
bazel build tensorflow/tools/graph_transforms:transform_graph && \
bazel-bin/tensorflow/tools/graph_transforms/transform_graph \
--in_graph=/tmp/tensorflow_inception_optimized.pb \
--out_graph=/tmp/tensorflow_inception_quantized.pb \
--inputs='Mul:0' --outputs='softmax:0' --transforms='quantize_weights'
参考:https://tensorflow.juejin.im/mobile/optimizing.html#toc-2