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 修改 .bashrcvim ~/.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。

下面是一些特殊的:

2.3 克隆仓库,并开始调试

仓库地址:https://github.com/TachibanaYoshino/AnimeGANv2

(应该不会有服务器寒酸的连 Git 都没有吧)

如果从 GitHub 上下载太慢,可以先自己从 GitHub 上下载,然后上传到服务器中;或者把这个仓库转到自己的 Gitee 上。


cd 进入仓库,根据仓库 readme 开始调试:

  1. Inference
python test.py  --checkpoint_dir  checkpoint/generator_Hayao_weight  --test_dir dataset/test/HR_photo --save_dir Hayao/HR_photo
  1. 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 虚拟环境持久化

如果每次启动服务器就要重新安装所有环境(关闭就销毁了),那就太痛苦了。需要一个方法保存建好的环境。

查阅其官方文档。

创建云盘上的虚拟环境:

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 就不需要每次开机就要配置很长的时间啦!

其他参考

最后修改:2023 年 11 月 27 日
如果觉得我的文章对你有用,请随意赞赏