はじめに
目標
- MSI GS65 Stealth ThinでWindows 10とUbuntu 17.10をデュアルブートする
- Ubuntu 17.10にCUDAとChainerを入れる
罠
追記(2019/0613)
以下の罠は最新のUbnutu 18.04を入れると回避できます
-
Ubuntu 16.04をインストールすると有線・無線ともにネットワークに繋がらない- 頑張れば16.04でも大丈夫らしいです
- (カーネルのバージョンが最初から新しいものを入れるとうまくいく?)
- Ubuntu 18.04はgrubのインストールに失敗するためインストールできない
- グラフィックドライバはnvidia-390以外入れてはいけない
- 公式が配布しているイメージのカーネルはnvidiaのドライバを認識しない
- wifiアダプタがKiller製でUbuntuのサポート外
正解の手順
正解の手順は一つしかなく、私はこれを発見するのに50時間かかりました。
- Ubuntu 17.10を入れる
- カーネルのバージョンを上げる
- wifiドライバを入れる
- nvidia-390を入れる
- CUDA 9.1をrunfileから入れる
- CuPyをcupy-cuda91で入れる
- Chainerを入れる
GS65 Stealth Thin
今回はMSIのゲーミングノートであるGS65 Stealth Thinを使います。
GS65は先月発売されたMSIの新型ゲーミングノートで、薄さ18ミリの筐体にGeForce GTX 1070(8GB)が載っており、ディスプレイのベゼルが細く洗練されたデザインになっています。
CPUも第8世代のi7(6コア12スレッド)であり、機械学習の開発環境として非常に魅力的です。
またストレージとしてm.2のSSDを最大2本挿せるため、Windows 10とのデュアルブートが可能となっています。
しかし、実際に環境を構築すると数々の罠に引っかかってしまうため、普段通りにUbuntuをインストールすると確実に失敗します。
本記事では私がGS65にUbuntuを入れChainerを動かすまでにやったことを書いています。
Razer Blade 2018 Edition
この記事を公開してからRazer Bladeの新型が発表されました。
https://www.razer.com/gaming-laptops/razer-blade
GS65よりも薄いのでこちらも選択肢に入れてもいいと思います。
https://www.razer.com/comparisons/blade-15
構築手順
Ubuntu 17.10のインストール
はじめに
GS65にインストール可能なUbuntuのバージョンは16.04と17.10です。
しかし16.04は有線・無線ともに一切ネットワークに繋ぐことができません。(専用ドライバを入れてもwifiアダプタが認識されません)
そのためUbuntu 17.10以外のバージョンは諦める必要があります。
Ubuntu 18.04はOSインストールの最後にgrubがインストールできず完了できません。
発生するエラーは「grub-efi-amd64-signed'パッケージを/target/にインストールするのに失敗しました。」です。
これは有名なエラーでネットには様々な対処法がありますが、今回はどの方法でも解消できません。
正確なエラーメッセージは「grub-install: error: efibootmgr failed to register the boot entry」ですが、これは現時点では解決されていないバグであるためどうすることもできません。
Live USBの作成
日本語Remixなど、何でもいいのでLive USBを作成します。
Ubuntuには「ブータブルUSBの作成」というソフトが標準で入っているためこれを使うと手軽に作れます。
BIOSの設定変更
起動時にDelteキーを押すとBIOSの設定に入れます。
Fast Bootとセキュアブートは切り、BootをUEFIからUEFI with CSMに変えます。
OSインストール
GS65にLiveUSBを刺し起動します。
grubの画面が出たらTry ubuntu without installingが選択されている状態でeキーを押しメニュー編集モードに入ります。
linux /casper/vmlinuz file=... quiet splash --- debian ...
のようになっている部分のquiet splashの後ろにacpi=offを追加します。
linux /casper/vmlinuz file=... quiet splash acpi=off --- debian ...
こうしないと起動後にフリーズします。
またこの操作はすべての手順が完了するまでは起動ごとにやる必要があります。
追記したらF10キーを押すとUbuntuが起動します。
この時点ではディスプレイドライバがおかしくなっているので解像度が800x600程度になっていると思います。
Ubuntuが起動したらまずGPartedを起動します。
デュアルブートする方は注意が必要ですが、まずWindowsが入っていない方のSSDを選択します。
パーティションが現時点では無いので、パーティション追加ボタンを押して以下のように設定し追加します。
適用ボタンを押した後、右クリックから「フラグを編集」を選択し以下のように設定します。
スクリーンショットを撮り忘れましたが、この時点で先頭に先程作った200MB程度のFAT32のパーティションがあり、残りの空き容量すべてが未割り当てのまま残っていると思います。
この操作はUbuntuを手動でインストールするときに必要な領域を作るために行っています。
(参考:https://askubuntu.com/questions/789998/16-04-new-installation-gives-grub-efi-amd64-signed-failed-installation-target)
ここでGPartedを閉じ、デスクトップにあるインストーラを起動します。
サードパーティ製のソフトウェアはインストールしたところでwifiが使えるようになるわけではないのでスキップします。
インストールの種類は「それ以外」を選択します。
先程作った先頭の200MBの領域とそれ以外の空き領域に分かれていると思います。
デュアルブートにする場合はどのSSDにWindowsが入っているかを把握し間違えないようにしましょう。
この空き領域にパーティションを作成します。
作成すると以下のようになります。
ブートローダをインストールするデバイスをWindowsが入っていない方のSSDに設定します
ディスプレイの解像度が低すぎるため下にあるボタンが見えませんが、下にボタンが3つあるので「ブートローダをインストールするデバイス」を選択中にタブキーを3回押してエンターを押すと先に進めます。
以下の画面でWindowsが入っているSSDには影響が出ないことを確認しましょう。
インストールが終われば再起動します。
ただしこの時点では再起動処理も失敗するので電源ボタン長押しで強制シャットダウンさせます。
再起動時もgrubの編集メニューでacpi=offを指定します。
Ubuntu起動後に以下を実行します。
sudo apt update
sudo apt upgrade
ちなみにこの時点でタッチパッドは動作しません。
Wi-Fiドライバのインストール
GS65のwifiアダプタはKiller Wireless-AC 1550です。
これはLinuxで未サポートとなっていますが、有志の開発しているドライバを入れることでwifiが利用可能になります。
https://forum.manjaro.org/t/solved-killer-wireless-ac-1550i-adapter-9560ngw-not-work/46167/20を参考にwifiモジュールをインストールします。
sudo apt-get install git
git clone https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/backport-iwlwifi.git
cd backport-iwlwifi
make defconfig-iwlwifi-public
make -j6
sudo make install
カーネルのアップデート
以下のようにしてUkuuを入れます。
sudo apt-add-repository -y ppa:teejee2008/ppa
sudo apt update
sudo apt install ukuu
参考:https://iberianpig.github.io/posts/2017-02-06_how_to_upgrade_kernel/
ukuu-gtk
で起動します。
バージョン一覧からLinux 4.16.5を選択しインストールします。
これより高いバージョンはインストールに失敗します。
Close window to exitが出たらalt+f4を押して画面を閉じ、Ubuntuを再起動します。
再起動後念の為もう一度以下を実行します。
sudo apt update
sudo apt upgrade
しばらくすると「新しいバージョンのUbuntuが利用可能です。アップグレードしますか?」と聞かれますが、絶対にアップグレードしてはいけません。
ここでアップグレードをすると18.04になりますが、上述のようにgrubのインストールで失敗するため不完全なアップグレードになりUbuntuが壊れます。
また、ここまでの手順が完了すれば起動時にacpi=offを付ける必要がなくなります。
Deep Learning環境の構築
NVIDIAのドライバを入れる
まずnouveauを消します。
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-nouveau-ubuntu
次にnvidia-390を入れます。
sudo add-apt-repository ppa:graphics-drivers
sudo apt update
sudo apt install nvidia-390
現時点の最新のドライバは396ですが、モバイルの1070は390までに対応しています。
またグラフィックドライバを入れるとなぜかタッチパッドが反応するようになります。
gccをダウングレード
gccとg++のバージョンを6に下げます。
これはCUDA9.1がgcc-7をサポートしていないからです。(エラーが出ます)
参考:https://askubuntu.com/questions/1028830/install-cuda-on-ubuntu-18-04
まずgccをアンインストールします。
sudo apt remove gcc
sudo apt autoremove
次にgcc-6を入れます。
sudo apt install gcc-6
sudo apt install g++-6
ここを参考にupdate-alternativesでシンボリックリンクを作ります。(優先度は適当です)
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 10
こうすることでgcc
するとgcc-6が使われるようになります。
CUDA 9.1のインストール
NVIDIAのサイトからCUDA 9.1のrunfileをダウンロードします。(17.04となっていますが無視します)
runfileを実行しCUDA Toolkitのみインストールします。
ディスプレイドライバは入れてはいけません。
CuPyのインストール
CuPyはcupy-cuda91を入れます。
sudo pip3 install cupy-cuda91
このとき--user
を付けてホームディレクトリにインストールしてはいけません。(import cupy
ができなくなる謎の現象が起きます)
Chainerのインストール
pip3 install chainer --user
CUDA Sample
まずOpenGL関連を入れます。
sudo apt-get install freeglut3-dev libglu1-mesa-dev
参考:http://ksakiyama134.hatenablog.com/entry/2016/09/25/005130
終わりに
思い出しながら書いたので抜け落ちている部分があるかもしれません。
不明な箇所があればコメントでお聞きください。
分解する
**一度分解すると保証は受けられません。**自己責任でお願いします。(保証シールがネジ穴を隠しており、このシールは破損無効になっています)
GS65はゲーミングノートにしては分解しやすい構造をしているため、定期的な冷却ファンの掃除などがやりやすくなっています。
裏蓋を外すとマザーボードが見えますが、m.2スロットやメモリスロットはキーボード側についているためマザーボードを外す必要があります。
まずマザーボードの上下に刺さっているコネクタを外し、CPUファンのコネクタを剥がすとマザーボードをひっくり返せます。
m.2スロットとメモリスロットはともに2つです。