LoginSignup
9
8

More than 3 years have passed since last update.

Nvidiaから出ているJetPack(NVIDIA SDK Manager)を使ってOpenCvやCudaの簡単なインストールを目指す

Last updated at Posted at 2020-07-12

Nvidiaから出ているJetPack(NVIDIA SDK Manager)を使ってOpenCvやCudaの簡単なインストールを目指す

スクリーンショット 2020-06-19 21.43.27.png

NividiaのGPUの乗ったマシンを用意する

NividiaのGPUは搭載したPCを用意する必要があります

$ apt-cache search "^nvidia-[0-9]{3}$"

apt-cacheでそのPCにインストールできるNvidiaドライバがわかる。
20191106123629.png
20191106125506.png

NVIDIA SDK ManagerはCuda10.0がインストールされる。NVIDIAドライバは410以上がインストールされる。
NVIDIAドライバ410以上に対応したWindows機を利用するかJatsonを利用する。
NVIDIAドライバが未対応ならNVIDIA SDK Managerをあきらめ、Cudaのバージョンを下げ手動インストールにする

https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
古いPCのGpuのドライバは410以下のため、Cuda10.0は動作しない

仮想環境ソフトを利用する

Parallels DesktopやVMWareなど
ここではparallels-desktopを使います

追記 仮想環境だとGeforceドライバが認識しない
MacならディアルブートでLinuxを起動させるか、Windowsを利用するか
外部のJetsonNanoに転送してインストールするか
(#1)

ubuntuをインストールする

日本語版Ubuntu配布サイト
スクリーンショット 2020-06-19 19.53.39.png

カーソルはCtrk+altで開放します
Parallels Tool CDがマウントされるので一緒にインストールするとよいです。

#更新する
sudo apt-get update
sudo apt-get upgrade
NVIDIAグラフィックドライバーとCudaのバージョンの関係

NVIDIA SDK ManagerのCudaのバージョンは10.0である。古いPCのGpuと古いNividaドライバーだと動作しない。NVIDIA SDK Managerの自動インストールをあきらめて、Cudaのバージョンを下げて手動インストールに切り替えるか、新しいPCを新調するかになる

GPUがNvidiaかどうか確認する
sudo lshw -C display 

仮想環境上だとVirtual Video Adapterとでる
仮想環境ではNivideドライバーはインストールできないので、ホストPC(Linux or Windows)上でNivideドライバをインストールする必要がある

UbuntuがGPUを認識しているか調べる

$ sudo ubuntu-drivers devices

Nvidiaドライバインストール 方法1

参考

UbuntuがGPUを認識しているか調べる

$ sudo ubuntu-drivers devices

GPUの型番が正しく表示されたら,以下のコマンドを実行してドライバのインストールする

$ sudo ubuntu-drivers autoinstall
# マシンにインストール済みのNVIDIAドライバを一覧表示
$ dpkg -l | grep nvidia

# apt-getでインストールできるNVIDIAドライバの一覧表示
$ apt-cache search "^nvidia-[0-9]{3}$"

nvidia-smiコマンドでドライバのバージョンやGPUの詳細が表示されるか確認する

$ nvidia-smi

正しく表示されたたらCudaのインストールへ進む

nvidia-smiを実行したらエラーが出た
$ nvidia-smi 
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
nvidia-smiはnvidiaのドライバを確認することができなかった.最新のドライバが入ってるかどうか確認してね.

この場合,Nouveauを無効化することで解決する.まず,/etc/modprobe.d/blacklist-nouveau.confを作成し,以下のように編集する.

$ sudo vim /etc/modprobe.d/blacklist-nouveau.conf

以下の内容を記入

blacklist nouveau
options nouveau modeset=0

次に以下のコマンドを実行し,カーネルモジュールを再読込する.

$ sudo update-initramfs -u

$ sudo reboot

$ nvidia-smi

参考

PCを再起動し,nvidia-smiが実行できればCUDAのインストールに進む

Nvidiaドライバインストール 方法2

Nvidia Driverをダウンロードする
スクリーンショット 2020-06-30 14.18.07.png

搭載されているGPUのドライバを選択しRun形式のファイルをダウンロードしインストールする

$ chmod +x GPUドライバ名.run
$ sudo sh GPUドライバ名.run

nvidia-smiコマンドでドライバのバージョンやGPUの詳細が表示されるか確認する

$ nvidia-smi
再インスール時の注意

NVIDIA SDK Managerを先にインストールすると最新のNVIDIAグラフィックドライバーをインストールされてしまい、その後マシンにあった古いグラフィックドライバーを入れようとすると、エラーが起きインストールできないことがありました。依存解決のコマンドaptitudeを使って再インストールを試しましたが、デスクトップ画面で硬直して動かなくなった。

マシンがハングアップしたので注意
sudo aptitude install libnvidia-encode-418
参考

素直にアンインストールして再インストールしたほうがいいかもしれない

sudo apt-get --purge remove nvidia-*
sudo apt-get --purge remove cuda-*

CudaとOpenCvのインストール

NVIDIA SDK Managerをインストールする
ネットに繋がっていないとインストールできません
スクリーンショット 2020-06-19 19.51.55.png

ダウンロードしJetPackアーカイブを解凍しインストールします。
Nvidiaアカウントを作成する必要があります
スクリーンショット 2020-06-19 20.01.18.png

HostMachienを選択します。
JetPack4.3を選択します。

参考記事
スクリーンショット 2020-06-19 20.05.24.png

下の方にあるダウンロードの後にインスールするを必ずチェックします
ダウンロード中にインストールするとエラーになることがあるので必ずチェックを入れます
30Gぐらい容量が必要です

インストール完了

スクリーンショット 2020-06-20 19.09.20.png

自動でOpenCvとCudaがインストールできました。

JetPack 4.3 in jetson components:

L4T R32.3.1 (K4.9)
Ubuntu 18.04 LTS aarch64
CUDA 10.0
cuDNN 7.6.3
TensorRT 6.0.1
VisionWorks 1.6
OpenCV 4.1 (4.1.1)
Nsight Systems 2019.6
Nsight Graphics 2019.5
Nsight Compute 2019.3
SDK Manager 1.0.0

cudaの場所

/usr/local/cuda
/usr/local/cuda-10.0

opencvの確認方法

$ sudo apt-get install python3-pip

$ sudo pip3 install numpy
$ python3
>>> import cv2
>>> print(cv2)
>>> cv2.__version__
4.1.1

公式cudaのインストール方法

公式cudaの説明

パスの設定を追加する

$ sudo apt install vim
# vimをアップデートする
sudo apt install vim

# xとyにバージョン数字を入れる
$ sudo vim ~/.bashrc

## CUDA and cuDNN paths
export PATH=/usr/local/cuda-x.y/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda-x.y/lib64:${LD_LIBRARY_PATH}
# 環境変数$LD_LIBRARY_PATHにNVIDIAドライバのパスを追加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia-番号

#保存する
$ source ~/.bashrc

# 確認する
$ nvcc -V

# CUDA Toolkitの場所の確認
$ which nvcc

#/usr/local/cuda-10.0/bin/nvcc 

参考
参考

cuDNN のRunTimeのインストールと動作確認

cudnn-archive
スクリーンショット 2020-06-30 13.27.00.png

cuDNN Runtime Library for Ubuntuh  
cuDNN Developer Library for Ubuntuh
cuDNN Code Samples and User Guide for Ubuntu
をダウンロードしダブルクリックでインストール

参考

cuDNNの動作確認

cuda-10.0/binにパスが通っているかどうかの確認します
通っていれば、cuda-install-samples-10.0.shを実行できます
ホームディレクトリで実行します。引数にフォルダ名を記入します。cuda-install-samples-10.0.shを実行するとホームディレクトリにサンプルフォルダが生成されます。Makeファイルがあるのでmakeします
binフォルダにサンプルファイルが生成されるので実行し試します。
deviceQueryを実行しcuda deviceが有効か確認します

$ cd /usr/local/cuda-10.0/bin

# /usr/local/cuda-10.0/bin/cuda-install-samples-10.0.sh

# ホームディレクトリにサンプルコードのあるディレクトリをコピー
$ cuda-install-samples-10.0.sh フォルダ名

$ cd フォルダ名/NVIDIA_CUDA-10.0_Samples
$ make
$ cd NVIDIA_CUDA-10.0_Samples/bin/x86_64/linux/release

$ ./deviceQuery

$ ./bandwidthTest

$ ./volumeRender 

参考

cuDNNのインストール確認

dpkg -lコマンドでインストール済みのパッケージを一覧表示する.

# マシンにインストール済みのcuDNNパッケージを一覧表示
$ dpkg -l | grep cudnn

cuDNNの保存場所

# debパッケージが保存されているディレクトリを確認(-Lオプション)
$ dpkg -L libcudnn7

Yoloをインストールする

$ sudo apt install git
$ git clone https://github.com/AlexeyAB/darknet.git
$ cd darknet
darknet$ vim Makefile
GPU=1
CUDNN=1
OPENCV=1

darknet$ make

-lcudaが見つからない エラーが出る

libcuda.soがどこにあるか検索する

# libcuda.soがどこにあるか検索する
$ locate libcuda.so

# libcuda.soの場所がヒットする
/usr/local/cuda-10.0/targets/x86_64-linux/lib/stubs/libcuda.so
/usr/loca/cuda-10.0/targets/aarch64-linux/lib/stubs/libcuda.so

libcuda.soファイルを見つけたら、x86_64-linux-gnuフォルダに作る。x86_64-linuxフォルダにlibcuda.so.1のシンボリックリンクを作るとよい記事を見つける

sudo ln -s /usr/local/cuda-10.0/targets/x86_64-linux/lib/stubs/libcuda.so /usr/lib/x86_64-linux-gnu/libcuda.so.1

# libcuda.so.1とlibcuda.so 両方のシンボリックリンクが必要
sudo ln -s /usr/local/cuda-10.0/targets/x86_64-linux/lib/stubs/libcuda.so /usr/lib/x86_64-linux-gnu/libcuda.so

参考

#再びmake
$ make clean
$ make

cudnn.hファイルがないとでる。cudnn.hファイルをコピーする

cudnn インストール公式

cudnn-archive
スクリーンショット 2020-06-26 17.41.06.png

cuDNN Library for Linuxをダウンロードします

#cuDNNパッケージを解凍する。Finderからでも解凍可能

$ tar -xzvf cudnn-x.x-linux-x64-v8.x.x.x.tgz

$ sudo cp cuda/include/cudnn*.h /usr/local/cuda/include
$ sudo cp cuda/lib/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

make時のcudnn.h not foundがエラーが出なくなる

cudnn関連

libcudnn.so.7.0.1以外のlibcudnn.soファイルを削除する
/usr/local/cuda/lib64 $ sudo rm -rf libcudnn.so libcudnn.so.7
再生する
sudo ln -s libcudnn.so.7.0.1 libcudnn.so.7
sudo ln -s libcudnn.so.7 libcudnn.so
make clean 
make

darknet/objが書き込めない

darknet/obj 権限を変更する

$ sudo chmod 777 ホームパス/darknet/obj ホームパス/darknet/backup

再びmake

$ make clean
$ make

weightsをダウンロード

AlexeyAB版には含まれていないのでpjreddieからダウンロード

$ wget https://pjreddie.com/media/files/yolov3.weights

Yoloを実行してみる

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

Yolo実行時のエラー

Not compiled with OpenCV, saving to predictions.png instead

DarkNetのMakefileのopenCvが1になっていない

$ vim Makefile
  OPENCV=1

CUDA driver version is insufficient for CUDA runtime version

CUDA driver version is insufficient for CUDA runtime version : No Such File or Directory

保留
参考
NVIDIAグラフィックドライバがインストールされていないと出る?調査中

cudaを更新もする
sudo apt-get install cuda

No CUDA-capable device is detected

CUDA対応デバイスが検出されない
仮想環境上ではNvidiaのGPUを認識しないため。仮想環境を止めてホストPCにOSを入れ直してやる

CUDAとNVIDIAドライバ(/usr/lib/nvidia-***)のPATHチェック

出力に"/usr/local/cuda-10.0/lib64"と"/usr/lib/nvidia-番号"が含まれているか?

$ echo $LD_LIBRARY_PATH  

CUDAとnvccコマンドのPATHチェック

出力が"/usr/local/cuda-10.0/bin/nvcc"になっているか?

$ which nvcc             
/usr/local/cuda-10.0/bin/nvcc

nvidia-smiコマンドのPATHチェック

出力が"/usr/bin/nvidia-smi"になっているか?

 $ which nvidia-smi
/usr/bin/nvidia-smi

アンインストール方法

# xにバージョンを入れる
sudo apt remove cuda-x-y
sudo apt autoremove
sudo apt remove libcudnnx libcudnnx-dev libcudnnx-doc
rm -rfv ~/NVIDIA_CUDA-x.y_Samples/ # サンプルコードを消す。
# ~/.bashrcに追加されたPATHの設定をテキストエディタなどで消す。
# ログアウトしてPATHの設定の変更を反映

ポイント

Nvidia GPUを搭載したマシンを用意する
仮想環境にNvidiaのグラフィックドライバーはインストールはできない
Nividia Sdk ManegerのCudaは10.0なので古いNividiaドライバでは動かない。Cuda10.0を動作できるNvidiaDriverを利用する
cuDNNパッケージを解凍し、指定したファイル(cudnn*.h)などを指定したところへコピーする
locate libcuda.soでlibcuda.soの場所を把握する。シンボリックリンクを/usr/lib/x86_64-linux-gnuに貼る
vimで.bashrcを編集した後、source ~/.bashrcで保存しないと適用されない

結論

Jetson nanoを使う時はNividia Sdk Manegerを使ったほうがよい。cuda10とNividiaドライバが対応している
PCにインストールする場合はGPUを調べ、NvidiaDriverが410以上に対応しているならNividia SDKを試しに使ってみる 410未満未対応ならSDKを諦め手動インストールでやる

参考サイト

閃き- blog
かなり詳しく書いてあります

Coda linux 公式インストール情報

NVIDIA SDK Manager on Dockerで快適なJetsonライフ

Jetson TX2 への JetPack のセットアップ手順

(#1)
CUDA on WSL2
WSL2を使えばWindows上にLinuxを構築しWindowsのGPUドライバを利用できるようです。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8