前回ブログに書いた「UM790 ProのNPUデバイス認識に成功」の続報である。Ryzen AI Softwareの導入になんとか成功し、テストプログラムを動作させることができた。いくつか注意すべき点があったのでここにまとめておきたい。
導入の準備
Ryzen AI Softwareの導入方法は下記のページにある。
Installation Instructions — Ryzen AI Software 1.0.1 documentation
準備としてまず下記のソフトをWindows11環境に導入する必要がある。
Visual Studio
ここは最新バージョンではなく、素直に2019を導入する必要がある。
下記のページを参考にした。
上記ページでは「C++によるデスクトップ開発」のみ導入しており、私もこれで十分だろうと思ったのだが、それだと次に実行する.\install.bat
のチェックが通らない。すべてのコンポーネントを選んで導入してほしい。
2024-06-17 訂正
「C++によるデスクトップ開発」をインストールだけでいい。.\install.bat
のチェックが通らない原因は別にあった。install.batの中にVisual Studio 2019のインストールを確認する部分(81行目から88行目)がある。ここで”HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\16.0”というレジストリキーを確認している。この部分(81行目から88行目)をコメントアウトすればいい。Visual Studioのバージョン管理の方法が変更され、現在は上記のレジストリキーは使用されていないため、正しくインストールされていてもチェックを通らないからだ。
cmake
下記のページからダウンロードして導入した。
python
WindowsのPowerShellの端末画面を開き、pythonと入力するとアプリの導入画面が開くので画面に従って進めるだけだ。
PowerShellからpython -Vでバージョンを確認するとPython 3.12.2 と表示される。しかし実際のRyzen AIの動作環境でpython -Vでバージョンを確認するとPython 3.9.18と表示されるので、このインストールが必要だったのかはよく分からない。
2024-06-17 追記
RyzenAI-SWをインストールするとPythonの仮想環境が作成され、その中でPython 3.9.18がインストールされるようになっている。この仮想環境を使用すればよい。
Anaconda or Miniconda
私は最新のanaconda3を導入した。導入方法はネットに最新の情報があると思うのでそちらを見てもらいたい。
環境変数の設定
導入したソフトのコマンドがPowerShellから利用できるようにシステム環境変数のパスに以下を追加した。(xxxxxは自分の環境で読み替えてほしい)
C:\Users\xxxxx\anaconda3
C:\Users\xxxxx\anaconda3\Scripts
C:\Users\xxxxx\anaconda3\bin
C:\Program Files\CMake\bin
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools
Ryzen AI Softwareの導入
上記のAMDのページから ryzen-ai-sw-1.1.zip
をダウンロードして展開する。
PowerShellの端末画面で下記コマンドを実行する。
.\install.bat
導入ソフト、IPUデバイスのチェックを通ると、インストールが始まる。無事に完了するとconda配下にRyzen AI Softwareの環境が作られる。動作環境名は以下のコマンドで確認できる。
$ conda info -e # conda environments: # base C:\Users\xxxxxx\anaconda3 ryzenai-1.0-202402XX-XXXXXX C:\Users\xxxxxx\anaconda3\envs\ryzenai-1.0-202402XX-XXXXXX ryzenai-1.0-202402YY-YYYYYY C:\Users\xxxxxx\anaconda3\envs\ryzenai-1.0-202402YY-YYYYYY
私は間違って2回インストールコマンドを実行したので2つ動作環境ができてしまった。動作環境名は上記インストールコマンドの引数で指定することもできる。
Ryzen AI Softwareの動作確認
動作環境のアクティベート
端末画面から下記コマンドを入力する。
conda activate ryzenai-1.0-202402YY-YYYYYY
コマンドエラーとなり、アクティベートできない。原因を調べると下記のページに解決策が書かれていた。
端末画面から下記のコマンドを入力しろ、と書かれている。
PowerShellの場合は
YourPath\Anaconda\Scripts\activate.bat
Git Bashの場合は、.bash_profile
に下記の行を追加しろ、と書かれている。
source YourPath/Anaconda/Scripts/activate
YourPathを自分の環境に合わせて行ってみたが、PowerShellでもGit Bashでもアクティベートができなかった。ちなみにGit Bashはこちらからダウンロードした。
ついにこれで詰んだかと思ったが、Git Bashの端末画面から上記のsourceコマンドを入力してみると・・・
(base)
と端末に表示された。動作環境名baseが立ち上がったようだ。確認してみると・・・
$ conda info -e # conda environments: # base * C:\Users\xxxxxx\anaconda3 ryzenai-1.0-202402XX-XXXXXX C:\Users\xxxxxx\anaconda3\envs\ryzenai-1.0-202402XX-XXXXXX ryzenai-1.0-202402YY-YYYYYY C:\Users\xxxxxx\anaconda3\envs\ryzenai-1.0-202402YY-YYYYYY
base環境の行に*があり、base環境が立ち上がっている。コマンドの使い方が分かってきた。アクティベートを一旦解除し、環境名を引数に指定して実行すると・・・
conda deactivate source /c/Users/xxxxxx/anaconda3/Scripts/activate ryzenai-1.0-202402YY-YYYYYY
(ryzenai-1.0-202402YY-YYYYYY)
Ryzen AIの環境が立ち上がった。紆余曲折はあったが動けばOKである。
pythonのバージョンとインストール済みライブラリを確認する。
$ python -V Python 3.9.18 $ pip list Package Version ---------------------- -------------- colorama 0.4.6 coloredlogs 15.0.1 flatbuffers 23.5.26 glog 0.3.1 humanfriendly 10.0 markdown-it-py 3.0.0 mdurl 0.1.2 mpmath 1.3.0 numpy 1.26.4 onnx 1.15.0 onnxruntime 1.17.0 onnxruntime_extensions 0.10.1 onnxruntime-vitisai 1.15.1 packaging 23.2 pip 23.2.1 protobuf 4.25.3 Pygments 2.17.2 pyreadline3 3.4.1 python-gflags 3.1.2 rich 13.7.0 setuptools 69.1.0 six 1.16.0 sympy 1.12 tqdm 4.66.2 vai-q-onnx 1.16.0+e38e0c6 voe 0.1.0 wheel 0.42.0
2024-06-17 追記
現在の私の環境では、PowerShellの画面からconda activate 仮想環境名で仮想環境を起動できている。この時実行できなかった原因は不明である。
テストの実行
cd .\quicktest\ curl https://www.cs.toronto.edu/~kriz/cifar-10-sample/bird6.png -o image_0.png python -m pip install -r requirements.txt python quicktest.py --ep ipu
いろいろとワーニングメッセージが出力されたが、下記の行を確認できたのでOKのようだ。
[Vitis AI EP] No. of Operators : CPU 2 IPU 400 99.50% [Vitis AI EP] No. of Subgraphs : CPU 1 IPU 1 Actually running on IPU 1 Image 0: Actual Label cat, Predicted Label not-cat
NPUをどう使うか
なんとかNPUが動作する環境を作ることができた。ではこれからNPUを使って将棋AIやStableDiffusionやLLMを動かすことができるかというと、そう簡単ではなさそうだ。
このNPUは整数演算しかできない。AMDのページに最大性能10TOPS(Tera Operation Per Second)と書かれていて、なぜTFLOPS(Tera FLoating-point Operation Per Second)ではないのかと思ったのだが、浮動小数点演算はできないからなのだ。このため浮動小数点で作られたこれまでのモデルをNPUで使おうとすると、8bit、または16bitの整数に変換(量子化というらしい)をしなければならない。変換したモデルを利用するためには推論部分も書き換えないといけない(と思う)。これは私には荷が重い。
このNPUとRyzen AIは2023年に発表された最新の技術だ。NPUをネット検索しても活用している事例はまだほとんど出てこない。省電力で高速なAIを小型のPCでも動かせることはNPUの大きなメリットだと思う。今年あたりから活発な動きが出てくることを期待している。私はAMDのページにあるサンプルプログラムを動かしながら、しばらくは勉強期間となりそうだ。