深度学习使用显卡

2018-12-13 10:26:25 weixin_41010198 阅读数 1559

1、查看机器上GPU的使用情况

在Linux系统是使用 nvidia-smi 查看命令GPU的使用情况

  1. nvidia-smi -lms 命令

命令:nvidia-smi -lms
功能:该命令会循环显示当前GPU的使用情况

在这里插入图片描述
显示的信息(仅供参考:我本机上是2块 1080Ti的GPU,每一块GPU的显存大小是11G):

  • 当前显卡使用的时间
  • 显卡驱动的版本
  • 显卡的型号
  • 显卡显存的大小,和当前使用显存的大小
  • 显卡的使用率
  • GPU的编号(0和1),进程PID (当出现程序停止的时候,显存还被占用的时候, 可以通过 kill PID 进行终止
  • 当前调用GPU使用的进程程序
  1. nvidia-smi --loop-ms=

命令:nvidia-smi --loop-ms= 和上面的命令功能一样,但是可以自己定义循环显示时间(刷新的间隔时间)
Eg: nvidia-smi --loop-ms=100

  1. nvidia-smi 更多命令使用

查看帮助文档: nvidia-smi -h

2、tensorflow 中显卡使用和显存分配

1、显卡的使用,单显卡和多显卡调用

在tensorflow中调用GPU的方式有两种

  • 通过os.environ[“CUDA_VISIBLE_DEVICES”] 设置环境变量
  • 通过调用tensorflow的API, tf.device()

1、通过设置环境变量设置 禁用、单GPU、多GPU的调用

  1. tensorflow禁用gpu:

如果安装了tensorflow-gpu版,但是在测试时只想用cpu版本,可以作如下修改:

import os
os.environ["CUDA_VISIBLE_DEVICES"]="-1"    # 其实是通过设置环境变量的形式修改的  
# 注意这里是[] , 是直接修改环境变量中的值     "-1" 是字符串
import tensorflow as tf

更多参考:这里

  1. 单GPU和多GPU调用
    os.environ输出的是一个字典包含key和value;

os.environ[‘环境变量名称’]=‘环境变量值’ #其中key和value均为string类型

  • 在终端执行程序时指定GPU
    CUDA_VISIBLE_DEVICES=1 python your_file.py
    这样在跑你的网络之前,告诉程序只能看到1号GPU,其他的GPU它不可见
    可用的形式如下:
    CUDA_VISIBLE_DEVICES=1 Only device 1 will be seen
    CUDA_VISIBLE_DEVICES=0,1 Devices 0 and 1 will be visible
    CUDA_VISIBLE_DEVICES=“0,1” Same as above, quotation marks are optional
    CUDA_VISIBLE_DEVICES=0,2,3 Devices 0, 2, 3 will be visible; device 1 is masked
    CUDA_VISIBLE_DEVICES="" No GPU will be visible
  • 在Python代码中指定GPU
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"     # 有人说需要加这行代码,我没有加亲测也是可行的
os.environ["CUDA_VISIBLE_DEVICES"] = "0"   # 只调用第一块GPU
os.environ["CUDA_VISIBLE_DEVICES"] = "1"  # 只调用第二块GPU
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"  # 调用第一和第二块GPU
os.environ["CUDA_VISIBLE_DEVICES"] = "0""1"  # 调用第一和第二块GPU
  • 设置定量的GPU使用量
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.7)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) 
# 这样运行TensorFlow程序时,每个使用的GPU中,占用的显存都不超过总显存的0.7.
  • 按需设置显存,自适应分配
gpu_options = tf.GPUOptions(allow_growth=True)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))       这样设置以后,程序就会按需占用GPU显存。

**补充Liunx中系统环境变量的知识

  1. 获取系统环境变量
    1、os.environ[‘环境变量名称’]
    2、os.getenv(‘环境变量名称’)
    例如
    “if “BATCH_CONFIG_INI” in os.environ:” 判断环境变量BATCH_CONFIG_INI的值有没有定义
    使用os.environ.keys()可以查看所有的Key
  2. key字段详解
    linux:
os.environ['HOME']: 用户地址。’/home/zhu'
os.environ['USER']: 当前使用用户。‘zhu'
os.environ['SHELL']: 使用shell的类型。'/bin/bash'
os.environ['LANGUAGE']: 使用的语言。'zh_CN:en'
os.environ['SSH_AUTH_SOCK']: ssh的执行路径。'/run/user/1000/keyring/ssh'

2、通过调用tensorflow的API, tf.device()设置GPU的使用(参考

TensorFlow程序可以通过tf.device函数来指定运行每一个操作的设备,这个设备可以是本地的CPU或者GPU,也可以是某一台远程的服务器。但在本文中只关心本地的设备。TensorFlow会给每一个可用的设备一个名称,tf.device函数可以通过设备的名称来指定执行运算的设备。


比如CPU在TensorFlow中的名称为/cpu:0。
在默认情况下,即使机器有多个CPU,TensorFlow也不会区分它们,所有的CPU都使用/cpu:0作为名称


而一台机器上不同GPU的名称是不同的,第n个GPU在TensorFlow中的名称为/gpu:n。
比如第一个GPU的名称为/gpu:0,第二个GPU名称为/gpu:1,以此类推。


TensorFlow提供了一个快捷的方式来查看运行每一个运算的设备。在生成会话时,可以通过设置log_device_placement参数来打印运行每一个运算的设备。以下程序展示了如何使用log_device_placement这个参数。

  1. 只有CPU的情况下
import tensorflow as tf

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')
c = a + b
# 通过log_device_placement参数来输出运行每一个运算的设备。
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print sess.run(c)

'''
在没有GPU的机器上运行以上代码可以得到类似以下的输出:
Device mapping: no known devices.

add: (Add): /job:localhost/replica:0/task:0/cpu:0
b: (Const): /job:localhost/replica:0/task:0/cpu:0
a: (Const): /job:localhost/replica:0/task:0/cpu:0
[ 2.  4.  6.]
'''
在以上代码中,TensorFlow程序生成会话时加入了参数log_device_placement=True,所以程序会将运行每一个操作的设备输出到屏幕。
于是除了可以看到最后的计算结果,还可以看到类似“add: /job:localhost/replica:0/task:0/cpu:0”这样的输出。这些输出显示了
执行每一个运算的设备。比如加法操作add是通过CPU来运行的,因为它的设备名称中包含了/cpu:0
  1. 机器上配置好TensorFlow的GPU请况下,机器会默认优先调用GPU进行运算的
    但是如果本机上有多块GPU,在没有设定的情况下,也只会调用默认的一块GPU

在配置好GPU环境的TensorFlow中,如果操作没有明确地指定运行设备,那么TensorFlow会优先选择GPU。比如将以上代码在亚马逊(Amazon Web Services, AWS)的 g2.8xlarge实例上运行时,会得到类似以下的运行结果。

Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GRID K520, pci bus id: 0000:00:03.0
/job:localhost/replica:0/task:0/gpu:1 -> device: 1, name: GRID K520, pci bus id: 0000:00:04.0
/job:localhost/replica:0/task:0/gpu:2 -> device: 2, name: GRID K520, pci bus id: 0000:00:05.0
/job:localhost/replica:0/task:0/gpu:3 -> device: 3, name: GRID K520, pci bus id: 0000:00:06.0

add: (Add): /job:localhost/replica:0/task:0/gpu:0
b: (Const): /job:localhost/replica:0/task:0/gpu:0
a: (Const): /job:localhost/replica:0/task:0/gpu:0
[ 2.  4.  6.]

从以上输出可以看到在配置好GPU环境的TensorFlow中,TensorFlow会自动优先将运算放置在GPU上。不过,尽管g2.8xlarge实例有4个GPU,在默认情况下,TensorFlow只会将运算优先放到/gpu:0上。于是可以看见在以上程序中,所有的运算都被放在了/gpu:0上。如果需要将某些运算放到不同的GPU或者CPU上,就需要通过tf.device来手工指定。

以下程序给出了一个通过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 + b

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print sess.run(c)

'''
在AWS g2.8xlarge实例上运行上述代码可以得到以下结果:
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GRID K520, pci bus id: 0000:00:03.0
/job:localhost/replica:0/task:0/gpu:1 -> device: 1, name: GRID K520, pci bus id: 0000:00:04.0
/job:localhost/replica:0/task:0/gpu:2 -> device: 2, name: GRID K520, pci bus id: 0000:00:05.0
/job:localhost/replica:0/task:0/gpu:3 -> device: 3, name: GRID K520, pci bus id: 0000:00:06.0

add: (Add): /job:localhost/replica:0/task:0/gpu:1
b: (Const): /job:localhost/replica:0/task:0/cpu:0
a: (Const): /job:localhost/replica:0/task:0/cpu:0
[ 2.  4.  6.]
'''

在以上代码中可以看到生成常量a和b的操作被加载到了CPU上,而加法操作被放到了第二个GPU“/gpu:1”上。在TensorFlow中,不是所有的操作都可以被放在GPU上,如果强行将无法放在GPU上的操作指定到GPU上,那么程序将会报错。以下代码给出了一个报错的样例。

import tensorflow as tf

# 在CPU上运行tf.Variable
a_cpu = tf.Variable(0, name="a_cpu")

with tf.device('/gpu:0'):
    # 将tf.Variable强制放在GPU上。
    a_gpu = tf.Variable(0, name="a_gpu")

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
sess.run(tf.initialize_all_variables())

'''
运行以上程序将会报出以下错误:
tensorflow.python.framework.errors.InvalidArgumentError: Cannot assign a device to node 'a_gpu': Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available.
Colocation Debug Info:
Colocation group had the following types and devices: 
Identity: CPU 
Assign: CPU 
Variable: CPU 
[[Node: a_gpu = Variable[container="", dtype=DT_INT32, shape=[], shared_ name="", _device="/device:GPU:0"]()]]
'''

不同版本的TensorFlow对GPU的支持不一样,如果程序中全部使用强制指定设备的方式会降低程序的可移植性。在TensorFlow的kernel中定义了哪些操作可以跑在GPU上。比如可以在variable_ops.cc程序中找到以下定义。

# define REGISTER_GPU_KERNELS(type)                                       \
    REGISTER_KERNEL_BUILDER(                                                 \
      Name("Variable").Device(DEVICE_GPU).TypeConstraint<type>("dtype"),\
      VariableOp);                                                                 \
   …
TF_CALL_GPU_NUMBER_TYPES(REGISTER_GPU_KERNELS);

在这段定义中可以看到GPU只在部分数据类型上支持tf.Variable操作。如果在TensorFlow代码库中搜索调用这段代码的宏TF_CALL_GPU_NUMBER_TYPES,可以发现在GPU上,tf.Variable操作只支持实数型(float16、float32和double)的参数。而在报错的样例代码中给定的参数是整数型的,所以不支持在GPU上运行。为避免这个问题,TensorFlow在生成会话时可以指定allow_soft_placement参数。当allow_soft_placement参数设置为True时,如果运算无法由GPU执行,那么TensorFlow会自动将它放到CPU上执行。以下代码给出了一个使用allow_soft_placement参数的样例。

import tensorflow as tf

a_cpu = tf.Variable(0, name="a_cpu")
with tf.device('/gpu:0'):
    a_gpu = tf.Variable(0, name="a_gpu")

# 通过allow_soft_placement参数自动将无法放在GPU上的操作放回CPU上。
sess = tf.Session(config=tf.ConfigProto(
    allow_soft_placement=True, log_device_ placement=True))
sess.run(tf.initialize_all_variables())

'''
运行上面这段程序可以得到以下结果:
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GRID K520, pci bus id: 0000:00:03.0
/job:localhost/replica:0/task:0/gpu:1 -> device: 1, name: GRID K520, pci bus id: 0000:00:04.0
/job:localhost/replica:0/task:0/gpu:2 -> device: 2, name: GRID K520, pci bus id: 0000:00:05.0
/job:localhost/replica:0/task:0/gpu:3 -> device: 3, name: GRID K520, pci bus id: 0000:00:06.0
a_gpu: /job:localhost/replica:0/task:0/cpu:0
a_gpu/read: /job:localhost/replica:0/task:0/cpu:0
a_gpu/Assign: /job:localhost/replica:0/task:0/cpu:0
init/NoOp_1: /job:localhost/replica:0/task:0/gpu:0
a_cpu: /job:localhost/replica:0/task:0/cpu:0
a_cpu/read: /job:localhost/replica:0/task:0/cpu:0
a_cpu/Assign: /job:localhost/replica:0/task:0/cpu:0
init/NoOp: /job:localhost/replica:0/task:0/gpu:0
init: /job:localhost/replica:0/task:0/gpu:0
a_gpu/initial_value: /job:localhost/replica:0/task:0/gpu:0
a_cpu/initial_value: /job:localhost/replica:0/task:0/cpu:0

从输出的日志中可以看到在生成变量a_gpu时,无法放到GPU上的运算被自动调整到了CPU上(比如a_gpu和a_gpu/read),而可以被GPU执行的命令(比如a_gpu/initial_value)依旧由GPU执行。
'''

虽然GPU可以加速TensorFlow的计算,但一般来说不会把所有的操作全部放在GPU上。一个比较好的实践是将计算密集型的运算放在GPU上,而把其他操作放到CPU上。GPU是机器中相对独立的资源,将计算放入或者转出GPU都需要额外的时间。而且GPU需要将计算时用到的数据从内存复制到GPU设备上,这也需要额外的时间。TensorFlow可以自动完成这些操作而不需要用户特别处理,但为了提高程序运行的速度,用户也需要尽量将相关的运算放在同一个设备上。

2、显存分配

  1. 现存分配

在学习莫烦教程中的一个例子的时候,运行报错:
Tensorflow-Tutorial_py\tutorial-contents\302_simple_classification.py

错误:InternalError (see above for traceback): Blas GEMM launch failed

解决方案(参考):

如果你是使用 GPU 版 TensorFlow 的话,并且你想在显卡高占用率的情况下(比如玩游戏)训练模型,那你要注意在初始化 Session 的时候为其分配固定数量的显存,否则可能会在开始训练的时候直接报错退出:

这时你需要用下面的方法创建 Session:

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)  # 设置gpu的使用率 
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))  

3、Pytorch 中显卡使用和显存分配


4、Keras 中显卡使用和显存分配

后续更新中

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

2018-12-09 12:30:11 sy20173081277 阅读数 3574

独立显卡主要分为NVIDIA和AMD两大阵营,相对来说,NVIDIA显卡知名度与市场占有率都更高。CPU的全称是Central Processing Unit,GPU的全称是Graphics Processing Unit。CPU是计算机的核心处理器,GPU是用来处理图像的处理器件。CPU是一个拥有多种功能的优秀领导者。它的强项在于“调度”,并不擅长计算。相比于CPU来说,GPU具有以下的特点:

  • 提供了多核并行计算的基础结构,核心数非常多,可以提供大量并行计算
  • 拥有更高的访存速度
  • 更高的浮点运算能力

1.GTX1080

2.GTX1070

3.GTX1060

具体的参数对比如下图:

不同厂家的显卡对比图

关于泰坦

SLI的全称是Scalable Link Interface(可升级连接接口)也称速力,是英伟达公司的专利技术。它是通过一种特殊的接口连接方式,在一块支持双、三、四PCI Express X 16的主板上,同时使用两块、三块、四块同型号的PCI-E显卡。以增强nVIDIA在工作站产品中的竞争力,毕竟ATi凭借FireGL系列在该领域不断蚕食nVIDIA的市场。在未来的产品线中,SLI将成为新的至高点。

SLI技术理论上能把图形处理能力提高一倍,在实际应用中,除了极少数测试之外,在实际游戏中图形性能只能提高80%左右。SLI的代价很高。4路泰坦的主机一般成本在10万元人民币以上,15万元以内。这样的交火(SLI)需要额定功率不低于1600W的电源,功耗也是非常可观的了。

4路泰坦叫4张titan SLI,也就是用四块中高端级别的NVIDIA泰坦独立显卡来组建交火(SLI),以实现更加恐怖的超高级游戏性能。泰坦是NVIDIA(英伟达)一种独立显卡的名称,售价不低于8000/块。 除了4路外还有用3块TITAN组建3路交火(SLI)的,也叫泰坦3路交火(SLI)。

可以参考:https://blog.csdn.net/AthlenaA/article/details/82762555

 

 

2019-07-25 20:22:02 qq_29257201 阅读数 1153

参考地址:https://zhuanlan.zhihu.com/p/31558973

简介

在训练深度学习网络过程,常常听到朋友说卡,这里的卡就是显卡,显卡包括显存和GPU。像1080Ti卡显存是11GB,2080Ti显存卡同为11GB。 GPU计算单元,用来数值计算的,常常这样表示:一秒钟能进行多少个浮点数先乘再加,这样一次计算表示为一个flop。
深度学习过程中,常用的数值类型是 float32,一个float32的大小为4个字节,比如1000x1000矩阵,float32,占用显存的大小为

1000 x1000 x4Byte = 4MB

神经网络占用

神经网络占用包含两部分:

  • 模型自身参数
  • 模型的输出
    比如说神经网络中的某一卷积层的参数有,卷积参数+卷积输出的参数,每一层的参数均需要保存,因为,这些参数再后向传播过程中需要用到。

有参数的卷积层

  • 卷积
  • 全连接
  • BatchNorm

无参数卷积层

  • 激活层
  • 池化层
  • Dropout

  • 比如:这里没有表示bias,如果有 + 相应输出
  • Linear(M, N) 参数数目为:M * N
  • Conv2d(Cin , Cout, K) 参数数目:Cin * Cout * K* K,卷积核种类Cout种,每一种卷积核大小为 Cin * K * K
  • BatchNorm(N) 参数数目为: 2N (均值和方差)

  • 参数占用的显存 = 参数数目 X n Byte, n一般为4,因为深度学习总参数类型一般为float32

优化器参数

举例 SGD:
在这里插入图片描述
可以看出,除了保存W外,还需要保存相应的梯度,因此参数 x2
如果是 Momentum-SGD
在这里插入图片描述
这时候还需要保存动量,因此参数 x3
如果是Adam,显存x4
综上:

显存占用 = 模型显存占用 + batch_size x 每个样本的显存占用
模型显存占用 = 每一层的显存占用 + 优化器的显存占用
每个样本的显存占用 = 每一层的feature map + 对应的梯度

减少显存占用方法

  • 少用全连接,全连接更加站显存
  • 模型种可以采用下采样,这样的化,模型输出的显存占用减少
  • 降低batch_size
    ##################以上是从显存角度考虑######################
    ###################以下从计算量角度考虑###################
    计算量指得是运算过程中乘法的次数,比如:
  • 全连接:B x M x N
  • 卷积:B H W Cin Cout K K
2018-10-29 20:56:15 pjh23 阅读数 7552

如图所示,如果是要新买显卡的话,可参照这张图来进行购买,这显卡一般都是指安装在台式机上,而不是笔记本电脑上

如何判断自己的显卡是否可以用来进行深度学习?

1、显卡的类型
       由于NVIDIA公司在很早之前就推出了CUDA这个可以用代码来控制GPU的架构,所以NVIDIA使用的人较多,所以网上的资源也比较多,容易学习和构建。
       而AMD的显卡,由于很迟才推出它的编程架构,用的人比较少,所以网上的资料较少,所以很难去学习构建,所以如果你的笔记本电脑是NVIDIA公司的显卡就可以在网上找到很多关于用构建GPU深度学习框架的资源。
2、显卡的配置
  如何知道显卡的配置是否支持CUDA,一般可以通过NVIDIA的官网可以查看到自己的显卡是否支持CUDA,但网上好像说一定要显卡的显存大于3G,这个是否正确,有待我实践检验再发博客,大体说只要你的显卡是NAVDIA的,就可以百度下资料进行安装,尝试下。

2017-02-04 21:04:47 JasonZhangOO 阅读数 208701

去年下半年看了相关目标检测的论文,一些传统的算法,一些CVPR,TPAMI,ECCV,ICCV,,NIPS,比较前沿的进展,主要都是基于深度学习卷积神经网络方面的,包括RCNN,SPP-NET,Fast-RCNN,Faster-RCNN,以及YOLO,SSD,然后明天准备正式开始搞学术了,争取早点把论文发出来。

趁着放假回家的时间,做点前期准备工作,深度学习方面的框架有caffe,torch,mxnet,kerse,还有最近比较大热的TensorFlow,感觉tf会持续popular,所以准备搭建一个玩玩,但是相关比较新的目标检测框架都是首先基于caffe开发的,caffe对于图像方面的库比较多,稳定,所以搭建一个caffe也是必不可少,好像tf也是可以调用caffe框架模型的(没用过)。

装双系统之step one:http://blog.csdn.net/jasonzhangoo/article/details/54865974

装显卡驱动之step two(很多同学都是因为这步而放弃深度学习的):http://blog.csdn.net/jasonzhangoo/article/details/54866049

Ubuntu16.04下安装caffe和TensorFlow的cpu版本之step three:http://blog.csdn.net/jasonzhangoo/article/details/54866074

Win10下安装caffe的GPU版本之step four:http://blog.csdn.net/jasonzhangoo/article/details/54866120

windows安装配置faster-rcnn之step five:http://blog.csdn.net/jasonzhangoo/article/details/54866174


装显卡驱动之step two(很多同学都是因为这步而放弃深度学习的):

这也是使用深度学习框架GPU版本的关键,无奈装了几天没装好,大部分时间都是停在这一步,只能放弃,其实这里与我的电脑显卡设置有关,后面再说,大部分人还是可以安装成功的,最后我在双系统Ubuntu16.04中安装了caffe和TensorFlow的cpu版本,但是不甘心啊,还好后面在Windows下安装caffe的GPU版本异常的顺利,窃喜。

我的显卡:


很悲剧的是无法安装显卡驱动,详情参考这个贴吧:http://tieba.baidu.com/p/3636865352

我也是反复安装了两三天才发现这个问题,浪费了我很多时间啊,当然你如果lspci |grep VGA是两个都是显示VGA的,你可以安装显卡驱动的,这里主要有三种方法。

 

一是:系统设置->软件更新->附加驱动->选择nvidia最新驱动(361)->应用更改

简单但是不提倡

 

二是:先官网下载好对应驱动编译

Nvidia中文官网是 http://www.nvidia.cn/page/home.html

1)打开终端,先删除旧的驱动:

sudo apt-get purge nvidia*

2)禁用自带的 nouveau nvidia驱动

创建一个文件通过命令 sudo vim /etc/modprobe.d/blacklist-nouveau.conf

并添加如下内容:

blacklist nouveau
options nouveau modeset=0

再更新一下

sudo update-initramfs -u

修改后需要重启系统。确认下Nouveau是已经被你干掉,使用命令: lsmod | grep nouveau

3)重启系统至init 3(文本模式),也可先进入图形桌面再运行init 3进入文本模式,再安装下载的驱动就无问题,

首先我们需要结束x-window的服务,否则驱动将无法正常安装

关闭X-Window,很简单:sudo service lightdm stop,然后切换tty1控制台:Ctrl+Alt+F1即可

4)接下来就是最关键的一步了:sudo./NVIDIA.run开始安装,安装过程比较快,根据提示选择即可最后安装完毕后,重新启动X-Window:sudo service lightdm start,然后Ctrl+Alt+F7进入图形界面;


最后测试一下是否安装成功

nvidia-smi

nvidia-settings

 

三是:添加官方ppa源

快捷键ctrl+alt+T打开命令终端,加入官方ppa源。

$ sudo add-apt-repository ppa:graphics-drivers/ppa

需要输入密码并按enter键确认。之后刷新软件库并安装最新驱动。

$ sudo apt-get update

$ sudo apt-get install nvidia-367nvidia-settings nvidia-prime

安装完成后通过下面命令查看是否安装成功。

$ nvidia-settings

注意安装完成后要重启,有如下效果则安装完成,否则就说明安装有问题,尝试关闭UEFI保护试试。

 

安装了nvidia367后循环登录出现问题,解决参考http://www.jianshu.com/p/34236a9c4a2f