mdxでNDL古典籍OCRを実行する
更新履歴
2024-05-22
- 「Dockerコマンドを実行するユーザーをdockerグループに追加」を追記しました。
概要
mdxは大学・研究機関で共創する産学官連携のためのデータプラットフォームです。
今回は、mdxの仮想マシンを使用して、NDL古典籍OCRを実行してみます。
プロジェクトの申請
今回、プロジェクトタイプは「お試し/Trial」を選択しました。
「お試し/Trial」では、1つのGPUパックが割り当てられました。
仮想マシンの作成
デプロイ
今回は、「01_Ubuntu-2204-server-gpu (Recommended)」を選択しました。
デプロイ前の画面では、以下のように設定しました。パックタイプを「GPUパック」、パック数を1としました。
公開鍵については、ローカルPCで以下のように作成しました。
cd ~/.ssh/mdx
ssh-keygen
その後に作成されたid_rsa.pubの内容を貼り付けました。
その後、仮想マシンのデプロイが完了するまで少し待ちます。
SSH接続のためのネットワーク設定
以下の動画を参考に進めることができました。
まず起動した仮想マシンのサービスネットワーク1のIPv4アドレスを控えておきます。
次に、ネットワークタグから「DNAT」を追加しました。「転送元グローバルIPv4アドレス」は自動入力され、「転送先プライベートIPアドレス」に先ほど控えておいたサービスネットワークのIPv4アドレスを入力しました。
次に「ACL」を追加しました。動画にならって、以下のように設定しました。
特定のIPアドレスからのみアクセスする場合、以下のように設定しました。
一方、セキュリティの観点から、無制限に任意のアドレスからのアクセスを許可するのはリスクが伴いますが、以下のように設定することで、任意のアドレスからssh接続できるようです。
接続を試す
DATで追加した転送元グローバルIPv4アドレスを使用します。初期ログイン後、パスワードの変更が求められるので、変更します。
ssh mdxuser@<DATで追加した転送元グローバルIPv4アドレス> -i ~/.ssh/mdx/id_rsa
VS Codeで接続する
その後の操作は、必須ではありませんが、VS Codeの拡張機能である「Remote Explorer」を使いました。
仮想マシン内での作業
GPUの確認
sudo su
root@ubuntu-2204:/home/mdxuser# nvidia-smi
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.10 Driver Version: 535.86.10 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 A100-SXM4-40GB On | 00000000:03:00.0 Off | 0 |
| N/A 25C P0 45W / 400W | 4MiB / 40960MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
Dockerのインストール
以下のページの手順に沿って、Dockerをインストールしました。
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] 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
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world
Hello from Docker!
と表示されれば成功です。
NVIDIA Docker Runtime
(他にもよい方法があるかもしれませんが、)NVIDIA Docker Runtimeをインストールします。以下を実行しました。
# Add the package repositories
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
docker
グループに追加
Dockerコマンドを実行するユーザーをユーザーをDockerグループに追加
sudo usermod -aG docker $USER
システム再起動
sudo reboot
NDL古典籍OCRのインストール
ここから、NDL古典籍OCRのセットアップを進めます。
以下は少し時間がかかります。
git clone https://github.com/ndl-lab/ndlkotenocr_cli
cd ndlkotenocr_cli
sh ./docker/dockerbuild.sh
次に、コンテナの起動を行いますが、ホストマシンのディレクトリをマウントするように変更しておきます。
docker run --gpus all -d -v /home/mdxuser/tmpdir:/root/tmpdir --rm --name kotenocr_cli_runner -i kotenocr-cli-py37:latest
そして、以下を実行します。
sh ./docker/run_docker.sh
コンテナに入ります。
docker exec -it kotenocr_cli_runner bash
推論の実行
画像のダウンロード
ディレクトリを作成して、「源氏物語」(国立国会図書館所蔵)をダウンロードします。
mkdir -p /root/tmpdir/input/2585098/img
wget https://dl.ndl.go.jp/api/iiif/2585098/R0000003/full/full/0/default.jpg -O /root/tmpdir/input/2585098/img/0001.jpg
OCRの実行
ダウンロードした画像に対して、OCRを実行します。
まず、出力フォルダを作成しておきます。
mkdir -p /root/tmpdir/output
実行します。
python main.py infer /root/tmpdir/input/2585098 /root/tmpdir/output/2585098 -s s
結果、ホストマシンの/home/mdxuser/tmpdir/output
フォルダに認識結果が格納されます。
その他
コンテナの停止
docker stop kotenocr_cli_runner
仮想マシンのシャットダウン
sudo shutdown -r now
まとめ
mdxやNDLラボのおかげで、機械学習を用いた研究に取り組みやすい環境が整っていると感じました。関係者の方々に感謝申し上げます。
Discussion