容器内如何使用GPU卡

2019-08-27 13:47:13 浏览数 (1)

背景:

         目前容器化部署服务已经成为微服务管理的趋势,大家知道docker目前cgroup支持cpu,内存的隔离,在gpu隔离上目前还做不到,业界gpu卡基本都是英伟达的,目前英伟达提供了插件来支持容器内获取gpu卡信息,并且能做到隔离。

gpu相关知识,显卡,显卡驱动,cuda,cudnn关系

1、显卡(GPU)

GPU,主流是NVIDIA的GPU,深度学习本身需要大量计算。GPU的并行计算能力,在过去几年里恰当地满足了深度学习的需求。AMD的GPU基本没有什么支持,使用比较少。

2、显卡驱动

没有显卡驱动,就不能识别GPU硬件,不能调用其计算资源。

下载地址:https://www.nvidia.com/Download/index.aspx?lang=en-us

3、cuda

cuda是NVIDIA推出的只能用于自家GPU的并行计算框架。只有安装这个框架才能够进行复杂的并行计算。主流的深度学习框架也都是基于CUDA进行GPU并行加速的

下载地址:https://developer.nvidia.com/cuda-downloads

4、cuDNN

cuDNN是一个SDK,是一个专门用于神经网络的加速包,注意,它跟我们的CUDA没有一一对应的关系,即每一个版本的CUDA可能有好几个版本的cuDNN与之对应,但一般有一个最新版本的cuDNN版本与CUDA对应更好。

注意:NVIDIA的显卡驱动器与CUDA并不是一一对应的,但是有些兼容性问题需要注意:

容器(docker)内使用GPU卡步骤说明:

        1、安装nvidia-docker2 这个会依赖docker,里面包含了docker 与nvidia-docker2

         yum --enablerepo=tlinux-testing install -y nvidia-docker2

        2、配置文件修改/etc/docker/daemon.json

   { "bridge": "none", "debug": false, "default-runtime": "nvidia", "data-root": "/data/docker17", "exec-opts": ["native.cgroupdriver=cgroupfs"], "hosts": ["tcp://localIP:2375", "unix:///var/run/docker.sock"], "insecure-registries": ["10.0.0.0/8", "100.64.0.0/10"], "iptables": false, "log-driver": "journald", "registry-mirrors": ["http://localIP:5000"], "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] }, "docker-runc": { "path": "/usr/bin/docker-runc", "runtimeArgs": [] } }, "storage-driver": "overlay" }

注:修改Docker daemon 的启动参数,将默认的 runtime修改为 nvidia-container-runtime后,可实现将GPU Device,CUDA Driver库挂载到容器中。

3、启动方式增加2个参数

--privileged -e NVIDIA_VISIBLE_DEVICES=all

例如: docker run -d --net=host --name=nvidiatest --privileged -e NVIDIA_VISIBLE_DEVICES=all -v /data/installenv:/data/installenv -ti sz.artifactory.oa.com:8090/paas/public/tlinux2.2 bash

4、在k8s中做gpu隔离

resources: limits: cpu: "88" memory: 253040Mi nvidia.com/gpu: "8" requests: cpu: "88" memory: 253040Mi nvidia.com/gpu: "8"

0 人点赞