Raspberry Pi 5にCVATを導入(1)

はじめに#
皆さん、CVATをご存じでしょうか?
CVATは画像系(Computer Vision系)に特化したアノテーションツールで、この種のオープンソースのソフトウェアの中では1,2を争うほどの人気ではないでしょうか。
非常に有用なツールですが、(個人で運用する場合)運用についてはいろいろ考えることがあり、メインPCに常駐させるとメモリを無駄に食ってしまいますし、公式イメージはx64のみなのでその辺に転がっているRaspberry piでそのまま使うことはできません。
そこで、あれこれ工夫してCVATをRaspberry pi 5で動作するようにしよう!という趣旨の企画です。
検証時の構成#
| 項目 | 内容 |
|---|---|
| PC | Raspberry Pi 5( 8 GB) |
| OS | Raspberry Pi OS(64bit 6.12.75+rpt-rpi-v8) |
| CVAT | v2.64.0 |
1.事前設定#
Dockerのインストール#
CVATはDockerで動作するので、公式スクリプトを使ってDockerをインストールします。
# 公式スクリプトでDockerをインストール
curl -sSL https://get.docker.com | sh
現在ログインしているユーザーにDockerの使用権限を付与し、変更を反映
# 現在ログインしているユーザーをdockerグループに追加
sudo usermod -aG docker $USER
# 変更を現在のshellに反映(rebootでもいいです)
newgrp docker
動作確認
docker run hello-world
下の図のように表示されれば正常にインストールされています。

ページサイズの設定#
OSにはメモリを管理する最小単位としてページサイズという概念があります。
これはWindowsや他のLinuxでも同様に存在する概念で、 ほとんどのOSで4KiBに設定されています。
しかし、Raspberry pi OSは少し特殊で16 KiBに設定されており、 この違いからデフォルト設定のままではDockerイメージの一部がうまく動作しません。
そこで、下記の手順で4 KiBへ設定変更しておきます。
※ページサイズを変更することにより、それまで動作していたソフトウェアに不具合が発生する可能性があります。自己責任でよろしくお願いします。
# 現在のページサイズを取得(デフォルトでは16384と表示されるはず)
getconf PAGE_SIZE
# 設定ファイルを編集
sudo nano /boot/firmware/config.txt
設定ファイル(/boot/firmware/config.txt)の一番下に下記を追記してください。
[pi5]
kernel=kernel8.img
リブート後、ページサイズが4096になっていれば変更完了です。
# リブート
sudo reboot
# 現在のページサイズを取得(4096と表示されれば変更完了)
getconf PAGE_SIZE
2.CVATの導入#
CVATのダウンロード#
事前準備が整ったら、CVATのリポジトリをクローンします。
# Githubからリポジトリをクローン
git clone https://github.com/cvat-ai/cvat
cd cvat
# ソースをv2.64.0の状態にする
git checkout v2.64.0
CVATのビルド#
続いて、CVATの中核となるDockerイメージをビルドします。
x64のマシンであればビルド済みのイメージを使用できますが、Arm64のRaspberry pi5は自前でビルドする必要があります。
docker compose -f docker-compose.yml -f docker-compose.dev.yml build cvat_server cvat_ui
本環境ではビルドに20~30分ほどかかります。
↓CPU使用率はほぼ100 %に張り付いていますね。

ホストアドレスの設定#
CVATは事前に登録されたアドレス以外からはアクセスすることができません。
デフォルトではlocalhostになっているので、LAN上の別の機器からアクセスする場合はリポジトリに「.env」というファイルを作り、下のように設定してください。
(このファイルはCVATから環境変数として扱われます)
CVAT_HOST=10.10.10.114 # ここをRaspberry pi5のアドレスに変更
3.CVATの起動#
CVATをCLIから起動#
設定が終わったら下記のコマンドでcvatを起動します。
docker compose -f docker-compose.yml up -d
管理ユーザーの追加#
起動出来たら管理ユーザーを追加します。 下記のコマンドでユーザーを追加してください。
docker exec -it cvat_server bash -ic 'python3 ~/manage.py createsuperuser'
初回起動は初期化処理が少し入るようなので、エラーが出たら少し時間をおいてからもう一度試してください
(目安として10分以上経過してもエラーが出る場合は初期化以外の不具合が発生しているかもしれません)
下記のようになればOKです。

ブラウザからアクセス#
ユーザーの追加が完了したら、ブラウザからcvatへアクセスします。
ポートは8080なので、上記で何も設定していない場合は「localhost:8080」、明示的にアドレスを指定した場合は「10.10.10.114:8080」のようにしてアクセスしてください。
問題なければログイン画面が表示されるはずです。
先ほどCLI上から入力したユーザー名とパスワードを入力してログインしてください。

ログインすると下図のような画面が表示されます。

これにてCVATの導入完了です。お疲れ様でした。
4.CVATの停止#
停止したいときはリポジトリのルートディレクトリにいる状態で下記のコマンドを実行してください。
docker compose -f docker-compose.yml down
5.さいごに#
CVATはバックエンドがPython、フロントエンドはTypeScriptで書かれており、ほとんどCPUアーキテクチャ依存の箇所がなかったので比較的簡単にRaspberry pi5に導入できました。
ポイントとしてはRaspberry pi5のページサイズを変更する箇所と、Dockerイメージをソースからビルドするところくらいでしょうか。
ページサイズの変更については上記でも説明しましたが、他のソフトウェアに影響を与える可能性がある設定変更になりますので、変更は自己責任でよろしくお願いします。
参考文献#
Next reading
あわせて読みたい
関連するベンチや運用ログ、深掘り記事を続けて読めます。