LoginSignup
12
6

More than 3 years have passed since last update.

MSI製ゲーミングノートに機械学習環境を構築する時の罠と対策 【GS65 GTX1070】

Last updated at Posted at 2018-05-20

はじめに

目標

  • 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時間かかりました。

  1. Ubuntu 17.10を入れる
  2. カーネルのバージョンを上げる
  3. wifiドライバを入れる
  4. nvidia-390を入れる
  5. CUDA 9.1をrunfileから入れる
  6. CuPyをcupy-cuda91で入れる
  7. Chainerを入れる

GS65 Stealth Thin

今回はMSIのゲーミングノートであるGS65 Stealth Thinを使います。
GS65は先月発売されたMSIの新型ゲーミングノートで、薄さ18ミリの筐体にGeForce GTX 1070(8GB)が載っており、ディスプレイのベゼルが細く洗練されたデザインになっています。

gs65-new-bz.jpg

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を選択します。
パーティションが現時点では無いので、パーティション追加ボタンを押して以下のように設定し追加します。

Screenshot from 2018-05-20 02-27-40.png

適用ボタンを押した後、右クリックから「フラグを編集」を選択し以下のように設定します。

Screenshot from 2018-05-20 02-28-23.png

スクリーンショットを撮り忘れましたが、この時点で先頭に先程作った200MB程度のFAT32のパーティションがあり、残りの空き容量すべてが未割り当てのまま残っていると思います。
この操作はUbuntuを手動でインストールするときに必要な領域を作るために行っています。
(参考:https://askubuntu.com/questions/789998/16-04-new-installation-gives-grub-efi-amd64-signed-failed-installation-target
ここでGPartedを閉じ、デスクトップにあるインストーラを起動します。

Screenshot from 2018-05-20 02-29-43.png

サードパーティ製のソフトウェアはインストールしたところでwifiが使えるようになるわけではないのでスキップします。
インストールの種類は「それ以外」を選択します。

Screenshot from 2018-05-20 02-29-50.png

先程作った先頭の200MBの領域とそれ以外の空き領域に分かれていると思います。

Screenshot from 2018-05-20 02-30-17.png

デュアルブートにする場合はどのSSDにWindowsが入っているかを把握し間違えないようにしましょう。
この空き領域にパーティションを作成します。

Screenshot from 2018-05-20 02-30-23.png

作成すると以下のようになります。
ブートローダをインストールするデバイスをWindowsが入っていない方のSSDに設定します

Screenshot from 2018-05-20 02-30-50.png

ディスプレイの解像度が低すぎるため下にあるボタンが見えませんが、下にボタンが3つあるので「ブートローダをインストールするデバイス」を選択中にタブキーを3回押してエンターを押すと先に進めます。
以下の画面でWindowsが入っているSSDには影響が出ないことを確認しましょう。

Screenshot from 2018-05-20 02-31-35.png

インストールが終われば再起動します。
ただしこの時点では再起動処理も失敗するので電源ボタン長押しで強制シャットダウンさせます。
再起動時も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

Screenshot from 2018-05-20 20-40-37.png

終わりに

思い出しながら書いたので抜け落ちている部分があるかもしれません。
不明な箇所があればコメントでお聞きください。

分解する

一度分解すると保証は受けられません。自己責任でお願いします。(保証シールがネジ穴を隠しており、このシールは破損無効になっています)
GS65はゲーミングノートにしては分解しやすい構造をしているため、定期的な冷却ファンの掃除などがやりやすくなっています。
裏蓋を外すとマザーボードが見えますが、m.2スロットやメモリスロットはキーボード側についているためマザーボードを外す必要があります。
まずマザーボードの上下に刺さっているコネクタを外し、CPUファンのコネクタを剥がすとマザーボードをひっくり返せます。
m.2スロットとメモリスロットはともに2つです。

12
6
3

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
12
6