欢迎大家关注小宋公众号 《极简AI》 带你学深度学习:

基于深度学习的理论学习与应用开发技术分享,笔者会经常分享深度学习干货内容,大家在学习或者应用深度学习时,遇到什么问题也可以与我在上面交流知无不答。

出自 CSDN博客专家 & 知乎深度学习专栏作家 @小宋是呢

关联阅读:

[开发技巧]·PyTorch如何使用GPU加速(CPU与GPU数据的相互转换)

[开发技巧]·TensorFlow&Keras GPU

我们基于CNN实现Cifar10 数据集分类把这段相同的代码在不同主流深度学习进行测试,得到训练速度的对比数据。

主流深度学习硬件速度对比

(Colab TPU)  速度 382s/epoch

(i5 8250u) 速度 320s/epoch

(i7 9700k) 速度 36s/epoch

(GPU MX150) 速度 36s/epoch

(Colab GPU) 速度 16s/epoch

(GPU GTX 1060) 速度 9s/epoch

(GPU GTX1080ti) 速度 4s/epoch

通过对比看出相较于普通比较笔记本的(i5 8250u)CPU,一个入门级显卡(GPU MX150)可以提升8倍左右的速度,而高性能的显卡(GPU GTX1080ti)可以提升80倍的速度,如果采用多个GPU将会获得更快速度,所以经常用于训练的话还是建议使用GPU。

也欢迎大家在自己电脑上运行下面代码,对比一下速度。我的电脑CPU  320s/epoch。
代码部分

from tensorflow import keras from keras.datasets import cifar10 import numpy as np batch_size = 100 num_classes = 10 epochs = 10 # 数据载入 (x_train, train_labels), (x_test, test_labels) = cifar10.load_data() print(x_train.shape) train_images = x_train.reshape([-1,32,32,3]) / 255.0 test_images = x_test.reshape([-1,32,32,3]) / 255.0 model = keras.Sequential([ #(-1,32,32,3)->(-1,32,32,16) keras.layers.Conv2D(input_shape=(32, 32, 3),filters=32,kernel_size=3,strides=1,padding='same'), # Padding method), #(-1,32,32,32)->(-1,32,32,32) keras.layers.Conv2D(filters=32,kernel_size=3,strides=1,padding='same'), # Padding method), #(-1,32,32,32)->(-1,16,16,32) keras.layers.MaxPool2D(pool_size=2,strides=2,padding='same'), #(-1,16,16,32)->(-1,16,16,64) keras.layers.Conv2D(filters=64,kernel_size=3,strides=1,padding='same'), # Padding method), #(-1,16,16,64)->(-1,16,16,64) keras.layers.Conv2D(filters=64,kernel_size=3,strides=1,padding='same'), # Padding method), #(-1,16,16,64)->(-1,8,8,64) keras.layers.MaxPool2D(pool_size=2,strides=2,padding='same'), #(-1,8,8,64)->(-1,8*8*128) keras.layers.Conv2D(filters=128,kernel_size=3,strides=1,padding='same'), # Padding method), #(-1,8,8,128)->(-1,8*8*128) keras.layers.Conv2D(filters=128,kernel_size=3,strides=1,padding='same'), # Padding method), #(-1,8,8,128)->(-1,8*8*128) keras.layers.Flatten(), #(-1,8*8*128)->(-1,256) keras.layers.Dropout(0.3), keras.layers.Dense(128, activation="relu"), #(-1,256)->(-1,10) keras.layers.Dense(10, activation="softmax") print(model.summary()) model.compile(optimizer="adam", loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(train_images, train_labels, batch_size = batch_size, epochs=epochs,validation_data=[test_images[:1000],test_labels[:1000]]) test_loss, test_acc = model.evaluate(test_images, test_labels) print(np.argmax(model.predict(test_images[:20]),1),test_labels[:20])

输出结果(GPU gtx 1080 ti)

python demo.py
Using TensorFlow backend.
(50000, 32, 32, 3)
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
conv2d (Conv2D)              (None, 32, 32, 32)        896
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 32, 32, 32)        9248
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 16, 16, 32)        0
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 16, 16, 64)        18496
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 16, 16, 64)        36928
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 8, 8, 64)          0
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 8, 8, 128)         73856
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 8, 8, 128)         147584
_________________________________________________________________
flatten (Flatten)            (None, 8192)              0
_________________________________________________________________
dropout (Dropout)            (None, 8192)              0
_________________________________________________________________
dense (Dense)                (None, 128)               1048704
_________________________________________________________________
dense_1 (Dense)              (None, 10)                1290
=================================================================
Total params: 1,337,002
Trainable params: 1,337,002
Non-trainable params: 0
_________________________________________________________________
Train on 50000 samples, validate on 1000 samples
Epoch 1/10
2019-03-15 17:07:34.477745: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2019-03-15 17:07:34.552699: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:964] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-03-15 17:07:34.553036: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1432] Found device 0 with properties:
name: GeForce GTX 1080 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.6325
pciBusID: 0000:01:00.0
totalMemory: 10.92GiB freeMemory: 10.68GiB
2019-03-15 17:07:34.553049: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1511] Adding visible gpu devices: 0
2019-03-15 17:07:34.737306: I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-03-15 17:07:34.737335: I tensorflow/core/common_runtime/gpu/gpu_device.cc:988]      0
2019-03-15 17:07:34.737340: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 0:   N
2019-03-15 17:07:34.737468: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 10327 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1080 Ti, pci bus id: 0000:01:00.0, compute capability: 6.1)
50000/50000 [==============================] - 5s 103us/step - loss: 1.3343 - acc: 0.5256 - val_loss: 1.0300 - val_acc: 0.6450
Epoch 2/10
50000/50000 [==============================] - 4s 76us/step - loss: 0.9668 - acc: 0.6660 - val_loss: 0.8930 - val_acc: 0.6820
Epoch 3/10
50000/50000 [==============================] - 4s 76us/step - loss: 0.8349 - acc: 0.7097 - val_loss: 0.8486 - val_acc: 0.7130
Epoch 4/10
50000/50000 [==============================] - 4s 76us/step - loss: 0.7496 - acc: 0.7412 - val_loss: 0.8823 - val_acc: 0.7040
Epoch 5/10
50000/50000 [==============================] - 4s 76us/step - loss: 0.6805 - acc: 0.7643 - val_loss: 0.8710 - val_acc: 0.7060
Epoch 6/10
50000/50000 [==============================] - 4s 76us/step - loss: 0.6256 - acc: 0.7833 - val_loss: 0.9150 - val_acc: 0.7020
Epoch 7/10
50000/50000 [==============================] - 4s 77us/step - loss: 0.5715 - acc: 0.8000 - val_loss: 0.8586 - val_acc: 0.7140
Epoch 8/10
50000/50000 [==============================] - 4s 76us/step - loss: 0.5312 - acc: 0.8143 - val_loss: 0.9455 - val_acc: 0.7030
Epoch 9/10
50000/50000 [==============================] - 4s 77us/step - loss: 0.4878 - acc: 0.8287 - val_loss: 1.0063 - val_acc: 0.7360
Epoch 10/10
50000/50000 [==============================] - 4s 76us/step - loss: 0.4474 - acc: 0.8438 - val_loss: 1.0609 - val_acc: 0.7030
10000/10000 [==============================] - 1s 54us/step
[3 8 8 0 6 6 1 6 3 1 4 9 4 7 9 8 5 5 8 6] 
                    主流深度学习硬件速度对比(CPU,GPU,TPU)个人主页-->http://www.yansongsong.cn关联阅读:[开发技巧]·PyTorch如何使用GPU加速(CPU与GPU数据的相互转换)[开发技巧]·TensorFlow&KerasGPU我们基于CNN实现Cifar10 数据集分类把这段相同的代码在不同主流深度学习进行测试,得到...
最近跑的模型都比较大,尤其是Bert, 这真的是难为我 1080ti 了, 在Bert的Example中,官方提供了一些 Trick 来帮助我们加速训练,很良心, 但感觉还不够,于是花费一些时间整理出一个 Trick 集合,来帮助我们在显存不足的时候来嘿嘿嘿。
本文分为两大部分,第一部分引入一个主题:如何估计模型所需显存, 第二个主题:GPU显存不足时的各种 Trick 。
监控 GP...
				
本文来自于infoq技术产品团队,本文将详细介绍系统级优化方法,以及深度学习云平台落地的应用和算法,希望对您的学习有所帮助。随着人工智能技术在视频业务线的广泛应用深度学习算法在云端的部署对计算资源,尤其是GPU资源的需求也在飞速增长。如何提高深度学习应用部署效率,降低云平台运行成本,帮助算法及业务团队快速落地应用和服务,让AI发挥真正的生产力,是深度学习云平台团队努力的目标。从基础架构的角度,GPU资源的紧缺和GPU利用率的不足是我们面临的主要挑战。由于大量的算法训练及推理服务需求,云端GPU资源经常处于短缺状态;而使用CPU进行的推理服务常常由于性能问题,无法满足服务指标。除此
一、torch.nn.parallel.DistributedDataParallel 1、接收并行调用传入的参数 parser = argparse.ArgumentParser() parser.add_argument("--local_rank", type=int) args = parser.parse_args() 2、设置当前进程GPU torch.cuda.set_device(args.local...
先说我认为的结论,若夸卡训练中有统计数据同步(比如BN层的runing average 和 variance),这时单卡和多卡效果是一样的,只不过多卡增大了batch size,否则就不是严格的增大batch,因为统计数据可能不够准确。可以参考一下我摘录的小笔记,以BN层为对象,思考一下其他老师同学的回答: Pytorch Batch Normalizatin layer的坑 在实际应用中,增大b...
import os (x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data() # add empty color dimension x_train = np.expand_dims(x_train, -1) x_test = np.e...
碰到一个问题,在训练好一个模型后,实际使用时,即只有前向推理过程,速度缓慢,大概1s能执行100次。之所以会认为推理的速度变慢,主要原因在于,在训练模型时,会在训练集和验证集上,获取算法的准确率,那么就需要进行前向推理。在这里,会有大概500,000个样本,而只需要200s左右,大约2500/s。 那么为什么在实际进行推理时速度会变慢这么多呢? 分析后发现,主要原因有二: 1、训练模型时,...
文章目录背景可能的瓶颈本身训练代码(软件)可能的问题服务器(硬件)的问题硬件可能的问题CPUCPU的主要问题解决方案GPUGPU的主要问题硬盘io硬盘io的主要问题内存内存的主要问题解决方法总结 本文着重于硬件方面的问题,代码方面的问题后续会讨论。 多人使用一台服务器,常常会发生由于某个任务占用某个计算资源(cpu,gpu,内存,硬盘io等)过多,而导致其他任务由于该计算资源过少而训练速度过...
论文名称:Cyclical Learning Rates for Training Neural Networks 论文地址:https://arxiv.org/abs/1506.01186 简介:这篇论文主要描述了一种调整深度学习中的学习速率的策略,并提出了CLR(看论文标题)方法来动态的调整学习速率,介绍如何找到动态学习速率的上下界,加速网络模型的训练和收敛; 关键信息提取
上篇博客讲的是利用处理(分组数据集)训练数据集的方法,加快梯度下降法收敛速度,本文将介绍如何通过处理梯度的方法加快收敛速度。首先介绍Monmentum,再次介绍RMSprop,最后介绍两种算法的综合体Adam。1.Monmentum在介绍Monmentum之前,首先介绍加权平均法。加入给出一组数据的散点图,要求用一条曲线尽可能准确地描述散点图的趋势,如下图所示(图来自吴恩达课件): 描述时利用加权