zoukankan      html  css  js  c++  java
  • Azure上面玩转深度学习训练-风格迁移

    Azure上GPU VM简介

    中国区的GPU机器终于正式上线了,这不是最为重要的,GPU的机器各家基本都有,最为重要的是Azure上这款GPU机器直接配备了NIVIDA最新一代基于Volta架构的Tesla V100的GPU卡, 作为全球第一款在AI training上超过100 TFLOPS的性能怪兽,他到底有多强悍呢?

    我们来和他的上一代基于Pascal架构的P100来做一个简单对比,大家可以看到V100首次配备Tensor Cores,每个tensor core都会操作一个4X4的矩阵提升浮点运算的效能和吞吐量;在CUDA cores上面,V100提供5120和CUDA cores,P100是3584:

    在实际的Deep Learning训练中,V100的性能大约是P100的3倍

    在Deep learning的Inference测试中,V100大约是CPU的47倍,P100的3倍

    对于AI开发人员来说,更短的AI训练时间,更好的性价比将会帮助他们加速应用的开发和创新,在Azure上目前提供4种不同规格的NC v3 GPU机器,如下表所示,另外,Azure上的GPU VM按照分钟计费,可以在训练的时候打开VM,训练完成后关闭VM节约成本:

    深度学习训练环境搭建

    以风格迁移(style transfer)为例,接下来的部分主要为大家介绍如何搭建深度学习环境进行深度神经网络的训练和测试。测试中使用到的软件,框架,操作系统为Tensorflow 1.8,CUDA 9.0 ,cuDNN 7.1.4, Ubuntu 1604,Anaconda 5.2以及VGG网络模型。

    1. 首先要创建GPU虚拟机,目前在Azure上,提供以下Linux操作系统对NIVIDA GPU进行支持,在做创建的时候可以根据自己的需要选择相应的版本:

    1. 本次测试选择Ubuntu 16.04 LTS,区域必须选择中国北区2或者中国东区2,因为GPU的机器只在新的区域提供,然后选择需要的大小即可:

    2. 接下来就是要安装NVIDIA的驱动和CUDA了,我们当然可以在官网下载然后安装,但既然用的是Ubuntu 1604,那么其实有更加方便的方式进行安装,直接添加repo即可,具体命令如下:

    # 更新本地CUDAkey

    $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub

    #添加CUDArepo到本地

    $ sudo sh -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 /" > /etc/apt/sources.list.d/cuda.list'
    $ sudo apt-get update

    # 安装NIVIDIA驱动,CUDA driver,并重启机器

    $ sudo apt-get -y --no-install-recommends install cuda-drivers
    $ sudo reboot

    # 安装CUDA 9.0,不要安装9.1或者9.2

    $ sudo apt-get -y install cuda-toolkit-9-0

    1. 验证你的安装:当你安装完成后,使用nvidia-smi命令测试一下,如果你可以看到类似如下的显示结果,那么证明你的安装时正确的,我们可以看到当前当前机器使用Tesla V100 PCIE 16GBGPU显卡:

    1. 在开始安装Tensorflow之前,为了比较好的训练效果,强烈建议大家安装NIVIDIA cuDNN的library。cuDNN全称CUDA® Deep Neural Network library (cuDNN) ,是一个针对深度神经网络的GPU加速库,号称对于CNN有最高6倍的加速,适用于多种不同的深度学习框架:

    安装cuDNN必须注册nvidia developer才可以下载,在如下地址注册并下载:

    https://developer.nvidia.com/cudnn

    在本测试中,请选择v7.1.4 for CUDA 9.0下载:

    # 安装cuDNN运行时和开发库:

    sudo dpkg -i libcudnn7_7.0.3.11-1+cuda9.0_amd64.deb

    sudo dpkg -i libcudnn7-dev_7.0.3.11-1+cuda9.0_amd64.deb

    1. 在深度学习环境中,我们最基本的需要一个python环境,建议大家使用Anaconda,继承了数据科学最为常见的各种package,更新管理非常方便,可以在如下网址下载并安装:

    https://www.anaconda.com/download/#linux

    wget https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh

    1. 在一般的开发过程当中,我们可能会需要多个python环境,安装不同版本的package,所以可以使用Anaconda的conda工具创建一个tensorflow的环境,并激活这个环境:

    conda create -n tensorflow

    source activate tensorflow

    8 .安装Tensorflow,我们当然时需要安装GPU版本的tensorflow,当前的版本使用1.8.0

    pip install --ignore-installed --upgrade

    https://download.tensorflow.google.cn/linux/gpu/tensorflow_gpu-1.8.0-cp36-cp36m-linux_x86_64.whl

    在某些情况下,众所周知的原因,你的下载可能失败,那么可以把tensorflowpackage下载到本地安装,安装完成后进行简单的测试,如果你看到类似于如下的提示,那么你的安装就是没问题的:

    注意:为了方便大家照着这个教程愉快的玩耍,我把这个文章俩面需要的package都已经下载并且upload到了Azurestorage里面,直接下载即可,具体方法比如以train2014.zip为例,直接wget即可:

    https://deepstorage.blob.core.chinacloudapi.cn/deeplearning/train2014.zip

    其他相关的package如下,可以在安装的时候根据需要下载:

    使用Tensorflow进行风格迁移深度学习训练

    什么是风格迁移呢?简单来说就是我们通过CNN(卷积神经网络)抽取一个你想做style图像的风格,让后将这种风格应用到你的原始图像,最后产生目标风格,这种方式我们叫风格迁移,类比一下你的手机里面的各种美颜,滤镜等等的效果。

    如果想更多的了解背后的原理,公式,算法,请移步这里:

    https://arxiv.org/pdf/1508.06576.pdf

    https://cs.stanford.edu/people/jcjohns/eccv16/

    1. 我们这里的demo使用MIT的Logan Engstrom使用Tensorflow实现的快速风格迁移作为例子演示深度学习的训练和测试过程:

    # 首先从Github上克隆Fast Style Transfer,我做了一些小修改,请直接从如下repo下载

        $ git clone https://github.com/kingliantop/fast-style-transfer.git

    1. 数据准备,该测试的快速风格迁移程序依赖于VGG网络模型和训练图片,所以需要下载VGG网络模型和train2014图片集,在开始正式训练之前,首先你需要运行setup.sh来准备数据:

      mkdir data

      cd data

      wget https://deepstorage.blob.core.chinacloudapi.cn/deeplearning/imagenet-vgg-verydeep-19.mat    

      mkdir bin

      wget https://deepstorage.blob.core.chinacloudapi.cn/deeplearning/train2014.zip

      unzip train2014.zip

    其中train2014大约12.5GB,VGG模型大约550MB,我都放在了中国,大家直接run setup.ssh即可。

    1. 万事具备,我们有datasets,有程序,那么我们现在就可以运行深度学习训练了,请记得激活你的tensorflow环境,为了测试,我们选择示例中的la_muse.jpg作为我们的style图片进行训练,图片如下:

    执行如下程序开始训练,整个训练过程大约1个半小时,比起一年以前在K80上大约56小时,快了很多:

    python style.py --style examples/style/la_muse.jpg --train-path data/train2014 --checkpoint-dir checkpoint --test examples/content/chicago.jpg --test-dir test --content-weight 1.5e1 --checkpoint-iterations 1000 --batch-size 20

    1. 训练完成后,在checkpoint目录下会生成模型的ckpt文件,利用该模型文件,我们就可以对图片进行风格迁移,具体命令如下:

    python evaluate.py --checkpoint checkpoint --in-path ./demo.jpeg --out-path ./demo_la_muse.jpeg

    我对多种不同风格的图片进行了迁移,大家可以看到原始图片经过风格迁移以后就变成了跟风格图片接近的风格,队中不同风格的对比如下:

    原始图片

    迁移风格

    风格迁移后结果

    1. 当然,我们也可以实现对于视频的风格迁移,比如我们团队都是喜欢健身的猛男,包括老板:)原始视频如下:

    迁移的风格图片如下:

    原始视频不够魔幻,迁移后的风格如下:

    或者更为魔幻一点:)

     如果大家感兴趣,可以在Azure上使用NC系列VM快速进行AI相关的开发测试,Enjoy~

  • 相关阅读:
    在每个类声明之后、每个函数定义结束之后都要加空行。
    不提倡使用全局变量
    头文件中只存放“声明”而不存放“定义”
    用 #include “filename.h” 格式来引用非标准库的头文件
    用 #include <filename.h> 格式来引用标准库的头文件
    为了防止头文件被重复引用
    java Excel导入、自适应版本、将Excel转成List<map>对象
    selenium用java找到表格某一行某一列中含有特定文字的某个元素
    关于java中创建文件,并且写入内容
    java把一个文件的内容复制到另外一个文件
  • 原文地址:https://www.cnblogs.com/cloudapps/p/9516699.html
Copyright © 2011-2022 走看看