Deploying DeepLearning DIGITS Workflow
如果您是深度神经网络的新手,您可以查看这个 教程,了解更多关于训练和推演的内容 使用NVIDIA深度学习工具,您可以很容易的 开始训练深度神经网络,还能高效的在您所需要的地方部署它们。独立的GPU通常在服务器,个人电脑或者笔记本电脑上面利用DIGITS进行训练。而Jetson 和集成的GPU通常用于嵌入式平台。 NVIDIA DIGITS 是部署在云服务器或者个人电脑上的,用于训练网络模型的交互系统。而TensoRT和Jetson 是用于部署运行时的推理平台。TensorRT利用了图优化和半精度FP16来支持双精度深度神经网络的推演。DIGITS和TensorRT一起构建了,开发和部署高层次的人工智能和感知的神经网络的高效的工作流程 System Setup
在这份教程中,我们会使用一个PC(或者AWS)来训练深度神经网络。另外,我们会使用Jetson来进行推演。我们还会利用PC来对Jetson刷新最新的JetPack版本。 首先我们来安装和配置pc端需要的系统和工具 Installing Ubuntu on the Host 在PC端下载并且安装Ubungu 16.04 x86_64,下面是下载地址: http://releases.ubuntu.com/16.04/ubuntu-16.04.2-desktop-amd64.iso http://releases.ubuntu.com/16.04/ubuntu-16.04.2-desktop-amd64.iso.torrent Ubuntu 14.04 x86_64也是可以的,但是在利用apt-get安装包的时候,需要对镜像进行一些修改 Running JetPack on the Host 在PC端下载最新版本的 JetPack。除了刷新最新版的Jetson的BSP之外,JetPack还会自动安装一些类似于CUDAToolkit的工具。您可以在 ReleaseNotes查看全版本特性列表和安装包 下载完上面的JetPack,在您的PC端执行下面的命令: $ cd <directory where you downloaded JetPack> $ chmod +x JetPack-L4T-3.1-linux-x64.run $ ./JetPack-L4T-3.1-linux-x64.run 执行完上面的命令,JetPack 的界面就会启动,跟着下面的 安装教程,就可以一步步完成安装。在开始的时候,JetPack将会确认您要部署的Jetson版本。 选择您自己的Jetson版本(TX1,TX2或者TK1),然后选择Next继续。接下来,您就可以看到能够安装的包的列表。已经在host上面安装的包会在界面中Host-Ubuntu的栏目下面列出。而打算在Jetson上面安装的会在底部列出。您可以在菜单中选择或者取消一个独立的包装。 如果想用CUDA来加速host端的网络训练,推荐选择右上角的Full选项。然后,选择Next开始安装。JetPack将会下载并且安装一系列的包。注:如果你想要找到下载的包,所有下载的.deb安装包都会保存在jetpack_downloads这个文件夹下面。 在下载完成之后,Jetpack将会进入最后的安装阶段,L4T BSP将会被刷入板子中。您需要把你的Jetson板子通过micro-USB接口连接到PC端(利用您的Jetson包装盒中的那条micro-USB的线)。 然后,同时按住Jetson板子上的Recovery按钮和Reset按钮,一小段时间之后,松开Reset按钮。接下来,您的Jetson 板子就会进入Recovery mode。 在PC端输入lsusb,如果出现了您的NVIDIA设备,那么就证明您的设备已经和PC端链接成功了。接下来JetPack就会把系统和相关工具刷入您的板子中。 刷完系统之后,Jetson就会重新启动,如果连接到了一个HDMI的显示器上,就会看到一个Ubuntu 的桌面。然后,JetPack就会通过SSH连接到您的PC端来安装剩下的包(例如:ARMaarch64版本的CUDA Toolkit,cuDNN 和TensorRT)。您还可以选择您的JetPack以何种模式连接到您的PC端,可以直接相连,也可以连接到同一个路由器中。JetPack的安装程序会让您来确认一下。您可以查看JetPack的 安装指南,来了解更多的内容。 Installing NVIDIA Driver on the Host 到这里,JetPack将会将最新的系统和工具刷进您的板子中,cuda toolkit也会在PC端和Jetson端都安好。不过,您还是需要将您PC端的NVIDIA的PCIe驱动安装进去。 在您的PC端输入一下命令来安装驱动: $ sudo apt-get install nvidia-375 $ sudo reboot 在重新启动之后,输入以下命令,就可以看到英伟达驱动: $ lsmod | grep nvidia nvidia_uvm 647168 0 nvidia_drm 49152 1 nvidia_modeset 790528 4 nvidia_drm nvidia 12144640 60 nvidia_modeset,nvidia_uvm drm_kms_helper 167936 1 nvidia_drm drm 368640 4nvidia_drm,drm_kms_helper 接下来运行CUDA samples中的例子来确认CUDA toolkit和driver安装好了: $ cd /usr/local/cuda/samples $ sudo make $ cd bin/x86_64/linux/release/ $ ./deviceQuery $ ./bandwidthTest --memory=pinned Installing cuDNN on the Host 接下来这步是在您的PC端安装NVIDIA的 cuDNN库。从Nvidia官网下载libcudnn和libcudnn 包: https://developer.nvidia.com/compute/machine-learning/cudnn/secure/v6/prod/8.0_20170307/Ubuntu16_04_x64/libcudnn6_6.0.20-1+cuda8.0_amd64-deb https://developer.nvidia.com/compute/machine-learning/cudnn/secure/v6/prod/8.0_20170307/Ubuntu16_04_x64/libcudnn6-dev_6.0.20-1+cuda8.0_amd64-deb Then install the packages with the followingcommands: $ sudo dpkg -i libcudnn6_6.0.20-1+cuda8.0_amd64.deb $ sudo dpkg -i libcudnn6-dev_6.0.20-1+cuda8.0_amd64.deb Installing NVcaffe on the Host NVcaffe 是NVIDIA版本的对于GPU优化过的Caffe。NVcaffe 利用cuDNN和DIGITS来训练深度神经网络。从GitHub上面下载并且编译源码(下面介绍的是NVcaffe-0.15): 注:在这个教程中,NVcaffe只需要在PC端中安装用于训练。推演阶段我们使用的是TensorRT并不需要安装caffe。 首先,安装一些caffe需要的工具库,包括DIGITS所需要的Python的库。 $ sudo apt-get install --no-install-recommends build-essentialcmake git gfortran libatlas-base-dev libboost-filesystem-devlibboost-python-dev libboost-system-dev libboost-thread-dev libgflags-devlibgoogle-glog-dev libhdf5-serial-dev libleveldb-dev liblmdb-devlibprotobuf-dev libsnappy-dev protobuf-compiler python-all-dev python-devpython-h5py python-matplotlib python-numpy python-opencv python-pil python-pippython-protobuf python-scipy python-skimage python-sklearn python-setuptools $ sudo pip install --upgrade pip $ cd caffe $ sudo pip install -r python/requirements.txt $ mkdir build $ cd build $ cmake ../ -DCUDA_USE_STATIC_CUDA_RUNTIME=OFF $ make --jobs=4 $ make pycaffe 现在Caffe已经配置编译好了。接下来编辑~/.bashrc来把你的Caffe添加到你的系统环境中去(替换成你自己的地址)。 export CAFFE_ROOT=/home/your-name/workspace/caffe export PYTHONPATH=/home/your-name/workspace/caffe/python  PYTHONPATH 然后关闭并且重新打开终端来加载新改的环境。 Installing DIGITS on the Host NVIDIA DIGITS 是一个基于Python的Web服务,提供了训练深度神经网络和管理数据集的交互界面。它最大的亮点是,您可以在PC端训练您的网络,然后把训练好的模型复制到您的Jetson端,然后再利用TensorRT进行推演。 首先,我们安装DIGITS所需要的库,然后从GitHub上下载: $ sudo apt-get install --no-install-recommends graphvizpython-dev python-flask python-flaskext.wtf python-gevent python-h5pypython-numpy python-pil python-pip python-protobuf python-scipy python-tk $ cd DIGITS $ sudo pip install -r requirements.txt Starting the DIGITS Server 在终端中进入您的DIGITS的文件夹下,执行下面的命令,就可以启动DIGITS了: $ ./digits-devserver ___ ___ ___ ___ ________ | \_ _/ __|_ _|_ _/ __| | |) | | (_ || | | | \__ \ |___/___\___|___| |_| |___/ 5.1-dev
2017-04-17 13:19:02 [INFO ] Loaded 0 jobs. DIGITS将会在digits/jobs这个目录下保存您的任务(包括训练数据库和训练好的模型)。您可以在浏览器输入:localhost:5000来访问DIGITS界面 注:5000是DIGITS的默认端口,您可以用digits-devserver --port number来更改这个端口 Building from Source on Jetson
与此同时,JetPack还会提供TensorRT。它可以利用GoogleNet/Alexnet 和实时摄像头对图片进行识别,行人检测(画出检测框)和分割。它还能够部署在Jetson上面并且利用在PC端的DIGITS服务器上面训练的网络模型。 您可以在 GitHub上面下载最新的源码,并且在您的TX1/TX2上面编译。 注:您需要验证您的BSP版本和Jetson版本是否对应: > JetsonTX2 - JetPack 3.0 / L4T R27.1 aarch64 (Ubuntu 16.04 LTS)
>Jetson TX1 - JetPack 2.3 / L4T R24.2 aarch64 (Ubuntu 16.04 LTS)
>Jetson TX1 - JetPack 2.3.1 / L4T R24.2.1 aarch64 (Ubuntu 16.04 LTS) note: this branch is verifiedagainst the following BSP versions for Jetson TX1/TX2:
>Jetson TX2 - JetPack 3.0 / L4T R27.1 aarch64 (Ubuntu 16.04 LTS)
>Jetson TX1 - JetPack 2.3 / L4T R24.2 aarch64 (Ubuntu 16.04 LTS)
>Jetson TX1 - JetPack 2.3.1 / L4T R24.2.1 aarch64 (Ubuntu 16.04 LTS) Cloning the Repo 首先,您需要安装git,cmake等工具: $ sudo apt-get install git cmake
接下来下载jetson-inference: Configuring with CMake 运行cmake的时候,预安装的脚本(CMakePreBuild.sh)将会自动的安装一些依赖: $ cd jetson-inference $ mkdir build $ cd build $ cmake ../ 注:cmake在加载CMakePrebuild.sh的时候,可能需要sudo权限。它还会从网上下载一些已经训练好的网络模型。 Compiling the Project 进入到jetson-inference/build的文件夹里面进行编译(注意,这里是step#2,后面会用到): $ cd jetson-inference/build # omit if pwd is already/build from above $ make 您可以根据您的系统架构,在不同的文件夹里面编译成不同包(armhf或者 aarch64): |-build \aarch64 (64-bit) \bin where the samplebinaries are built to \include where the headers reside \lib where the libraries arebuild to \armhf (32-bit) \bin where the samplebinaries are built to \include where the headers reside \lib where the libraries arebuild to Digging Into the Code /** * Image recognition withGoogleNet/Alexnet or custom models, using TensorRT. */ class imageNet : public tensorNet { public: /** * Network choice enumeration. */ enum NetworkType { ALEXNET, GOOGLENET };
/** * Load a new network instance */ static imageNet* Create( NetworkTypenetworkType=GOOGLENET );
/** * Load a new network instance * @param prototxt_path File path to thedeployable network prototxt * @param model_path File path to thecaffemodel * @param mean_binary File path to the meanvalue binary proto * @param class_info File path to list of classname labels * @param input Name of the input layer blob. */ static imageNet* Create( const char* prototxt_path, const char* model_path, const char* mean_binary, const char* class_labels, const char* input="data", const char* output="prob" );
/** * Determine the maximum likelihood imageclass. * @param rgba float4 input image in CUDAdevice memory. * @param width width of the input image inpixels. * @param height height of the input image inpixels. * @param confidence optional pointer to floatfilled with confidence value. * @returns Index of the maximum class, or -1on error. */ int Classify( float* rgba, uint32_t width, uint32_t height, float* confidence=NULL ); }; 这两个网络都从包含了TensorRT代码的共享tensorNet网络中继承了实例
|