えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

CUDA12を使ってみた

AmazonブラックフライデーセールでSSDを買いました。初めてのM.2です。

ポイントアップキャンペーンに乗じて新しいスマホを買ったばかりなので本当に金欠…


SSDの使い道は、Ubuntu20に使おうと思います。今使っているUbuntu20用のSSDが250GBですでに5年以上使用しているのでちょうど良いタイミングでした。

環境構築していたところ、新しいCUDAバージョン"CUDA 12.0"が提示されていたようなのでいつもはCUDA11を入れる代わりにCUDA12を入れることにしました。


CUDA12とは

CUDAはNVIDIAが提供しているGPGPUGPUを用いた並列コンピューティング)ライブラリ郡です。

GPGPUは主に配列の計算を得意としており、画像処理や点群処理などのニューラルネットワークなどの並列性の高いアプリケーションに対してCPUよりも高速に処理可能です。

CUDAはC/C++言語でライブラリを使用することができ、そのコンパイル・実行には対応するNVIDIAドライバが必要です。


CUDA12ではNVIDIAが開発・提供する新しいアーキテクチャ "Hopper" に対応し、他にもC++20対応やデフォルトの言語が C++17 に対応したりとバージョンに追いつくためのアップデートが盛り込まれています。

一方で、CentOSやKeplerサポートが終了したり、前世代の非推奨APIが削除されていたりします。

また、32bitサポートを行わなくなりました。(Hopper以外は以前のバージョンでサポートされます。)


ここでは、CUDA12のインストールと動作確認を行います。

使用するパッケージは、darknet_ros_fp16にしました。

darknetはCUDAとOpenCVさえ入っていればなんとなかなる(CUDAすらいらない)ので、非常に環境構築がしやすいです。


インストール

NVIDIA Driverのインストール

NVIDIAドライバは、以下のページからダウンロードしてください。

2022/12/09時点の最新バージョンは525.60.11でした。

www.nvidia.com

まず、nouveauの無効化をする必要があるので /etc/modprobe.d/blacklist.confを開いて以下を追記します。

blacklist nouveau
options nouveau modeset=0

適用のために sudo update-initramfs -u を実行して再起動します。

再起動後にNVIDIAドライバの実行用ファイルに管理者権限をつけて実行します。CLI画面推奨。

ここでは、NVIDIA-Linux-x86_64-525.60.11.run をインストールします。

sudo apt update
sudo apt install g++ cmake # minimal installation でインストールした場合
cd ~/Downloads
chmod -x ./NVIDIA-Linux-x86_64-525.60.11.run
sudo ./NVIDIA-Linux-x86_64-525.60.11.run
sudo reboot

nouveauについてはNVIDIAのページを見てください。

download.nvidia.com


CUDAのインストール

※最新のインストール方法については以下のURLを参考にしてください。

CUDA Toolkit 12.0 Downloads | NVIDIA Developer

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda-repo-ubuntu2004-12-0-local_12.0.0-525.60.13-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-12-0-local_12.0.0-525.60.13-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2004-12-0-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

鍵関連でいつの間にかエラーになるの、なんとかならないですかね…(私だけ?)


シンボリックリンクの貼り直し

darknet_ros_fp16のインストール実行時に libcuda.so が見つからないというエラーが出たので、リンクを貼り直しました。

過去の記事を参考になりました。過去の自分ナイス。

ar-ray.hatenablog.com

sudo ln -s /usr/lib/x86_64-linux-gnu/libcuda.so.525.60.13 /usr/lib/x86_64-linux-gnu/libcuda/libcuda.so


ROS2のインストール

ここでは、ROS-Galacticを使用しました。

darknet_ros_fp16では、Humbleも使用可能です。

以下のURLからROSの環境構築の手順を実行してください。

docs.ros.org

追加で python3-colcon-common-extensionsもインストールしてください。

sudo apt install python3-colcon-common-extensions


ビルド

Humbleの場合はGalacticをHumbleにしてください。

sudo apt install ros-galactic-desktop ros-galactic-v4l2-camera
source /opt/ros/galactic/setup.bash
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone --recursive https://github.com/Ar-Ray-code/darknet_ros_yolov4.git
darknet_ros_yolov4/darknet_ros/rm_darknet_CMakeLists.sh
cd ~/ros2_ws
colcon build --symlink-install

実行

Webカメラをコンピュータに接続します。

source ~/ros2_ws/install/setup.bash
ros2 launch darknet_ros demo-v4-tiny.launch.py

darknetはいつの環境でも変わらず動くのですごい!(感心)