Ubuntu 16.04安装Nvida驱动、CUDA9.0、Nvidia-docker和Nvidia_k8s_device_plugin

Ubuntu 16.04安装Nvida驱动、CUDA9.0、Nvidia-docker和Nvidia_k8s_device_plugin

一 安装Nvidia驱动

利用PPA源安装

sudo add-apt-repository -y ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install -y nvidia-390	# 这边可以指定安装的驱动版本

二 安装CUDA9.0

1、去官网下载CUDA

首先在官网上下载CUDA,这里我们选择CUDA Toolkit 9.0

Ubuntu 16.04安装Nvida驱动、CUDA9.0、Nvidia-docker和Nvidia_k8s_device_plugin_第1张图片

2、下载完成后把下载的 CUDA 安装文件移动到 HOME 路径下并执行以下命令安装显卡驱动

PS:如果你确定你已经正确安装好NVIDIA显卡驱动,那就不必按Ctrl+Alt+F1进入命令行模式,直接在图形化界面安装即可。

cd /home
sudo chmod 777 cuda_9.0.176_384.81_linux.run  #给用户增加读写和执行的权限
sudo  ./cuda_9.0.176_384.81_linux.run

PS:执行上述命令约1分钟后会出现 0%信息,此时长按回车键让此百分比增长,直到100%,然后按照提示操作即可,先输入 accept ,然后让选择是否安装 nvidia 驱动,这里因为已经安装过显卡驱动就不能再重复安装,所以输入“n”不安装。剩下的选择则都输入“y”确认安装或确认默认路径安装,开始安装。

3、配置环境变量

sudo gedit ~/.bashrc

加入下面2行

export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

使该配置生效

source ~/.bashrc

在/etc/profile文件中添加CUDA环境变量

 sudo gedit /etc/profile

打开文档都在文档结尾加上下面两句

PATH=/usr/local/cuda/bin:$PATH  
export PATH

保存后, 执行下列命令, 使环境变量立即生效

$ source /etc/profile

同时添加lib库路径,在 /etc/ld.so.conf.d/新建文件 cuda.conf

$ sudo gedit /etc/ld.so.conf.d/cuda.conf

在文中加入下面内容

/usr/local/cuda/lib64

执行下列命令使之立刻生效:

$ sudo ldconfig

4、执行以下命令测试cuda是否安装成功

$ cd /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery
$ sudo make
$ sudo ./deviceQuery

如果显示一些关于GPU的信息,则说明安装成功。

三、Nvidia-docker安装

查看nvidia-docker运行状态:

$ sudo service status nvidia-docker

方法一:根据官方Github的教程(Ubuntu 16.04)

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker

# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

# Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi

方法二:离线安装

step 1: 下载安装包(这里是1.0.1版本)
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
step 2: 安装

$ sudo dpkg -i /tmp/nvidia-docker.deb && rm /tmp/nvidia-docker.deb

Step 3: 运行 nvidia-docker-plugin

$ sudo nvidia-docker-plugin s /var/lib/nvidia-docker/

Step 4: 启动nvidia-docker进程

$ sudo systemctl start nvidia-docker

nvidia-docker-plugin是一个docker plugin,被用来帮助我们轻松部署container到gpu混合的环境下。类似一个守护进程,发现宿主机驱动文件以及gpu 设备,并且将这些挂载到来自docker守护进程的请求中。以此来支持docker gpu的使用
Test nvidia-smi

$ sudo nvidia-docker run nvidia/cuda nvidia-smi  

PS:这里有一个错误提示需要安装nvidia-modprobe

解决:利用一下三行命令安装

$ sudo apt-add-repository multiverse
$ sudo apt update
$ sudo apt install nvidia-modprobe

四 在Kubernetes中启用GPU支持

$ kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.11/nvidia-device-plugin.yml

在所有使用GPU的节点上,从Docker Hub中提取预构建的镜像:

$ docker pull nvidia / k8s-device-plugin:1.11

本地运行:

$ docker run --security-opt=no-new-privileges --cap-drop=ALL --network=none -it -v /var/lib/kubelet/device-plugins:/var/lib/kubelet/device-plugins nvidia/k8s-device-plugin:1.11

将nvidia-device-plugin部署为Daemon Set:

$ kubectl create -f nvidia-device-plugin.yml

PS:在安装nvidia-docker之后可能会出现原来的镜像不存在,导致pod创建失败,需要重新安装从节点镜像。

k8s.gcr.io/kube-proxy:v1.12.2
k8s.gcr.io/pause:3.1

五 测试

创建gpu-test.yaml文件:

 apiVersion: v1
 kind: Pod
 metadata:
   name: gpu-pod
 spec:
   restartPolicy: Never
   containers:
   - image: nvidia/cuda:9.0-base	# 这里要指定镜像的tag
     name: cuda
     command: ["nvidia-smi"]
     resources:
       limits:
         nvidia.com/gpu: 1
$ kubectl apply -f gpu-test.yaml

你可能感兴趣的:(Ubuntu 16.04安装Nvida驱动、CUDA9.0、Nvidia-docker和Nvidia_k8s_device_plugin)