Nvidia(MX150)を搭載したLaptopでUbuntuを利用しています。こうにゅうしてから放置していたのですが年末になってようやく動かせたのでメモを残しておきます。
- Nvidiaのドライバは、製品版とオープンソース版があります。
- (追記) Kernel 4.18.0-13-generic
環境の確認
今回導入するLaptopでのVideoカードの状態は下のようになっています。
lspci | grep -E "VGA|3D"
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)
01:00.0 3D controller: NVIDIA Corporation GP108M [GeForce MX150] (rev ff)
メモ)不要なドライバを消す
sudo apt-get --purge remove "nvidia-*"
sudo apt-get --purge remove "cuda-*"
ドライバの導入
利用可能なドライバは、Ubuntuの「追加のドライバ」でも見ることができますし、 ubuntu-drivers devices
コマンドでも確認することができる。色々試したのだが依存関係がすくないのかNvidiaの公式サイトからドライバをダウンロードして手動でインストールするのが一番確実であった。
- こちらの https://www.nvidia.co.jp/object/unix-jp.html から最新版のドライバをダウンロードします。
- 今回は、NVIDIA-Linux-x86_64-415.23.run をダンロードしました。
- 導入するためにXを終了します。
sudo init 3
をターミナルから実行します。 - コンソールにログインして先ほどダウンロードしたファイルを実行します。
sudo bash ./NVIDIA-Linux-x86_64-415.23.run
でCUIで導入が始まります。
ドライバの導入(追加)
nvidiaのドライバが公開されていたので以下のPPAを登録します。
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
ubuntu-drivers
に追加されていることを確認します。
❯❯❯ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:1c.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001D12sv00001D72sd00001703bc03sc02i00
vendor : NVIDIA Corporation
manual_install: True
driver : nvidia-driver-390 - distro free
driver : nvidia-driver-410 - third-party free
driver : nvidia-driver-430 - third-party free recommended
driver : nvidia-driver-415 - third-party free
driver : nvidia-driver-396 - third-party free
driver : nvidia-driver-418 - third-party free
driver : xserver-xorg-video-nouveau - distro free builtin
最新のバージョンを導入します
sudo apt install nvidia-driver-430
関連ソフトウェアの導入と設定
不足ドライバの導入
- (追記)この作業は不要
ここはちょっと何かわかっていないのですがメモ
https://qiita.com/rainytoffee/items/44deabd66608f00b8544
cd /tmp/
wget http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/tree/i915/skl_guc_ver6_1.bin
wget http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/tree/i915/kbl_dmc_ver1_01.bin
sudo cp /tmp/kbl_dmc_ver1_01.bin /lib/firmware/i915/kbl_dmc_ver1.bin
sudo cp /tmp/skl_guc_ver6_1.bin /lib/firmware/i915/skl_guc_ver6.bin
sudo update-initramfs -k $(uname -r) -u
VirtualGL
Bumblebee は VirtualGL によって裏の X サーバーで Optimus NVIDIA カードを使ってフレームをレンダリングし、表の X サーバーに転送を行います。フレームは転送される前に圧縮が施され、それによって帯域を節約して bumblebee の高速化・最適化とすることができます。
- こちらのサイト http://sourceforge.net/projects/virtualgl/files/ から debファイルをダウンロードします。
- 今回は、
virtualgl_2.6_amd64.deb
をダウンロードし、sudo dpkg -i virtualgl_2.6_amd64.deb
で導入を行います。
Bumblebee
ArchLinuxのドキュメントが詳しいのでNvidia関連を入れる人は一度見ておくと良いと思います。
https://wiki.archlinux.jp/index.php/Bumblebee
"Bumblebee は GNU/Linux システムで NVIDIA Optimus が搭載されたノートパソコンを動作させようという試みです。この機能では2枚のグラフィックカードを必要とし、異なる電源消費のプロファイルがレイヤーによって接続され1つのフレームバッファを共有することになります。"
sudo apt install bumblebee-nvidia bumblebee
sudo gpasswd -a `username` bumblebee
sudo service bumblebee start
Xorgの設定
常時NVIDAを利用する場合
Xorgにたいしてドライバを動作するように設定を行います。ここでのBusIDは lspci
の結果をもとに記載をします。
Section "Device"
Identifier "Intel"
Driver "intel"
BusID "PCI:0:2:0"
EndSection
Section "Device"
Identifier "nvidia"
Driver "nvidia"
BusID "PCI:1:0:0"
Option "AllowEmptyInitialConfiguration"
EndSection
通常はIntelドライバを利用する場合
Xorgにたいしてドライバを動作するように設定を行います。ここでのBusIDは lspci
の結果をもとに記載をします。
Section "Device"
Identifier "Intel"
Driver "intel"
BusID "PCI:0:2:0"
EndSection
実行結果
利用しているUbuntuのタスクバーにアプレットを入れてみました。動作中の場合には温度が表示されるようになっています。
-
予想に反して nvidiaの利用は自動的に止まります(動作してない場合には nvidia-smi コマンドが動作しません).Bumblebee
サービスを停止すると GPUが常に動き始めます。正しく切り替えが動作していると言えるのかもしれません。この状態でバッテリー駆動で利用してみましたが消費電力に影響は出ていませんでした(特別なことをしてない場合) -
(追記) 正しく構成されていれば、
optirun
を利用したプログラムを実行中のときにのみGPUが可動するように構成される。したがって通常には上記のタスクバーのアイコンはintel
になっており、利用しているときだけnvidia
のアイコンに変わることがわかる。 -
NvidiaのGPUが動作しているばあい 12-14W 程度消費、利用しない場合 9-10Wを消費(powertopで測定)
GPU利用確認
利用状況の確認 nvidia-smi
を実行
Fri Dec 28 21:42:31 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 415.23 Driver Version: 415.23 CUDA Version: 10.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce MX150 Off | 00000000:01:00.0 Off | N/A |
| N/A 42C P8 N/A / N/A | 6MiB / 2002MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 26712 G /usr/lib/xorg/Xorg 5MiB |
+-----------------------------------------------------------------------------+
動作していない場合には、以下のようなエラーが表示される
❯❯❯ nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
デモプログラムの実行
glxgears -info
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
GL_RENDERER = Mesa DRI Intel(R) UHD Graphics 620 (Kabylake GT2)
GL_VERSION = 3.0 Mesa 18.2.2
GL_VENDOR = Intel Open Source Technology C
304 frames in 5.0 seconds = 60.706 FPS
300 frames in 5.0 seconds = 59.942 FPS
299 frames in 5.0 seconds = 59.734 FPS
optirun glxgears -info
GL_RENDERER = GeForce MX150/PCIe/SSE2
GL_VERSION = 4.6.0 NVIDIA 415.23
GL_VENDOR = NVIDIA Corporation
5861 frames in 5.0 seconds = 1172.005 FPS
6075 frames in 5.0 seconds = 1214.785 FPS
6177 frames in 5.0 seconds = 1235.199 FPS
強制的なON/OFF
❯❯❯ sudo tee /proc/acpi/bbswitch <<< ON
ON
hideaki at papas in /e/X11
❯❯❯ sudo tee /proc/acpi/bbswitch <<< OFF
OFF
まとめ
普通に利用する分にはあまりGPUの恩恵を受けることはなさそうです。機会学習でGPUを利用したいのでドライバを入れてみました。次はGPUを機械学習で利用する方法を書いてみたいと思います(色々バージョンがあっていないと動かないようなので面倒そうです)