🦔

Azureの仮想マシンを用いたNDLOCRのGradioアプリ構築

2024/12/23に公開

概要

以下の記事で、Azureの仮想マシンとNDLOCRを用いたGradioアプリについて紹介しました。

https://zenn.dev/nakamura196/articles/5aa7df69189c56

本記事では、このアプリの構築方法に関する備忘録です。

仮想マシンの構築

GPUを使用するにあたり、クォータの要求を行う必要がありました。

要求後、今回は「NC8as_T4_v3」を使用します。

Docker環境の構築

以下の記事を参考にします。

https://zenn.dev/koki_algebra/scraps/32ba86a3f867a4

Secure Boot の無効化

以下のように記載されています。

Secure Boot を無効化しないと NVIDIA Driver が正しくインストールされない.

実際、無効化しなかった場合、以下の画面が表示され、前に進めませんでした。

以下で、Secure Bootを無効化します。

NVIDIA Driver のインストール

ubuntu-drivers コマンドのインストールを行い、インストール可能な NVIDIA Driver を確認する。

sudo apt-get update
sudo apt install ubuntu-drivers-common
ubuntu-drivers devices

以下が結果です。

vendor   : NVIDIA Corporation
model    : TU104GL [Tesla T4]
driver   : nvidia-driver-535 - distro non-free recommended
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-535-server - distro non-free
driver   : nvidia-driver-470 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

recommendedをインストールします。

sudo apt install nvidia-driver-535

再起動後、以下を実行し、インストールを確認します。

Sun Dec 22 23:10:42 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  Tesla T4                       Off | 00000001:00:00.0 Off |                    0 |
| N/A   47C    P8              10W /  70W |      2MiB / 15360MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

Docker のインストール

公式ドキュメントに従ってインストールします。

https://docs.docker.com/engine/install/ubuntu/

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

# Add Docker's official GPG key:
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

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo docker run hello-world

azureuser を Docker Group に追加します。その後、Docker の再起動を行います。

sudo usermod -aG docker $USER
newgrp docker
sudo systemctl restart docker

SSH で再接続する。

NVIDIA Container Toolkit のインストール

公式ドキュメントに従ってインストールします。

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

Configuring Docker

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

docker run --rm --gpus all nvidia/cuda:12.4.1-cudnn-runtime-ubuntu22.04 nvidia-smi

==========
== CUDA ==
==========

CUDA Version 12.4.1

Container image Copyright (c) 2016-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.

This container image and its contents are governed by the NVIDIA Deep Learning Container License.
By pulling and using the container, you accept the terms and conditions of this license:
https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license

A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience.

Sun Dec 22 23:16:52 2024       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.183.01             Driver Version: 535.183.01   CUDA Version: 12.4     |
|-----------------------------------------+----------------------+----------------------+
| 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  Tesla T4                       Off | 00000001:00:00.0 Off |                    0 |
| N/A   33C    P8               9W /  70W |      2MiB / 15360MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

ドメイン設定

今回は作成するGradioアプリは、Traefikを用いてHTTPS 化します。

ここでは、Route53を用いて、仮想マシンのIPアドレスにドメインを設定します。

NDLOCRアプリの起動

ここまでが環境設定です。ここからNDLOCRアプリの起動を行います。

以下により、ソースコードをダウンロードします。

git clone --recursive https://github.com/ndl-lab/ndlocr_cli
cd ndlocr_cli

Gradioアプリのソースコードをダウンロード

以下でGradioアプリのソースコードを公開しています。

https://github.com/nakamura196/ndlocr2_gradio

これをダウンロードして、所定の場所にコピーします。

git clone https://github.com/nakamura196/ndlocr2_gradio
cp -rp ndlocr2_gradio/* .
chmod 600 ./traefik/acme.json

その後、./traefik/traefik.yml./docker-compose.yml内のドメイン名やメールアドレスを修正します。

そして、以下を実行します。

docker compose up

これにより、設定したURLで、Gradioアプリが起動します。以下が例です。

https://ndlocr.aws.ldas.jp/

まとめ

不完全な部分もあるかと思いますが、NDLOCRアプリをGradioアプリ化等において、参考になりましたら幸いです。

Discussion