docker19使用GPU

随着docker的不断升级,对GPU的支持也越来越友好,尤其是docker19.03之后,不再需要安装nvidia-docker了。只安装NVIDIA-CONTAINER-RUNTIME就可以使用了,并且支持docker-compose。
本文记录和梳理一下想要在docker中使用GPU,都需要做些什么。

1. 下载GPU的驱动

NVIDIA驱动程序页面下载对应的驱动。

2. 安装NVIDIA-CONTAINER-RUNTIME

https://nvidia.github.io/nvidia-container-runtime/查看支持的操作系统和版本,并根据对应选项,添加源,因为我是centos7.6,所以添加方式为:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-runtime.repo

在参考https://github.com/NVIDIA/nvidia-container-runtime后,得知直接安装即可

sudo yum install nvidia-container-runtime

3.直接使用

此时就准备好了GPU环境,在docker19下就能直接使用了,安装docker19可以参考的我的另一篇文章Centos安装docker 19

docker run -it --rm --gpus all centos nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.40       Driver Version: 430.40       CUDA Version: N/A      |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:4F:00.0 Off |                  N/A |
| 20%   23C    P8     8W / 250W |   4426MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 108...  Off  | 00000000:50:00.0 Off |                  N/A |
| 20%   21C    P8     8W / 250W |   8896MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  GeForce GTX 108...  Off  | 00000000:51:00.0 Off |                  N/A |
| 26%   23C    P8     8W / 250W |   6637MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   3  GeForce GTX 108...  Off  | 00000000:52:00.0 Off |                  N/A |
| 20%   21C    P8     8W / 250W |   6725MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   4  GeForce GTX 108...  Off  | 00000000:DB:00.0 Off |                  N/A |
| 20%   23C    P8     8W / 250W |   4482MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   5  GeForce GTX 108...  Off  | 00000000:DC:00.0 Off |                  N/A |
| 20%   26C    P8     8W / 250W |   4492MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   6  GeForce GTX 108...  Off  | 00000000:DD:00.0 Off |                  N/A |
| 20%   23C    P8     8W / 250W |   8802MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   7  GeForce GTX 108...  Off  | 00000000:DE:00.0 Off |                  N/A |
| 20%   22C    P8     8W / 250W |   2247MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

以上就完成了GPU的准备,可以使用了。(如果指定某一张卡可以使用选项:--gpus "device=0"

追更:使用时候发现无法使用GPU,观察docker内部和外部的区别发现CUDA Version: N/A查阅一些资料后推测是因为外部有cuda的driver接口,docker中没有,所以自己包装了带cuda的Java镜像(注意cuda版本)。

Dockerfile如下:

FROM         nvidia/cuda:10.1-base
MAINTAINER    scsyn
COPY ./jre1.8.0_271 /jre
ENV JRE_HOME=/jre
ENV CLASSPATH=$JRE_HOME/lib/rt.jar:$JRE_HOME/lib/ext
ENV PATH=$PATH:$JRE_HOME/bin

使用docker build -t nvidia-java:1.0.0 .打包镜像。
之后再使用的话在此基础上进行封装就可以了,比如:

FROM nvidia-java:1.0.0
MAINTAINER scsyn
COPY ./en2zh /pn
ENV LD_LIBRARY_PATH=/pn/lib
WORKDIR "/pn/bin"
ENTRYPOINT ["java","-jar","localdeployment-pn-0.0.1-SNAPSHOT.jar"]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容