Jetson Nano でTensorFlow を使えるようにする


【目的】

Jetson NanoでTensorflowを使えるようにします。

【内容】

下記記事の続きです。
【Jetson Nano はじめました】

Jetson NanoできちんとGPUが利用できるようにTensorflowのセットアップを行います。

【手順】

基本的には以下の手順を踏襲します。
【nvidia - DEEP LEARNING FRAMEWORKS DOCUMENTATION】

大雑把に分けると以下の手順になります。

  1. 必要なライブラリの追加
  2. pip3のインストールとアップデート
  3. Python3ライブラリの追加
  4. Tensorflowのインストール
  5. インストール確認

【0. システムアップデート】

作業を行う前に、下記コマンドでシステムのアップデートを行っておきましょう。

システムアップデート
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade  # <- 必要に応じて

【1. 必要なライブラリの追加】

以下のコマンドを実行して、ライブラリを追加します。

ライブラリインストール
sudo apt install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev

【2. pip3のインストールとアップデート】

以下のコマンドを実行して、pip3のインストールとアップデートを行います。

pip3インストール
sudo apt install python3-pip
sudo pip3 install -U pip

【3. Python3ライブラリの追加】

以下のコマンドを実行して、Python3のライブラリをインストールします。
hdf5(h5py)のビルドに時間がかかるので、動きが止まってもしばらく待ちましょう。

Python3ライブラリインストール
sudo pip3 install -U numpy grpcio absl-py py-cpuinfo psutil portpicker six mock requests gast h5py astor termcolor protobuf keras-applications keras-preprocessing wrapt google-pasta

【4. Tensorflowのインストール】

本手順の肝になります。
通常TensorflowのGPUをインストールする場合は pip3 install tensorflow-gpu としますが、ここでは少し異なる手順を行います。
Jetson用に最適化されたtensorflowをインストールするために、以下のコマンドのようにパッケージの参照先を指定してインストール操作を行います。

TensorFlowインストール
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu

【5. インストール確認】

下記コマンドを実行し、エラーが発生せず正常にバージョン番号が表示されればインストールは完了しています。

TenrorFlowバージョン確認
python3

>>> import tensorflow
>>> tensorflow.__version__
'1.13.1'
TenrorFlowデバイス確認
python3 -c "from tensorflow.python.client import device_lib;print(device_lib.list_local_devices())"

2019-07-29 13:14:58.190442: W tensorflow/core/platform/profile_utils/cpu_utils.cc:98] Failed to find bogomips in /proc/cpuinfo; cannot determine CPU frequency
2019-07-29 13:14:58.235141: I tensorflow/compiler/xla/service/service.cc:161] XLA service 0xb3cd0c0 executing computations on platform Host. Devices:
2019-07-29 13:14:58.235246: I tensorflow/compiler/xla/service/service.cc:168]   StreamExecutor device (0): <undefined>, <undefined>
2019-07-29 13:14:58.612721: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:965] ARM64 does not support NUMA - returning NUMA node zero
2019-07-29 13:14:58.613451: I tensorflow/compiler/xla/service/service.cc:161] XLA service 0x937e7c0 executing computations on platform CUDA. Devices:
2019-07-29 13:14:58.613523: I tensorflow/compiler/xla/service/service.cc:168]   StreamExecutor device (0): NVIDIA Tegra X1, Compute Capability 5.3
2019-07-29 13:14:58.635780: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1433] Found device 0 with properties: 
name: NVIDIA Tegra X1 major: 5 minor: 3 memoryClockRate(GHz): 0.9216
pciBusID: 0000:00:00.0
totalMemory: 3.87GiB freeMemory: 400.53MiB
2019-07-29 13:14:58.635908: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1512] Adding visible gpu devices: 0
2019-07-29 13:15:11.521625: I tensorflow/core/common_runtime/gpu/gpu_device.cc:984] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-07-29 13:15:11.566313: I tensorflow/core/common_runtime/gpu/gpu_device.cc:990]      0 
2019-07-29 13:15:11.566375: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1003] 0:   N 
2019-07-29 13:15:11.617237: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/device:GPU:0 with 182 MB memory) -> physical GPU (device: 0, name: NVIDIA Tegra X1, pci bus id: 0000:00:00.0, compute capability: 5.3)
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 5129210299603277623
, name: "/device:XLA_CPU:0"
device_type: "XLA_CPU"
memory_limit: 17179869184
locality {
}
incarnation: 5782956840367099111
physical_device_desc: "device: XLA_CPU device"
, name: "/device:XLA_GPU:0"
device_type: "XLA_GPU"
memory_limit: 17179869184
locality {
}
incarnation: 16654519161776921911
physical_device_desc: "device: XLA_GPU device"
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 191168512
locality {
  bus_id: 1
  links {
  }
}
incarnation: 11282338340052839306
physical_device_desc: "device: 0, name: NVIDIA Tegra X1, pci bus id: 0000:00:00.0, compute capability: 5.3"
]

GPUもきちんと認識しているようです。
以上でTensorflowを使えるようになりました。