今話題のNPUを使ってAvatarianしてみた
以前Lenovo Pro Communityでお借りしたNPU搭載PC(AI PC)で本格的にNPUを使ってみたレポートです。
AI PCとは
AI PCとは、NPU(Neural Network Processing Unit)を搭載したPCのことで、Intel Core UltraシリーズはこのNPUを搭載している。
お借りしたモデルは
ThinkBook 13x Gen4 Core Ultra 5 125H・16GBメモリー・512GB SSD・13.5型2.8K液晶搭載 21KR0009JP
です。
価格は、
ThinkBook 13x Gen 4 |プレミアム13.5型インテル® Core™ Ultra プロセッサー搭載ビジネスノートPC | レノボ・ ジャパン (lenovo.com) の公式サイトで¥154,440 (2024年9月8日時点)
でした。
前回の記事はこちら
そのままではNPUは使えない
NPUを使うためには、NPUを使うようにプログラムを作る必要があります。
なので、従来のアプリをそのまま使ってもNPUの使用量はゼロです。
NPUが使えるようにプログラミングする
IntelのNPUを使うには、2通りの方法があります。
1. OpenVINOを使う
2. Intel® NPU Acceleration Library を使う
今回はAvatarianでNPUを使う実験ではOpenVINOを使い、
大規模言語モデルの実験でIntel NPU Acceleration Libraryを使いました。
OpenVINOを使ってAvatarianを動かす
Avatarianは、オンライン会議の相手をアバターにする #Python - Qiita に記載しているアプリです。このアプリはdlibという顔認識のAIを使っていますが、これをNPUに対応させるところから始めます。
AIモデルの準備
Avatarianで使っている顔認識はdlibを使っていますが、dlibはNPUに対応しないので、モデルを用意する必要があります。
流れとしては、OpenVINOの形式のAIモデルを用意し、NPU用にコンパイルして実行することになります。
OpenVINOの形式に変換するのには、TensorFlowのモデルや、汎用AIモデル形式(どんなデバイスでも動かせるAIモデルの形式)である、ONNX形式があればOKです。
dlibのdatファイル>TensorFlowファイル/ONNXファイル>OpenVINOファイル
の流れです。
1.1 アジア人の顔を追加したdlibの顔認識モデルを入手https://github.com/davisking/dlib-models
taguchi_face_recognition_resnet_model_v1.dat.bz2
モデル作成の詳細はTaguchiさんの記事を参照
dlib に 私の顔認証モデルが採用された #Python - Qiita
1.2 dlib-to-tf-keras-converterを使って、dlibのモデルをTensorflowのモデルに変換
ksachdeva/dlib-to-tf-keras-converter: A set of scripts to convert dlib's face recognition network to tensorflow, keras, onnx etc (github.com)
※これをWindowsで実行するとなぜかKernel Errorが出てしまったので、WSLで実施。TensorFlowのバージョンに注意
Python 3.7
pip install tensorflow=2.14
pip install numpy
pip install xmltodict
pip uninstall protobuf
pip install protobuf==3.20
python main.py --xml-weights xml_generator/build/taguchi_face_recognition_resnet_model_v1.xml
手順通りやれば、expoertedフォルダと、TensorFlowモデルのpbファイル、Kerasのh5ファイルができる。
1.3 PythonでOpenVINOを用いてpbファイルをOpenVINO IR形式に変換して保存
Converting a TensorFlow Model — OpenVINO™ — Version(2024)
openvino.save_model — OpenVINO™ documentationCopy to clipboard — Version(2024)
import openvino as ov
# 1. Convert model created from TersorFlow model
core = ov.Core()
ov_model = core.read_model("/home/matz/dlib-to-tf-keras-converter/taguchi_face_recognition_resnet_model_v1.pb")
# 2. Save model as OpenVINO IR
ov.save_model(ov_model, './taguchi_face_recognition_resnet_model_v1_FP16.xml', compress_to_fp16=True) # enabled by default
おまけ
1.4 exportedフォルダからonnx形式のファイルも作れます
pip install openvino
pip install packaging
pip install git+https://github.com/onnx/tensorflow-onnx
python -m tf2onnx.convert --saved-model "/home/matz/dlib-to-tf-keras-converter/dlib_exported" --output dlib_face_recognition_resnet_model_v1.onnx
なお、わざわざDlibを使わなくても、顔認識のONNX形式のモデルも存在していました。
face-recognition-resnet100-arcface-onnx
open_model_zoo/models/public/face-recognition-resnet100-arcface-onnx at master · openvinotoolkit/open_model_zoo (github.com)
ダウンロード方法はこちら
open_model_zoo/tools/model_tools/README.md at master · openvinotoolkit/open_model_zoo (github.com)JAPANESE_FACE_V1.onnx
yKesamaru/FACE01_DEV (github.com)
ライセンスが特殊なので利用時はよくご確認ください
あとはこれをNPU向けにコンパイルすればNPUが使える。
NPU vs CPU vs GPU
Avatarianの対象として、人が多く動きのあるAKB48の「恋 詰んじゃった」で実験した。
CPUでAvatarian
CPUでは1.4FPSほどでていた。
まずはここがベンチマーク。なお、OpenVINOを使うことで、dlibの時よりはるかに高速になった。
GPUでAvatarian
内臓GPUでも1.48FPSほどでていた。なかなかよい。
NPUでAvatarian
本命のNPUは…1.25-1.30FPSほど。あれ…。
最大でもNPUは 4%ほどしか利用せず、アプリとしての処理速度は上がらなかった。
考察
Face recognitionはCPUでも高速に処理できていて、わざわざNPUに処理を回す効果がなかったようだ。
dlibを使ったときは、CUDA対応にすることでCPUに比べて相当早くなっていたのでNPUでも同様の効果を期待したけど、OpenVINO形式にする(そしてそのタイミングでFP16に変換した)ことで、計算負荷が下がったのだと思う。
WindowsでdlibをCUDA対応にする #dlib - Qiita
LLavaを動かす
AvatarianではNPUの効果がほとんどなかった。むしろ遅かった。
そこで、次は、intel/intel-npu-acceleration-library: Intel® NPU Acceleration Library (github.com)のexamplesにある、llava.pyを動かして画像の説明をさせてみた。
効果はこのとおり、NPUを20-30%つかって、ローカルノートPCで画像を認識して説明できている。
速度は2-3単語/秒 程度とそれほど早くないし、説明も特徴を捉えている。
処理スピードは遅いけれど、夜間に処理をかけるなどして使うには十分な能力があると感じた。
結論
NPUは複雑なAIモデルの利用で効果的(と思われる)
今後Copilot+ PCという、NPUの性能がさらに高いものが出てくると、軽量な生成AIはローカルPCでサクサク動くはず。
夜間に機密情報の処理を動かしておくなど、業務用途での活用も期待できる。
NPU搭載のAI PC、Copilot+ PCは今後注目です!
Lenovoからは最新CPUのCore Ultraプロセッサ(シリーズ2)搭載モデルが9月6日に発売されたばかりです。Yoga Slim 7i Aura Edition Gen 9、ぜひ使ってみたいですね。
この記事が気に入ったらサポートをしてみませんか?