NVidia announced the Jetson TX1 (Fig. 1) a while ago, and I finally had a chance to drive it using the latest JetPack 2.3 software package. The latest incarnation runs 64-bit Ubuntu 16.04 on the module…but more on the software later.
The Jetson TX1 module is available separately or as part of the Jetson TX1 Embedded System Development kit reviewed here. I plan on doing another article soon on Connect Tech's Orbitty Carrier for NVidia Jetson TX1. This type of platform allows the Jetson TX1 to be incorporated into a system without having to design a custom carrier board, as the module is useless without one.
Module and Dev Board
The Jetson TX1 block diagram (Fig. 2) highlights the main components on the module. The TX1 includes four, 64-bit, ARM Cortex-A57 cores along with a 256-core Maxwell architecture GPU that delivers up to 1 TFLOPS of computing power. The module has 4 Gbytes of LPDDR4 memory with a 25.6 Gbyte/s bandwidth. It is not expandable. There is also 16 Gbytes of eMMC storage, plus additional SDIO and SATA storage interfaces. (More on storage later, too.)
The module also has gigabit Ethernet, Bluetooth, and 802.11ac Wi-Fi support built-in. The latter has connectors on the module for external antenna so it does not have to go through the large interface connector on the top of the module. The back of the module is a solid metal heatsink. The system also has three serial ports, three SPI ports, four I2C ports, and a number of GPIOs. The six CSI camera interfaces are a nod toward the use of the system for processing video information on the fly. Target applications include automotive and robotics, just to name two. There are x1 and x4 PCI Express interfaces, as well.
The Jetson TX1 Developer Kit includes this nice carrier board for the module (Fig. 3). The module has a Samtec REF-186137-03 connector that mates with a Samtec REF-186138-01 connector found on the developer kit board.
The developer kit carrier board exposes the various and comes with a 5-Mpixel camera that uses one of the CSI interfaces. There is a display expansion header, a Mini PCIe socket and I/O headers. There is a x4 PCI Express connector and a SATA connector.
The kit comes with two removable antennas, and there is cabling between the module and the connectors for the antenna.
There are USB and HDMI connectors for user interfaces, although I run mine headless. I needed the HDMI interface for setup. You may also use the HDMI interface for application, as the module already has a hefty GPU inside.
The on-board eMMC storage is more than enough room for Linux and a large application, but that amount can easily be overrun if a lot of data storage is needed. The SDIO interface and SD card socket are fine for larger amounts of memory, but the bandwidth and capacity are limited compared to the alternatives. These include NVMe via PCI Express and SATA. There are also USB 2 and 3.0-based alternatives that could be used with the module.
I went with Virtium's compact SATA drive (Fig. 4) to augment the Jetson TX1's non-volatile storage. Virtium delivers a range industrial flash designed for harsh environments like ones where the Jetson TX1 might be deployed. They even have self-encrypting drives (SEDs) if your application has that type of requirement.
Virtium's industrial flash storage is not just available in different capacities and form factors. There are different versions with different wear and speed characteristics, allowing developers to tailor the devices for specific applications. The CE version is based on MLC providing higher capacity at lower cost. The XE version employs iMLC that mixes the capacity of MLC with the performance of SLC. The PE version uses SLC and is available in capacities up to 256 Gbytes, while the other two are available in capacities up to 480 Gbytes. The CE, XE, and PE have three-, five-, and five-year warranties, respectively. The XE and PE have an industrial operating temperature range of −40º to 85ºC.
The 120-Gbyte flash drive I am using increases the system's storage by almost an order of magnitude.
While the hardware is certainly impressive, NVidia has done an even better job with the software. The JetPack software suite (Fig. 5) includes an Ubuntu Linux-based cross platform development system and an Ubuntu OS customized for the Jetson TX1. Installation was a relatively easy chore since I had the requisite x86 Ubuntu 14.04 platform in a virtual machine. The latest JetPack 2.3 places a 64-bit version of Ubuntu on the module. It is Ubuntu 16.04 with a long-term support (LTS) version.
The NSight development environment is based on Eclipse. Development with NSight can be done in a number of ways since the Jetson TX1 is itself a formidable development platform (Fig. 6). Developers can choose from native development on the Jetson TX1 or cross-platform development typically based on an x86 PC running Ubuntu. The Jetson TX1 is initially setup via a USB connection.
Once everything is installed it is time to check out some of the development examples via NSight. Some of the machine vision applications are designed to work with the camera that comes with the development kit.
There is CUDA 8 support basic (well, not-so-basic) GPU development. CUDA is NVidia's GPU programming environment. It includes the nvGRAPH accelerated library for graph analytics.
What you can do once the base system is installed is extensive. One of the application areas is machine learning with deep neural nets (DNN). This is one of the target areas for NVidia's new Tesla P100. The same software works on the Jeston TX1. NSight can be used to target either platform.
The latest JetPack version increases the DNN performance by a factor of two using existing hardware. TensorRT is now part of the package. It is the runtime portion of the TensorFlow platform; it can take advantage of the 8-bit integer and 16-bit floating point support that is available and conducive to DNN applications. TensorRT supports Caffe prototxt network descriptor files and is designed to generate optimized, deployment-ready models for inference.
Much of the DNN support is based on cuDNN (CUDA DNN) and this version of JetPack includes cuDNN 5.1.5 along with CUDA Toolkit 8.0.34.
Other components within JetPack include GStreamer 1.8.1 and OpenGL 4.5.0 support. NVidia includes OpenCV4Tegra 2.4.13-17, which is its version of the OpenCV open-source computer vision system. Also included is NVidia's VisionWorks 126.96.36.199, a toolkit for computer vision applications. It is used in applications ranging from robotics to augmented reality.
Most of the software is located on the host computer, although it is possible to do development on the Jetson TX1. This only tends to be practical with the addition of additional storage like the Virtium SATA flash drive or network storage. I went with the cross-development approach since the host system does not have limitations on storage and its RAM is expandable, although I already have 32 Gbytes.
All of the components and toolkits include their own set of examples and tutorials. Mastering any one will take time. The advantage of NVidia's platform is that they are all available and the runtime is supported on the Jetson TX1. This lets you concentrate on the application rather than integration issues, which can be substantial given the complexity of the systems and hardware. The software tuning for the DNN support is a good example. Some may be able to get the level of performance improvements that NVidia did, but most will not. I fall into the latter category and appreciate the performance boost.
Getting up and running takes about an hour or so. Simply wandering through the software to get a feel for the options available took a week. Having comparable versions of Ubuntu on both platforms made it easier to do development. The ability to do this quickly and easily is a testament to NVidia's commitment to the platform. I've previously shied away from vision work because of the difficulty of hardware and software integration, but I may do more now that I have the Jetson TX1 and JetPack to work with. I highly recommend it.