コンテンツへスキップ

GeFroceのGPUアップグレードしました

先日、Geforce RTX 3700 Tiを購入しました。実は、少し前(2か月ぐらい前)に底値として購入した時点から、1万円以上も値が下がっています。2-3日前に、RTX4000シリーズの情報がリークされました。マイニング上の低下、供給状況の改善、新モデルの発表直前、RTX3000シリーズも潤沢に在庫があるわけではないと思うので、今が購入に適しているのかなと考えております。RTX4000シリーズも気になります。

買い時が難しいGPU、今が買い時?ねらい目は、少しハイエンド?

前回の検討:2020年7月個人向け深層学習・機械学習向けGPU (NVIDIA RTX Voiceも利用)
二つ前のGPU:GeForce GTX 1660 SUPER 導入しました
現在利用しているGPU:高性能GPUには、見合ったCPU導入必須(NVIDIA RTX 2060 SUPER)

MSI GeForce RTX 2060 SUPERを利用しておりました。マイニング需要に加えて、半導体不足もあり、最近はGeForce RTX 2000番台を見つけることは難しかったです。特に、RTX2060 SUPERは、まったく見当たりませんでした。
2020年7月に、MSI GeForce RTX 2060 SUPER VENTUS XS J OC 49,914円で購入しておりました。
ちなみに、その前のGeForce GTX 1660 SUPERは、23,122円で購入していました。

ディープラーニング(Deep Learning)深層学習、ニューラルネットワーク(ディープニューラルネットワーク、Deep Neural Network: DNN)による機械学習向けにGeForceを利用しておりました。
そして、RTX2060 SUPER購入の購入動機となった、NVIDIAのRTX Voice(現在のNVIDIA BROADCAST)を日々利用しております。NVIDIA BROADCASTは、非常に強力なノイズキャンセル機能を提供しており、Zoom, Skype, Microsoft Teams, WebExなどのオンラインでのコミュニケーションで非常に役立ちます。
そして、外出自粛も長引き、パソコンのゲームも、結構ヘビーに行うようになりました。

今回は、PCゲームに向けたGPUのバージョンアップが一番の購入動機です。

  • PCゲームを快適に楽しみたい(エーペックスレジェンズ (‎Apex Legends™)、フォートナイト(Fortnite)
  • NVIDIA BROADCASTの快適な利用、特にゲーム実行時NVIDIA RTX Voice 最強のノイズ除去
  • YOLO, DarknetなどDNN実施時のGPUメモリ不足(out of memory)回避、メモリ不足回避の学習回数増加による学習時間短縮

グラフィックカードのメーカーですが、NVIDIAかAMDとなり、それぞれNVIDIAからGeForce、AMDからRadeonがリリースされています。
各種ツールとの親和性を考えると、GeForce一択となります

NVIDIAのGeForce RTX 30XXシリーズ(3060 Ti、3070、3070 Ti)が候補となります。

今回検討している、RTX30シリーズですが、従来からGPUが持ってきたシェーダユニット(NVIDIAがCUDAコアと呼んでいるエンジンから構成される描画エンジンのこと)に加えて、リアルタイム・レイトレーシングと呼ばれる影や映り込みの動きを物理的に計算して描画していく機能をハードウェアで行なうRTコア、そしてAIの処理をハードウェアで行なうTensor(テンサー)コアの2つのハードウェアを追加した。従来のGPUに比べてより写真品質に近い描画をリアルタイムに行なうことが可能になり、NVIDIAが提供するDLSS 2.0(ディーエルエスエスツーポイントオー)と呼ばれるAIを利用した描画向上機能を利用すると、同じ解像度でもより高い品質で描画し、フレームレート(1秒間に表示できるフレームの数のこと、このフレームレートが高ければ高いほど、高速にゲームで表示できることを意味する)を引き上げる。新しいウィンドウで開きます

NVIDIAのGPUコアは「CUDA(クーダ)コア」と呼ばれます。一般的には「シェイダープロセッサ(Shader Processor)」、「ストリームプロセッサ(Stream Processor)」などと呼びます。

GPU導入候補比較表

価格を考えると、GeForce RTX 3060 Tiが、最有力候補だと思います。ベンチマーク結果も非常によく、RTXのエントリーモデルとして非常に優秀だともいます。
ベンチマーク・性能テストの結果により、コストパフォーマンスの良い機種を、個人個人の価値観で選ぶことになります。

性能比較:[ドスパラ]グラフィックボード・ビデオカード性能比較ベンチマークテスト

GPUGeForce RTX 2060 SUPERGeFoce RTX 3060 TiGeFoce RTX 3070GeFoce RTX 3070 TiGeFoce RTX 3080 Ti
価格イメージ
2020/07
46,50068,50084,00084,000121,000
メモリサイズ8GB8GB8GB8GB10GB
メモリ規格
GDDDR6
GDDR6GDDR6GDDR6GDDR6
CUDA(SP数)21764865588861448704
消費電力175W200W220W290W320W
サイズ
205x127x43 mm
235x124x42 mm232x124x52 mm316x121x56 mm305x120x57 mm

MSIの GeForce RTX のVENTUSモデルをベースに比較

快適なゲーム・NVIDIA BROADCAT・深層学習向けGPU比較結果

  1. RTX3060 Tiが最有力候補でした。ただし、購入時点で、在庫がなく、3070との価格差が、本日時点よりも小さかったです。3070を視野に入れると、3070Tiの価格差がほとんどなく、3070 Tiが高価ですが、一番コストパフォーマンスが良いと判断しました。
  2. 妥協なく、最善の選択が出来たと考えております。
    前回、RTX 2060 SUPERを選んだ際も、妥協なく選択肢、RTX2000シリーズで一番コストパフォーマンスが良かったと、今でも考えております。
  3. RTXでなければ、現在も販売されている、GTX 1060 SUPERはコストパフォーマンスも高く今でもお勧めのグラフィックカードです。

RTX3600 Tiがベストな選択だと思います。私のケースでは、少しロマンを上澄みして、RTX3070 Tiという高級GPUが最終的な選択となりました。

RTX4000シリーズ。そろそろ、価格も落ち着いて、もう少し導入しやすい値段で市場に流通してほしいですね。ゲーム需要も上がっていますし。

YOLO V4を利用する

AlexeyAB Darknet YOLO V3をJetson Nano、Windows、Ubuntuで利用しています。YOLO V3でまったく不満がないのですが、2021年GWは在宅時間も長く、YOLO V4をインストールして使ってみました。手元の動画や写真での結果ですが、1.5倍は早く物体検出・推論が出来ております。

以前に、WindowsへAlexyAB Dark YOLO V3を利用した際と、インストール手順は変わっておりませんでした。Ubuntuなど、他プラットフォームは、どんどん楽になって行きますね。

  1. Microsoft Visual Studio
  2. CMake
  3. CUDA (cudnn)
  4. OPENCV

公式のヘルプに必要な情報は、すべて記載されています。
トラブったら、公式のReadmeが一番おすすめです。
https://github.com/AlexeyAB/darknet

1.Microsoft Visual Studioインストール

Microsoft Visual StudioのCommunity版をダウンロードし、インストールします。2017年版のVSインストールを推奨するWEBページが多かったです。コンフィグ時にエラーが出たので、私も2017版をインストールしました。

https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community

C++によるデスクトップ開発をインストールしました。

2.CMakeインストール

Windows win64-x64 Installer版のCMake GUIを入手し、インストーラーを実行して、インストールしてください。

https://cmake.org/download/ cmake-3.20.2-windows-x86_64.msi

3.CUDA (Cudnn)導入

  • CUDAインストール

    https://developer.nvidia.com/cuda-toolkit-archive cuda_11.3.0_465.89_win10.exe
    Windows 10 用のインストーラーを入手して、インストールします。

  • Cudnnを導入

    1. Developerネットワークに登録
      https://developer.nvidia.com/developer-program でデベロッパー登録
    2. 必要ファイルのダウンロード、導入したCUDAに合うバージョンを!!
      https://developer.nvidia.com/cudnn または、
      https://developer.nvidia.com/rdp/cudnn-archive からダウンロード
    3. ダウンロードしたファイルをCUDAイントールフォルダーへコピー(/移動)
      Cudnnをダウンロードして展開したフォルダー:<Cudnn_path>

      CUDAインストールフォルダー:C:\Program Files\NVIDIA GPU Computing Toolkit\

      • 「binフォルダのDLLファイルをコピー」
        <Cudnn_path>\cuda\bin\cudnn*.dll to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vx.x\bin.
      • 「includeフォルダの.hファイルをコピー」
        <Cudnn_path>\cuda\include\cudnn*.h to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vx.x\include.
      • 「lib/x64フォルダーのライブラリーをコピー」
        <Cudnn_path>\cuda\lib\x64\cudnn*.lib to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vx.x\lib\x64.

4.OPENCV導入

https://opencv.org/releases/
Windows向けのOPENCVをダウンロードして、適切な場所に解凍すれば良いです。
あとは、OPENCV関係のPath、環境変数を設定します。

※ 個人的には、この手順が出来るようになれば、同じ要領でOPENCVも自分でコンパイルできるので、自分の環境でビルドすることをお勧めします

【重要】各種環境変数

タスクバーなどの「ここに入力して検索」のダイアログボックスへ「ファイル名を指定して実行」または、「Run」といれて、ファイル名を指定して実行のダイアログを開きます。
「sysdm.cpl」を指定し、システムのプロパティを開きます。
上部のタブ「詳細設定」を選択し、「環境変数」のボタンを押し、設定画面を開きます。

以下の環境変数、PATHを設定する、または、設定されていることを確認します。

  • CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1
  • CUDA_PATH_V11_1 = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1
  • OPENCV_DIR = C:\opencv4.3.2\opencv\build
  • PATH
    • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin
    • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\libnvvp
    • C:\opencv4.3.2\opencv\build\x64\vc15\bin

AlexeyAB Darknet YOLO ビルド

以下のリンクから、AlexeyAB Darknet をダウンロードし、ZIPファイルを解凍します。
この回答したフォルダーを使ってビルドを進めて行きます。
https://github.com/AlexeyAB/darknet/archive/master.zip

  1. CMake(gui)を開きます
  2. source codeとbinariesのフォルダーを指定する場所に、ダウンロードしたdarknetを解凍したフォルダーを指定します。
  3. Configureボタンを押します。
    • 利用するVisual Studioのバージョンを選択
    • Optional platformに「x64」を記入します
    • Configureがうまく実行されたら、Generateを実行します。
  4. Visual Studioで作成したソリューションファイルを開きます
    「Darknet.sln」
  5. ビルド方法をリリースに変更して、ソリューションをビルドすると、darknet.exeが作成されます

darknet.exeコマンド実行

ビルドして作成したdarknet.exeファイルの場所で、exeファイルを実行した際に、「pthreadVC2.dll」が見つからないとエラーが出ました。
各種コミュニティを確認しましたが、darknet/build/darknet/x64の中にある、pthreadVC2.dllを実行ファイルdarknet.exeと同じ場所にコピーします。

  • Yolo v4 COCO - image: darknet.exe detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights -thresh 0.25
  • Output coordinates of objects: darknet.exe detector test cfg/coco.data yolov4.cfg yolov4.weights -ext_output dog.jpg
  • Yolo v4 COCO - video: darknet.exe detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights -ext_output test.mp4
  • Yolo v4 COCO - WebCam 0: darknet.exe detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights -c 0
  • Yolo v4 COCO for net-videocam - Smart WebCam: darknet.exe detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights http://192.168.0.80:8080/video?dummy=param.mjpg
  • Yolo v4 - save result videofile res.avi: darknet.exe detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights test.mp4 -out_filename res.avi

私の環境では、mp4ファイルを入力として、物体認識結果を動画ファイルに書き出す処理が、実行中に落ちる現象が見られました。そのほかのコマンドなりに不具合は見つけておりません。

関連記事:

NVIDIA BROADCAST
NVIDIA RTX Voice 最強のノイズ除去

NVIDIA BROADCASTの強力ノイズキャンセルを利用したい

NVIDIAがNVIDIA RTX Voiceをリリースした時点から、そのノイズキャンセルの機能の強さに感激し、NVIDIA RTXなどのGPUがない環境でも、このノイズキャンセル機能を利用したかったです。

  • GPUを搭載しないノートPCでのZoomやTeamsでの通話にノイズキャンセルマイク
  • スマホでの通話にノイズキャンセルマイク
  • GPUのない環境でのノイズ除去を実施したオーディオ入力

メモを取りながらのミーティングなどで、キーボード音が気になり、ZoomやTeamsなりの機能でこまめにミュート操作など、いろいろ不便であり、タイミングのもたつきなども気になっておりました。

Thunderbolt 3によりGPUの外付けが行える時代なのですが、費用面も高く、Thunderbolt 3の搭載がノートPCが中心となり、さすがに数枚もGPUを利用できないなと色々考えておりました。(デスクトップPCもThunderbolt 3対応にするか、けど、スマートフォンやiPadなどでも、このNVIDIAの強力なノイズキャンセルを利用したい)

NVIDIA BROADCASTシステム概要

NVIDIA RTXを搭載しNVIDIA BROADCASTをインストールしたPCに一度音を通し再度出力される、音声のノイズキャンセルを実現することが出来ました。
内容は、簡単なのですが、情報を探し出すのが難しかったです。音声など関連する情報が多い分野でもあり、ポイントは以下となりました。

  • PCマイクの音声をモニタリング
  • PCマイクの音声をスピーカーに出力
  • PCマイクの音声を自分で聞く
  • PCへの入力音声をノイズキャンセルソフトを通して出力する

NVIDIA BROADCASTは、インストール後に、仮想のマイクとスピーカーが準備されます。それぞれ、物理デバイスとのマッピングを行えば、マッピングした物理マイクの音声がNVIDIA BROADCASTのNoise Removal機能を用いてノイズ除去され、仮想マイクの出力となります。

  • NVIDIA BROADCASTの仮想マイクにノイズ除去後の音声を出す
  • NVIDIA BROADCASTの仮想マイクの出力を、モニタリングする
  • NVIDIA BROADCASTの仮想マイクの出力を、特定の出力にマッピングする

Windowsでのマイク入力の出力設定

Windowsでは、各マイクデバイスに対して、マイク入力を特定の音声出力端子にマッピングすることにより、自分の声などの入力音声のモニタリングが行えるようです。
この機能を用いて、NVIDIA BroadcastのNoise Removalを通した音声を、PCから出すように設定します。

<マイク:生の音声>→<ノイズ除去の音声>→<NVIDIA Broadcastの仮想マイク>→<PCから音声出力>→他PCのマイク入力やスマートフォンのマイク端子へ

サウンド設定より「サウンドコントロールパネル」を表示します。

サウンドコントロールパネルより、NVIDIA Broadcastの仮想マイクを選択し、プロパティを開きます。

マイクのプロパティの「聴く」タブより、このデバイスを聴くの設定を行います。

追加の投資をすることなく、実現できました。

どこかで、NVIDIA BROADCASTのNoise Removalのすごさもレビューしたいです。
この機能のために、私は、現役のGTXからRTXに乗り換えました。

NVIDIA BROADCAST App

新しいRTX30シリーズの発表など、機械学習や在宅時間増加に伴うゲーム需要など、注目も高いGPU市場。

NVIDIA RTX Vocieの正式版が公開されておりました。NVIDIA BROADCAST App。
すでに、遅延も感じさせず強いノイズ除去に十分に満足していただけに、正式版となり安定性など、仕事時にも安心して利用できるようになりました。

関連記事:NVIDIA RTX Voice 最強のノイズ除去

NVIDIA BROADCASTの機能

正式版は、ライブ配信支援ソフトという位置けで公開されており、公式ページより無料でダウンロードできる。リンク

ライブ配信向けとして以下の機能が提供される。

  • Noise Removal:マイク入力のノイズ削除
  • Noise Removal:スピーカー出力のノイズ削除
  • Virtual Background:ライブカメラの背景変更や背景透過
  • Auto Frame:撮影者を自動追従しフレームに収める


動作要件は、CPUがCore i5-8600以上/Ryzen 5 2600以上、メモリが8GB以上、GPUがGeForce RTX 2060以上、Quadro RTX 3000以上、OSがWindows 10。

NVIDIAドライバーのバージョン「456.38」以降。

Ubuntu 18.04.5 LTS に ffmpeg を導入

Jetson Nano の Ubuntu にffmpegをインストールします。
FFmpeg(エフエフエムペグ)は、動画と音声を記録・変換・再生するための非常に優秀なフリーソフトウェアです。マルチプラットフォームで利用できます。
コマンドラインから使用することができる。対応コーデックが多く、多彩なオプションを使用可能であり、バッチ処理にも向いています。

$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt install ffmpeg

ffmpeg利用

ffmpegは、非常に多くの機能とオプションが準備されております。
以下のコマンドで、ヘルプの全体を見ることが出来ます。

$ ffmpeg -h full

今回は、めざましじゃんけんシステムの、めざましじゃんけん時の画像を用いて、AIによる画像認識結果を動画化しました。
その際に利用したコマンドは、以下となってます。

ffmpeg -y -framerate 3 -i ffmpeg_%4d.jpg -c:v libx264 -r 60 jankensystem.mp4

サンプル動画

ちょうど、めざましテレビでHELLOチャレンジが実施されていたので、
AIでめざましじゃんけんにチャレンジっていう感じで、Official髭男dismの「HELLO」を動画に組み合わせました。

#ハローチャレンジ

撮影テーマは「〇〇にチャレンジしよう!」

https://youtu.be/c9VGWN3YkzA

GeFroceのGPUアップグレード検討

以前の検討:2019年8月個人向け深層学習・機械学習向けGPU
現在利用しているGPU:GeForce GTX 1660 SUPER 導入しました

現在、MSI GeForce GTX 1660 SUPER AERO ITX OCを利用しております。
6GB GDDR6のメモリ容量となります。23,122円で購入しました。

ディープラーニング(Deep Learning)深層学習、ニューラルネットワーク(ディープニューラルネットワーク、Deep Neural Network: DNN)による機械学習向けにGeForceを利用しておりました。
外出自粛や在宅勤務など、自宅で過ごす時間も増えて、Zoom, Skype, Microsoft Teams, WebExなどのオンラインでのコミュニケーションや、パソコンのゲームも行うようになりました。

  • YOLO, DarknetなどDNN実施時のGPUメモリ不足(out of memory)回避、メモリ不足回避の学習回数増加による学習時間増加
  • 画像関係のDNNでは、GPUメモリ不足により、満足に学習自体実行が出来ないケースあり
  • 趣味の範囲なので、過剰な投資は出来ない
  • PCでヘビーでないゲームを行う。モニタ出力にDisplayPortを利用したい
  • メモリ容量が増えるが目的
  • そして今回は、RTXを利用したい
    (NVIDIA RTX VoiceでZoomなどの際のノイズ除去を行いたい)
    NVIDIA RTX Voice 最強のノイズ除去

グラフィックカードのメーカーですが、NVIDIAかAMDとなり、それぞれNVIDIAからGeForce、AMDからRadeonがリリースされています。
各種ツールとの親和性を考えると、GeForce一択となりました。

NVIDIAのGeForce RTX 20XXシリーズ(2060 SUPER、2070、2060)やGeForce GTX 16XXシリーズ(1660 SUPER、1660 Ti、1660)が現行モデルとなります。

今回検討している、RTX20シリーズですが、深層学習用のテンソルコア(Tensor Core)搭載となります。4×4行列の積和算を4つ並列に行う事が出来るようになり、Tensor Coreを使えば、CNNの畳み込み高速化、メモリ転送の効率化などにより、前世代の Pascal GPU と比べて、学習(トレーニング)速度が4 倍になるようです。
Volta Tensor コア GPU が AI パフォーマンスの新記録を達成新しいウィンドウで開きます

消費電力も、現在のパソコンケースの電源サイズや電気料金にも影響するので、一応比較軸に入れます。消費電力とTDP:Thermal Design Power(熱設計電力)は混同されて利用されています。TDPは、電源および冷却に関する指標を示す数字となります。

NVIDIAのGPUコアは「CUDA(クーダ)コア」と呼ばれます。一般的には「シェイダープロセッサ(Shader Processor)」、「ストリームプロセッサ(Stream Processor)」などと呼びます。

GPU導入候補比較表

価格帯を考え、第一候補は、2060 SUPERと2060の価格差に価値があるかないかの判断となりました。パソコンパーツの需要が大きいようで、全体的に値段が高めです。3,000円から5,000円程度安く購入できるタイミングがあると思います。

GPUGeForce GTX 1660 SUPERGeForce RTX 2070 SUPERGeForce RTX 2070GeForce RTX 2060 SUPERGeForce RTX 2060
価格イメージ
2020/07
32,00065,50048,00046,50039,000
メモリサイズ6GB8GB8GB8GB6GB
メモリ規格GDDR6GDDR6GDDR6GDDDR6GDDR6
CUDA(SP数)14082560230421761920
消費電力125W235W175W175W160W
サイズ204x128x42 mm258x127x43 mm232x127x42 mm205x127x43 mm216x132x42 mm

MSIの GeForce GTX / RTX のVENTUSモデルをベースに比較

性能比較:[ドスパラ]グラフィックボード・ビデオカード性能比較ベンチマークテスト

個人深層学習向けGPU比較結果

  1. 機械学習をメインに考えメモリサイズ8Gを選択。価格的に2070も視野に入るが、現行モデルの2060 SUPERを選択
  2. 妥協なく、最善の選択だと思います。
    前回、RTX 2060とGTX 1060 SUPERを比較し、価格理由で1060 SUPERを選択しました。やはり、妥協ない選択がベストです。
  3. RTXでなければ、GTX 1060 SUPERはコストパフォーマンスも高く今でもお勧めのグラフィックカードです。

created by Rinker
MSI
¥65,980 (2024/12/22 09:38:21時点 Amazon調べ-詳細)

OPENCV 4.2の DNN が NVIDIA Cuda に対応

OpenCV の4.2より、OpenCVのdnnが、NVIDIA のGPUに対応していたようです。
しかも、NVIDIAのJetson Nanoでも利用可能でした。

とても驚きのトピックでした。
早速、NVIDA Jetson Nanoに導入し、YOLO / Darknet の推論を動作させてみました。
少し、導入に癖があったので、導入時のメモを公開しておきます。

Led by dlib’s Davis King, and implemented by Yashas Samaga, OpenCV 4.2 now supports NVIDIA GPUs for inference using OpenCV’s dnn module, improving inference speed by up to 1549%!

Pythonから、NVIDIA GPUのCUDAを用いた、OpenCVのDNNを利用する際のコードはBackendとTargetを以下のようにCUDAに設定します。

net.setPreferableBackend(cv.dnn.DNN_BACKEND_CUDA)
net.setPreferableTarget(cv.dnn.DNN_TARGET_CUDA)

導入した環境

2020/08/20追記:
JetPack4.4とOPENCV4.4.0でインストールできました。

  • JetPack 4.3 (4.4では、OPENCVコンパイル時に、CuDNNがうまくコンパイルできず)
    Jetpack 4.3 Archive
  • OPENCV 4.3.0 (4.2.0でもインストール出来ました)

created by Rinker
NVIDIA
¥19,000 (2021/08/19 16:46:56時点 Amazon調べ-詳細)

導入方法

NVIDIA Jetson NanoのOpencvコンパイル用のスクリプトは、公式が公開したこともあり、各種エンハンスされ公開されています。
今回は、結構最近に公開されたとみられる、4.3.0向けのスクリプトを利用します。

Build OpenCV on Nvidia Jetson Nano

ポイントは、コンパイルオプションに以下を追加します。

  • WITH_CUDA
  • WITH_CUDNN

インストールスクリプト

コンパイルオプションを追加した、スクリプトを公開しておきます。

./Build_OpenCV.sh でインストールは完了します。
./Build_OpenCV.sh <version> で、指定したバージョンのOPENCVがインストール出来るようです。

実際にコンパイルした際の構成も公開しておきます。

NVIDIA CUDA: YES (ver 10.0, CUFFT CUBLAS FAST_MATH)
NVIDIA GPU arch: 53 62 72 -- NVIDIA PTX archs:
cuDNN: YES (ver 7.6.3)

-- General configuration for OpenCV 4.3.0 =====================================
--   Version control:               4.3.0
--
--   Extra modules:
--     Location (extra):            /tmp/build_opencv/opencv_contrib/modules
--     Version control (extra):     4.3.0
--
--   Platform:
--     Timestamp:                   2020-05-25T01:56:52Z
--     Host:                        Linux 4.9.140-tegra aarch64
--     CMake:                       3.10.2
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /usr/bin/make
--     Configuration:               RELEASE
--
--   CPU/HW features:
--     Baseline:                    NEON FP16
--       required:                  NEON
--       disabled:                  VFPV3
--
--   C/C++:
--     Built as dynamic libs?:      YES
--     C++ standard:                11
--     C++ Compiler:                /usr/bin/c++  (ver 7.5.0)
--     C++ flags (Release):         -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG
--     C++ flags (Debug):           -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
--     C Compiler:                  /usr/bin/cc
--     C flags (Release):           -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG
--     C flags (Debug):             -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
--     Linker flags (Release):      -Wl,--gc-sections -Wl,--as-needed
--     Linker flags (Debug):        -Wl,--gc-sections -Wl,--as-needed
--     ccache:                      NO
--     Precompiled headers:         NO
--     Extra dependencies:          m pthread cudart_static -lpthread dl rt nppc nppial nppicc nppicom nppidei nppif nppig nppim nppist nppisu nppitc npps cublas cudnn cufft -L/usr/local/cuda/lib64 -L/usr/lib/aarch64-linux-gnu
--     3rdparty dependencies:
--
--   OpenCV modules:
--     To be built:                 alphamat aruco bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hdf hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor ml objdetect optflow phase_unwrapping photo plot python2 python3 quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
--     Disabled:                    world
--     Disabled by dependency:      -
--     Unavailable:                 cnn_3dobj cvv java js matlab ovis sfm ts viz
--     Applications:                apps
--     Documentation:               NO
--     Non-free algorithms:         YES
--
--   GUI:
--     GTK+:                        YES (ver 3.22.30)
--       GThread :                  YES (ver 2.56.4)
--       GtkGlExt:                  NO
--     OpenGL support:              NO
--     VTK support:                 NO
--
--   Media I/O:
--     ZLib:                        /usr/lib/aarch64-linux-gnu/libz.so (ver 1.2.11)
--     JPEG:                        /usr/lib/aarch64-linux-gnu/libjpeg.so (ver 80)
--     WEBP:                        build (ver encoder: 0x020f)
--     PNG:                         /usr/lib/aarch64-linux-gnu/libpng.so (ver 1.6.34)
--     TIFF:                        /usr/lib/aarch64-linux-gnu/libtiff.so (ver 42 / 4.0.9)
--     JPEG 2000:                   build Jasper (ver 1.900.1)
--     OpenEXR:                     build (ver 2.3.0)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
--     PFM:                         YES
--
--   Video I/O:
--     DC1394:                      YES (2.2.5)
--     FFMPEG:                      YES
--       avcodec:                   YES (57.107.100)
--       avformat:                  YES (57.83.100)
--       avutil:                    YES (55.78.100)
--       swscale:                   YES (4.8.100)
--       avresample:                YES (3.7.0)
--     GStreamer:                   YES (1.14.5)
--     v4l/v4l2:                    YES (linux/videodev2.h)
--
--   Parallel framework:            pthreads
--
--   Trace:                         YES (with Intel ITT)
--
--   Other third-party libraries:
--     Lapack:                      YES (/usr/lib/aarch64-linux-gnu/liblapack.so /usr/lib/aarch64-linux-gnu/libcblas.so /usr/lib/aarch64-linux-gnu/libatlas.so)
--     Eigen:                       YES (ver 3.3.4)
--     Custom HAL:                  YES (carotene (ver 0.0.1))
--     Protobuf:                    build (3.5.1)
--
--   NVIDIA CUDA:                   YES (ver 10.0, CUFFT CUBLAS FAST_MATH)
--     NVIDIA GPU arch:             53 62 72
--     NVIDIA PTX archs:
--
--   cuDNN:                         YES (ver 7.6.3)
--
--   OpenCL:                        YES (no extra features)
--     Include path:                /tmp/build_opencv/opencv/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
--
--   Python 2:
--     Interpreter:                 /usr/bin/python2.7 (ver 2.7.17)
--     Libraries:                   /usr/lib/aarch64-linux-gnu/libpython2.7.so (ver 2.7.17)
--     numpy:                       /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.13.3)
--     install path:                lib/python2.7/dist-packages/cv2/python-2.7
--
--   Python 3:
--     Interpreter:                 /usr/bin/python3 (ver 3.6.9)
--     Libraries:                   /usr/lib/aarch64-linux-gnu/libpython3.6m.so (ver 3.6.9)
--     numpy:                       /usr/local/lib/python3.6/dist-packages/numpy/core/include (ver 1.16.1)
--     install path:                lib/python3.6/dist-packages/cv2/python-3.6
--
--   Python (for build):            /usr/bin/python2.7
--
--   Java:
--     ant:                         NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
--
--   Install to:                    /usr/local

created by Rinker
NVIDIA
¥19,000 (2021/08/19 16:46:56時点 Amazon調べ-詳細)

参考サイト

ついに決めた、GeForce GTX 1660 SUPER

本日は、クリスマス。アマゾンサンタが昨日持ってきてくれたぞ!!

YOLO/Darknetなどの画像系の機械学習を動かし始めた当初より困っていたGPU。
やはり、GPUの物理メモリサイズは、画像学習の精度に学習速度に大きく関わります。

10月29日に発表されたようで、今回再度調べた際に、一番のコストパフォーマンスが感じられ、すぐに購入しました。
Amazonで、10%の値引きも入り23,122円で購入出来ました。

最初に、GPUをあれこれ、考えた際の記事はこちら:
2019年8月個人向け深層学習・機械学習向けGPU

  • YOLO, DarknetなどDNN実施時のGPUメモリ不足(out of memory)回避、メモリ不足回避の学習回数増加による学習時間増加
  • 画像関係のDNNでは、GPUメモリ不足により、満足に学習自体実行が出来ないケースあり
  • 趣味の範囲なので、過剰な投資は出来ない(個人的には2−3万円以内)
  • PCで基本的にゲームなどは実施しない、モニタもHDMI接続1台
  • GPUメモリ容量を増やしたい

GeForce GTX 1660 SUPER

GeForce GTX 1660 SUPERは、発売済みのGPUであるGeForce GTX 1660とGeForce GTX 1660 Tiの中間に位置します。

GPUコアのベースクロックは1,530MHzで、ブーストクロックは1,785MHz。これらのスペックはGeForce GTX 1660とまったく同じだ。

VRAMには、14Gbps動作のGDDR6メモリを6GB搭載。VRAMとGPU間は192bitのメモリインターフェイスで接続しており、メモリ帯域幅は336GB/sに達している。これはGDDR5メモリを採用していたGeForce GTX 1660の192GB/sを75%上回り、上位モデルであるGeForce GTX 1660 Tiの288GB/sをも上回る。メモリ帯域は、上位機種の2060同じ。

つまり、1660のGPUコア性能とGDDR6による高速アクセス可能なメモリが実装されました。そして、値段も当然中間の位置づけ。ただし、もっと1660に近い。
驚くのは、各種ベンチマーク結果。
1660 Tiの性能域にすごく近いです。価格は、1660に近く性能は、上位のTiに近い。
これは、絶妙なポジショニングと思います。
さらに、機械学習ではGPUメモリ内のデーターを繰り返し処理するので、学習時間に大きく寄与できると思います。

検討機種の比較表

10%の割引がなくてもGeForce GTX 1660相当です。機械学習にはおすすめだと思います。
特に、私のような学習をGPU、通常時の推論をシングルボードなど、非力なマシンで動作させるケースでは、十分なGPUだと思います。

GPUGeForce GTX 960GeForce RTX 2060GeForce GTX1660TiGeForce 1660 SUPERGeForce GTX1660
価格イメージ
2019/08
当時購入金額
25,000
42,000
38,000
36,000
30,000
23,122円28,000
26,000
メモリサイズ2GB6GB6GB6GB6GB
メモリ規格GDDR5GDDR6GDDR6GDDR6GDDDR5
メモリ帯域112GB/s336GB/s288GB/s336GB/s192GB/s
CUDA(SP数)10241920153614081408
消費電力120W160W120W125W120W

ぜひ、各種ベンチマーク結果なども、WEBで調べて見て下さい。

YOLO動作環境

YOLO v3を動作することが出来なかったので、利用を見送りましたが、darkflowというフレームワークを導入したので、インストール方法を残しておきます。

pipやaptでインストール出来なかったですが、gitよりダウンロードし簡単に導入出来ます。

NVIDIA Jetson Nano、Raspberry Piで導入し、動作テストを実施しました。

git clone https://github.com/thtrieu/darkflow.git
cd darkflow
pip3 install .

created by Rinker
NVIDIA
¥19,000 (2021/08/19 16:46:56時点 Amazon調べ-詳細)

 

ディープラーニング NVR DVA3219

実はニーズドンピシャの商品。
SynologyのNASにGeforceが搭載され、まさに機械学習が画像検出向けの製品です。

私自身は、Synologyがデータ保管に、情報発信。
機械学習などは、NVIDIAのJetsonやRaspberry PiとIntel NCS2を利用したシステムを組んでいるので、このNVR DVA3219がうまく利用出来れば、全てを賄うことが出来ます。

NAS + 推論マシン = NVR DVA3219

しかも、しっかりとしたGPUなので、ネットワークカメラのみをエッジデバイスとして配置し、集中したシステム管理ができそうです。

自由度が分かれ目

ライトユーザーで、そのまま監視カメラを利用するには、ハードがオーバースペックで割高を感じると思います。逆に、どこまで自由にNAS OSをユーザーに触らされるかで、新しいフレームワークなどが日々現れる人工知能などの分野のユーザーが満足出来る製品なのか、難しい部分。
やはり、ライトユーザー狙いでないと、自作系には価格にも勝てないので、私はこの製品のターゲットからずれているのかなと感じております。やはり、色々自分もカスタマイズして、機械学習などの旨味を出来る範囲で、最大限に味わいたい。

高めの価格設定

非常に面白い商品構成、今後ベアボーンなども類推デバイスとして、GPU搭載などが出てくると予想される、その火付け役となってほしいです。
まだまだ、試行錯誤の機械学習や人工知能分野、パッケージ化などはもう少し先でしょうか?やはり、プラグイン感覚で、どんどん出来ることが増えていくのでしょうか?どんなプラットフォームがデファクトとなるのでしょうか? 実は、5G+スマホだったり!?

Synology ディープラーニング Network Video Recorder DVA3219 HDD非搭載モデル【在庫目安:お取り寄せ】| カメラ ネットワークディスクレコーダー ネットワークビデオレコーダー 監視 録画 ネットワークカメラ