AnimeGANv2 部署测试
系列仓库地址:https://github.com/xuanhao44/AnimeGANv2
在尝试部署一个图片/视频动漫化的模型。
仓库地址:https://github.com/TachibanaYoshino/AnimeGANv2
0 服务器
带显卡的服务器:RTX 2080 Ti。已经安装了 CUDA 11.2(鸟服务器,说安好了 10.0,结果进去看是 11.2,气死了),没有 cuDNN。
1 准备 CUDA 和 cuDNN 匹配的环境,并调试
1.1 前提——准备好 CUDA 和 cuDNN 的安装文件
CUDA: https://developer.nvidia.com/cuda-toolkit-archive
cuDNN: https://developer.nvidia.com/rdp/cudnn-archive(需要注册账号)
自己选择自己需要的版本下载,上传到服务器。
我这里由于仓库要求,使用 CUDA 10.0.130,cuDNN 7.6.0;但实际上 tensorflow-gpu 版本、CUDA 版本和 cuDNN 版本都有对应关系,需要去自行查阅。
需要注意的是 cuDNN 7.6.0 版本有多个 build,要选择 CUDA 10.0 的:Download cuDNN v7.6.0 (May 20, 2019), for CUDA 10.0。
后面的命令中涉及版本的地方也要同步的修改,就不再赘述。
1.2 安装 CUDA
sudo sh cuda_10.0.130_410.48_linux.run --override
会出现协议说明,可以按 q
跳过,别傻傻的一直回车往下拉。
基本上选项都是选 yes 或者默认,但是 Driver 不安装,如果选了 yes 的话可能导致 Toolkit 安装失败。
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: n
加上 --overrride
也是为了防止安装失败。
参考:https://blog.csdn.net/melxy1997/article/details/104437455
安装成功,最后的显示:
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-10.0
Samples: Installed in /home/featurize, but missing recommended libraries
Please make sure that
- PATH includes /usr/local/cuda-10.0/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-10.0/lib64, or, add /usr/local/cuda-10.0/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-10.0/bin
Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.0/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 10.0 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
sudo <CudaInstaller>.run -silent -driver
可以看到上面至少 Toolkit 是成功安装了的。
也可以用 nvcc-V
命令来确认(注意 -V 大写)。可以看到结果是成功的:
(base) ➜ work nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130
1.3 安装 cuDNN(libcudnn)
解压,拷贝到 cuda-10.0,并给所有用户添加读的权限。
tar -xvf cudnn-10.0-linux-x64-v7.6.0.64.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda-10.0/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-10.0/lib64
sudo chmod a+r /usr/local/cuda-10.0/include/cudnn.h /usr/local/cuda-10.0/lib64/libcudnn*
查看 cuDNN 版本,命令为:
cat /usr/local/cuda-10.0/include/cudnn.h | grep CUDNN_MAJOR -A2
显示为:有如下结果为成功。
(base) ➜ work cat /usr/local/cuda-10.0/include/cudnn.h | grep CUDNN_MAJOR -A2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 0
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
#include "driver_types.h"
1.4 更新软链接,切换版本
cd /usr/local/cuda-10.0/lib64/
sudo rm -rf libcudnn.so libcudnn.so.8
sudo ln -s libcudnn.so.8.2.1 libcudnn.so.8
sudo ln -s libcudnn.so.8 libcudnn.so
sudo ldconfig -v
最后执行:
source /etc/profile
使用 Vim 修改 .bashrc
:vim ~/.bahsrc
(Vim 用法自行搜索)。
添加或者修改以下代码,这个地方填的版本即是你要使用的版本。
export PATH=/usr/local/cuda-10.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH
保存后更新环境即可。
source ~/.bashrc
1.5 测试匹配情况
直接输入 python 开始测试:
import tensorflow as tf
tf.test.is_gpu_available()
最后的是 False 是不成功的,是 True 就成功。
(base) ➜ ~ python
Python 3.7.10 (default, Jun 4 2021, 14:48:32)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.test.is_gpu_available()
...(中间是一大坨输出,我这里省略了)
True
(ctrl + z 可退出 python)
2 下载模型,开始实验
2.1(安装 conda),创建虚拟环境
如果环境里没有 conda,那就需要下载。
安装 conda(miniconda):https://blog.csdn.net/weixin_43850253/article/details/121178785
按照官网:https://docs.conda.io/projects/miniconda/en/latest/
mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
~/miniconda3/bin/conda init bash
(可能需要 export PATH="/root/miniconda3/bin:$PATH"
)
如果环境已经有 conda,那就可以直接创建环境并启动。
conda create -n animegan python=3.6 -y
conda activate animegan
注:在这里不建议创建虚拟环境了,可以直接使用 base。(理由可见下面 3.1)
2.2 安装依赖
设置国内镜像的部分跳过,有的服务器已经设置好了,但是有的就要自己设置。
根据仓库要求来安装依赖。大多数都可以 conda 安装,不行的话就还有 pip。
下面是一些特殊的:
opencv-python:
conda install py-opencv
- conda 的方法:http://007.gangguana.com/a/fdaf6b76979bccdc3cbf907b11f1a733.shtml
- 用 pip 会很卡(PEP 517),但也有解决办法:https://blog.csdn.net/m0_55019159/article/details/132240388
tensorflow-gpu 1.15.0:
pip install tensorflow-gpu==1.15.0
glob:
conda install -c conda-forge glob2
- argparse(无法用 conda 安装):
pip install argparse
2.3 克隆仓库,并开始调试
仓库地址:https://github.com/TachibanaYoshino/AnimeGANv2
(应该不会有服务器寒酸的连 Git 都没有吧)
如果从 GitHub 上下载太慢,可以先自己从 GitHub 上下载,然后上传到服务器中;或者把这个仓库转到自己的 Gitee 上。
cd 进入仓库,根据仓库 readme 开始调试:
- Inference
python test.py --checkpoint_dir checkpoint/generator_Hayao_weight --test_dir dataset/test/HR_photo --save_dir Hayao/HR_photo
- Convert video to anime
python video2anime.py --video video/input/お花見.mp4 --checkpoint_dir checkpoint/generator_Hayao_weight --output video/output
1 是单独处理一张图片,GPU 速度(约 6 秒)和 CPU 速度(约 5 秒)区别不大,甚至 CPU 更快;
2 是处理视频,GPU 的速度就远快于 CPU 了,GPU 时间为 28 秒,而 CPU 时间为 13 分多。
在这里容易有 Could not load dynamic library 'libcudart.so.10.0'; dlerror: libcudart.so.10 这样的输出,也就是没有使用 GPU,而是在使用 CPU。这里的原因可能是使用了虚拟环境而不是 base,或者是没有更新软链接。
可参考:https://blog.csdn.net/weixin_39589455/article/details/130624556
3 另外关于平台
在 https://featurize.cn/ 上租的 2080Ti,有些功能还算比较好用,如:
- 虚拟环境持久化
- 自动化
3.1 虚拟环境持久化
如果每次启动服务器就要重新安装所有环境(关闭就销毁了),那就太痛苦了。需要一个方法保存建好的环境。
查阅其官方文档。
- 同步盘:https://docs.featurize.cn/docs/manual/work
- 环境持久化:https://docs.featurize.cn/docs/manual/persistance
创建云盘上的虚拟环境:
conda create --prefix /cloud/animegan python=3.6 -y
conda activate /cloud/animegan
pip install --user tensorflow-gpu==1.15.0
pip install --user opencv-python==4.2.0.32
pip install --user tqdm
pip install --user numpy
pip install --user glob2
pip install --user argparse
pip install --user onnxruntime
值得注意的是 CUDA 和 cuDNN:之前所讲的安装方式是安装到系统而非虚拟环境中的,所以切换到虚拟环境中使用时,这些设置就用不上了。下面是类似的一个问题:
这里要想新的办法来把这两个东西也安装到虚拟环境中。pip 没有很好的办法来安装 CUDA 和 cuDNN,故而使用 conda。
首先使用 conda search 查找一下这两个包的历史版本。
再使用 --prefix
来指定包的位置,此外,还要指定版本和构建。
conda install --prefix /cloud/animegan cudatoolkit==10.0.130 -y
conda install --prefix /cloud/animegan cudnn=7.6.0=cuda10.0_0 -y
参考:
这样就解决了问题。于是之后就只需要在服务器中调出即可:
conda activate /cloud/animegan
3.2 进一步自动化
也不想每次都 clone 一个仓库,那就把仓库先 clone 到云盘,然后用开机启动的自动化命令来进行复制。
查阅其官方文档。
同步盘:https://docs.featurize.cn/docs/manual/work
用 vim 修改 work 中的 .on_boot.sh
。(隐藏文件,可用 ls -a
发现)
sudo -i -u featurize bash << EOF
cp -r ~/work/AnimeGANv2 ~/AnimeGANv2
EOF
注意:r 是小写,不然会复制漏东西。
结合 3.1 和 3.2 就不需要每次开机就要配置很长的时间啦!