当前位置: 首页 > news >正文

【亲测有效!】ubuntu20.04和Centos7离线安装docker及nvidia-container-toolkit

【亲测有效!】ubuntu20.04和Centos7离线安装docker及nvidia-container-toolkit

    • 一、Ubuntu20.04安装docker
      • (1)查看当前系统版本号和名称
      • (2)在镜像源进行源文件下载
      • (3)命令行进行安装
      • (4)配置daemon并重启docker
    • 二、Ubuntu20.04安装NVIDIA-container-toolkit
      • (1)下载安装包
      • (2)安装下载包
      • (3)重新加载daemon文件和docker
      • (4)查看nvidia-docker 版本
      • (5)配置daemon.json
    • 三、Centos7安装docker
      • (1)下载符合版本要求的docker,链接:
      • (2)解压 docker-24.0.4.tgz 文件:
      • (3)将解压出的所有Docker文件复制到 /usr/bin/ 目录下:
      • (4)创建并赋予service文件权限
      • (5)重新加载systemd守护进程以应用更改:
      • (6)启动Docker并设置开机自启动:
    • 四、Centos7安装nvidia-container-runtime
      • (1)下载符合版本要求的nvidia-container-runtime,链接:
      • (2)#解压nvidia-container-runtime.tar.gz
      • (3)安装所有rpm包
      • (4)重启容器
    • 五、拉取镜像、打包并离线加载运行、训练
      • (1)建立镜像或者拉取镜像
        • 1)建立镜像
        • 2)如果是拉取现成的镜像,可以通过docker hub等方式先在==线上==拉取
      • (2)打包镜像
      • (3)离线加载镜像
      • (4)查看当前镜像
      • (5)运行生成容器
    • 附:Error记录
      • (1)CUDA error: no kernel image is available for execution on the device
        • 1)安装CUDA-TOOLKIT
      • 2)安装cuDNN:
      • 3)卸载CUDA和cuDNN
      • 4)在docker images中安装与CUDA版本匹配的pytorch

前言:
近期因工作需在离线环境下安装docker及nvidia-container-toolkit,摸索了一番,最终可行,特此记录供参考及个人后续查看。

一、Ubuntu20.04安装docker

(1)查看当前系统版本号和名称

lsb_release -a

在这里插入图片描述我的是ubuntu20.04,focal

(2)在镜像源进行源文件下载

https://download.docker.com/linux/ubuntu/dists/
查找符合版本要求的文件,如我的系统对应:https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/链接下的文件。
下载下方四个文件:

containerd.io_xxx_amd64.deb
docker-ce_xxx_amd64.deb
docker-ce-cli_xxx_amd64.deb
docker-ce-rootless-extras_xxx_amd64.deb
在这里插入图片描述

(3)命令行进行安装

dpkg -i ./*deb

(4)配置daemon并重启docker

systemctl daemon-reload
systemctl restart docker

二、Ubuntu20.04安装NVIDIA-container-toolkit

(1)下载安装包

链接:https://mirror.cs.uchicago.edu/nvidia-docker/libnvidia-container/stable/ubuntu20.04/amd64/
上述链接不需要翻墙
文件包括:

libnvidia-container1_xxx_amd64.deb
libnvidia-container-tools_xxx_amd64.deb nvidia-docker2_xxx_all.deb
nvidia-container-runtime_xxx_all.deb
nvidia-container-toolkit_xxx_amd64.deb

在这里插入图片描述

(2)安装下载包

dpkg -i ./lib*  ./nvidia*

(3)重新加载daemon文件和docker

systemctl daemon-reload
systemctl restart docker

(4)查看nvidia-docker 版本

nvidia-docker -v
nvidia-docker version

(5)配置daemon.json

在/etc/docker/daemon.json一开始加上:

"default-runtime": "nvidia",

如下图所示:
在这里插入图片描述

三、Centos7安装docker

(1)下载符合版本要求的docker,链接:

链接:https://download.docker.com/linux/static/stable/x86_64/
或者通过网盘下载:
链接: https://pan.baidu.com/s/1azluoUSE_lwCaSjV_J9EtA?pwd=ijf7 提取码: ijf7
将下载的 docker-25.0.0.tgz文件上传到CentOS 7系统。例如,可以上传到 /root 目录下。

(2)解压 docker-24.0.4.tgz 文件:

tar xzvf docker-25.0.0.tgz

(3)将解压出的所有Docker文件复制到 /usr/bin/ 目录下:

cp ./docker/* /usr/bin/

(4)创建并赋予service文件权限

cd /etc/systemd/system
touch docker.service
sudo gedit docker.service

将以下内容复制到 docker.service 文件中:

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

赋予 docker.service 文件执行权限:

chmod 644 /etc/systemd/system/docker.service

(5)重新加载systemd守护进程以应用更改:

systemctl daemon-reload

(6)启动Docker并设置开机自启动:

systemctl start docker
systemctl enable docker

四、Centos7安装nvidia-container-runtime

(1)下载符合版本要求的nvidia-container-runtime,链接:

链接: https://pan.baidu.com/s/1fRkTfWnmeLTVkNhtCntP5A?pwd=t8aq 提取码: t8aq

(2)#解压nvidia-container-runtime.tar.gz

tar -zxvf nvidia-container-runtime.tar.gz

(3)安装所有rpm包

cd nvidia-container-runtime
rpm -Uvh --force --nodeps *.rpm

(4)重启容器

systemctl restart docker

查看安装结果

whereis  nvidia-container-runtime 

五、拉取镜像、打包并离线加载运行、训练

(1)建立镜像或者拉取镜像

1)建立镜像
docker build -t 镜像REPOSITORY:tag
# 例如: .docker build -t 777888:v1 
2)如果是拉取现成的镜像,可以通过docker hub等方式先在线上拉取
docker pull 777888:v1

(2)打包镜像

docker save -o 777888.tar 

(3)离线加载镜像

在离线环境下,导入镜像的TAR包,通过下述命令加载:

docker load -i 777888.tar

(4)查看当前镜像

docker images

(5)运行生成容器

当不使用GPU时:

docker run -it --shm-size 64G  -v  /home/docker/labelTransform:/usr/src/app/datasets --name 777888 777888:v1

当使用GPU时:

docker run --runtime=nvidia --gpus all   -it --shm-size 64G  -v  /home/docker/labelTransform:/usr/src/app/datasets --name y777888 777888:v1

-v表示挂载本地路径路径“/home/docker/labelTransform”到容器路径“/usr/src/app/datasets”,自动进入容器中,可以开始相关操作了。

附:Error记录

(1)CUDA error: no kernel image is available for execution on the device

查看显卡型号:

lspci | grep -i vga
lspci | grep -i nvidia

查看CUDA是否安装及版本号:

nvcc -V

确认镜像中是否可以使用pytorch并调用CUDA计算,以及匹配的CUDA版本

python
import torch
torch.cuda.is_available()
torch.zeros(1).cuda()
print(torch.version.cuda)

发现,针对NVIDIA A800显卡算力,CUDA10.2无法匹配,而准备的镜像中,pytorch等相关包都是匹配CUDA10.2的。
!!!重点:!!!
显卡算力需要与CUDA相匹配,而docker镜像中的torch和torchvision需要与CUDA版本相匹配
显卡算力查询网址:https://developer.nvidia.com/cuda-gpus#compute
CUDA与显卡算力匹配表:
在这里插入图片描述针对此,定位问题为宿主机显卡算力、CUDA以及镜像中pytorch不匹配问题。
针对宿主机显卡型号A800,基于上述CUDA与算力匹配表11.3版本的CUDA(实际上显卡驱动是535.54.03,CUDA可以接收的最高版本是12.2(可通过nvidia-smi查看),但是中庸之道甚好,就选个中间的,也方便适配pytorch),因此下载安装CUDA11.3+cuDNN。

1)安装CUDA-TOOLKIT

https://developer.nvidia.com/cuda-toolkit-archive
https://developer.nvidia.com/cuda-10.2-download-archive?target_os=Linux&target_arch=x86_64&target_distro=CentOS&target_version=8&target_type=runfilelocal
也准备了网盘的,供下载:
链接: https://pan.baidu.com/s/1nFfAHAb97s_08zAHLaxJBg?pwd=vs5v 提取码: vs5v
找到符合要求的版本,下载到本地,导入离线的宿主机进行安装。

运行安装:

chmod +x cuda_10.2.89_440.33.01_linux.run
./cuda_10.2.89_440.33.01_linux.run --no-opengl-libs

选中需要的,空白表示不选中,由于宿主机在问题之前单独安装了显卡驱动,不再进行选中:

CUDA Installer
- [ ] Driver[ ] 460.32.03
+ [X] CUDA Toolkit 11.2[X] CUDA Samples 11.2[X] CUDA Demo Suite 11.2[X] CUDA Documentation 11.2OptionsInstall

配置环境:

vim /etc/profile

添加下面两行,路径要和上图中一样

export PATH=/usr/local/cuda-11.3/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH

保存并重新加载

source /etc/profile

2)安装cuDNN:

打开下方链接,下载符合版本的:
https://developer.nvidia.com/rdp/cudnn-archive
解压:

tar -xvf cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz

安装:

cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

测试宿主机本地CUDA:

nvcc -V

3)卸载CUDA和cuDNN

如果本地已经有CUDA但是版本不对,可使用下述方式卸载

cd  /usr/local/cuda-11.3/bin
sudo ./cuda-uninstaller
cd /usr/local/
sudo rm -r cuda-11.3
sudo dpkg -l |grep cuda
sudo dpkg -P cuda-visual-tools-11-3

4)在docker images中安装与CUDA版本匹配的pytorch

卸载原有的torch和torchvision

pip uninstall torch torchaudio torchvision
pip uninstall torch-geometric torch-scatter torch-sparse torch-cluster torch-spline-conv

下载链接:
http://download.pytorch.org/whl/torch_stable.html
下载与python版本和CUDA版本匹配的torch与torchvision:
安装:

pip install torch-1.10.0+cu113-cp38-cp38-linux_x86_64.whl
pip install torchvision-0.11.1+cu113-cp38-cp38-linux_x86_64.whl

测试镜像中torch与CUDA是否都可调用:

python
import torch
torch.cuda.is_available()
torch.zeros(1).cuda()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从零搭建React全家桶框架教程:快速搭建react+react-router+redux项目
  • 新专利:温室土壤温湿度预测模型构建方法和程序产品
  • day09——集合ArrayList
  • vue使用富文本编辑器+自由伸缩图片
  • 在Linux下编译安装Python3.10.0及以上环境(解决了openssl依赖问题)
  • javaEE WebServlet、SpringWebMVC、SpringBoot实现跨域访问的4种方式及优先级
  • git update-git-for-windows 升级失败
  • django项目中通用的分页组件
  • 【深度学习实践】基于深度学习的图像去雾算法-ChaIR-实践
  • Unity游戏开发
  • unity 本地使用Json(全套)
  • JMeter常见的高频面试题整理
  • RCE漏洞函数
  • RCE漏洞复现
  • 入门岛2-python实现wordcount并进行云端debug
  • 【EOS】Cleos基础
  • 【前端学习】-粗谈选择器
  • 345-反转字符串中的元音字母
  • CEF与代理
  • Computed property XXX was assigned to but it has no setter
  • Java多线程(4):使用线程池执行定时任务
  • Koa2 之文件上传下载
  • oschina
  • ReactNative开发常用的三方模块
  • React-redux的原理以及使用
  • SQLServer之索引简介
  • VuePress 静态网站生成
  • 对超线程几个不同角度的解释
  • 二维平面内的碰撞检测【一】
  • 简单实现一个textarea自适应高度
  • 解析 Webpack中import、require、按需加载的执行过程
  • 区块链分支循环
  • 如何在 Tornado 中实现 Middleware
  • 网络应用优化——时延与带宽
  • 用jquery写贪吃蛇
  • 中文输入法与React文本输入框的问题与解决方案
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • #include
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (1)Android开发优化---------UI优化
  • (4) PIVOT 和 UPIVOT 的使用
  • (AngularJS)Angular 控制器之间通信初探
  • (Java数据结构)ArrayList
  • (初研) Sentence-embedding fine-tune notebook
  • (规划)24届春招和25届暑假实习路线准备规划
  • (函数)颠倒字符串顺序(C语言)
  • (三)Honghu Cloud云架构一定时调度平台
  • (十八)SpringBoot之发送QQ邮件
  • (算法)Travel Information Center
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (一)VirtualBox安装增强功能