过程
1)在本机上安装docker,我使用的是aws ec2的ubuntu版本的云服务器,该服务器已经有docker。
2)从github上pull相关的镜像,参考github上的readme
3)使用此镜像生成容器,同时本地的myblendmask文件夹作为数据卷,方便给容器添加数据
docker run -it --name=adet_server --gpus all -v /home/ubuntu/myblendmask:/root/code/adet/input myadet:v2
使用,在终端使用pwd
获得绝对路径
myblendmask被上锁了,不方便从本地上传到服务器(ec2),使用该命令解锁
sudo chown ubuntu myblendmask/ -R
4)使用 docker commit 命令将此容器打包为一个镜像,作为1.0版本
docker commit -a "cui" -m "have nvidia volume" a404c6c174a2 myadet:v1
#a是作者,m为描述,a404c6c174a2为容器id,myadet:v1 为生成的镜像名
5)使用此容器运行demo
python demo/demo.py --config-file configs/BlendMask/R_101_dcni3_5x.yaml --input ./input/input1.png --output ./input/result --opts MODEL.WEIGHTS ./input/R_101_dcni3_5x.pth
遇到的问题
1)运行的时候报 没有v2模块
需要为容器安装opencv
pip install opencv-python==3.4.10.35 -i https://pypi.doubanio.com/simple
也可使用 conda install,不过最好事先更换conda的镜像源为清华源。
2)没有nvidia 驱动
- 解决办法
需要安装 nvidia-container-toolkit
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
重启
sudo systemctl restart dockerd
- 验证gpu是否可用
在终端输入
python
import torch
print(torch.cuda.is_available())
如果显示true,证明可用了。
使用查看nvidia驱动
nvidia-smi
3)RuntimeError: Not compiled with GPU support
运行nvcc --version查看你的cuda编译器版本,pytorch-gpu也建议安装对应版本。
如果安装的pytorch版本和nvcc版本一致,可看一下CUDA路径是否在~/.bashrc中设置正确,参考的配置路径如下:
# vim ~/.bashrc
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/lib
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64
之后source ~/.bashrc
,然后删除detectron2/build文件夹(如果你之前已经编译过一遍了),
rm -rf build
然后重新编译dete2tron2
python3 -m pip install -e .
(重要的是删除build,并重新编译)
使用ubuntu16.04运行
(好用的容器:fd5481103521
)
创建nvidia/cuda的镜像
1 更改官网下载的dockerfile
更改了git的链接,加上模型,数据链接;更改pytorch的版本,nvidia/cuda的版本。如下:
FROM nvidia/cuda:10.2-devel-ubuntu16.04
RUN apt-get update && apt-get install -y libglib2.0-0 && apt-get clean
RUN apt-get install -y wget htop byobu git gcc g++ vim libsm6 libxext6 libxrender-dev lsb-core
RUN cd /root && wget https://repo.anaconda.com/archive/Anaconda3-2020.07-Linux-x86_64.sh
RUN cd /root && bash Anaconda3-2020.07-Linux-x86_64.sh -b -p ./anaconda3
RUN bash -c "source /root/anaconda3/etc/profile.d/conda.sh && conda install -y pytorch==1.9.0 torchvision cudatoolkit=10.2 -c pytorch"
RUN bash -c "/root/anaconda3/bin/conda init bash"
WORKDIR /root
RUN mkdir code
WORKDIR code
RUN git clone https://gitee.com/cuicui7/detectron2.git
RUN bash -c "source /root/anaconda3/etc/profile.d/conda.sh && conda activate base && cd detectron2 && python setup.py build develop"
RUN git clone https://gitee.com/cuicui7/AdelaiDet.git adet
WORKDIR adet
RUN bash -c "source /root/anaconda3/etc/profile.d/conda.sh && conda activate base && python setup.py build develop"
RUN git clone https://gitee.com/cuicui7/data.git
RUN wget https://cloudstor.aarnet.edu.au/plus/s/glqFc13cCoEyHYy/download -O fcos_R_50_1x.pth
RUN rm /root/Anaconda3-2020.07-Linux-x86_64.sh
2 进入容器
docker run -it --runtime=nvidia --privileged --name "myblendmask" -v $PWD:/home/share --gpus all mymask:v1 bash
1)验证环境
(base) root@fd5481103521:~/code/adet# nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:24:38_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89
(base) root@fd5481103521:~/code/adet# python
Python 3.8.3 (default, Jul 2 2020, 16:21:59)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.backends.cudnn.version())
7605
>>> print(torch.cuda.is_available())
True
>>> import cv2
>>> cv2.__version__
'3.4.10'
(这是安装cv2之后记录的)
2)安装cv2
pip install opencv-python==3.4.10.35 -i https://pypi.doubanio.com/simple
3)运行
python demo/demo.py --config-file configs/FCOS-Detection/R_50_1x.yaml --input data/000050.png --output ./result --opts MODEL.WEIGHTS fcos_R_50_1x.pth
运行结果为当前目录下的result.png,cp到/home/share,这样在宿主机就能看到了。也可以如下,在生成容器的时候多挂载一个文件:
--volume "${PWD}/input:/input" \
--volume "${PWD}/output:/output"
4)更改文件
复制本地文件到/home/share,cp到adet文件夹下,直接运行
python demo/demo1.py