Docker 配置 nvidia-docker 和 pytorch 的一些想法

linux 如 Debia 或CentOS 下 Docker 安装 

参考Docker Community Edition 镜像使用帮助

自动安装

Docker 提供了一个自动配置与安装的脚本,支持 Debian、RHEL、SUSE 系列及衍生系统的安装。

以下内容假定

  • 您为 root 用户,或有 sudo 权限,或知道 root 密码;
  • 您系统上有 curl 或 wget
export DOWNLOAD_URL="https://mirrors.bfsu.edu.cn/docker-ce"
# 如您使用 curl
curl -fsSL https://get.docker.com/ | sh
# 如您使用 wget
wget -O- https://get.docker.com/ | sh

这里抄下ubuntu的安装方法

以下内容根据 官方文档 修改而来。

如果你过去安装过 docker,先删掉:

# 如果你过去安装过 docker,先删掉:
sudo apt-get remove docker docker-engine docker.io containerd runc

# 首先安装依赖:

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

# 根据你的发行版,下面的内容有所不同。你使用的发行版:ubuntu
# 信任 Docker 的 GPG 公钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg


# 添加软件仓库:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.bfsu.edu.cn/docker-ce/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


# 最后安装

sudo apt-get update
sudo apt-get install docker-ce

Docker 组添加用户,设置允许普通用户操作 docker

1、 首先创建docker用户组,如果docker用户组存在可以忽略

sudo groupadd docker 

2、把用户添加进docker组中

sudo gpasswd -a ${USER} docker 

3、重启docker

sudo service docker restart 

4、如果普通用户执行docker命令,如果提示get …… dial unix /var/run/docker.sock权限不够,则修改/var/run/docker.sock权限 使用root用户执行如下命令,即可

sudo chmod a+rw /var/run/docker.sock

windows 下安装英伟达驱动  WSL下安装cuda等

英伟达驱动 官网

WSL下建议安装最新的驱动 可以WSL 调用GPU驱动 (建议:最新版即可)

nvidia-smi #查看显卡信息 测试是否正确安装显卡

英伟达 cuda仓库  cuda不必和nvidia-smi显示的版本一致,但是建议要接近

 这里是官网 cuda 11.8

# Download Installer for Linux WSL-Ubuntu 2.0 x86_64
# 这里是 run 文件的 安装代码
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run

# 这里是 deb文件安装代码

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

安装完成后

这里还不可以使用nvcc -V

以下为设置环境变量

# nvcc -V 的设置

sudo vim .bashrc

# 在 .bashrc 最后添加以下内容
export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
#此处 11.8 和你安装的cuda版本一致

# 按下 ESC 后 输入 :wq 确认

source .bashrc
#确认更新

# 输入nvcc -V查看cuda
nvcc -V

测试 检查是否可以直接调用GPU

$ sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
Thu Nov 24 07:26:40 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 520.56.05    Driver Version: 522.25       CUDA Version: 11.8     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:01:00.0 Off |                  N/A |
| 48%   28C    P8     7W / 170W |     32MiB / 12288MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A        23      G   /Xwayland                       N/A      |
|    0   N/A  N/A        34      G   /Xwayland                       N/A      |
|    0   N/A  N/A        34      G   /Xwayland                       N/A      |
+-----------------------------------------------------------------------------+

--gpus all 这里是调用GPU 必须的代码

 补充内容

/etc/docker/daemon.json 参数详解

{
    "authorization-plugins": [],
    "data-root": "", 
     #Docker运行时使用的根路径,根路径下的内容稍后介绍,默认/var/lib/docker
    "dns": [],  
     #设定容器DNS的地址,在容器的 /etc/resolv.conf文件中可查看
    "dns-opts": [],
     #容器 /etc/resolv.conf 文件,其他设置
    "dns-search": [],
     #设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的 主机时,DNS不仅搜索host,还会搜索host.example.com。注意:如果不设置,Docker 会默认用主机上的 /etc/resolv.conf来配置容器。
    "exec-opts": [],
    "exec-root": "",
    "experimental": false,
    "features": {},
    "storage-driver": "",
    "storage-opts": [],
    "labels": [],
     #docker主机的标签,很实用的功能,例如定义:–label nodeName=host-121
    "live-restore": true,
    "log-driver": "",
    "log-opts": {},
    "mtu": 0,
    "pidfile": "",
     #Docker守护进程的PID文件
    "cluster-store": "",
    "cluster-store-opts": {},
    "cluster-advertise": "",
    "max-concurrent-downloads": 3,
    "max-concurrent-uploads": 5,
    "default-shm-size": "64M",
    "shutdown-timeout": 15,
    "debug": true, 
     #启用debug的模式,启用后,可以看到很多的启动信息。默认false
    "hosts": [],
    #设置容器hosts
    "log-level": "",
    "tls": true,  
     #默认 false, 启动TLS认证开关
    "tlscacert": "", 
     #默认 ~/.docker/ca.pem,通过CA认证过的的certificate文件路径
    "tlscert": "", 
     #默认 ~/.docker/cert.pem ,TLS的certificate文件路径
    "tlskey": "",
     #默认~/.docker/key.pem,TLS的key文件路径
    "tlsverify": true,
     #默认false,使用TLS并做后台进程与客户端通讯的验证
    "tls": true,
    "tlsverify": true,
    "tlscacert": "",
    "tlscert": "",
    "tlskey": "",
    "swarm-default-advertise-addr": "",
    "api-cors-header": "",
    "selinux-enabled": false, 
     #默认 false,启用selinux支持
    "userns-remap": "",
    "group": "",
     #Unix套接字的属组,仅指/var/run/docker.sock
    "cgroup-parent": "",
    "default-ulimits": {
        "nofile": {
            "Name": "nofile",
            "Hard": 64000,
            "Soft": 64000
        }
    },
    "init": false,
    "init-path": "/usr/libexec/docker-init",
    "ipv6": false,
    "iptables": false,
    "ip-forward": false,
    #默认true, 启用 net.ipv4.ip_forward ,进入容器后使用sysctl -a|grepnet.ipv4.ip_forward查看
    "ip-masq": false,
    "userland-proxy": false,
    "userland-proxy-path": "/usr/libexec/docker-proxy",
    "ip": "0.0.0.0",
    "bridge": "",
    "bip": "",
    "fixed-cidr": "",
    "fixed-cidr-v6": "",
    "default-gateway": "",
    "default-gateway-v6": "",
    "icc": false,
    "raw-logs": false,
    "allow-nondistributable-artifacts": [],
    "registry-mirrors": [],
     #镜像加速的地址,增加后在 docker info中可查看。
    "seccomp-profile": "",
    "insecure-registries": [],
     #配置docker的私库地址
    "no-new-privileges": false,
    "default-runtime": "runc",
    "oom-score-adjust": -500,
    "node-generic-resources": ["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"],
    "runtimes": {
        "cc-runtime": {
            "path": "/usr/bin/cc-runtime"
        },
        "custom": {
            "path": "/usr/local/bin/my-runc-replacement",
            "runtimeArgs": [
                "--debug"
            ]
        }
    },
    "default-address-pools":[{"base":"172.80.0.0/16","size":24},
    {"base":"172.90.0.0/16","size":24}]
}

设置国内镜像源代理

在 /etc/docker/daemon.json 文件 添加以下内容

 "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn/",
        "http://hub-mirror.c.163.com"
  ]

安装nvidia-docker

# Setup the package repository and the GPG key
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# Install the nvidia-docker2 package (and dependencies) after updating the package listing
$ sudo apt-get update
$ sudo apt-get install -y  nvidia-docker2
# Restart the Docker daemon to complete the installation after setting the default runtime
$ sudo systemctl restart docker
# test
$ sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi

报错及解决
1、gpg: 找不到有效的 OpenPGP数据
可能原因:不能访问 https://nvidia.github.io/libnvidia-container/gpgkey
解决:打开此网址,会自动下载 gpgkey 文件,之后 cd 到下载路径下运行

sudo apt-key add gpgkey


成功后会输出 OK

2、E: 无法定位软件包 nvidia-docker2
原因:

curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list


在这条命令中读取 https://nvidia.github.io/libnvidia-container/ubuntu20.04/libnvidia-container.list 这个网址内的信息并写到 /etc/apt/sources.list.d/nvidia-docker.list 文件中。查看本地相应文件,发现该文件为空,说明在写入文件时出现了问题,可能与文件权限有关,从而影响了下载源的更新。

解决:访问上述地址,复制网址中的文本,通过 sudo vim 写入到本地的相应文件。

注意:
1、$distribution 需要替换为相应系统版本号,如上面链接中的 ubuntu20.04。
2、对于 1.6.0 之前的 NVIDIA Container Toolkit 版本,应使用 nvidia-docker 存储库而不是上面的 libnvidia-container 存储库。

之后按照官方的方法安装和测试。

# Install the nvidia-docker2 package (and dependencies) after updating the package listing
$ sudo apt-get update
$ sudo apt-get install -y  nvidia-docker2
# Restart the Docker daemon to complete the installation after setting the default runtime
$ sudo systemctl restart docker
# test
$ sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi


# 最后一行有 --gpus all 才能正确调用 GPU驱动
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值