ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ubuntu16.04 docker 和 nvidia-docker 的安装及 GPU 的调用

ubuntu16.04 docker 和 nvidia-docker 的安装及 GPU 的调用 ubuntu16.04 docker 和 nvidia-docker 的安装及 GPU 的调用文章目录ubuntu16.04 docker 和 nvidia-docker 的安装及 GPU 的调用一、docker 简介二、安装 docker1、卸载旧版本2、在线安装[官方文档参考](https://docs.docker.com/engine/install/debian/)3、离线安装4、验证及后处理三、安装 NVIDIA Container Toolkit[官方文档参考](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#install-guide)1、在线安装2、离线安装3、镜像源更改及 GPU 设置四、查看 docker 的状态并设置开机自启动五、镜像、容器以及 Docker Hub 镜像源1、镜像相关命令2、容器相关命令3、镜像创建脚本4、找不到 libGL.so六、参考资料一、docker 简介Docker 使用容器创建虚拟环境它能与系统的其余部分隔离开来且能够与其主机共享资源访问目录、使用 GPU、连接到互联网等Docker 的三大核心概念镜像Image、容器Container、仓库Docker Hub镜像Image类似系统盘它是构建容器的模板通过一个镜像我们可以构造出很多相互独立但运行环境一样的容器容器Container基于某个镜像生成且动态运行的实例可类比运行起来的操作系统仓库Docker Hub类似代码仓库是 Docker 官方提供的用于集中存储、管理镜像的服务二、安装 docker1、卸载旧版本卸载旧版本的 dockersudo apt-get remove docker docker-engine docker.io containerd runcsudo apt-get purge docker*删除所有镜像、容器和数据卷sudo rm -rf /var/lib/docker2、在线安装官方文档参考# ubuntu 系统软件包一般缓存在 /var/cache/apt/archives# 1、更新软件包列表并安装一些软件包使得可通过 https 访问 reposudoapt-getupdatesudoapt-getinstall\apt-transport-https\ca-certificates\curl\gnupg\lsb-release# 2、添加 docker 官方 GPG 密钥curl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|sudogpg--dearmor-o/usr/share/keyrings/docker-archive-keyring.gpg# 3、使用如下命令来建立稳定的储存库echo\deb [archamd64 signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release-cs)stable|sudotee/etc/apt/sources.list.d/docker.list/dev/null# 4、更新软件包列表安装最新版本的 Docker Engine and containerdsudoapt-getupdatesudoapt-getinstalldocker-ce docker-ce-cli containerd.io3、离线安装查看系统内核版本和发行代号1、uname-a Linux su4.15.0-45-generic#48~16.04.1-Ubuntu SMP Tue Jan 29 18:03:48 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux2、lsb_release-a No LSB modules are available.Distributor ID:Ubuntu Description:Ubuntu16.04.6LTS Release:16.04Codename:xenial打开 https://download.docker.com/linux/ubuntu/dists/ 进入上述代号xenial目录然后再进入pool/stable/选择机器所属架构amd64、arm64、armhf、ppc64el、ppc64le、s390x 等进入下载列表下载日期最新的三个文件安装 docker百度网盘链接https://pan.baidu.com/s/18WVBYQ_pi2ltO-9BrqQlvA 提取码x7tqsudodpkg-icontainerd.io_1.2.13-1_amd64.debsudodpkg-idocker-ce-cli_19.03.8~3-0~ubuntu-xenial_amd64.debsudodpkg-idocker-ce_19.03.8~3-0~ubuntu-xenial_amd64.deb4、验证及后处理验证安装是否成功以及查看 docker 的版本和信息sudo docker run hello-worldsudo docker versionsudo docker info创建 docker 组并添加用户在不带 sudo 的情况下运行 docker 命令sudo groupadd dockercreate the docker groupsudo adduser $USER docker or sudo usermod -aG docker $USERadd your user to the docker group$USER 是获取当前用户名reboot nowmake sure that your group membership is re-evaluateddocker run hello-worldverify that you can run docker commands without sudo三、安装 NVIDIA Container Toolkit官方文档参考1、在线安装# ubuntu 系统软件包一般缓存在 /var/cache/apt/archives# 设置系统版本变量distribution$(./etc/os-release;echo $ID$VERSION_ID)# 增加 GPG 密钥curl-s-L https://nvidia.github.io/nvidia-docker/gpgkey|sudo apt-key add-# 设置 stable 存储库curl-s-L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list|sudo tee/etc/apt/sources.list.d/nvidia-docker.list# 对于 ubuntu20.04 可省略curl-s-L https://nvidia.github.io/nvidia-container-runtime/gpgkey|sudo apt-key add-curl-s-L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list|sudo tee/etc/apt/sources.list.d/nvidia-container-runtime.list# 更新软件源sudo apt-get update# 报错连接失败 [IP: 185.199.111.153 443]解决办法# 1、尝试添加 -E 参数重新执行sudo -E apt-get update# 2、把 ip 地址写入 host 文件中sudo vi /etc/hosts复制如下 ip 到 host 中185.199.108.153nvidia.github.io185.199.109.153nvidia.github.io185.199.110.153nvidia.github.io185.199.111.153nvidia.github.io# 安装 nvidia-docker2sudo apt-get install-y nvidia-docker2# sudo apt-get install -y nvidia-container-toolkit# sudo apt-get install -y nvidia-container-runtime # 一般安装在 /usr/bin/ 下# 重启 dockersudo systemctl restart docker2、离线安装百度网盘下载链接 https://pan.baidu.com/s/1mxxJGqRZQ0QV8QwWoOLVuw 提取码58ty# 按照顺序依次安装即可一般安装在 /usr/bin/ 下sudodpkg-ilibnvidia-container1_1.0.7-1_amd64.debsudodpkg-ilibnvidia-container-tools_1.0.7-1_amd64.debsudodpkg-invidia-container-toolkit_1.0.5-1_amd64.debsudodpkg-invidia-container-runtime_3.1.4-1_amd64.deb3、镜像源更改及 GPU 设置# 可以一次添加多个镜像源、私有仓库及 nvidia-container-runtimesudovim/etc/docker/daemon.json{registry-mirrors:[https://dockerpull.cn,https://cr.laoyou.ip-ddns.com,https://docker.hlmirror.com],insecure-registries:[# 设置私有源10.68.4.10:5000],runtimes:{# GPU 设置方式 1nvidia:{path:nvidia-container-runtime,# 一般位于 /usr/bin/ 下面runtimeArgs:[]}}}# GPU 设置注意别忘了加反斜杠方式 2sudovim/lib/systemd/system/docker.service# 第一个是更改镜像和容器的默认存储位置默认是存放在根目录下的容易占满了ExecStart/usr/bin/dockerd--graph/home/manzp/study/5.docker-Hfd://--containerd/run/containerd/containerd.sock\# 加上下面两句--add-runtimenvidia/usr/bin/nvidia-container-runtime\--default-runtimenvidia# reload and restartsudosystemctl daemon-reloadsudosystemctl restartdocker# 查看 Registry Mirrors 以及 Default Runtime 是否已经生效dockerinfo可输出系统的各种参数信息(以下是部分重要参数)Server Version:19.03.8 Runtimes: nvidia runc Default Runtime: nvidia Kernel Version:4.15.0-45-generic Operating System: Ubuntu16.04.6 LTS CPUs:12Total Memory:31.34GiB Docker Root Dir: /var/lib/docker Registry: https://index.docker.io/v1/ Insecure Registries:127.0.0.0/8 Registry Mirrors: https://docker.mirrors.ustc.edu.cn/ https://registry.docker-cn.com/ https://hub-mirror.c.163.com/# 拉取 nvidia/cuda:10.0-base 的镜像或者 tf/pytorch 做好的官方镜像都可以支持 GPU 调用dockerrun--gpusall nvidia/cuda:10.0-base nvidia-smi# Test nvidia-smi with the latest official CUDA image四、查看 docker 的状态并设置开机自启动# 启动 docker 引擎并设置开机启动sudosystemctl startdockersudosystemctlenabledocker# It starts automatically on DEB-based distributions. On RPM-based distributions, you need to start it manually using the appropriate systemctl or service command.# 查看 docker的状态看是否安装成功sudosystemctl statusdocker# 启动、停止、重启 dockersudosystemctl startdockersudosystemctl stopdockersudosystemctl restartdocker五、镜像、容器以及 Docker Hub 镜像源1、镜像相关命令# 从 docker hub 中搜寻镜像docker search ubuntu16.04# 从 docker hub 拉取镜像如果不显示的指定 TAG默认选择 latest 标签docker pull NAME[:TAG]docker pull ubuntuordocker pull ubuntu:16.04docker pull10.68.4.10:5000/REPOTAG# 从私有仓库拉取# 载入镜像docker load-i BJAI.imgordocker loadBJAI.img# 查看所有镜像信息docker images# 删除镜像(停止容器、删除容器、删除镜像)docker rmi image_id# 从运行的容器创建新镜像docker commit CHANGED_CONTAINER_ID NEW_REPO:NEW_TAG# 保存镜像docker save-o new_name.img NEW_REPO:NEW_TAG# 上传镜像docker push NAME:TAG# 默认上传到 docker hub 官方仓库首次需要配置和登录docker push REGISTY_HOST:REGISTY_HOST/NAME:TAG# 上传到私有仓库已经存在该镜像则会增量更新egdocker push111.111.111.111:5000/tf114:v1# 使用 tag 命令添加镜像标签类似软链接docker tag OLD_REPO:OLD_TAG NEW_REPO:NEW_TAG# remove all images without at least one container associated to themdocker image prune--all2、容器相关命令# 设置编码当前 shell 立即生效export LANGC.UTF-8LC_ALLC.UTF-8# 创建容器、挂载目录并运行(在 pycharm run config 文件中配置 --gpusall 才能调动 GPU)docker run--gpusall--nametf2--ipchost--nethost--restartalways--privileged-v/home/manzp:/home/manzp-it tf2:v1 env LC_ALLC.UTF-8/bin/bash--gpusGPU 设置一般设置为all或all,capabilitiescompute,utility有多块显卡也可以指定设备device2,3-computerequiredforCUDAandOpenCL applications.-compat32requiredforrunning32-bit applications.-graphicsrequiredforrunning OpenGLandVulkan applications.-utilityrequiredforusing nvidia-smiandNVML.-videorequiredforusing the Video Codec SDK.-displayrequiredforleveraging X11 display.-Note宿主机的 nvidia driver 在容器内是仅作为 utility 存在的如果加上 compute宿主机的英伟达 driver 将对容器提供计算支持所谓的计算支持也就是 cuda 支持--name:容器临时名称不能重复--net:网络模式host 或者 none--restart:在容器退出时总是重启容器--privileged:具有较高权限真正的 root否则只是普通用户权限可以使用宿主机所有的设备--env:设置环境变量eg:LANGC.UTF-8,LC_ALLC.UTF-8只对容器首个 bash 进程生效弃用可以用-e 的方式-v:/home/manzp:/root/manzp 将宿主机目录/home/manzp映射到容器目录/root/manzp容器可以共享宿主机目录下的内容-p8080:80,将容器的端口80映射到宿主机的端口8080-e-e LANGC.UTF-8 -e LC_ALLC.UTF-8,设置容器内的环境变量所有进程(包括后续exec)都继承-it:以交互模式运行容器-d:后台运行(遇见需要输入密码的镜像需要指定此参数然后 dockerexec-it container_name bash 启动即可)--entrypoint/bin/bash,设置容器的入口点覆盖 Dockerfile 中的 ENTRYPOINT $IMGtf2:v1 镜像名称格式为仓库:标签或镜像 ID $CMDbash 入口命令***直接在 docker run 命令后指定命令***:只是简单地想要执行某个命令例如 python/workspace/app.py你可以直接将命令附加在 docker run 后面--cpu-shares0:允许容器使用 CPU 资源的相对权重默认值为1024设置为0表示使用1024--cpus2允许容器使用几个线程的 CPUN*100%不一定分布在同一块 CPU 上可能用4×50%默认为全部的资源--cpuset-cpus0-3:允许容器使用哪几个 CPU--memory:内存使用限制,数字需要使用整数对应的单位是 b,k,m,g中的一个--memory-swap:Swapmemorymemory-swap:-1to enable unlimited swap--ipchostuse the hosts IPC namespace inside the container多个容器直接采取共享内存可以提高进程数据交互速度# 注意-v 可以使用多次映射多个目录如果容器中没有相应的目录则会新建。# 查看当前容器CPU、内存资源等的使用情况docker stats# 退出容器CTRLD 或 exit# 查看所有容器、查看运行中的容器docker ps-a docker ps# 进入运行中的容器dockerexec-it container_id bash# 启动容器、停止容器、删除容器docker start container_id docker stop container_id docker rm container_id# 复制文件到容器中docker cp-rf 主机文件路径 容器id:容器中路径# 复制容器中文件到主机docker cp-rf 容器id:容器中路径 主机文件路径# 容器启动时执行你指定的命令直接将命令附加在 docker run 后面不需要使用 --entrypoint 参数docker run--restart always-d-v/path/to/your/app:/workspace python:3.9python/workspace/app.py3、镜像创建脚本#!/bin/bash# 用于 tensorrt pytorch# set -x # set -x 是开启命令打印到屏幕, 一般用于调试; set x 是关闭显示# 指定容器名称和镜像名称MY_CONTAINERtrt2310IMG_NAMEtensorrt-23.10-py3:v1.0# 指定映射目录可以设置多个HOST_WORKDIR/home/CONTAINER_WORKDIR/home/# 获取当前容器数量CONTAINER_NUMdocker ps-a|grep$MY_CONTAINER|wc-l echo $MY_CONTAINER:$CONTAINER_NUM# 若当前容器不存在则新建容器if[0-eq $CONTAINER_NUM];then# -w--workdir选项可以指定进入容器后的工作目录docker run-e LANGC.UTF-8-e LC_ALLC.UTF-8--gpusall--name$MY_CONTAINER--restartalways--ipchost--nethost--privileged-v $HOST_WORKDIR:$CONTAINER_WORKDIR-w $CONTAINER_WORKDIR-it $IMG_NAME/bin/bash# 若当前容器存在则直接启动它elsedocker start $MY_CONTAINER dockerexec-it-w $CONTAINER_WORKDIR $MY_CONTAINER/bin/bash# -w--workdir选项可以指定进入容器后的工作目录fi4、找不到 libGL.so# 错误ImportError:libGL.so.1:cannotopensharedobjectfile:No suchfileordirectory# 原因when a program(usually related to graphical applications,suchasthose that use OpenGL)cannot find the necessary libraryfilelibGL.so.1# 解决sudo apt update sudo apt install libgl1-mesa-glx六、参考资料0、Docker-从入门到实践第三版0、Docker 菜鸟教程1、https://docs.docker.com/install/linux/docker-ce/ubuntu/2、https://docs.docker.com/install/linux/docker-ce/centos/3、https://docs.docker.com/install/linux/linux-postinstall/4、https://github.com/NVIDIA/nvidia-docker5、https://github.com/NVIDIA/nvidia-container-runtime6、中科大 Docker 镜像使用帮助7、Docker 中国官方镜像加速8、阿里云 Docker 镜像加速9、史上最全全平台docker安装方法10、https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/11、Docker: 限制容器可用的内存12、Docker: 限制容器可用的 CPU13、Docker IO资源限制14、Ubuntu18.04上安装 Docker Nvidia GPU驱动15、Ubuntu 18.04安装Docker CE及NVIDIA Container Toolkit流程16、https://github.com/ufoym/deepo17、https://homenew.console.aliyun.com/阿里云
返回列表