AIモデルが重い?そんなときは『PCAS』で○○化しよう!
こんにちは、小野です。
最近AIについてさらに勉強するべく、仕事をしつつ、AIモデルを作っていますが、早速つまずいています…。
ああもう、どうしよう!AIモデルが全然動かないよ!
画像認識のAIモデルを作ってみたんですけど、表示される映像のフレームレートが1fpsくらいにしかならないんですよ…。
なるほど。ほとんど静止画だね。このレベルでお客さんに納品なんかできるわけないね…。
辛辣すぎる…。どうにかする方法はないでしょうか…。
冗談だよ。どれどれ見せてごらんなさい。
…ふむふむ。おそらくAIモデルが大きすぎて処理が遅くなっているのが原因だね。
なるほど。でも仕方ないんじゃないですか?
世の中の代表的なAIモデルは性能が高い分、
大規模になりがちですし。
そういうのは、ユーザーがAIモデルをどうやって
適用するかが全然考えられていないことが多いからね。
ほら、エッジAIなんてよく耳にするけど、デバイスの小型化や、省電力化それからコストダウンが求められる。
クラウドやサーバーよりも、限られたリソースで処理しないといけないんだ。
そういったAIモデルをデバイスで運用する時はユーザー側で最適な方法を考えて対応していく必要がありますよね。でも、AIモデルを軽くする手法ってどんなものがあるんですか?
ということで、いくつかAIモデルの軽量化手法を紹介していこうと思います!!
過去のWebセミナーで『PCAS』をとりあげてるが、その際に軽量化アルゴリズムはおおよそ6種類に大別できると説明してるのを覚えてるかな?今回は、その中でもメジャーな量子化、知識蒸留、プルーニングの3種を紹介しよう。
その1:Quantization(量子化)
まずは軽量化手法その1、Quantize(量子化)だよ。
たとえば、重みなどのパラメータをより小さいビット数で表現することで軽量化を図る手法なんだ。コンピューターでは数値をビットで表すけど、32bitのデータを
8bitに変換すると、メモリーの使用量が減るよね。
なるほど、イメージが湧きました。
でも、精度が落ちてしまうことはないんですか?
と、思いきや、意外に大きな影響はないことが多いんだ。32bitデータを8bitデータに変換するような量子化であれば1%程度の性能低下であるという研究があるよ。
ただ、ビット数を小さくしすぎると、性能低下の影響が大きくなるから注意だぞ。
その2:Knowledge Distillation(知識蒸留)
お次はKnowledge Distillation(知識蒸留)だよ。
コラ、仕事中に酔っぱらっちゃダメだろ。
ここで言う蒸留とは、重いモデルから重要な情報だけを軽いモデルに教えるって方法なんだ。具体的には、大きな教師モデルから小さい生徒モデルが学ぶんだよ。
ええと、つまり大きなモデルを小さいモデルが真似するってことですね。
その通り!技術的には、教師モデル(Teacher Model)が出力する確率分布を生徒モデル(Student Model)が学習するんだ。この方法では、生徒モデルが教師モデルの知識を効率的に吸収できるんだ。
でも、それって大きいモデルを開発してから小さいモデルも開発しないといけないから手間がかかりそうですね。
その3:Pruning(枝切り)
他の方法はありますか?(…できれば、精度が落ちづらくて手っ取り早くてラクな手法…!)
では、そんなアナタに軽量化手法その3、Pruning(枝切り)を紹介するよ。これは、AIモデルの中で使われていない部分、つまり不要なニューロンや接続を取り除くんだ。
盆栽のお手入れで枝切りってありますよね。そんなイメージですね。このニューロンは必要、このニューロンは不要といった判断はどのように決めるんですか?
一つの方法は、重みの絶対値が小さいものを削除することだよ。推論を進めるにしたがって重みも更新されていくけど、重みが小さければ変化は小さいから…。
なるほど!すなわち、寄与度が低いと判断されるから、このニューロンを取り除けばいいんですね。
そして!
OKI独自のAIモデル軽量化技術が!
このPruningの一種である
『PCAS(Pruning Channels with Attention Status)』
なんだ!
AIモデルを軽量化する方法って色々なところで研究が進められているんだ。
この『PCAS』と他の方式で軽量化したそれぞれのAIモデルの認識精度と演算回数を見て欲しいんだ!

すごい!!!従来方式ではオリジナルのAIモデル(軽量化前)の認識精度が落ちていますけど、『PCAS』ではほとんど認識精度が落ちていないですね!!
それだけじゃないぞ、AIモデルのパラメータの数も演算回数も、どちらも50%以上削減していることが確認できたんだ。
早速『PCAS』を使って僕のモデルを軽くしたいです!どこまで軽量化できるのか試してみたいです!
と、小野くんのように気になる方も多いらしいので…。
なんと!
「どこまでAIモデルを軽量化できるか試してみたい」
そんな声に応えるため、『PCAS』をお試しいただける
トライアルキャンペーンを実施中です。;
お知らせは、是非とも私から…!!
トライアルキャンペーンにご興味のある方は、詳しいお話しが聞きたい方はお気軽に下記からお問い合わせください!!
ボス、急に出てこないでくださいよ?!
初めての人は「ヤバい人」だって思うじゃないですか…!
『PCAS』(Pruning Channels with Attention Status)とは
『PCAS』は先程のPruningの一種で、モデルの精度に寄与が少ないデータを見極める判断基準としてアテンション統計量を用いて、AIのニューロンのプルーニング(データ削減)を行ってAIモデルを軽量化する技術です。
アテンション統計量というのは、対象のAIモデルの重みの偏りから、精度の高さを判断する指標だ。偏りが小さいデータ群は精度が高いと判断し、削減率を小さくするんだよ。偏りが大きいデータ群は精度が低いと判断し、削減率を大きくするんだよ。
『PCAS』は、アテンション統計量の性質から「層毎の削減率」を自動決定するから、専門家によるモデル分析作業が不要なのが特徴だね。
詳しくはこちらをご覧ください!
過去Webセミナーで『PCAS』を取り上げた回もYouTubeでご覧いただけます!
復習はバッチリだな。
補足すると、PyTorchというライブラリをもとに作られたAIモデルが『PCAS』の対象だよ。
PyTorchはAI作成のために広く使われているライブラリで、オープンソースだから誰でも開発に使えるぞ。
ということで、『PCAS』ツールを使ってみようか。
前準備
その前に『PCAS』を動かす前に、環境の準備が必要なんだ。
まずは機材の準備だ。
『PCAS』の軽量化には、かなりの計算処理が行われる。そんな時に必要なものと言えば…?
その通り!
そして、PCのOSはUbuntu 20.04を使います。
今回使うのはNvidiaのGPUなので、NvidiaドライバーとCUDAをインストールするよ。
Noveau(Linuxのグラフィックドライバー)の無効化
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
sudo update-initramfs -u
現在このPCにCUDA, Nvidiaドライバーがインストールされているかの確認もしておきますね。
dpkg -l | grep nvidia
dpkg -l | grep cuda
もしも、既にこの2つがインストールされていたらPCに入っていたら消しておこう。
sudo apt-get --purge remove nvidia-*
sudo apt-get --purge remove cuda-*
できました。じゃあ、インストールできるNvidiaのドライバーのバージョンを確認してから、インストールしていきます!
よし、じゃあ確認したら、次のコマンドでドライバーをインストールだ。
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-460
次はCUDAのインストールだ。これも『PCAS』を動かすのに必要なんだ。ここで注意なのが、バージョンの指定が入るんだ。Ver.11.3を指定してインストールだよ。
wget
https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
sudo apt-get update
sudo apt-get -y install cuda-11-3
できました。
最後にインストールできたか確認しますね。
※nvcc -Vとコマンド入力すると、CUDAのバージョンが表示されて、インストールができたことの確認となります。
PyTorchをはじめとした、下に挙げるようなAI開発向けのライブラリも一緒にインストールされているんだ。
torch==1.12.0
torchvision==0.13.0
pytorch_lightning==1.6.5
numpy==1.21.5
matplotlib==3.5.3
tqdm==4.63.0
これなら1つ1つライブラリをインストールしてこなくてもいいですね。
すぐにAI開発が始められそうです。
じゃあ、『PCAS』ツールのサンプルファイルの中身を見てみよう。

あとはPyTorchをはじめとしたAIのライブラリをインストールするんだ。今回は以前に開発で使っていたものが残っているのでそのまま使いましょう。
Classification(画像分類)、Detection(検知)、Pose(姿勢検出)、Semantic Segmentation(領域分類)、…いろいろ入っていますね。
どれを試してみようかなぁ…。
キーンコーンカーンコーン…
そんな…。でもどれくらいAIモデルが軽量化できるか楽しみです。ボクの仕事量も軽量化できませんか?
うーん、それよりは。。。
小野くんの仕事の精度を落とさず、
処理能力を向上させないといけないな。
後編は、PCASの効果を実感してもらうため、AIモデルの軽量化を試してみるよ。
ということで後編もお楽しみに!
次回のブログ更新は11月を予定して います。
お楽しみに!
- ※記載されている会社名、製品名は、各社の商標または登録商標です。
- ※ここに記載されている仕様、デザインなどは予告なしに変更する場合があります。