Latest evidence-based health information
Vision

LinuxでのGPUハードウェアアクセラレーションの仕組み

LinuxでのGPUハードウェアアクセラレーションの仕組み
LinuxでのGPUハードウェアアクセラレーションの仕組み

現在のPCのプロセッサは通常、あらゆる種類のコンテンツをスムーズに処理できるほど強力です。しかし、ビデオの視聴など、一部のプロセスではプロセッサに大きな負荷がかかります。

ただし、インターネット接続が十分に速くなかったり、PC のパフォーマンスが不十分な場合は、ストリーミング プロバイダーが自動的にビデオ品質を下げるため、再生は通常はスムーズです。

それでも、CPU の負荷を軽減することは、消費電力が削減され、ノートパソコンのバッテリー寿命が延びるため、理にかなっています。

PCのグラフィックユニット(GPU)は、メインプロセッサ、独立したグラフィックチップ、または専用グラフィックカードに搭載されています。GPUはデスクトップの表示以外にはあまり機能しませんが、ビデオの再生(デコード)に関しては、グラフィックチップの方がCPUよりも処理能力が高いことがよくあります。

GPUは、動画を他のフォーマットに変換する(エンコードする)際にも役立ちます。全体的な消費電力が削減され、動画を高画質で再生したり、より高速に変換したりできるようになります。

詳しい説明: Linux の高速なグラフィックスを使用して、ビデオを Web 上で見ることができます。 Dem Browser muss man Hardwarebeschleunigung erst beibringen です。

パフォーマンスの向上:Linuxでは、ウェブ上で動画を視聴する際に、最速のグラフィックカードであってもほとんど活用されません。まずブラウザにハードウェアアクセラレーションを設定する必要があります。

IDG

LinuxでのGPU利用

Linux では、ハードウェア アクセラレーションがグラフィック チップで利用できるかどうか、またどのように利用できるかは、いくつかの要因によって異なります。

  • グラフィックチップのモデルとその機能
  • 使用されたドライバー
  • ディスプレイプロトコル(X11またはWayland)
  • それぞれのソフトウェア(ブラウザ、ビデオプレーヤー、ビデオエディタ)
Nvidia の例: コーデックに関するハードウェアの詳細については、グラフィックチップを参照してください。 Neuere Modelle haben meist mehr zu bieten。

例:Nvidia:古いグラフィックチップは、現在ではあまり一般的ではないコーデックのハードウェアアクセラレーションのみをサポートすることがよくあります。新しいモデルは通常、より多くの機能を備えています。

IDG

ハードウェア アクセラレーションに使用できるさまざまなアプリケーション領域用のインターフェイスもいくつかあります。

  • Vulkanは主にゲームで使用されますが、ビデオの再生時にも使用できます。
  • Open GLは Vulkan の前身であり、デスクトップおよびゲームでの 2D/3D ベクター グラフィックスのサポートを提供します。
  • Vdpau はビデオ再生用のハードウェア アクセラレーションを提供し、Nvidia から提供され、AMD グラフィック ドライバーでもサポートされています。
  • CUDAは、NVIDIAのプログラミングインターフェース(API)であり、プログラムの一部をグラフィックプロセッサ(GPU)で処理することができます。このAPIは、AIアプリケーションや、ビデオの再生(NVDEC)や変換(NVENC)などに使用されます。
  • VA-API は、 AMD および Intel GPU を使用してビデオをデコードおよびエンコードするためのインターフェイスです。
  • Quick Sync Video は、 VA-API を介してアクセスされる Intel GPU のハードウェア アクセラレーションの名前です。

メディアプレーヤーは通常、利用可能なインターフェースを自動的に認識し、デフォルトでハードウェアアクセラレーションを使用します。一方、Webブラウザは、一般的なグラフィックチップではこの機能を提供していないことが多いです。

現在のグラフィックチップは、H264(AVCHD)、H265(HEVC)、VP9コーデックの再生にハードウェアアクセラレーションを提供しています。例えばYouTubeは通常H264またはVP9を使用しているため、十分な性能を備えていると言えます。

Nvidia、Intel、AMD のチップで何ができるのかを知ることができます。

VA-API の優先: コンピューターのグラフィックチップのデコーディレンとエンコーディレン (「VAEntrypointEncSliceLP」) を含む、すべてのコーデックのリストを表示します。

VA-API を確認します。vainfo ツールは、コンピューターのグラフィック チップでサポートされているデコードおよびエンコード用のコーデック (「VAEntrypointEncSliceLP」) を一覧表示します。

IDG

近い将来、YouTubeはVP9の改良版であるライセンス料無料のAV1コーデックへの移行を進めていくでしょう。Netflixも将来的にAV1を使用する予定です。

ただし、AV1のハードウェアアクセラレーション(デコーダー)を提供しているのは、Intel Tiger Lake(第11世代)やNvidia GeForce RTX 2050以降のグラフィックチップのみです。AV1エンコーダーを使用して変換する場合は、GeForce RTX 4050、AMD Radeon RX 7000、またはIntel Arc以降のグラフィックカードが必要です。

グラフィックチップがフォーマットをサポートしている場合でも、ドライバーとインターフェースも互換性がある必要があります。例えば、VLCはNvidiaドライバーがインストールされている場合、ハードウェアアクセラレーションにVdpauを使用できます。

しかし、Mozilla FirefoxやGoogle ChromeなどのブラウザはVA-APIに依存しており、Nvidiaドライバはこれをサポートしていません。VA-APIに対応した適切なドライバ(「nvidia-vaapi-driver」)は、Ubuntu 23.04以降のディストリビューションリポジトリでのみ公式に提供されています。VA-APIのサポートはIntelグラフィックスでは標準で含まれており、AMDドライバはVA-APIとVdpauをサポートしています。

Nvidia チップ用のオープン ソース ドライバー Nouveau も VA-API と VDPAU をサポートしていますが、GeForce 700 や 600 などの古いチップセットのみをサポートしています。

Intelチップのサポートを確認する

Intelのグラフィックユニットは通常、PCのCPUに搭載されています。Quick Sync Videoは、2011年頃からSandy Bridgeプロセッサ(Intel HD Graphics 2000および3000)に搭載されています。Linuxディストリビューションには、必要なドライバーが標準で含まれています。

VA-API in der Praxis: Im Terminal gestartet der VLC Media Player aus, ob er ``hardware decoding'' verwendet. Das Tool intel_gpu_top zeigt die GPU-Auslastung。

VA-API の実践: ターミナルで起動すると、VLC メディア プレーヤーは「ハードウェア デコード」を使用しているかどうかを示します。intel_gpu_top ツールは GPU の使用率を表示します。

IDG

チップセットの機能を確認するには、同名のパッケージからインストールできるvainfoツールをターミナルで使用できます。このツールは、VA-APIとIntelドライバーのバージョン番号を表示します。

サポートされているコーデックプロファイル(「VAProfileH264Main」や「VAProfileVP8Version0_3」など)も確認できます。「VAEntrypointEncSliceLP」が追加されているのは、このコーデックでエンコード(つまり、この形式への高速変換)も提供されていることを示しています。

プログラムが実際にVA-APIを使用しているかどうかを確認するには、別のツールをインストールします。

sudo apt install intel-gpu-tools

ターミナルで。それから

sudo intel_gpu_top

そして別の端末でメディアプレーヤーVLCを以下の形式で呼び出します。

vlc 

ビデオが VP9 や H264 などのコーデックでエンコードされている場合、VLC は VA-API と関連ドライバーの使用に関する情報を提供し、intel_gpu_top は GPU の使用率を表示します。

注: PCにNvidiaの専用グラフィックカードが搭載されている場合、Intelグラフィックユニットの機能は使用できません。ハイブリッドグラフィックを搭載したノートパソコンの場合は、Nvidia X Server設定ツールの「PRIMEプロファイル」からIntelチップに切り替えることができます。このオプションが利用できない場合は、ターミナルで以下を実行してください。

sudo prime-select intel

その後、ログアウトして再度ログインする必要があります。より強力なNvidiaチップに切り替えるには、「intel」を「nvidia」または「on-demand」(必要な場合)に置き換えてください。

VA-APIを使ってFirefoxで動画を再生する

Firefox は、デフォルトで X11 (Linux Mint) および Wayland (Ubuntu) での VA-API のサポートを提供します。

機能を確認するには、内部アドレス「about:support」にアクセスしてください。「グラフィック」セクションの下、「Composing」の後に「WebRenderer」が表示されます。ここに「WebRenderer(ソフトウェア)」と表示されている場合は、ハードウェアアクセラレーションが有効になっていません。「メディア」の項目で、ハードウェアデコードが利用可能なコーデックを確認できます。

ここで、高解像度の YouTube サンプル動画のリストを呼び出すことができます。

ビデオのコンテキストメニューから「関係者向け統計情報」を表示します。「コーデック」の後の行が「av01」で始まる場合、ハードウェアアクセラレーションはグラフィックチップが既にそのフォーマットをサポートしている場合にのみ利用できます。

「品質」の後ろにある歯車の記号をクリックして、「コーデック」の後ろに「vp09」が表示されるまで、さまざまな解像度を試してみてください。

Firefoxに「Your Codecs」拡張機能をインストールして、VP8、VP9、またはAV1形式をブロックすることもできます。すべての形式がブロックされている場合、YouTubeはAVC1コーデック(H.264)で動画を配信しますが、通常は1080pまでの低解像度でしか配信されません。

左上のハンバーガーメニュー(横線3本)からアクセスできるYouTube設定の「再生とパフォーマンス」で動作を調整できます。グラフィックチップがAV1をサポートしていない場合は、「AV1設定」で「SDにはAV1を優先」オプションを有効にしてください。

YouTubeは低解像度時にのみAV1を使用するため、CPU負荷が軽減されます。それ以外の場合はVP9などの他の形式に切り替わります。ターミナルで以下を実行できます。

sudo intel_gpu_top

GPU からのサポートによって CPU の負荷がどの程度軽減されるかを確認します。

AMD グラフィックチップの詳細: Radeon プロファイルの最新情​​報は、AMD-GPU とグラフィックプロセッサの温度に関する情報です。

AMD グラフィック チップを監視: Radeon プロファイルは、使用されている AMD GPU に関する情報を表示し、グラフィック プロセッサの温度と使用率を表示します。

IDG

AMDグラフィックチップ: Linuxは必要なドライバーを自動的にセットアップし、vainfoで機能を確認できます。ツールに何も表示されない場合は、カーネルモジュールがチップセットをサポートしていない可能性があります。

新しいAMDグラフィックカードの場合は、カーネルバージョン6.2以降を使用する必要があります。Ubuntu 22.04は、アップデートを通じてこのバージョンを自動的にインストールします。Linux Mint 21をお使いの場合は、「システム管理」>「アップデート管理」に移動し、メニューから「表示」>「Linuxカーネル」を選択します。より新しいカーネルバージョンを選択し、「インストール」をクリックしてください。

GPU の使用率を確認する場合は、次の 3 行で Radeon-Profile ツールをインストールします。

sudo add-apt-repository ppa:radeon-profile/stable
sudo apt update
sudo apt install radeon-profile

ビデオを再生するとすぐに、「GPU 使用量」の値が増加します。

Google ChromeとChromium

Chromiumベースのブラウザでハードウェアアクセラレーションを有効にする方法については、インターネット上に多くのヒントが出回っています。プログラムのバージョンとデスクトップ環境によっては、うまくいくかもしれません。

弊社のテストでは、Google ChromeとChromiumは動作しませんでした。原因の一つは、UbuntuとLinux MintのVA-APIのバージョンが古いことです。これらのブラウザは現在、AMDグラフィックチップでは動作しません。AMDグラフィックチップのバージョンに関わらず動作しません。そのため、この説明はIntelグラフィックチップにのみ適用されます。

Chromium での機能: Linux Mint のハードウェアを使用してブラウザを使用する場合は、VA-API バージョンを確認してください。アイン・アップデート・カン・アビヒルフェ・シャッフェン。

Chromiumのエラーメッセージ:VA-APIの最新バージョンがないと、Linux Mintではブラウザでハードウェアアクセラレーションを使用できません。アップデートで改善される可能性があります。

IDG

手間を惜しまなければ、ライブラリとドライバーを更新することもできます。これを行うには、「build_intel_ media.sh」(Intelチップのみ)というスクリプトを使用します。このスクリプトは、開発に必要なプログラムパッケージをインストールし、ソースコードを「$HOME/src」フォルダにダウンロードして、ファイルをコンパイルします。その後、Linuxを再起動します。

ターミナルでvainfoを実行すると、VA-APIバージョン1.21(またはそれ以降)が表示されます(以前は1.14)。Linux Mintでは、アプリケーション管理からChromiumをシステムパッケージとして設定してください。Google Chromeはまだ新しいVA-APIに対応しておらず、UbuntuのSnapパッケージも対応していません。

ブラウザを起動し、テスト動画を再生します。別のタブで内部アドレス「chrome://gpu」を開きます。「ビデオデコード:」の後ろに「ハードウェアアクセラレーション」と表示されますが、これは意味がありません。Chromiumはハードウェアアクセラレーションが理論上可能な場合にのみこの情報を提供するためです。詳細情報は「chrome://media-internals」で確認できます。

ビデオの再生中に、「(kPlay)」という追加リンクをクリックしてください。GPUアクセラレーションが有効な場合は、「kVideoDecoderName」の後に「VaapiVideoDecoder」が表示されます。

Nvidia 向け VA-API の改造

Ubuntu 22.04 または Linux Mint 21 ではすでに VA-API ドライバーを使用できます。ただし、ソース コードからドライバーを自分で作成する必要があります。

前提条件として、バージョン470、500以降のNvidia専用ドライバが有効化されている必要があります。VA-APIドライバは主にFirefoxのハードウェアアクセラレーションを目的としており、他のソフトウェアでは動作が保証されていません。

さらに、このドライバーはWaylandでは最適に動作せず、特にSnapまたはFlatpakとしてインストールされたFirefoxでは動作しません。Linux Mintはこれらの要件を満たしており、Ubuntuユーザーはこちらの手順に従ってください。

Nividia チップを使用した VA-API: Firefox の機能に関するハードウェアの分析、Nvidia X サーバー設定に関する「ビデオ エンジンの使用率」に関するヒントを参照してください。

Nividia チップ搭載の VA-API: Firefox でハードウェア アクセラレーションが機能する場合、Nvidia X サーバー設定の「ビデオ エンジン使用率」の後ろにパーセンテージ値が表示されます。

IDG

Nvidia ドライバーをインストールするには (まだインストールされていない場合)、Ubuntu ユーザーは「アクティビティ」で「ドライバー」を検索し、「追加ドライバー」をクリックします。

Linux Mint では、「ドライバー管理」を経由します。バージョン番号が最も高く、「独自仕様、テスト済み」(Linux Mint では「推奨」)と表示されているドライバーを選択します。「変更を適用」をクリックし、インストールが完了したら Linux を再起動します。

VA-API ドライバーを作成するには、ターミナルにいくつかのパッケージをインストールします。

sudo apt install build-essential git meson gstreamer1.0-plugins-bad libffmpeg-nvenc-dev libva-dev libegl-dev cmake pkg-config libdrm-dev libgstreamer-plugins-bad1.0-dev

次に、作業ディレクトリを作成し、ソース コード (4 行) をダウンロードします。

mkdir ~/src && cd ~/srcwget https://github.com/elFarto/nvidia-vaapi-driver/archive/refs/tags/v0.0.11.tar.gztar xvf v0.0.11.tar.gzcd nvidia-vaapi-driver-0.0.11

必要に応じてバージョン番号を調整してください。その後、コンパイルしてインストールします。

meson setup buildsudo meson install -C build

ドライバーをコンパイルしてインストールします。

Firefox 用の Nvidia VA API ドライバーを有効にする

Linuxがドライバーをロードするには、環境変数を設定する必要があります。テキストエディタで管理者権限で「/etc/environment」ファイルを開き、以下の3行を追加します。

export LIBVA_DRIVER_NAME=nvidiaexport MOZ_DISABLE_RDD_SANDBOX=1export NVD_BACKEND=direct

が追加されます。最後の行は、現在バージョン525以降のNvidiaドライバで必須です。Linuxカーネルにも通知する必要があります。テキストファイル「/etc/default/grub」をルート権限で開き、「GRUB_CMDLINE_LINUX_DEFAULT」行にこのオプションを追加してください。

nvidia-drm.modeset=1

次にターミナルで実行する

sudo update-grub

変更を有効にするには、Linuxを再起動してください。vainfoで正しい関数が動作しているかどうかを確認できます。ツールは「vainfo: ドライバーバージョン: VA-API NVDEC ドライバー [直接バックエンド]」と出力します。

Firefox が新しいドライバーを認識できるように、いくつか設定を変更する必要があります。安全のため、まずは新しいユーザープロファイルを使用して設定をテストしてください。

ターミナルで、

firefox -P

新しいプロファイルを作成して起動します。「about:config」アドレスを呼び出して、以下の3つのオプションを設定します。

media.ffmpeg.vaapi.enabled
media.rdd-ffmpeg.enabled
widget.dmabuf.force-enabled

それぞれ「true」に設定し、Firefoxを再起動します。

GPU 使用率をテストするには、Nvidia X Server 設定を起動し、「GPU 0」([Nvidia モデル])をクリックします。ハードウェア アクセラレーションを使用すると、「GPU 使用率」と「ビデオ エンジン使用率」の値が増加します。

この記事はもともと当社の姉妹誌 PC-WELT に掲載され、ドイツ語から翻訳およびローカライズされました。

Otpoo

Health writer and researcher with expertise in evidence-based medicine and healthcare information.