array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Ubuntu18.04 + NVIDIA 410.48 + CUDA10.0 + CUDNN7.5 环境搭建 - 爱码网

 

学习CNN需要搭建新环境,于是在原本Window 10系统下安装了双系统。

由于网上给的参考过程大都比较老,失去了一些时效性,并且有些参考过程在尝试后发现并不适用于我的情况。

因此整个过程踩了不少坑,特别是NVIDIA相关的安装。

这里有个小插曲,本来我是想利用VMware虚拟机安装Ubuntu。但是直到装好之后才发现,VMware的虚拟机下原来无法安装NVIDIA驱动,更不用说CUDA以及CUDNN了,较新的VMware为了稳定性无法让显卡发挥出应有的能力。

目标:Ubuntu18.04 + NVIDIA 410.48 + CUDA10.0 + CUDNN7.5 的环境搭建

 

一.完成Ubuntu18.04的安装

1.先从Ubuntu官网(https://www.ubuntu.com/download/desktop)下载安装包

2.使用Ultraiso制作U盘启动盘,同时分出一部分硬盘空间留给Ubuntu

3.重启进入BIOS,将U盘启动设为第一项,同时将BIOS中的Secure Boot关掉。

   这是由于后续使用的第三方模块有可能没有数字签名,为了避免后续不必要的问题因此我们将其关闭。

4.加载U盘进入安装界面。分区时需要注意,只需分出三个区即可。

    /                         主分区,放置系统

   swap                   逻辑分区,相当于虚拟内存

   /home                 用户存储空间

具体大小根据本机的情况来定,本机留给Ubuntu 2.3T 硬盘空间,实际内存128G。

考虑到实际需要,上面三区依次分配了 200G,128G,剩余空间 。

 

 

二.完成 NVIDIA 410.48 + CUDA 10.0 的安装

1.了解显卡的型号选用合适的驱动版本以及CUDA版本,本机为RTX 2080Ti 。考虑到之前测试项目的兼容稳定性,没有选用最新版本。选择了NVIDIA 410.48 + CUDA 10.0的组合。

2.在NVIDIA官网(https://developer.nvidia.com/cuda-toolkit)中找到合适自己的版本下载Ubuntu18.04 + NVIDIA 410.48 + CUDA10.0 + CUDNN7.5 环境搭建

由于该CUDA包里本身自带了配套的显卡驱动,因此可以直接下载,准备打包安装。

这里之前我是先安装好的驱动,再下的CUDA,确定了版本配套一致,却怎么也装不上。原因在于CUDA安装时NVIDIA的进程正在被使用,于是报错。在网上找了很多方法尝试了几次均不奏效,最后选择了卸载掉原先的驱动。现在回过头看,直接安装CUDA + 驱动合理地避开了这个问题。

3.禁用Nouveau驱动

这时Ubuntu系统自带的显卡驱动,不卸载会对NVIDIA驱动的安装产生影响,以及后续循环开机进不了系统等问题。

   Open Terminal

   输入

lsmod | grep -i nouveau

    有输出说明nouveau驱动正在运行。

    打开黑名单

sudo vim /etc/modprobe.d/blacklist.conf

    在文件末尾加上

blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off

    刷新后重启

sudo update-initramfs -u

    重启后发现移动窗口的过程很钝,说明禁用成功,也可再次输出上面的命令看是否有输出。

 

4.按官网上述指令输入,同时安装驱动与CUDA。安装完后重启,发现分辨率变高,说明安装成功。也可输入

nvidia-smi
nvcc -V

查看输出结果,确定安装成功。

Ubuntu18.04 + NVIDIA 410.48 + CUDA10.0 + CUDNN7.5 环境搭建

Ubuntu18.04 + NVIDIA 410.48 + CUDA10.0 + CUDNN7.5 环境搭建

 

三.完成CuDNN的安装

1.进入NVIDIA官网(https://developer.nvidia.com/rdp/cudnn-download)下载,CuDNN的下载需要注册。

2.选择自己需要的版本

Ubuntu18.04 + NVIDIA 410.48 + CUDA10.0 + CUDNN7.5 环境搭建

这里有个问题,起初我下载的是cuDNN Runtime Library for Ubuntu18.04 (Deb)cuDNN Developer Library for Ubuntu18.04 (Deb)两个.deb安装包,按官网给出的教程安装。但是安装结束后发现放置的位置出现了偏差。

输入

sudo dpkg -c libcudnn7_7.5.1.10-1+cuda10.0_amd64.deb

查看包的配置位置,发现配置位置并没有放在/usr/local/cuda10.0下面的目录。

Ubuntu18.04 + NVIDIA 410.48 + CUDA10.0 + CUDNN7.5 环境搭建

并且网上几乎都是清一色的用.tgz安装,没有相关的原因和解决办法。同时我发现官网给出的指南上居然写着:For example, the tar file installation applies to all Linux platforms, and the debian installation package applies to Ubuntu 14.04 and 16.04.

我觉得既然官方有18.04的deb包当然可以用deb安装,但是怎么用到现在我也还没弄清楚。有知道的大佬希望能解释一下。。

Ubuntu18.04 + NVIDIA 410.48 + CUDA10.0 + CUDNN7.5 环境搭建

官方给出的指南:https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installlinux

3.选用.tgz安装

最后我选用了cuDNN Library for Linux这个版本。

下载后依照上述官方指南即可安装完毕,安装后打开cuda-10.0目录。出现相关文件,运行测试程序,成功。

安装结束

 

四.小结

全过程花了不少时间,当然其中还包括pytorch的安装等其他事。

过程中主要问题在于网上的参考教程有些陈旧,并且转载来转载去,可能会出现一些偏差。因此许多问题给出的解决办法不见得适用,并且有些教程中极其有可能给你引导一个不怎么明智的方向,更有甚者可能是一个错误方向。

配置环境总是会踩坑的,本文以一个相对简单的流程完成了环境的配置,实际这只是我走了一遍后整理的整个流程。不同情况可能也会有所不同,仅供参考。

 

 

相关文章: