先日発売された、Intel Arc A770 が Linux の DeepLearning フレームワークを語る上でどこまで対応できるか検証をしてみました。
まずは、OSの選定です。Arc シリーズが Kernel 6.0.0 でサポートされると話題になったので、Ubuntu 22.04 からスタートしてみましたが、こちらは最終的に OpenVINO のpython のライブラリ関係が上手く動作せず、ベンチマークまではたどり着けませんでしたので、改めて下記を参考にして、Ubunu20.04 から再出発してみます。
Ubuntu 22.04 でインストールした際には、GPU のモニタリングツールとして、intel_gpu_top が使えましたが、残念ながら上述の対応では、これが使えません。
(openvino_env) ulgs_root@arc770:~$ intel_gpu_top Failed to detect engines! (No such file or directory) (Kernel 4.16 or newer is required for i915 PMU support.)
気を取り直して、Pytorch Intel GPU とググってみて出てきた、OpenVINO をインストールしてみます。

Docker でも何でも構いませんが、今回は、pip を使って、システム上で使えるようにしてみました。さてベンチマークはどんな感じでしょうか?
いずれはここに、a770 の結果も掲載されると思いますが、実施時点(2022/11/29) では掲載されていませんでした。それでは下記を参考に、ベンチマークを取得してみましょう。
まずは、モデルのダウンロード、(数時間かかりますので、放置で別の仕事をされたほうがいいともいます。)
(openvino_env) ulgs_root@arc770:~$ omz_downloader --all
どのモデルが用意されているのかは、状況によって違うようで、精度の選択肢は、FP16, FP32, FP16-INT8, FP32-INT8 といろいろあるみたいですが、全ての精度があるわけでもないようです。執筆時点では、
[FP16] の場合
benchmark_app -m omz_models/intel/person-detection-0200/FP16/person-detection-0200.xml
-d GPU -hint throughput
Count: 102920 iterations
Duration: 60002.57 ms
Latency:
Median: 2.33 ms
AVG: 2.33 ms
MIN: 2.23 ms
MAX: 9.88 ms
Throughput: 1715.26 FPS[FP16-INT8]の場合
benchmark_app -m omz_models/intel/person-detection-0200/FP16-INT8/person-detection-0200.xml
-d GPU -hint throughput
Count: 108960 iterations
Duration: 60002.68 ms
Latency:
Median: 2.20 ms
AVG: 2.20 ms
MIN: 1.99 ms
MAX: 9.13 ms
Throughput: 1815.92 FPS[FP32]の場合
benchmark_app -m omz_models/intel/person-detection-0200/FP32/person-detection-0200.xml -d GPU -hint throughput
[ INFO ] First inference took 7.85 ms
[Step 11/11] Dumping statistics report
Count: 82412 iterations
Duration: 60004.27 ms
Latency:
Median: 2.91 ms
AVG: 2.91 ms
MIN: 2.73 ms
MAX: 12.67 ms
Throughput: 1373.44 FPSさてここまで取ってみて、あれ?これって推論のベンチマークですか?と気が付きます。学習は?できないの?・・・・
いろいろ探してみましたが、現時点で高速化されているのは、推論であり、学習ではなさそうです。表向きには、リリースされて、SC2022辺りで、Auroa に採用されたはずの、Intel Data Center GPU Max 向けには、現在開発が進んでいるそうですが、Arc シリーズではまだ動きそうにありません。
[OpenVINO で Imagenet 系 Public のベンチマークの取得方法]
(Resnet-50-TF)
omz_download を使ってモデルダウンロードをした中で、Intel ディレクトリにある最適化されたものはいいのですが、Public 的なものはそのままベンチマークを取れません。どのように最適化しているかは、
omz_converter,omz_quantifizer が必要になります。
Public Model の converter: omz_download --all は数時間かかるので、resnet-50 だけを抽出してみましょう。
$ omz_downloader --name resnet-50-tf -o resnet50 ################|| Downloading resnet-50-tf ||################ ========== Downloading resnet50/public/resnet-50-tf/resnet_v1-50.pb ... 100%, 99775 KB, 609 KB/s, 163 seconds passed
モデルをダウンロードしたら、次は、モデル変換します。そうすると、FP16, FP32 のディレクトリが作成されます。
$ omz_converter -d resnet50 --name resnet-50-tf $ ls resnet50/public/resnet-50-tf/ FP16 FP32 resnet_v1-50.pb
次に、INT8 のデータを作るには、imagenet の val データが必要になります。詳細は下記をご覧ください。
Int8 向けのDataset をImagenet dataset から作る。
1. Imagenet2010のval データをダウンロードする、研究者しかダウンロードできないとありますが、表向きです。どっかから取得してください。data/ILSVRC2012_img_val ディレクトリに展開します。
2. val.txt をダウンロードして下さい。data/val.txt として保管してください。
3. ILSRC2017_val.txt をダウンロードしてください。data/val15.txt に名前を変更してください。
$ omz_quantizer --dataset_dir data -o resnet50/ --name resnet-50-tf Moving quantized model to resnet50/public/resnet-50-tf/FP32-INT8... $ ls resnet50/public/resnet-50-tf/ FP16 FP16-INT8 FP32 FP32-INT8 resnet_v1-50.pb
これで準備ができました、ベンチマークを取ってみましょう。
[FP16]
$ benchmark_app -m resnet50/public/resnet-50-tf/FP16/resnet-50-tf.xml -d GPU -hint th
roughput
[ INFO ] Benchmarking in inference only mode (inputs filling are not included in measurement loop).
[ INFO ] First inference took 735.53 ms
[Step 11/11] Dumping statistics report
Count: 161792 iterations
Duration: 60281.44 ms
Latency:
Median: 190.32 ms
AVG: 190.39 ms
MIN: 137.79 ms
MAX: 239.81 ms
Throughput: 2683.94 FPS[FP16-INT8]
$ benchmark_app -m resnet50/public/resnet-50-tf/FP16-INT8/resnet-50-tf.xml -d GPU -hi
nt throughput -progress
[Step 11/11] Dumping statistics report
Count: 208896 iterations
Duration: 60313.30 ms
Latency:
Median: 294.90 ms
AVG: 294.82 ms
MIN: 191.62 ms
MAX: 351.69 ms
Throughput: 3463.51 FPS[FP32]
$ benchmark_app -m resnet50/public/resnet-50-tf/FP32/resnet-50-tf.xml -d GPU -hint th
roughput -progress
[Step 11/11] Dumping statistics report
Count: 69888 iterations
Duration: 60381.00 ms
Latency:
Median: 220.29 ms
AVG: 220.77 ms
MIN: 154.10 ms
MAX: 271.93 ms
Throughput: 1157.45 FPS[FP32-INT8]
$ benchmark_app -m resnet50/public/resnet-50-tf/FP32-INT8/resnet-50-tf.xml -d GPU -hi
nt throughput -progress
[Step 11/11] Dumping statistics report
Count: 208896 iterations
Duration: 60576.27 ms
Latency:
Median: 296.17 ms
AVG: 296.14 ms
MIN: 186.20 ms
MAX: 341.13 ms
Throughput: 3448.48 FPSといった感じです。同じ環境とは言えませんが、Nvidia T4 が4500 程度出ているはずなので、微妙な感触です。FP16-INT8 の結果は、より高い値が出ている場合もあるとのことですので、何か最適化する方法があるのかもしれません。ただ、今回はここまでとなります。