使用Docker GPU训练环境安装过程中所碰到的问题

摘要:
输入下一个命令以查看图形卡驱动程序cat/proc/driver/nvidia/version的内核版本输入下一命令以查看计算机驱动程序cat/var/log/dpkg。log | grepnvidia输入下一个命令以查看所有计算机驱动程序sudodpkg--list|grepnvidia-*问题1:root@4f80b64fe9f6:/#nvidia smi未能初始化NVML:Unkn

输入下条命令,查看你的显卡驱动所使用的内核版本

cat /proc/driver/nvidia/version

输入下条命令,查看电脑驱动

cat /var/log/dpkg.log | grep nvidia

输入下条命令,查看电脑所有驱动

sudo dpkg --list | grep nvidia-*

问题1:

root@4f80b64fe9f6:/# nvidia-smi

Failed to initialize NVML: Unknown Error

进入Docker

sudo docker run --gpus all -it ubuntu18_torch1.6:v0.3

需要加入--gpus all

问题2:

安装好nvidia-docker,nvidia-driver,cuda,cudnn, 以及pytorch_cuda版后在docker中输入torch.cuda.is_available(),返回False

解决方法:

sudo docker run --gpus all -it [-e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all]

需要加入:-e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all

问题3:

使用pycharm运行pytorch工程代码,出现问题:RuntimeError:Not compiled with GPU support

解决方法:

删除benchmark中整个build文件夹,重新编译lib包:在根目录下运行:python setup.py build develop

编译好后,记得保存下镜像:

sudo docker commit -a "comment" contain_id image_name:image_tag

然后在pycharm中重新配置新的docker镜像即可

问题4:打开Pycharm2020.3版,在Settings里Build,Execution,Deployment里设置Docker时,出现Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

docker与守护进程间的通讯问题

解决方法:

在命令行里输入
sudo chown *your-username* /var/run/docker.sock   # *your-username*为主机名:igs

问题5:在docker里运行工程代码时,报错:RuntimeError: Unrecognized tensor type ID: AutogradCUDA

原因:编译工程包时,使用了pytorch1.6+torchvision0.7,而在编译完后,更新了pytorch1.7+torchvision0.8

解决方法:重新编译工程,python setup.py build develop

问题6:在docker中升级pytorch:pip install pytorch1.7.1-***.whl

  无法成功,提示超时,然后报错

解决方法:加上--no-deps

  pip install --no-deps pytorch1.7.1-***.whl

问题7:在多GPU环境下,配置NUM_WORKER 为2,直接报错

export NGPUS=2

python -m torch.distributed.launch --nproc_per_node=NGPUS ../../tools/training/train.py

Traceback (most recent call last):
  File "train.py", line 159, in <module>
    train(args=args)
  File "train.py", line 50, in train
    rank = args.local_rank
  File "/home/wby/anaconda3/envs/wby/lib/python3.8/site-packages/torch/distributed/distributed_c10d.py", line 400, in init_process_group
    store, rank, world_size = next(rendezvous(url))
  File "/home/wby/anaconda3/envs/wby/lib/python3.8/site-packages/torch/distributed/rendezvous.py", line 95, in _tcp_rendezvous_handler
    store = TCPStore(result.hostname, result.port, world_size, start_daemon)
RuntimeError: Address already in use

问题在于,TCP的端口被占用

解决方法一:

运行程序的同时指定端口,端口号随意给出:

--master_port 29501 (端口号)
python train.py --master_port 29501

决方法二:

查找占用的端口号(在程序里 插入print输出),然后找到该端口号对应的PID值:netstat -nltp,然后通过kill -9 PID来解除对该端口的占用

问题8:no implementation found for {} on types that implement

if box1 == torch.Tensor:
    box1=box1.cpu().numpy()

修改为:

if type(box1) == torch.Tensor:
    box1=box1.cpu().numpy()

问题9:cant convert cuda:0 device type tenhsor to numpy

lt=np.maximum(box1[:,None,:2],box2[:,:2])

修改为:

if type(box1) == torch.Tensor:
    box1=box1.cpu().numpy()
if type(box2) == torch.Tensor:
    box2=box2.cpu().numpy()

问题10:Docker训练单GPU时,可正常收敛,但采用多GPU训练时却无法收敛

参考链接:

NVIDIA Docker CUDA容器化原理分析

https://cloud.tencent.com/developer/article/1496697

 

免责声明:文章转载自《使用Docker GPU训练环境安装过程中所碰到的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇解决腾讯云服务器 LNMP 环境无法发送邮件问题xshell无法连接到linux主机原因分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

docker 安装 activemq

1、先下载镜像信息到本地服务器。 这里不加版本号,那么安装的就是最新版本。 docker pull docker.io/webcenter/activemq 2、检查下镜像情况 docker images 3、安装activemq 映射端口与之前原来的一致 // 安装这里可以是镜像名称加版本号,也可以是镜像IDdocker run -d --name...

windows下docker无法进行端口映射的问题

之前一直是在服务器上玩docker的,最近由于业务需要,需要在windows电脑上安装docker测试一些东西。 我的操作系统是windows10 家庭版,因此无法直接安装docker,所以只能是通过docker toolbox来安装的。 其原理类似于在windows上安装了一个虚拟的linux环境。安装教程参考了这篇文章:https://www.cnbl...

docker集中化管理平台--shipyard部署

Shipyard是建立在docker集群管理工具Citadel之上的可以管理容器、主机等资源的web图形化工具,包括core和extension两个版本,core即shipyard主要是把多个 host上的 containers 统一管理(支持跨越多个host),extension即shipyard-extensions添加了应用路由和负载均衡、集中化日志...

Jenkins+pipeline+参数构建+人工干预确定

  Jenkins+pipeline+参数构建+人工干预 实现了以下功能 1. 可以选择环境,单选;可以选择需要发布的项目,多选 2.发布过程可视化 3. 可以人工干预是否继续发布。 初始化配置需要很久,比如拉镜像这些事情,我可以提前操作。配置做好之后,等到下班时间,再进行发布操作。有时候会遇到,我初始化配置做好之后,测试通知还有变动。我可以人工干预,...

容器网络(二)docker容器访问外部网络及对外提供服务

由于docker容器访问外部网络及对外提供服务都使用到iptable,我们先了解下iptable的基础知识。 一、Iptables 1、iptables的链 iptables有5条默认的链,分别为: INPUT OUTPUT PREROUTING FORWARD POSTROUTING 2、iptables的表 iptables有4张表,分别为: f...

eri

localhost.crt-bakvim /etc/netplan/50-cloud-init.yaml 写入网卡 root@master:~# cat /etc/netplan/50-cloud-init.yaml # This file is generated from information provided by # the datasour...