Jetson Nano のJetPack OS環境の準備が整いましたので、いよいよ Tensorflowの環境を構築していきます。
Table of Contents
Tensorflow GPU版のインストール
Jetson NanoにTensorflowをインストールする方法は、公式サイトに記述があります。
基本的には公式サイトの説明に従いインストールを行うことでTensorflow GPU版の構築ができます。
以下、Jetson Nano にTensorflowをインストールしたときに手順を記載しますが、最新のインストール方法は公式サイトを参照ください。
パッケージの準備
最初に Tensorflow環境を構築するためのパッケージをインストールしていきます。
1. Tensorflowが必要とするパッケージのインストール
1 2 3 | $ sudo apt update $ sudo apt upgrade $ sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran |
2. pip3のインストール
1 2 | $ sudo apt-get install python3-pip $ sudo pip3 install -U pip testresources setuptools==49.6.0 |
3. pythonの依存パッケージのインストール
1 | $ sudo pip3 install -U numpy==1.16.1 future==0.18.2 mock==3.0.5 h5py==2.10.0 keras_preprocessing==1.1.1 keras_applications==1.0.8 gast==0.2.2 futures protobuf pybind11 |
TensorFlow GPU版のインストール
今までは TensorFlow GPU版のパッケージは「tensorflow-gpu」でしたが、20.02のリリースから 「tensorflow」に名前が変わったようです。
今回は、JetPack 4.5系の tensorflow をインストールしました。
1 | $ sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v45 tensorflow==2.3.1 |
追記:2021/03/03
JetPack環境を再構築したあと TensorFlow をインストールしたところ「2.4.0+nv21.2」というバージョンになっていました。しかし、この2.4.0+nv21.2だと tensorflowを読み込んだ後に CoreDumpすることを確認したため 「==2.3.1」のパラメータを追加しました。
インストールが終わったら、以下のコマンドを実行して tensorflow のバージョン情報を取得しておきます。
1 2 3 4 5 | $ python3 -c 'import tensorflow as tf; print(tf.__version__)' ↓ 以下実行結果 2021-03-01 09:54:39.759908: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.2 2.3.1 |
TensorFlow 2.3.1 がインストールできて環境構築が完了しました。
TensorFlowの動作確認
Jetson Nanoに TensorFlowの環境ができあがりましたので、簡単な動作確認をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $ cat mnist.py import tensorflow as tf mnist = tf.keras.datasets.mnist (x_train, y_train),(x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(512, activation=tf.nn.relu), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation=tf.nn.softmax) ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=5) model.evaluate(x_test, y_test) |
この mnist.py を実行すると次のような結果になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $ python3 ./mnist.py 2021-03-01 09:55:50.798158: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.2 2021-03-01 09:56:09.285338: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcuda.so.1 2021-03-01 09:56:09.408203: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1046] ARM64 does not support NUMA - returning NUMA node zero 2021-03-01 09:56:09.408683: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1742] Found device 0 with properties: pciBusID: 0000:00:00.0 name: NVIDIA Tegra X1 computeCapability: 5.3 ... (略) 1875/1875 [==============================] - 27s 14ms/step - loss: 0.2217 - accuracy: 0.9351 Epoch 2/5 1875/1875 [==============================] - 27s 14ms/step - loss: 0.0971 - accuracy: 0.9704 Epoch 3/5 1875/1875 [==============================] - 26s 14ms/step - loss: 0.0688 - accuracy: 0.9781 Epoch 4/5 1875/1875 [==============================] - 26s 14ms/step - loss: 0.0526 - accuracy: 0.9837 Epoch 5/5 1875/1875 [==============================] - 23s 13ms/step - loss: 0.0427 - accuracy: 0.9860 2021-03-01 09:58:57.959772: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 31360000 exceeds 10% of free system memory. 313/313 [==============================] - 2s 8ms/step - loss: 0.0683 - accuracy: 0.9810 |
これで Jetson NanoでCUDAを使用した GPU版 TensorFlowが使えるようになりました。