注意
ここに書いてあることは、あくまで私の環境で上手く行ったというケースレポートです。
ご自身の環境で上手く行く保証はできません。また、試される場合もあくまで自己責任でお願い致します。
TL;DR
要点です。
- Win10 GPUラップトップにUbuntu18.04を導入しようとしたが、Nvidiaドライバ周りの不具合によりデフォルトの導入に失敗した。
- 既存の方法のうち、試したがうまく行かなかったもの
- カーネルパラメータに
nomodeset
を追加する方法- Ubuntuを導入できるが、ディスプレイが正しく認識されなくなってしまう。
- カーネルパラメータに
nouveau.modeset=0
を追加する方法- 起動プロセスが途中で止まり、フリーズしてしまう。
- カーネルパラメータに
- 解決できた方法:カーネルパラメータに
nouveau.runpm=0
を追加する。- Nvidiaの純正ドライバが正しく認識され、サブディスプレイも使用可能
補足
2019/04/18にUbuntu19.04がリリースされました。リリースノートによると、
Safe Graphics Mode. A new option is added to the Grub menu which will boot with "NOMODESET" on. This may help you resolve issues on certain graphics cards and allow you to boot and install any propriatary drivers needed by your system.
とあります。(参照箇所)
19.04以降をインストールする場合は、Grub時にこのオプションを選択することでトラブルを回避できる可能性があります。通常インストールで失敗した場合は、本記事で紹介する方法を試す前に、このオプションを試すことをおすすめいたします。
以下、詳しい背景などを説明します。
環境
- マシン:
G-GEAR note N1586Jシリーズ N1586J-710/T
(TsukumoのBTOです) - GPU:
Nvidia 1070 MaxQ
- チップ:
Core i7-8750H
- Default OS: Windows10 Pro
- Additional OS: Ubuntu 18.04 Japanese Remix
Background
開発やらちょっとGPGPUで遊ぶ分にはLinuxのほうが何かと便利です。これはデュアルブートするしかない1ですね。
やり方
ココらへんは、他のWebページによく纏まっていますので、簡単に流れだけ書きます。
- インストールメディアはUnetbootinを用いてUSBに焼きました。
- UEFI高速スタートアップを無効にします
- セキュアブートを無効にします。
- PCを再起動し、起動中に所定のキー2を連打し、BIOS画面に入ります。
- USBの起動順を最初に持っていき、「保存して起動」
- GRUB画面が表示されたら、Try UbuntuかInstall Ubuntuを選択(矢印キーを使用して、目的とする行がハイライトされるようにハイライト部位を動かす)
-
e
を押して、起動オプションの画面を開きます。 - 矢印キーでカーソルを動かし、
linux
から始まる行のquiet splash
を削除 - 代わりに
nouveau.runpm=0
を書き加えます。 - Boot(おそらくF10です)
ここで行った変更は、一回のみしか反映されず、次回の起動からはもとのパラメーター(quiet splash
)が適用されてしまいます。変更を保存するためには、インストールが終了後・再起動したあとに、以下の編集が必要になります。
sudo vi[←ここはお好きなエディターで] /etc/default/grub
ファイルを開き、先程同様linux
で始まる行のquiet splash
をnouveau.runpm=0
に書き換えます。
書き換え後、変更を適用します。
sudo update-grub
インストール完了後、CUDAのインストールを行います。このときにCUDAとグラフィックボードの両方に合ったネイティブドライバがインストールされます。(2018年10月時点で、CUDA10だと、ドライバは410でした)
なぜnomodeset
やnouveau.modeset=0
ではだめなのか
UbuntuにはNouveau(ヌーヴォー:仏、新しい)というサードパーティ製のNvidiaグラフィックドライバが入っています。NouveauはGPUデスクトップにネイティブドライバをインストールする際に干渉し、ネイティブドライバのインストールに失敗するケースがあるようです。そこで、戦略としてはNouveauをオフにした状態でUbuntuをインストールし、続けざまにネイティブドライバをインストールするという方針になります。3上に書いたnomodeset
もnouveau.modeset=0
もNouveauをオフにするための方法です。
nomodeset
がだめな理由
nomodeset
は、全てのグラフィックドライバの起動を停止します。このためビデオカード用のドライバはおろか、オンボードのドライバ(IntelGraphicsとかです)さえも動きません。ディスプレイはUbuntuOSに付属している最小レベルのドライバで駆動されます。このため、ディスプレイが正しく認識されませんでした。本来ならばBuild in Displayとして認識されるはずですが、Unknown Displayと認識されてしまい、解像度の変更やリフレッシュレートの変更ができませんでした。
nouveau.modeset=0
がだめな理由
nouveau.modeset=0
が駄目で、nouveau.runpm=0
がうまくいく理由はよくわかっていません。このページによると、これらのパラメータはそれぞれ
runpm
Force enable 1 or disable 0, runtime power-managment. The default only for Optimus systems is -1.
modeset
Whether the driver should be enabled. 0 for disabled, 1 for enabled, 2 for headless
という内容ですが、power-managementを0にすることと、ドライバを無効化することがどう違うのかよくわかりません。ご存知の方がいらっしゃいましたらご教授下さい。
参考ページ
Dualbootのやり方に関して
-
MSI製ゲーミングノートに機械学習環境を構築する時の罠と対策 【GS65 GTX1070】
- デュアルブートそのものやり方やCUDAのインストール方法が書かれています。
- グラフィックドライバまわりの処理については、本記事と異なるやり方が紹介されています。
-
nVidiaのGPU搭載PCにUbuntuを入れようとしてハマった
- カーネルパラメータの設定方法が写真付きでわかりやすく紹介されています。
-
Windows10のデュアルブートUbuntu16.04LTS(GTX1080)でTensorFlow-gpu==0.12.1(python3版)使えるまでの道のり
- CUDAあるいはTensorflowのインストール方法まで書かれています。
カーネルパラメータに関して
その他諸々
トラブルシューティングにあたって、参考にしたページを載せておきます。AskUbuntuやら、Nvidiaのフォーラムなどです。
- https://askubuntu.com/questions/921580/ubuntu-freezes-on-login-after-prime-select-intel/923216#923216
- https://askubuntu.com/questions/1059778/selecting-intel-graphics-makes-my-system-crash-at-boot
- https://devtalk.nvidia.com/default/topic/1024318/linux/-solved-nvidia-prime-on-dual-gpu-configuration-giving-a-blank-screen/post/5210971/#5210971
- https://askubuntu.com/questions/1050672/gdm3-does-not-start-in-ubuntu-18-04
- https://askubuntu.com/questions/1048274/ubuntu-18-04-stopped-working-with-nvidia-drivers/1048488#1048488
編集履歴
- 2019/04/22 補足:ubuntu19.04リリースに伴うGrubOption追加