2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Pi 5無しでRaspberry Pi AI Kit をx86_64 Ubuntu上で遊ぶ

Last updated at Posted at 2024-12-07

Raspberry Pi 5向けにリリースされているHailoのAI Kitですが、実はx86_64環境もサポートしているようです。またHailo上で実行するHEF形式のファイル(アクセラレータの挙動を決めるプログラム)の生成も、x86_64上で変換するのだとか。そこで今回は、Raspberry Pi 5抜きでRaspberry Pi AI Kitをx86_64上のUbuntu22.04から使う手順 をまとめてみました(Ubuntu24.04はサポート外のようです)。


Ubuntu24.04でも動作したため、記事のタイトルを「Raspberry Pi 5無しでRaspberry Pi AI Kit をx86_64 Ubuntu 22.04 LTS上で遊ぶ」から「Raspberry Pi 5無しでRaspberry Pi AI Kit をx86_64 Ubuntu上で遊ぶ」に変更しました(GPUドライバはnvidia-driver-550を選択しました)


ハードウェア構成

まずPCの電源を切った状態で、Raspberry Pi AI Kitから取り外したHailo8Lボードをx86_64 PCのマザーボードにあるM.2(PCIe Gen3以降 x1以上)のソケットに挿入します。また GPUリソースとしてRTX3060Ti を搭載しました。なお、Ubuntu22.04のインストーラがRTX3060Tiを認識しなかったため、以降の手順の「OSのインストール」の間はオンボードのHDMI出力を利用しました。

IMG_8825.jpg

今回利用した機材とOS

Core i7-6700 RAM32GB + 1TB NVMe

Ubuntu Desktop 22.04.1 LTS

Raspberry Pi 5 に対応したAI Kit + M.2搭載用ネジ

OSのインストール

Ubuntu24.04を選びたかったのですが、HailoがサポートするOSはUbuntu22.04までとのことだったので Ubuntu22.04をインストール しました。OSインストール後は、以下の手順で環境をセットアップします。

# パッケージの一覧を取得
$ sudo apt update

# パッケージをすべて更新
$ sudo apt upgrade

# 再起動
$ sudo reboot

# sudoコマンドをパスワードレスで実行できるようにする
### -->> shino ALL=(ALL:ALL) NOPASSWD: ALL を末尾に追加
$ sudo vi /etc/sudoers

# sshサーバをインストールする
$ sudo apt install openssh-server

# リモートログインできるようにする
# ... 起動時にサービスが開始されるように設定する
$ sudo systemctl start ssh
$ sudo systemctl enable ssh

# sshに公開鍵でログインできるようにする
$ mkdir ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 0700 ~/.ssh
$ chmod 0640 ~/.ssh/authorized_keys
### -->> 必要なら公開鍵を書き込む

# 汎用グラフィックドライバを無効化する
# 新規ファイルを作成し、無効化設定を記述する
### 無効化してからRTX3060Tiを接続
$ sudo vi /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0

# 保存したらinitramfsを更新して再起動
$ sudo update-initramfs -u
$ sudo reboot

GPUリソースをセットアップする

最初にGPU周りのセットアップをしていきましょう。

GPUのドライバをインストールする

汎用グラフィックドライバを無効化することで、Ubuntu22.04+RTX3060TiでもHDMI出力ができるようになります。ここでGPUを搭載し、以下の手順でGPUのドライバをインストールしましょう。

# グラフィクス関連のドライバをすべて削除
$ sudo apt --purge remove -y nvidia-*
$ sudo apt --purge remove -y cuda-*
$ sudo apt --purge remove -y libcudnn*
$ sudo apt --purge remove -y cudnn-*

# GPUを確認する
$ lspci | grep -i vga
# 01:00.0 VGA compatible controller: NVIDIA Corporation GA104 [GeForce RTX 3060 Ti Lite Hash Rate] (rev a1)

# グラフィックドライバが格納されているレポジトリを登録
$ sudo add-apt-repository ppa:graphics-drivers/ppa

# パッケージ一覧を更新
$ sudo apt update

# グラフィックドライバのリストを確認する
$ ubuntu-drivers devices
# == /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
# modalias : pci:v000010DEd00002489sv00001462sd00008D9Bbc03sc00i00
# vendor   : NVIDIA Corporation
# model    : GA104 [GeForce RTX 3060 Ti Lite Hash Rate]
# driver   : nvidia-driver-545-open - distro non-free
# driver   : nvidia-driver-535 - distro non-free
# driver   : nvidia-driver-535-server-open - distro non-free
# driver   : nvidia-driver-555 - third-party non-free
# driver   : nvidia-driver-550-open - third-party non-free
# driver   : nvidia-driver-555-open - third-party non-free
# driver   : nvidia-driver-545 - distro non-free
# driver   : nvidia-driver-470-server - distro non-free
# driver   : nvidia-driver-535-server - distro non-free
# driver   : nvidia-driver-535-open - distro non-free
# driver   : nvidia-driver-560 - third-party non-free recommended
# driver   : nvidia-driver-470 - distro non-free
# driver   : nvidia-driver-560-open - third-party non-free
# driver   : nvidia-driver-550 - third-party non-free
# driver   : xserver-xorg-video-nouveau - distro free builtin

# リストの対象外だがHailo開発環境が525までしかサポートしていないので
# nvidia-driver-525をインストールする
$ sudo apt install -y nvidia-driver-525
$ sudo reboot

# nvidia-smiでGPUが認識されていることを確認する
$ nvidia-smi
# Sat Dec  7 19:11:27 2024
# +---------------------------------------------------------------------------------------+
# | NVIDIA-SMI 535.183.01             Driver Version: 535.183.01   CUDA Version: 12.2     |
# |-----------------------------------------+----------------------+----------------------+
# | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
# | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
# |                                         |                      |               MIG M. |
# |=========================================+======================+======================|
# |   0  NVIDIA GeForce RTX 3060 Ti     Off | 00000000:01:00.0  On |                  N/A |
# | 37%   34C    P8              13W / 200W |    315MiB /  8192MiB |      0%      Default |
# |                                         |                      |                  N/A |
# +-----------------------------------------+----------------------+----------------------+
# 
# +---------------------------------------------------------------------------------------+
# | Processes:                                                                            |
# |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
# |        ID   ID                                                             Usage      |
# |=======================================================================================|
# |    0   N/A  N/A       972      G   /usr/lib/xorg/Xorg                          175MiB |
# |    0   N/A  N/A      1179      G   /usr/bin/gnome-shell                        134MiB |
# +---------------------------------------------------------------------------------------+

参考にさせていただきました記事

CUDAとcuDNNのインストール

CUDA ToolkitのサイトよりPCの構成を選択し、インストール用のコマンドを確認します。今回は 「Linux」->「x86_64」->「Ubuntu」->「22.04」->「deb(local)」 を選択し、以降のコマンドによりCUDAをインストールしました。

{B951592A-EAF8-4208-8782-1E57AAAC5B70}.png

# 公式サイトの手順に従ってインストールする
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
$ sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget https://developer.download.nvidia.com/compute/cuda/12.6.3/local_installers/cuda-repo-ubuntu2204-12-6-local_12.6.3-560.35.05-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu2204-12-6-local_12.6.3-560.35.05-1_amd64.deb
$ sudo cp /var/cuda-repo-ubuntu2204-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
$ sudo apt-get -y install cuda-toolkit-12-6

# ツールにパスを通す
$ vi ~/.bashrc
# 最後の行に下記の2行を追加する
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"

# 設定した環境変数を反映させる
$ source ~/.bashrc

# 開発ツールのバージョンを確認する
$ nvcc -V
# nvcc: NVIDIA (R) Cuda compiler driver
# Copyright (c) 2005-2024 NVIDIA Corporation
# Built on Tue_Oct_29_23:50:19_PDT_2024
# Cuda compilation tools, release 12.6, V12.6.85
# Build cuda_12.6.r12.6/compiler.35059454_0

# 最後に再起動する
$ sudo reboot

同様の手順でcuDNNもインストールします。 「Linux」->「x86_64」->「Ubuntu」->「22.04」->「deb(local)」 を選択しcuDNNをインストールしました。

{E5601750-25D1-4B65-A19B-3669AE3F48A7}.png

# 公式サイトの手順に従ってインストールする
$ wget https://developer.download.nvidia.com/compute/cudnn/9.6.0/local_installers/cudnn-local-repo-ubuntu2204-9.6.0_1.0-1_amd64.deb
$ sudo dpkg -i cudnn-local-repo-ubuntu2204-9.6.0_1.0-1_amd64.deb
$ sudo cp /var/cudnn-local-repo-ubuntu2204-9.6.0/cudnn-*-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
$ sudo apt-get -y install cudnn
$ sudo apt-get -y install cudnn-cuda-12

# 最後に再起動する
$ sudo reboot

参考にさせていただきました記事

Docker環境のセットアップ

続いてDockerのセットアップを進めていきます。

Dockerのインストール

Dockerを公式ドキュメントに従ってインストールします。今回は 「Install using the apt repository」 のコマンドを参考にしました。

# Set up Docker's apt repository.
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl
$ sudo install -m 0755 -d /etc/apt/keyrings
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
$ sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update

# Install the Docker packages.
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Verify that the installation is successful by running the hello-world image
$ sudo docker run --rm hello-world

# sudo無しでもdockerを操作できるようユーザーに権限を与える
$ sudo usermod -aG docker $USER
$ sudo reboot

# Dockerコマンドをsudo無しで実行できることを確認する
$ docker image ls
# REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
# hello-world   latest    d2c94e258dcb   19 months ago   13.3kB
$ docker image rm hello-world
$ docker image ls
# REPOSITORY    TAG       IMAGE ID       CREATED         SIZE

参考にさせていただきました記事

NVIDIA-dockerのインストール

Hailo開発環境が nvidia-docker2 を必要としていますが、公式リポジトリを参照するとThis project has been superseded by the NVIDIA Container Toolkit. とされているので、下記の手順を参考にNVIDIA Container Toolkitをインストールします。

{53B41A81-6AA7-4D37-B28B-D3F13435B53D}.png

参考にさせていただきました記事

# NVIDIA Container Toolkitが格納されたリポジトリをシステムに追加する
$ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# NVIDIA Container Toolkitをインストールする
$ sudo apt-get update
$ sudo apt-get install -y nvidia-container-toolkit

# コンテナのランタイムがDockerであることを登録する
$ sudo nvidia-ctk runtime configure --runtime=docker
# INFO[0000] Config file does not exist; using empty config 
# INFO[0000] Wrote updated config to /etc/docker/daemon.json 
# INFO[0000] It is recommended that docker daemon be restarted. 
$ sudo systemctl restart docker

# GPUが見えなくなる問題の対策
# -->> https://qiita.com/tttamaki/items/4f369633b7f53f5131a1
$ sudo vi /etc/docker/daemon.json
{   
    "runtimes": { 
        "nvidia": { 
            "args": [],
            "path": "nvidia-container-runtime"
        }
    },
    "exec-opts": ["native.cgroupdriver=cgroupfs"]
}
$ sudo systemctl restart docker
$ docker info | grep Cgroup
# Cgroup Driver: cgroupfs
# Cgroup Version: 2

# Dockerコンテナ内からGPUにアクセスできることを確認する
$ docker run --rm --gpus all pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel nvidia-smi
# Sat Dec  7 11:03:16 2024
# +-------------------------------------------------------------------------------                                                                           --------+
# | NVIDIA-SMI 535.183.01             Driver Version: 535.183.01   CUDA Version: 1                                                                           2.4     |
# |-----------------------------------------+----------------------+--------------                                                                           --------+
# | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Unco                                                                           rr. ECC |
# | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Com                                                                           pute M. |
# |                                         |                      |                                                                                          MIG M. |
# |=========================================+======================+==============                                                                           ========|
# |   0  NVIDIA GeForce RTX 3060 Ti     Off | 00000000:01:00.0 Off |                                                                                             N/A |
# | 37%   30C    P8               9W / 200W |    284MiB /  8192MiB |      0%                                                                                 Default |
# |                                         |                      |                                                                                             N/A |
# +-----------------------------------------+----------------------+--------------                                                                           --------+
#                                                                                                                                                            
# +-------------------------------------------------------------------------------                                                                           --------+
# | Processes:                                                                                                                                                       |
# |  GPU   GI   CI        PID   Type   Process name                            GPU                                                                            Memory |
# |        ID   ID                                                             Usa                                                                           ge      |
# |===============================================================================                                                                           ========|
# +-------------------------------------------------------------------------------                                                                           --------+

HAILO開発リソースのセットアップ

以上でHailo8Lの開発に必要な下準備は整いましたので、Hailo8Lを開発するためのセットアップをはじめていきましょう。Hailo8L関連のソフトウェアは「hailo.ai/developer-zone/software-downloads/」より入手することができます。ユーザー登録が必要となりますので、ログイン用のメールアドレスをご準備ください。

{F2DB2F78-3699-484B-B6BA-8F03C5B91540}.png

「AI Software Suite」->「AI Software Suite」->「x86」->「Linux」->「Python Version 3.8」 を選択し 「Hailo AI Software Suite - Docker」 と 「HailoRT - PCIe driver Ubuntu package(deb)」 をダウンロードします。

{A11285A8-BB90-404D-AA0C-A9CC05FD1EC3}.png

Hailo8L向けPCIeドライバのインストール

Ubuntu22.04の場合、Hailo8Lのドライバが既にインストールされているようで、lspciでデバイス名を確認することができます。ただ、念のため、公式からダウンロードした最新のデバイスドライバをインストールしておきます。

# デバイスを認識できているか確認する
$ lspci | grep Co-processor
# 02:00.0 Co-processor: Hailo Technologies Ltd. Hailo-8 AI Processor (rev 01)

# Installation of the PCIe Driver Only を参照
# ダウンロードしたHailoRT - PCIe driver Ubuntu package(deb)を
# ~/ に格納した上で、下記のコマンドを実行
$ cd ~/
$ ls hailo*
#  hailo_ai_sw_suite_2024-10_docker.zip
#  hailort-pcie-driver_4.19.0_all.deb
$ sudo dpkg --install hailort-pcie-driver_4.19.0_all.deb
# ...
# Do you wish to use DKMS? [Y/n]: Y
# ...
# Please reboot your computer for the installation to take effect.

# 再起動
$ sudo reboot

# デバイスを認識できているか確認する
$ lspci | grep Co-processor
# 02:00.0 Co-processor: Hailo Technologies Ltd. Hailo-8 AI Processor (rev 01)

Dockerベースの開発環境のインストール

次にダウンロードした 「Hailo AI Software Suite - Docker」 をインストールします。ダウンロードしたファイルを ~/ に格納した上で、GUIのターミナルから 下記のコマンドを実行します。

# ファイルの確認
$ cd ~
$ ls hailo_ai_sw_suite*
#  hailo_ai_sw_suite_2024-10_docker.zip

# 作業ディレクトリを作成
$ mkdir -p ~/hailo_devel_work
$ cd ~/hailo_devel_work

# 解凍する
$ unzip ~/hailo_ai_sw_suite_2024-10_docker.zip
# Archive:  /home/shino/hailo_ai_sw_suite_2024-10_docker.zip
#   inflating: hailo_ai_sw_suite_2024-10.tar.gz
#   inflating: hailo_ai_sw_suite_docker_run.sh

$ ls
# hailo_ai_sw_suite_2024-10.tar.gz
# hailo_ai_sw_suite_docker_run.sh

# コンテナを起動する (GUIのある環境で実行)
# -->> 初回起動は非常に時間がかかります
$ ./hailo_ai_sw_suite_docker_run.sh
# Loading Docker image: /home/shino/hailo_devel_work/hailo_ai_sw_suite_2024-10.tar.gz
# INFO: Checking system requirements...
# INFO: System requirements check finished successfully.
# ...
######
### コンテナ内にログインできます
######

(hailo_virtualenv) /local/workspace $ hailortcli fw-control identify
# Executing on device: 0000:02:00.0
# Identifying board
# Control Protocol Version: 2
# Firmware Version: 4.19.0 (release,app,extended context switch buffer)
# Logger Version: 0
# Board Name: Hailo-8
# Device Architecture: HAILO8L
# Serial Number: HLDDLBB243301301
# Part Number: HM21LB1C2LAE
# Product Name: HAILO-8L AI ACC M.2 B+M KEY MODULE EXT TMP

Screenshot from 2024-12-07 20-40-40.png

参考にさせていただきました記事

hefファイルを読み込めることを確認

下記リストから 「Classification」->「Hailo-8L(Link)」->「resnet_v1_18」->「Compiled(download)」 を選択して学習済みモデルを入手し、Hailo8LにHEFを読み込めることを確認します。

下記手順によりHailo8L上でHEFファイルを実行できることを確認することができます。

# 作業ディレクトリ
$ pwd
/local/workspace

# Hailo8L向けのYOLOv8のモデルをダウンロード
$ wget https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v2.13.0/hailo8l/resnet_v1_18.hef

# HEFファイルをHailo8L上で実行
$ hailortcli run resnet_v1_18.hef
# Running streaming inference (resnet_v1_18.hef):
#   Transform data: true
#     Type:      auto
#     Quantized: true
# Network resnet_v1_18/resnet_v1_18: 100% | 4577 | FPS: 914.24 | ETA: 00:00:00
# > Inference result:
#  Network group: resnet_v1_18
#     Frames count: 4577
#     FPS: 914.31
#     Send Rate: 1101.03 Mbit/s
#     Recv Rate: 7.31 Mbit/s

hef_platformが動作することを確認

続いてPythonコードからHailo8LにHEFファイルを読み込ませることができることを確認します。確認用に下記のPythonコードを用意しました。これはhailo tutorialから一部を変更したものです。hailo tutorial版のソースコードでは配列をnp.emptyで初期化した後にastypeのキャストするのですが、このキャストに失敗することがあるため、配列定義時にnp.uint8を指定するようにしました。

import numpy as np
from hailo_platform import VDevice, HailoSchedulingAlgorithm

timeout_ms = 1000

params = VDevice.create_params()
params.scheduling_algorithm = HailoSchedulingAlgorithm.ROUND_ROBIN

# The vdevice is used as a context manager ("with" statement) to ensure it's released on time.
with VDevice(params) as vdevice:

    # Create an infer model from an HEF:
    infer_model = vdevice.create_infer_model('./resnet_v1_18.hef')

    # Configure the infer model and create bindings for it
    with infer_model.configure() as configured_infer_model:
        bindings = configured_infer_model.create_bindings()

        # Set input and output buffers
        buffer = np.empty(infer_model.input().shape, dtype=np.uint8)
        bindings.input().set_buffer(buffer)

        buffer = np.empty(infer_model.output().shape, dtype=np.uint8)
        bindings.output().set_buffer(buffer)

        # Run synchronous inference and access the output buffers
        configured_infer_model.run([bindings], timeout_ms)
        buffer = bindings.output().get_buffer()

        # Run asynchronous inference
        job = configured_infer_model.run_async([bindings])
        job.wait(timeout_ms)
# 作業ディレクトリを作成し移動
### -->> 前手順でダウンロードした resnet_v1_18.hef があること
# スクリプトを実行、エラーが無ければOK
$ python test.py
### 何も表示されずにコマンドの実行に成功すればOK

これでRaspberry Pi 5なしにAI Kitを試すことができます。x86_64環境の方が、Raspberry Pi 5よりもリソースがリッチなので開発が捗りそうですね。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?