転移学習により簡単に自社のアプリケーションに最適なAIモデルを生成できるNVIDIA TAO Toolkitを利用してみよう
本記事では、 学習済みのAIモデルを簡単に入手することが可能で、さらに転移学習(Transfer Learning)を加えることより、手間なく自社のアプリケーション向けのAIモデルを生成することのできる開発プラットフォーム「NVIDIA TAO Toolkit」 のセットアップ方法を解説し、 NVIDIA TAOを利用してSSD(Single Shot Multibox Detector)のAIモデルを開発する手順 について紹介します。
ハードウェアの構成
今回は以下の環境にNVIDIA TAO Toolkitをセットアップしました。
- Core i5-14500 (14cores, 20threads)
- RAM 64GB
- NVIDIA GeForce RTX3060Ti 8GB x2
- Ubuntu 22.04 LTS
- Yocto Linux等、併設する他の開発環境も考慮しました
なお、NVIDIA TAOのSystem Requirementsは以下の通りです。
※現在の私の環境ではGPUのメモリが不足しています。
- System Requirements
- 16 GB system RAM
- 16 GB of GPU RAM
- 8 core CPU
- 1 NVIDIA GPU
- 100 GB of SSD space
Ubuntu 22.04 LTSをインストールする
まず、PCに「Ubuntu22.04 LTS」をインストールします。以下のインストーラーを利用し、インストールしました。なお今回、当方の環境ではインストーラーを起動しようとすると、RTX3060Tiがブラックアウトする状態となってしまったため 「汎用グラフィックデバイスのドライバ「nouveau」を無効化する」 までの手順はRTX3060Tiを外して、マザーボード上のオンボードのHDMIポートを利用してインストールしました。
最低限必要な前準備を行う
日本語設定でインストールすると、ホームディレクトリ以下に日本語名のディレクトリが作成されてしまい、何かと不都合が生じるため xdg-user-dirs-gtk-update
を使ってディレクトリを英語名に変更します。また、以降の手順にて sudo
を利用することが多いため、 sudo
実行時にパスワードを求められないよう /etc/sudoers
に shino ALL=(ALL:ALL) NOPASSWD:ALL
の設定を追記しました。設定した後、OSを再起動します。
# ホームディレクトリ名から日本語を除外する
$ LANG=C xdg-user-dirs-gtk-update
# ユーザーからsudoをパスワード無しで実行できるようにする
$ sudo vi /etc/sudoers
# -->> 以下の行を追加する(ユーザー名がshinoの場合)
# shino ALL=(ALL:ALL) NOPASSWD:ALL
# 再起動する
$ sudo reboot
Ubuntuのパッケージをすべて更新する
続いて、Ubuntuのパッケージを最新の状態へと更新します。
# リポジトリにアクセス
$ sudo apt update
# 更新可能なパッケージをすべてアップグレード
$ sudo apt upgrade
# 再起動
$ sudo reboot
リモートから開発できるようにSSHサーバをインストールする
Ubuntuをリモートからも利用したいため openssh-server
をインストールし、SSH接続ができるように設定を行います (必須の手順ではありません) 。Visual Studio Codeや、Windowsのターミナルからパスワード入力すること無くSSH接続したい場合は、下記の記事をご参照ください。
# sshサーバをインストールします
$ sudo apt install openssh-server
# Ubuntu24.04からsshdでなくsshになっています
# ... 起動時にサービスが開始されるように設定します
$ sudo systemctl start ssh
$ sudo systemctl enable ssh
GeForce RTX3060Tiのドライバをインストールする
続いて、GPUのドライバをインストールします。
汎用グラフィックデバイスのドライバ「nouveau」を無効化する
Ubuntu 22.04には 汎用のグラフィックボード用のドライバ「nouveau」が組み込まれており、これがGeForce RTX3060Tiのインストールを阻害 します。そのため、まずnouveauを無効化します。無効化する設定を行った後に再起動することで、汎用のグラフィックボードドライバがロードされなくなります。
# ファイルを新規作成し、無効化設定を記述する
$ sudo vi /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
# 保存したらinitramfsを更新して再起動
$ sudo update-initramfs -u
# UEFI/BIOSの設定を変更するために一旦電源OFF
$ sudo poweroff
本手順を行った後は NVIDIA GeForce RTX3060Tiから映像が出力できるようになる ため、一旦電源をOFFにし、グラフィックボードを搭載し、グラフィックボードのHDMI端子とディスプレイを接続します。
Secure Bootを無効化する
NVIDIA GPUのデバイスドライバをインストールを進める前に、MotherboardのUEFI画面からSecure Bootを無効にします。UEFIを起動して Settings/Security/Secure Boot
の Secure Boot
を Diasable
にしました。Secure Bootを有効にしたままGeForceのドライバを入れる方法もあるようですが、テクニックが必要になるため、ここでは手順を省略します。
搭載されているGPUを確認し、古いドライバを除去する
NVIDIAのGPUが搭載されていることをlspciコマンドで確認します。今回の環境にはRTX3060Tiが2基搭載されていますので、以下のように2つのデバイスが検出されます。
$ lspci | grep -i vga
# 01:00.0 VGA compatible controller: NVIDIA Corporation GA103 [GeForce RTX 3060 Ti] (rev a1)
# 04:00.0 VGA compatible controller: NVIDIA Corporation GA104 [GeForce RTX 3060 Ti Lite Hash Rate] (rev a1)
GPUのドライバをインストールする前に、NVIDIAに関する古いパッケージがインストールされていないか確認し、削除します。本手順はUbuntu22.04をクリーンインストールしているため、特に削除するパッケージは存在しないはずです。
$ dpkg -l | grep nvidia
$ dpkg -l | grep cuda
$ sudo apt-get --purge remove nvidia-*
$ sudo apt-get --purge remove cuda-*
$ sudo apt-get --purge remove libcudnn*
$ sudo apt-get --purge remove cudnn-*
$ sudo apt autoremove -y
GPUに適切なドライバをインストールする
GPUのデバイスドライバが含まれているリポジトリ ppa:graphics-drivers/ppa
を add-apt-repository
で追加し、 ubuntu-drivers devices
で適切なデバイスドライバを検索し sudo apt install nvidia-driver-550
でインストールします。 本例では NVIDIA GeForce RTX 3060Ti のデバイスドライバをインストールしています。ここでは recommended
の nvidia-driver-560
ではなく、私が利用した実績のある nvidia-driver-550
を選択しました。なお、NVIDIA TAOの実行には550以上が必要です。
# Linuxカーネルのヘッダをインストールする
$ sudo apt update
$ sudo apt install linux-headers-$(uname -r)
# GPUのドライバが含まれているリポジトリをシステムに登録します
$ sudo add-apt-repository ppa:graphics-drivers/ppa
# パッケージ情報を最新にします
$ sudo apt update
# インストール可能なドライバのリストを表示します
$ ubuntu-drivers devices
# == /sys/devices/pci0000:00/0000:00:1c.4/0000:04:00.0 ==
# modalias : pci:v000010DEd00002489sv00001462sd00008D9Bbc03sc00i00
# vendor : NVIDIA Corporation
# model : GA104 [GeForce RTX 3060 Ti Lite Hash Rate]
# driver : nvidia-driver-535-server - distro non-free
# driver : nvidia-driver-535-server-open - distro non-free
# driver : nvidia-driver-535-open - distro non-free
# driver : nvidia-driver-570 - third-party non-free
# driver : nvidia-driver-535 - distro non-free
# driver : nvidia-driver-570-open - third-party non-free
# driver : nvidia-driver-545-open - third-party non-free
# driver : nvidia-driver-550 - third-party non-free
# driver : nvidia-driver-560 - third-party non-free recommended
# driver : nvidia-driver-550-open - third-party non-free
# driver : nvidia-driver-565 - third-party non-free
# driver : nvidia-driver-470 - distro non-free
# driver : nvidia-driver-545 - third-party non-free
# driver : nvidia-driver-470-server - distro non-free
# driver : nvidia-driver-565-open - third-party non-free
# driver : nvidia-driver-560-open - third-party non-free
# driver : xserver-xorg-video-nouveau - distro free builtin
# デバイスドライバをインストールする
$ sudo apt install nvidia-driver-550
# initramfsを更新します
$ sudo update-initramfs -u
# システムを再起動します
$ sudo reboot
GPUを認識できることを確認する
nvidia-smi
を実行し、GPUの情報が出力されればインストールは成功しています。
$ nvidia-smi
# Fri Feb 7 20:45:03 2025
# +-----------------------------------------------------------------------------------------+
# | NVIDIA-SMI 550.144.03 Driver Version: 550.144.03 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 NVIDIA GeForce RTX 3060 Ti Off | 00000000:01:00.0 On | N/A |
# | 0% 34C P8 6W / 200W | 195MiB / 8192MiB | 0% Default |
# | | | N/A |
# +-----------------------------------------+------------------------+----------------------+
# | 1 NVIDIA GeForce RTX 3060 Ti Off | 00000000:04:00.0 Off | N/A |
# | 37% 32C P8 8W / 200W | 9MiB / 8192MiB | 0% Default |
# | | | N/A |
# +-----------------------------------------+------------------------+----------------------+
#
# +-----------------------------------------------------------------------------------------+
# | Processes: |
# | GPU GI CI PID Type Process name GPU Memory |
# | ID ID Usage |
# |=========================================================================================|
# | 0 N/A N/A 1490 G /usr/lib/xorg/Xorg 70MiB |
# | 0 N/A N/A 1684 G /usr/bin/gnome-shell 117MiB |
# | 1 N/A N/A 1490 G /usr/lib/xorg/Xorg 4MiB |
# +-----------------------------------------------------------------------------------------+
GPUを使うためのライブラリ群をインストールする
続いてNVIDIA TAOを利用するために必要なパッケージをインストールします。 今回は、以下の6種類のパッケージをインストールしました。 これらのパッケージは NVIDIA TAOが転移学習を実行しようとした際に呼び出され、AIモデルの開発環境として機能します。 NVIDIA TAOから入手できるAIモデルを内包したJupyter Notebook形式のPythonスクリプトは、これらのパッケージがインストールされているものとして機能するため、 これらのインストールが不完全な状態でNVIDIA TAOを実行すると、TAOの実行中にエラーが発生します。
- CUDA ... GPUへアクセスするためにインストール
- cuDNN ... Neural NetworkからCUDAへアクセスするためにインストール
- Docker ... NVIDIA TAOを実行するための仮想環境として追加
- NVIDIA Container Toolkit ... Docker上からGPUを利用するために必要
- NGC CLI ... NGC (NVIDIA GPU Cloud) を連携するためのCLIツール
- Anaconda3 ... NVIDIA TAOと連携するための仮想環境も作成する
1. CUDAをインストールする
まず、プログラムがGPUへアクセスするためのパッケージ「CUDA」をインストールします。 下記のWebサイトを参考に、表示されるコマンドを入力することでインストールすることができます。 インストールの際は「Ubuntu22.04」を選択してください。
# CUDAのダウンロードサイトに書かれた手順をそのまま実行
$ 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.8.0/local_installers/cuda-repo-ubuntu2204-12-8-local_12.8.0-570.86.10-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu2204-12-8-local_12.8.0-570.86.10-1_amd64.deb
$ sudo cp /var/cuda-repo-ubuntu2204-12-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
$ sudo apt-get -y install cuda-toolkit-12-8
インストール後、CUDAのツールにパスを通します。
# 最後の行に下記の2行を追加する
$ vi ~/.bashrc
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
# 設定した環境変数を反映させます
$ source ~/.bashrc
nvcc
コマンドでCUDAの情報が出てくればインストールに成功しています。
$ nvcc -V
# nvcc: NVIDIA (R) Cuda compiler driver
# Copyright (c) 2005-2025 NVIDIA Corporation
# Built on Wed_Jan_15_19:20:09_PST_2025
# Cuda compilation tools, release 12.8, V12.8.61
# Build cuda_12.8.r12.8/compiler.35404655_0
2. cuDNNをインストールする
続いて、ディープニューラルネットワーク(DNN)がCUDAを利用するためのパッケージ「cuDNN」をインストールします。 下記のWebサイトを参考に、表示されるコマンドを入力することでインストールすることができます。
# cuDNNのダウンロードサイトに書かれた手順をそのまま実行します
$ wget https://developer.download.nvidia.com/compute/cudnn/9.7.1/local_installers/cudnn-local-repo-ubuntu2204-9.7.1_1.0-1_amd64.deb
$ sudo dpkg -i cudnn-local-repo-ubuntu2204-9.7.1_1.0-1_amd64.deb
$ sudo cp /var/cudnn-local-repo-ubuntu2204-9.7.1/cudnn-*-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
$ sudo apt-get -y install cudnn
$ sudo apt-get -y install cudnn-cuda-12
3. Dockerをインストールする
NVIDIA TAOから呼び出される、仮想環境のDockerをインストールします。Dockerのインストールは以下の公式サイトを参考に、Ubuntuのパッケージ管理ツールがaptであるため 「Installation methods -> install using the apt repository」の手順 でインストールします。なお、Dockerはデフォルトで特権ユーザー(root)のみが実行可能で、他のユーザーからは sudo
を付与して実行するようになっています。毎回 sudo
を付けることは面倒なため、通常ユーザーからも sudo
無しでDockerを制御できるよう設定を加えます。
# 古いパッケージを削除する
$ for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
# 必要なパッケージをインストールする
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl
# インストール時に使用するGPG鍵をシステムに追加する
$ 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
# Dockerをインストールする元のリポジトリをシステムに追加する
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Dockerエンジンのインストール
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Dockerが動くことを確認する
$ sudo docker run --rm hello-world
# latest: Pulling from library/hello-world
# c1ec31eb5944: Pull complete
# Digest: sha256:305243c734571da2d100c8c8b3c3167a098cab6049c9a5b066b6021a60fcb966
# Status: Downloaded newer image for hello-world:latest
# Hello from Docker!
# ...
# 非rootユーザーもDockerを操作できるようにする
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
$ newgrp docker
# Linux起動時にDockerサービスが起動するよう設定する
$ sudo systemctl start docker.service
$ sudo systemctl enable docker.service
$ sudo systemctl start containerd.service
$ sudo systemctl enable containerd.service
# 再起動
$ sudo reboot
再起動後、dockerコマンドをsudo無しで実行できるか確認します。
$ docker run --rm hello-world
# latest: Pulling from library/hello-world
# c1ec31eb5944: Pull complete
# Digest: sha256:305243c734571da2d100c8c8b3c3167a098cab6049c9a5b066b6021a60fcb966
# Status: Downloaded newer image for hello-world:latest
# Hello from Docker!
# ...
4. NVIDIA Container Toolkitをインストールする
NVIDIA Container Toolkitはコンテナ(Docker)の内部から、ホストPCに搭載されたGPUを利用するために必要なパッケージです。下記のWebサイトを参考にインストールを行います。 NVIDIA Container Toolkitのインストール後は、PyTorchのコンテナを利用して、コンテナ内からGPUにアクセスできることを確認 しましょう。
# 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
$ sudo sed -i -e '/experimental/ s/^#//g' /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.
# Dockerサービスを再起動する
$ 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"]
}
# Dockerサービスを再起動する
$ sudo systemctl restart docker
# Dockerにプロセス管理機能cgroup設定が結びつけられていることを確認する
$ docker info | grep Cgroup
# Cgroup Driver: cgroupfs
# Cgroup Version: 2
コンテナからGPUへアクセスできることを確認する
コンテナからGPUを利用できることの確認は、以下の 「pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel」 コンテナを利用します。 --gpu all
オプションをつけることで、ホストの持つすべてのGPUリソースをコンテナへ提供することが可能です。
# Dockerコンテナを取得して、コンテナにすべてのGPUを接続する
(host) $ docker run --rm -it --gpus all pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel
# コンテナにログインできた
(container) $
# ログイン中のユーザーを確認する
(container) $ whoami
root
# 開発ツールのバージョンを確認する
(container) $ /usr/local/cuda/bin/nvcc --version
# nvcc: NVIDIA (R) Cuda compiler driver
# Copyright (c) 2005-2024 NVIDIA Corporation
# Built on Thu_Mar_28_02:18:24_PDT_2024
# Cuda compilation tools, release 12.4, V12.4.131
# Build cuda_12.4.r12.4/compiler.34097967_0
# nvidia-smiでGPUリソースを確認する
(container) $ nvidia-smi
Fri Feb 7 12:22:02 2025
# +-----------------------------------------------------------------------------------------+
# | NVIDIA-SMI 550.144.03 Driver Version: 550.144.03 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 NVIDIA GeForce RTX 3060 Ti Off | 00000000:01:00.0 Off | N/A |
# | 0% 36C P8 5W / 200W | 159MiB / 8192MiB | 0% Default |
# | | | N/A |
# +-----------------------------------------+------------------------+----------------------+
# | 1 NVIDIA GeForce RTX 3060 Ti Off | 00000000:04:00.0 Off | N/A |
# | 37% 29C P8 8W / 200W | 9MiB / 8192MiB | 0% Default |
# | | | N/A |
# +-----------------------------------------+------------------------+----------------------+
#
# +-----------------------------------------------------------------------------------------+
# | Processes: |
# | GPU GI CI PID Type Process name GPU Memory |
# | ID ID Usage |
# |=========================================================================================|
# +-----------------------------------------------------------------------------------------+
# コンテナから抜ける
(container) $ exit
# ホストでプロセスやコンテナが残っていないか確認する
(host) $ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
(host) $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5. NGC CLIをインストールする
続いて、AIモデル等をNVIDIAのクラウド 「NGC (NVIDIA GPU Cloud)」 から入手するために利用する NGC CLI のセットアップを行います。まず、zip形式のNGC CLIをダウンロードし、展開した後、パスを通します。
# 自身のホームディレクトリにNGC CLIをインストールする
$ cd ~
# NGC CLIをダウンロードする
$ wget --content-disposition https://api.ngc.nvidia.com/v2/resources/nvidia/ngc-apps/ngc_cli/versions/3.59.0/files/ngccli_linux.zip -O ngccli_linux.zip && unzip ngccli_linux.zip
# md5sumを参照し、破損していないことを確認する
$ find ngc-cli/ -type f -exec md5sum {} + | LC_ALL=C sort | md5sum -c ngc-cli.md5
# sha256sumを参照し、破損していないことを確認する
$ sha256sum ngccli_linux.zip
# 87f03dab6d05e97547fb213ee4932654b3f6fccf82ca75f470d5cd3a4e8be8be ngccli_linux.zip
# NGC CLIに実行権限を付与してパスを通す
$ chmod u+x ngc-cli/ngc
$ echo "export PATH=\"\$PATH:$(pwd)/ngc-cli\"" >> ~/.bashrc && source ~/.bashrc
続いて、 ブラウザでNGCにアクセス し、アクセストークンと呼ばれる NGCへログインするための鍵を取得して ngc config set
コマンドを利用してNGC CLIに鍵を登録 します。NGCへログインするための鍵は、下記の手順で入手することが可能です。 本手順を行うには、NGCのユーザー登録[無料]が必要です。
ブラウザを使って作成したNGCへログインするための鍵をNGC CLIへ登録します。
# NGCへログインするための情報を設定する
$ ngc config set
# NGC Catalog -> Account -> Setup -> Generate API Key
Enter API key [no-apikey]. Choices: [<VALID_APIKEY>, 'no-apikey']: dGdzM3EwYW0zcWUwaGtua2IyMmo4bHExNXE6ODFhOGQ2OGItMzE5...
# Select "ascii"
Enter CLI output format type [ascii]. Choices: ['ascii', 'csv', 'json']:
# Select UserName
Enter org [no-org]. Choices: ['xtrize (063599036568----)']: xtrize (063599036568----)
# Select team
Enter team [no-team]. Choices: ['no-team']:
# Select ace
Enter ace [no-ace]. Choices: ['no-ace']:
# Validating configuration...
# Successfully validated configuration.
# Saving configuration...
# Successfully saved NGC configuration to /home/shino/.ngc/config
#
$ docker login nvcr.io
# Username: $oauthtoken
# Password: <Set NGC API Key>
# WARNING! Your password will be stored unencrypted in /home/shino/.docker/config.json.
# Configure a credential helper to remove this warning. See
# https://docs.docker.com/engine/reference/commandline/login/#credential-stores
#
# Login Succeeded
# ...
6. Anacondaをインストールする
NVIDIA TAOを実行するには、Pythonの仮想環境を作成する必要があります。今回は、 Pythonの仮想環境を操作するためのミドルウェアとして「Anaconda3」を利用することにしました。 なお、NVIDIAが紹介している手順では miniconda
を利用していました(どちらでもあまり大差はないと思われます)。
### Anaconda3をダウンロードする
$ cd ~/Downloads
$ wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
### インストーラに実行権限を付与する
$ chmod +x ~/Downloads/Anaconda3-2024.10-1-Linux-x86_64.sh
### インストーラを実行する
$ ~/Downloads/Anaconda3-2024.10-1-Linux-x86_64.sh
# Welcome to Anaconda3 2024.10-1
#
# In order to continue the installation process, please review the license
# agreement.
# Please, press ENTER to continue
# >>>
# ...
# [/home/shino/anaconda3] >>>
# ...
# Do you wish to update your shell profile to automatically initialize conda?
# This will activate conda on startup and change the command prompt when activated.
# If you'd prefer that conda's base environment not be activated on startup,
# run the following command when conda is activated:
#
# conda config --set auto_activate_base false
#
# You can undo this by running `conda init --reverse $SHELL`? [yes|no]
# [no] >>>
# ...
# conda init
#
# Thank you for installing Anaconda3!
### パスを通す
$ vi ~/.bashrc
# 最後に以下の1行を追加する
export PATH="$PATH:/home/shino/anaconda3/bin"
### 環境変数を読み込みなおす
$ source ~/.bashrc
### Anacondaの初期設定を実行する
$ conda init
# no change /home/shino/anaconda3/condabin/conda
# no change /home/shino/anaconda3/bin/conda
# no change /home/shino/anaconda3/bin/conda-env
# no change /home/shino/anaconda3/bin/activate
# no change /home/shino/anaconda3/bin/deactivate
# no change /home/shino/anaconda3/etc/profile.d/conda.sh
# no change /home/shino/anaconda3/etc/fish/conf.d/conda.fish
# no change /home/shino/anaconda3/shell/condabin/Conda.psm1
# no change /home/shino/anaconda3/shell/condabin/conda-hook.ps1
# no change /home/shino/anaconda3/lib/python3.12/site-packages/xontrib/conda.xsh
# no change /home/shino/anaconda3/etc/profile.d/conda.csh
# modified /home/shino/.bashrc
#
# ==> For changes to take effect, close and re-open your current shell. <==
### bashrcに以下のコードブロックが増えていることを確認する
$ vi ~/.bashrc
# # >>> conda initialize >>>
# # !! Contents within this block are managed by 'conda init' !!
# __conda_setup="$('/home/shino/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
# if [ $? -eq 0 ]; then
# eval "$__conda_setup"
# else
# if [ -f "/home/shino/anaconda3/etc/profile.d/conda.sh" ]; then
# . "/home/shino/anaconda3/etc/profile.d/conda.sh"
# else
# export PATH="/home/shino/anaconda3/bin:$PATH"
# fi
# fi
# unset __conda_setup
# # <<< conda initialize <<<
### bash初期化スクリプトを再度読み込む
$ source ~/.bashrc
### Anacondaが有効になることを確認する
(base) $
以上で、MVIDIA TAOを利用する準備が整いました。
NVIDIA TAOをインストールする
それでは早速、NVIDIA TAOをインストールしていきましょう。
NGCと連携するためのPython仮想環境を作成する
NVIDIA TAOはPythonの仮想環境の中で実行します。 そこで、まずNVIDIA TAO向けにPythonの仮想環境(環境名:launcher)を作成します。NVIDIA TAOは Jupyter Notebook
でユーザーに学習済みのAIモデルを提供するため、新しいPythonの仮想環境を作成し ipykernal
をインストールします。手順は以下の通りです。
### Python3.10ベースの仮想環境を作成する
(base) $ conda create -n launcher python=3.10
### Pythonの仮想環境を有効化する
(base) $ conda activate launcher
(launcher) $
### jupyter notebook用にipykernelをインストールする
(launcher) $ python -m pip install ipykernel
(launcher) $ python -m ipykernel install --user --name launcher --display-name "launcher"
######
### NVIDIA TAOを利用するときはこのPython仮想環境を利用します
######
NVIDIA TAOを入手する
NVIDIA TAOは、先の手順で作成したPythonの仮想環境上で実行します。 ipykernel
以外のPythonのパッケージをインストールしていないことに驚くかもしれませんが、NVIDIA TAOの提供するAIモデルを記述した Jupyter Notebook
の中にインストールスクリプトが封入されており、NVIDIA TAOの提供する学習済みのAIモデルをJupyter Notebookで実行する際にはじめて必要なパッケージがインストールされます。
NVIDIA TAOは、下記のサイトにて提供されている 「tao_tutorials.git」を利用 することによりインストールできます。
### NVIDIA TAOのインストールスクリプトを入手する
(launcher) $ cd ~
(launcher) $ git clone https://github.com/NVIDIA/tao_tutorials.git
(launcher) $ cd tao_tutorials
### インストールスクリプトの内容を確認する
(launcher) $ ls ./setup
# quickstart_api_aws_eks quickstart_api_bare_metal quickstart_launcher.sh
# quickstart_api_azure_aks quickstart_api_gcp_gke
### NVIDIA TAOをインストールする
(launcher) $ bash setup/quickstart_launcher.sh --install
# INFO: Check requirements
# INFO: Checking Python installation
# INFO: python3 found.
# INFO: Python version: Python 3.10.16
# INFO: pip3 found.
# INFO: Pip version: pip 25.0 from /home/shino/anaconda3/envs/launcher/lib/python3.10/site-packages/pip (python 3.10)
# INFO: Docker found. Checking additional requirements for docker.
# INFO: Checking nvidia-docker2 installation
# ERROR: nvidia-docker not found.
# INFO: NGC CLI found.
# INFO: NGC CLI 3.59.0
# INFO: Requirements check satisfied. Installing TAO Toolkit.
# By installing the TAO Toolkit CLI, you accept the terms and conditions of this license: https://developer.nvidia.com/tao-toolkit-software-license-agreement
# Would you like to continue? (y/n): y
# ...
# task_group:
# model:
# dockers:
# nvidia/tao/tao-toolkit:
# 5.5.0-pyt:
# docker_registry: nvcr.io
# tasks:
# 1. action_recognition
# 2. centerpose
# 3. visual_changenet
# ...
# 18. segformer
# 19. bevfusion
# 5.0.0-tf1.15.5:
# docker_registry: nvcr.io
# tasks:
# 1. bpnet
# 2. classification_tf1
# 3. converter
# 4. detectnet_v2
# ...
# 16. yolo_v4
# 17. yolo_v4_tiny
# 5.5.0-tf2:
# docker_registry: nvcr.io
# tasks:
# 1. classification_tf2
# 2. efficientdet_tf2
# dataset:
# dockers:
# nvidia/tao/tao-toolkit:
# 5.5.0-data-services:
# docker_registry: nvcr.io
# tasks:
# 1. augmentation
# 2. auto_label
# 3. annotations
# 4. analytics
# deploy:
# dockers:
# nvidia/tao/tao-toolkit:
# 5.5.0-deploy:
# docker_registry: nvcr.io
# tasks:
# 1. visual_changenet
# 2. centerpose
# 3. classification_pyt
# 4. classification_tf1
# 5. classification_tf2
# ...
# 28. yolo_v3
# 29. yolo_v4
# 30. yolo_v4_tiny
# format_version: 3.0
# toolkit_version: 5.5.0
# published_date: 08/26/2024
# ...
### NVIDIA TAOのコマンドを実行できることを確認する
(launcher) $ tao --help
# ~/.tao_mounts.json wasn't found. Falling back to obtain mount points and docker configs from ~/.tao_mounts.json.
# Please note that this will be deprecated going forward.
# usage: tao [-h] {list,stop,info,dataset,deploy,model} ...
#
# Launcher for TAO Toolkit.
#
# options:
# -h, --help show this help message and exit
#
# task_groups:
# {list,stop,info,dataset,deploy,model}
NVIDIA TAOを利用する
インストールしたNVIDIA TAOは Jupyter Notebook
を介して利用します。
TAOを使った開発をはじめる
まず jupyter notebook
コマンドにより、PythonでAIモデルを開発するためのWebサーバーを起動し、起動ログの中にあるURLをブラウザで開く ことにより、NVIDIA TAOの開発環境にログインできます。Webサーバーのアドレスは jupyter notebook
コマンド実行時のログに出力されますので、URLをブラウザへコピーして利用してください。本例ではhttp://127.0.0.1:8888/tree?token=3af74c44e870b074eef05cdef606b2cbf2441a1698d522ee
となっています。
### NVIDIA TAO の notebookを開く
(launcher) $ jupyter notebook --ip 0.0.0.0 --port 8888 --allow-root
# [W 2025-02-07 22:37:37.204 ServerApp] A `_jupyter_server_extension_points` function was not found in jupyter_lsp. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.
# [W 2025-02-07 22:37:37.260 ServerApp] A `_jupyter_server_extension_points` function was not found in notebook_shim. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.
# [I 2025-02-07 22:37:37.597 ServerApp] Extension package panel.io.jupyter_server_extension took 0.3366s to import
# ...
# [I 2025-02-07 22:37:37.734 ServerApp] Jupyter Server 2.14.1 is running at:
# [I 2025-02-07 22:37:37.734 ServerApp] http://shino-Ubu22-devel:8888/tree?token=3af74c44e870b074eef05cdef606b2cbf2441a1698d522ee
# [I 2025-02-07 22:37:37.734 ServerApp] http://127.0.0.1:8888/tree?token=3af74c44e870b074eef05cdef606b2cbf2441a1698d522ee
# [I 2025-02-07 22:37:37.734 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
# ...
### -->> ブラウザから以下にアクセスする
### -->> http://127.0.0.1:8888/tree?token=3af74c44e870b074eef05cdef606b2cbf2441a1698d522ee
ブラウザで jupyter notebook
を開くと以下の画面が表示されます。
notebooks/tao_launcher_starter_kit
に様々なモデルが格納されています。
これらのモデルを開くと、学習済みAIモデルの使い方や、AIモデルを利用するまでに必要な手順を見ることができます。以下の例は classification_tf2/tao_voc/classification.ipynb
を開いた際の表示内容です。 これらは .ipynb
形式のスクリプトであるため、説明文を読みながら、実際のAIモデルの開発を進めることが可能です。
NGC (NVIDIA GPU Cloud) を活用する
上記の例ではNVIDIA TAOからNGCにあるAIモデルを参照しましたが、NGC CLIを使うことにより、さらに自由に学習済みのAIモデルを入手することが可能です。
NGCからAIモデルを入手する
NVIDIA TAOのテンプレートに含まれていないAIモデルも、NGC CLIを利用することにより、NGC (NVIDIA GPU Cloud) からダウンロードすることが可能です。 入手できるAIモデルは ngc registry model list
コマンドにて確認することができます。 pretrained_*
以下に含まれているAIモデルが、事前学習済みのAIモデルです。 以下の例では resnet18
をベースとした pretrained_classification
をローカルに入手しています。ここでダウンロードされたAIモデルは resnet_18.hdf5
であり、TensorFlow形式のモデルとなっています。
# ダウンロードできるモデルを検索する
(launcher) $ ngc registry model list nvidia/tao/pretrained_*
# +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------+---------------+------------+-------------+---------------------+
# | Name | Repository | Latest Version | Application | Framework | Precision | Last Modified | Permission | Access Type | Associated Products |
# +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------+---------------+------------+-------------+---------------------+
# | Pre-trained SegFormer | nvidia/tao/pretrained | fan_large_hybrid_nvim | Semantic Segmentation | TAO Toolkit | FP32 | Oct 16, 2023 | unlocked | | |
# | NvImageNet weights | _segformer_nvimagenet | agenet | | | | | | | |
# | TAO Pretrained | nvidia/tao/pretrained | efficientnet_b0 | OBJECT_DETECTION | TransferLearningToolk | FP32 | Dec 13, 2022 | unlocked | | |
# | EfficientDet-TF2 | _efficientdet_tf2 | | | it | | | | | |
# ...
# モデルをインストールするディレクトリを作成する
(launcher) $ mkdir -p ~/sandbox/pretrained_resnet18
# NGCからモデルをダウンロードする
(launcher) $ ngc registry model download-version nvidia/tao/pretrained_classification:resnet18 --dest ~/sandbox/pretrained_resnet18
# Getting files to download...
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ • 89.0/89.0 MiB • Remaining: 0:00:00 • 35.2 MB/s • Elapsed: 0:00:05 • Total: 1 - Completed: 1 - Failed: 0
#
# -----------------------------------------------------------------------------------------------------------
# Download status: COMPLETED
# Downloaded local path model: /home/shino/sandbox/pretrained_resnet18/pretrained_classification_vresnet18
# Total files downloaded: 1
# Total transferred: 88.96 MB
# Started at: 2025-02-07 22:58:29
# Completed at: 2025-02-07 22:58:35
# Duration taken: 5s
# -----------------------------------------------------------------------------------------------------------
# モデルをインストールしたディレクトリの内容を確認する
$ ls /home/shino/sandbox/pretrained_resnet18/pretrained_classification_vresnet18
# resnet_18.hdf5
ダウンロードした学習済みAIモデルをTensorFlow上にロードする
ダウンロードした学習済みのAIモデルを利用してみましょう。まず、ダウンロードされたAIモデルはhdf5形式であり、これはTensorFlow用のものであるため、 Anacondaを使って、TensorFlow(gpu)を含むPythonの仮想環境を作成 し、ロードします。まず以下を参考に、Pythonの仮想環境「first_tensorflow」を新たに作成し、TensorFlow(gpu)とあわせて、AI/MLの分野でよく利用されるいくつかのパッケージを仮想環境にインストールしてください。
# Python仮想環境を作成する
$ conda create --name first_tensorflow tensorflow=*=gpu_*
# ...
# Python仮想環境にログインする
$ conda activate first_tensorflow
# Pythonのバージョンを確認する
(first_tensorflow) $ python --version
# Python 3.10.13
# 必要なライブラリをインストールする
(first_tensorflow) $ pip install ipykernel
(first_tensorflow) $ pip install numpy
(first_tensorflow) $ pip install matplotlib
(first_tensorflow) $ pip install pillow
(first_tensorflow) $ pip install opencv-python
作成後、先の手順でダウンロードした resnet18
をTensorFlow.kerasのAIモデルのロード機能 tf.keras.models.load_model
により展開すると model.summary()
にてAIモデルを取得できていることを確認することができます。
# モデルをダウンロードしたディレクトリへ移動する
$ cd ~/sandbox/pretrained_resnet18/pretrained_classification_vresnet18
# 開発用のPythonの仮想環境を有効化する
$ conda activate first_tensorflow
# Pythonを起動する
(first_tensorflow) $ python
# TensorFlowをimportする
>>> import tensorflow as tf
# GPUリソースが利用できることを確認する
>>> tf.config.list_physical_devices('GPU')
# [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), PhysicalDevice(name='/physical_device:GPU:1', device_type='GPU')]
# ダウンロードしたモデルをロードする
>>> new_model = tf.keras.models.load_model('resnet_18.hdf5')
# モデルの内容を確認する
>>> new_model.summary()
# Model: "resnet18_nopool_bn"
# __________________________________________________________________________________________________
# Layer (type) Output Shape Param # Connected to
# ==================================================================================================
# input_1 (InputLayer) [(None, 3, 224, 224 0 []
# )]
#
# conv1 (Conv2D) (None, 64, 112, 112 9408 ['input_1[0][0]']
# )
#
# bn_conv1 (BatchNormalization) (None, 64, 112, 112 256 ['conv1[0][0]']
# )
#
# ...
# add_8 (Add) (None, 512, 14, 14) 0 ['block_4b_bn_2[0][0]',
# 'block_4b_bn_shortcut[0][0]']
#
# block_4b_relu (Activation) (None, 512, 14, 14) 0 ['add_8[0][0]']
#
# avg_pool (AveragePooling2D) (None, 512, 1, 1) 0 ['block_4b_relu[0][0]']
#
# flatten (Flatten) (None, 512) 0 ['avg_pool[0][0]']
#
# predictions (Dense) (None, 176) 90288 ['flatten[0][0]']
#
# ==================================================================================================
# Total params: 11,632,752
# Trainable params: 11,621,104
# Non-trainable params: 11,648
# __________________________________________________________________________________________________
# 利用できることが確認できたので終了する
>>> quit()
NGCでModelを検索しダウンロードする
ngc registry model list
コマンドを利用してAIモデルをダウンロードする以外にも、NGC Catalogから直接AIモデルを検索しNGC CLIを用いてダウンロードすることができます。以下の例は NGCのModelの中から「PeopleNet」を検索し、ダウンロードする手順 です。
ダウンロードしたいモデルを発見できたならば、画面右上の「Download」をクリックし「CLI」を選択することにより、ダウンロードするために必要なNGC CLIのコマンドを取得することができます。 コマンドを取得した後、これをUbuntuのターミナルで実行します。
以下がAIモデルのダウンロード手順です。
AIモデルは「ONNX」形式でダウンロードされます。
### 作業ディレクトリを作成する
(base) $ mkdir ~/sandbox
### 作業ディレクトリへ移動する
(base) $ cd ~/sandbox
### 作業ディレクトリの内容を確認する
(base) $ ls
### NGC Caralogからコピーしたダウンロードコマンドを実行する
(base) $ ngc registry model download-version "nvidia/tao/peoplenet:pruned_quantized_decrypted_v2.3.4"
# Getting files to download...
# ━━━━━━━━━━━━━━━ • 8.4/8.4 MiB • Remaining: 0:00:00 • 8.7 MB/s • Elapsed: 0:00:02 • Total: 4 - Completed: 4 - Failed: 0
#
# ------------------------------------------------------------------------------------------------
# Download status: COMPLETED
# Downloaded local path model: /home/shino/sandbox/peoplenet_vpruned_quantized_decrypted_v2.3.4
# Total files downloaded: 4
# Total transferred: 8.4 MB
# Started at: 2025-02-08 10:16:16
# Completed at: 2025-02-08 10:16:18
# Duration taken: 2s
# ------------------------------------------------------------------------------------------------
### ダウンロード後、内容を確認する
(base) $ ls
# peoplenet_vpruned_quantized_decrypted_v2.3.4
### ONNX形式のAIモデルを入手できている
(base) $ ls peoplenet_vpruned_quantized_decrypted_v2.3.4/
# labels.txt nvinfer_config.txt resnet34_peoplenet_int8.onnx resnet34_peoplenet_int8.txt
Netronを利用することで、ダウンロードされたAIモデルの内容を確認できます。このAIモデルも事前学習済みのモデルであるため、 以降は、学習用のデータセット等を別途集めることなく、ONNXを利用し、実際のアプリケーションの開発にすぐに着手することができます。
本記事の手順により、NVIDIA TAOやNGC CLI等をセットアップし、利用することで、 学習済みのAIモデルを簡単に入手し、AIアプリケーションを効率的に開発することができます。 学習済みのAIモデルを利用することにより 転移学習 (transfer learning) もできるため、より早く精度の高いAIモデルを開発に利用することが可能となります。NVIDIA TAOは多くのツールセットを必要としますが、一度導入してしまえば、後は手間なく運用できるため、是非一度NGCやNVIDIA TAOをインストールし、お試しください。
転移学習とは
以降の記事では実際に NVIDIA TAOを利用してSSD(Single Shot Multibox Detector:物体検出)のAIモデルを開発するフロー を紹介いたします。
NVIDIA TAOを利用してAIモデルを開発する
それでは、インストールしたNVIDIA TAOでAIモデルを開発してみましょう。
- Core i5-14500 (14cores, 20threads)
- RAM 64GB
- NVIDIA GeForce RTX3060Ti 8GB x2
- System Requirenments(=16GB)に満たないメモリを搭載したGPU
### 作業用ディレクトリを作成する
mkdir -p ~/sandbox_tao_tutorial/
Pythonの仮想環境を有効化する
まず、NVIDIA TAOを実行するために必要なPythonの仮想環境「launcher」をactivateします。その後、 tao_tutorials
ディレクトリにて jupyter notebook
を実行し、ブラウザからNVIDIA TAOへアクセスできるようにします。
(base) $ conda activate launcher
(launcher) $ cd ~
(launcher) $ cd tao_tutorials/
(launcher) $ jupyter notebook --ip 0.0.0.0 --port 8888 --allow-root
# [I 2025-02-08 12:28:29.403 ServerApp] http://shino-Ubu22-devel:8888/tree?token=d0943ab5b36f7e39133dfef8c902bd8afe07c560c883a0c4
# [I 2025-02-08 12:28:29.403 ServerApp] http://127.0.0.1:8888/tree?token=d0943ab5b36f7e39133dfef8c902bd8afe07c560c883a0c4
# [I 2025-02-08 12:28:29.403 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
NVIDIA TAO x SSD
ブラウザでNVIDIA TAOを開いた後に notebooks
を開きます。
次に tao_launcher_starter_kit
を選択。
今回扱うAIモデルの ssd
を選択。
開発用のJupyter Notebook形式のスクリプト ssd.ipynb
を開きます。
ssd.ipynb
を開くと、以下のように、ドキュメントの同梱されたスクリプトが表示されます。NVIDIA TAOでは、このようなスクリプトに対して、画面上部の再生ボタンをクリックしながら、順次処理を加えていくことによりAIモデルを開発できます。
コードブロックに変更を加えながら、実行する
まず作業ディレクトリを作成し、コードに作業ディレクトリのパスを記入します。
$ mkdir -p ~/sandbox_tao_tutorial/tao_ssd/data/tlt-experiments
$ cd ~/sandbox_tao_tutorial/tao_ssd/data/tlt-experiments
$ pwd
# /home/shino/sandbox_tao_tutorial/tao_ssd/data/tlt-experiments
コードブロックでは、必要なパッケージのインストールなども行われます。
データセットをダウンロードする
以下のコードブロックでは、AIモデルの学習に利用するデータセットのダウンロードが求められています。 指定されているURLのデータセットを、先の手順で作成した作業ディレクトリ上に格納 します。
# 作業ディレクトリへ移動する
$ cd ~/sandbox_tao_tutorial/tao_ssd/data/tlt-experiments
# データを格納するディレクトリへ移動する
$ cd data/
# 学習用データをダウンロードする
$ wget https://s3.eu-central-1.amazonaws.com/avg-kitti/data_object_image_2.zip
$ wget https://s3.eu-central-1.amazonaws.com/avg-kitti/data_object_label_2.zip
これにより、以下のように データセットが作業ディレクトリ内に展開 されます。
※作業ディレクトリのパスが絶対パスでない場合エラーとなることがあります
そして、以下のコードブロックでデータセットを生成します。
学習済みのAIモデルをダウンロードする
SSD.ipynb
では、NGC CLIを利用して、NGCから学習済みのAIモデルを取得します。
AIモデルの学習をする
AIの学習を実行します。今回利用するワークステーションにはRTX3060Tiが2基搭載されていますので tao model ssd train
に指定する利用するGPUを選択するためのパラメータを、1基の構成である --gpus 1 --gpu_index $GPU_INDEX
から、2基の構成である --gpus 2 --gpu_index 0 1
へと変更しました。
これにより、学習中のGPU使用率は以下のようになりました。2基のGPUを十分に利用できています。 もし1基のGPU上のメモリなどを十分に消費できていない、または、GPUのメモリからAIモデルが溢れるようであれば、学習に利用しているパラメータである ssd_train_resnet18_kitti.txt
に指定されている training_config
内の batch_size_per_gpu: 16
をチューニングする と良いでしょう。
学習結果は以下のディレクトリへ蓄積されます。
# 作業ディレクトリへ移動する
$ cd ~/sandbox_tao_tutorial/tao_ssd/data/tlt-experiments/
# 学習に利用するモデルを確認する
$ ls ssd/pretrained_resnet18/pretrained_object_detection_vresnet18/
# resnet_18.hdf5
# 作業ディレクトリへ移動する
$ cd ~/sandbox_tao_tutorial/tao_ssd/data/tlt-experiments/
# 学習結果を格納するディレクトリを確認する
$ cd ssd/experiment_dir_unpruned/
$ ls ./weight
# ssd_resnet18_epoch_001.hdf5 ssd_resnet18_epoch_005.hdf5 ssd_resnet18_epoch_009.hdf5 ssd_resnet18_epoch_013.hdf5
# ssd_resnet18_epoch_002.hdf5 ssd_resnet18_epoch_006.hdf5 ssd_resnet18_epoch_010.hdf5 ssd_resnet18_epoch_014.hdf5
# ssd_resnet18_epoch_003.hdf5 ssd_resnet18_epoch_007.hdf5 ssd_resnet18_epoch_011.hdf5 ssd_resnet18_epoch_015.hdf5
# ssd_resnet18_epoch_004.hdf5 ssd_resnet18_epoch_008.hdf5 ssd_resnet18_epoch_012.hdf5 ssd_resnet18_epoch_016.hdf5
# ...
プルーニング(枝刈り)を実行する
NVIDIA TAO Toolkitは、 プルーニング (Pruning) によりAIモデルを構成する重み値を削減し、演算量を最適化する機能 も備えています。
プルーニング後、プルーニングされたモデルに対して再度学習を実行します。
推論結果を表示する
学習した結果のAIモデルを利用した推論を実行し、結果を確認します。このSSDのプログラムでは、9枚の写真に対して推論を行い、物体検出結果を得ることができます。
AIモデルをエクスポートする
ONNX形式でエクスポートする
以上の手順により NVIDIA TAOで開発したAIモデルを、他のプラットフォームでも利用できるようにexport します。以下のコードでは、開発したAIモデルを「ONNX」形式で出力しています。ONNX形式のAIモデルは、Netronにより可視化することが可能です。
### 開発ディレクトリへ移動する
$ cd ~
$ cd ~/sandbox_tao_tutorial/tao_ssd/data/tlt-experiments/ssd
### export結果を確認する
$ ls ./export
# nvinfer_config.txt ssd_resnet18_epoch_080.onnx
$ cat ./export/nvinfer_config.txt
# net-scale-factor=1.0
# offsets=103.939;116.779;123.68
# infer-dims=3;300;300
# tlt-model-key=
# network-type=0
# model-color-format=1
# maintain-aspect-ratio=0
# output-tensor-meta=0
TensorRTエンジンとしてエクスポートし、評価する
NVIDIA TAOは、ONNXの他にも TensorRTエンジンとしてAIモデルをエクスポート することが可能です。以下はTensorRTとしてエクスポートし、エクスポート結果を利用して推論するステップです。このようにNVIDIA TAOは、様々なAI実行プラットフォームに対応しているため、開発したAIモデルをとても柔軟にデプロイすることができます。
以上が NVIDIA TAOを使ってAIモデルを開発し、デプロイする方法 です。 tao_tutorial
が提供されているためJupyter Notebookを利用して、 手順を抜かすことなく、NVIDIA TAOでAIモデルを開発するフローを習得することができます。 tao_tutorial
には様々なAIモデルが含まれていますので、それについても今後の記事で試してみようと思います。
お付き合いいただきありがとうございました!
お疲れさまでした!
Jetsonとの連携
なお、 NVIDIA TAOは、NVIDIA Jetsonシリーズとも連携ができる ようです。DEEPSTREAM等のミドルウェアの知識が求められることから、試行錯誤は必要そうですが、試してみたいですね!このあたりに関しましても、機材を入手し、紹介していきたいと思います。