[table]
[tr][td]
外部媒体
Deploying DeepLearning
DIGITS Workflow
本文是从https://github.com/dusty-nv/jetson-inference翻译的,您可以在这里下载源码
如果您是深度神经网络的新手,您可以查看这个教程,了解更多关于训练和推演的内容
使用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
$ 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 包:
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
$ git clone -b caffe-0.15 https://github.com/NVIDIA/caffe
$ 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
$ git clone https://github.com/nvidia/DIGITS
$ 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:
$ git clone https://github.com/dusty-nv/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
作为参考,请参阅可用的视觉网络,包括用于图像识别的imageNet和用于目标检测的detectNet:
/**
- 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网络中继承了实例
[/td][/tr]
[/table]