0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GPUをフル活用する!DockerでChromeを音声付き・高速描画でホストPCに表示する方法

Last updated at Posted at 2024-08-13

はじめに

前回の記事では、Dockerで動作するChromeを音声サポート付きでホストPCのXサーバーに表示する方法を詳しく解説した。

本記事では、Docker内でGoogle ChromeをGPU有効化して動作させる方法を確認する。最初にGPUを有効にするための基本設定を行い、その効果を確認する。

DockerでGPUを有効にする

DockerでGPUを有効にするためには、ホストマシンのGPUデバイスをコンテナ内に共有する必要がある。これを実現するために、 --device /dev/driオプションを使用する。このオプションにより、コンテナ内のアプリケーションがホストのグラフィックデバイスにアクセスし、ハードウェアアクセラレーションを利用できるようになる。

使用するDockerfile

前回の記事で作成したDockerfileを利用する。このDockerfileを使用することで、コンテナを簡単にビルドして音声サポート付きのGoogle Chromeを実行できる。

前回の記事でDockerイメージをすでに作成済みであればGPUを有効にしてDockerイメージを起動するから進めれば良い

Dockerfileを作成する

適当なディレクトリにDockerfileを作成する

# 適当なワークディレクトリに移動
mkdir -p /tmp/test
cd /tmp/test

# 上記のDockerfileの内容をコピペして作成
vi Dockerfile
Dockerfile
FROM ubuntu:24.04

ENV DEBIAN_FRONTEND=noninteractive
ENV DISPLAY=:0
ENV PULSE_SERVER=unix:/run/user/1000/pulse/native

RUN apt-get update && \
    apt-get install -y wget pulseaudio socat alsa-base \
    libcanberra-gtk-module libcanberra-gtk3-module \
    fonts-ipafont-gothic fonts-ipafont-mincho fonts-noto-cjk \
    language-pack-ja dbus-x11 && \
    wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
    apt-get install -y ./google-chrome-stable_current_amd64.deb --no-install-recommends && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# D-Busの設定と起動を行うスクリプトを作成
RUN echo "#!/bin/bash\n\
/etc/init.d/dbus start\n\
export XDG_RUNTIME_DIR=/run/user/\$(id -u)\n\
mkdir -p \$XDG_RUNTIME_DIR\n\
chmod 700 \$XDG_RUNTIME_DIR\n\
chown \$(id -un):\$(id -gn) \$XDG_RUNTIME_DIR\n\
export DBUS_SESSION_BUS_ADDRESS=unix:path=\$XDG_RUNTIME_DIR/bus\n\
dbus-daemon --session --address=\$DBUS_SESSION_BUS_ADDRESS --nofork --nopidfile --syslog-only &\n\
exec \"\$@\"" > /start.sh && chmod +x /start.sh

CMD ["/start.sh", "google-chrome", "--no-sandbox", "--disable-gpu", "--disable-dev-shm-usage"]

Dockerイメージを作成する

# chrome起動用のDockerイメージを作成
docker build -t ubuntu24_chrome .

GPUを有効にしてDockerイメージを起動する

以下のコマンドを実行して、GPUを有効にした状態でUbuntu 24.04ベースのDockerコンテナを起動する。このコンテナ内でGoogle Chromeを動作させる。

ホストPCで実行
docker run -it --rm \
  --name ubuntu24 \
  --env="DISPLAY=$DISPLAY" \
  --env="PULSE_SERVER=unix:${XDG_RUNTIME_DIR}/pulse/native" \
  --volume="$HOME/.Xauthority:/root/.Xauthority:rw" \
  --volume="${XDG_RUNTIME_DIR}/pulse/native:${XDG_RUNTIME_DIR}/pulse/native" \
  --volume="/etc/machine-id:/etc/machine-id:ro" \
  --volume="/run/user/$(id -u)/pulse:/run/user/$(id -u)/pulse" \
  --network=host \
  --device /dev/dri \
  ubuntu24_chrome /bin/bash

DockerでGPUが利用可能か確認

コンテナ内でGPUが正しく利用できるかどうかを確認する。まず、mesa-utilsをインストールし、glxinfoコマンドを使ってGPUの状態を確認する。

Docker内で実行
apt-get update
apt-get install -y mesa-utils
glxinfo | grep "OpenGL renderer"

実行結果として、以下のようにGPUの名前が表示される場合、GPUが有効化されていることが確認できる。

IntelのGPUが有効の場合
OpenGL renderer string: Mesa Intel(R) Graphics (RPL-S)
GPUが無効の場合
MESA: error: Failed to query drm device.
glx: failed to create dri3 screen
failed to load driver: iris
failed to open /dev/dri/card1: No such file or directory
failed to load driver: iris
OpenGL renderer string: llvmpipe (LLVM 17.0.6, 256 bits)

GPUが無効・有効の場合

Chromeの起動方法の違い

GPUの有効・無効に応じて、Chromeの起動方法を使い分ける。以下は、その違いを示す例である。

Chromeの起動方法の違い
# GPU無効でChromeを起動
google-chrome --no-sandbox --disable-gpu --disable-dev-shm-usage

# GPU有効でChromeを起動
google-chrome --no-sandbox  --disable-dev-shm-usage

必要に応じてDockerからホストPCのXサーバーに接続するために以下のコマンドをホスト側のPCで実行しておく

ホストPCで実行
xhost +

Chromeのレンダリングステータスの確認

Google ChromeがGPUを使用してレンダリングしているかどうかを確認するには、chrome://gpuにアクセスする。以下の表は、GPU無効時と有効時のレンダリングステータスの違いを示している。

GPU無効 GPU有効
image.png image.png
ソフトウェアで描画する設定 ハードウェアアクセラレーションが有効

ベンチマーク

GPUの有効化によるパフォーマンスの違いを確認するために、SpacerocksというWebGLベンチマークを使用する。下の表は、GPUが無効な場合と有効な場合のフレームレートの違いを示している。

GPU無効 GPU有効
nogpu.gif gpu.gif
6fps 60fps

まとめ

本記事では、Dockerコンテナ内でGoogle Chromeを動作させる際にGPUを有効化する方法についてまとめ。GPUを利用することで、グラフィックスのレンダリング速度が大幅に向上し、Chromeの動作が快適になる。これにより、Webアプリケーションの開発やテスト環境をより実際のユーザー環境に近い形で構築することが可能になる。

xhost +を使わずに実現する方法

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?