AMD Ryzen AIソフトウェアとNPUドライバをインストールした自身初購入のミニパソコンRyzen 7 8845HS搭載AOOSTAR GEM12 Pro MAX/Windows 11 Proにamd / RyzenAI-SWをgit cloneしてAI学習するGetting Started ResNet編。
ResNet(Residual Network/残差ネットワーク)。
おおまなか手順としては、Ryzen AIソフトウェアを使用して
尚、ここではPythonのみとしていますが、デプロイについてはC++の説明もあります。
まず、getting_started_resnetでは、比較的大きなモデルファイルのダウンロードを伴うのでGitとGit LFSをインストールした後にリポジトリamd / RyzenAI-SWをgit cloneしておかないとエラーでハマるので要注意です。
そうしておかないと、こんなエラーに見舞われます。(当初、環境構築ミスった自身だけかも?)
尚、その上であっても少なくとも今日時点、getting_started_resnetで使うtorch 2.6.0含む以降のセキュリティ強化により、prepare_model_data.pyで1ヶ所、例えば、このような追記・修正が必要となります。
尚、先の修正例は、修正前に実行した結果、このようなエラーとなりつつ、改善提案としていくつか提示された内の1つです。
他にもエラーは出るかと思いますが、ModuleNotFoundError: No module named ...くらいで...のパッケージをpip installする程度で通ると思います。
まずは、quicktest時と同様に仮想環境を作って、仮想環境を有効にしてから始めます。
ryzen-ai-1.4.0は、Ryzen AIソフトウェアのインストール中に指定時、デフォルトのconda仮想環境名、もしくは、それをベースに変更したconda仮想環境名です。
続いて当該プロジェクトで必要なパッケージのインストール。
CIFAR-10データセットとONNXモデルをダウンロード・準備するprepare_model_data.pyを実行するとdata\フォルダにCIFAR-10データセットがダウンロードされ、このようになります。
次にONNXモデルを量子化するresnet_quantize.pyを実行。
続いてONNXモデルをデプロイ(展開)するわけですが、PythonとC++の例があり、それぞれ、CPU、Ryzen AI NPUで処理した結果を比較できます。
ここでは、Pythonを使いました。
Pythonでは、CPUによる予測をpredict.py、NPUによる予測をスイッチ付きでpredict.py --ep npuとして実行し、CPU、NPUの予測結果を取得できるようになっています。
getting_started_resnetデフォルトのAIに予測してもらったサンプル画像がこちら(等倍だと見づらいので1.5倍ほどに拡大、別タブで開けば確認可)。
オプションなしのpredict.pyを実行したCPUの予測結果。
続いてpredict.py --ep npuを実行したNPUの予測結果。
何れの予測も同一で[Image 6:]の実際はautomobileをtruckと予測してしまっていますが、学習データにこうしたものがあったのか、あえて学習させなかったのか、乗用車のドアとハッチバックを開放した状態なのでトラックと見間違えるのも、わからなくもないかなと。
他のネコ、船、飛行機、カエル、自動車は、見事正解してるので優秀。
ちなみに等倍だと自身の「視力」では、せいぜい1つか2つくらいしかわからないかも...、ビットマップなら...もっとわかんない。
condaの仮想環境での作業が一通り終わったら、conda deactivate(activateの反対語deactivate)しましょう。
これを忘れると、たいてい痛い目にあうので要注意。
conda deactivateしたら、都度、conda info -eで[*]のついた仮想環境がないことを確認しておくと安心です。
なぜなら、一見、作業ディレクトリパス先頭から(ryzen-ai-1.4.0)といった仮想環境の表記が消えてもconda info -eで確認すると、まだ[*]が付いているなんてことがあったり、なぜか、代わりに(base)という仮想環境に入ってしまっていたり、知らずにAnacondaコマンドプロンプトを閉じて戻っても同様だったりすることもあったりするので。
仮想環境baseになってしまう場合、ディレクトリパス先頭に表示されるとは言え、本来の仮想環境については、deactivateコマンドを実行した確信が手伝うのか、意外と気づかないことも多く...。
何れにせよ、condaの仮想環境にいることを、知らずに、そのまま作業し続けると何かとハマりやすいので要注意。
ページを分けた関係で改めて書くと、まずは、quicktest時と同様に仮想環境を作って、仮想環境を有効にしてから始めます。
ここでは、condaではなく、pipを使いますが、pip install virtualenvは既に済んでいるものとします。
続いて当該プロジェクトで必要なパッケージのインストール。
肝心のサンプルスクリプトですが、概要に記したように、いくつかありますが、今回は、目立った成果物はないので最初のprepare_model_data.pyの実行結果だけ示しておくことにします。
prepare_model_data.pyを実行するとdata\フォルダにCIFAR-10データセットがダウンロードされ、このようになります。
尚、[ModuleNotFoundError: No module named xxx]というエラーが出るかもしれません。
今回は、[xxx]にあたるのは、[onnxruntime]と[quark]でしたが、onnxruntimeならonnxruntimeを、quarkなら、amd-quarkをpip install。
Pypiには、quark系がたくさんあるので注意、ここで必要なのは、amd-quark。
そんなこんなで以後のサンプルスクリプトは、詳細に説明がなされているので公式チュートリアルを参照しましょう。