マイブログ リスト

医療言語処理講座

2019年4月28日日曜日

Pyゼミ0.03 MSI ノートPC(PS42 8RC-009JP)にAI環境を構築する

MSI ノートPC、PS42 8RC-009JPをUbuntuとWindowsのDual BootでAI開発環境も入れる


Keyword:MSI PS42,Dual boot,Windows 10, Ubuntu18.04, Geforce GTX1050,Chainer


2019.06.17 NVIDIAドライバーのインストールの誤記を修正しました。



出張中にもGPU使って簡単な実験できる環境がほしいと、GPU搭載のノートPCを探していました。
価格は20万円、質量は2キロ超を覚悟していましたが、たまたまツクモに寄って見たノートPCがこれでした。



スペックは次の通りです。
 CPU  Corei7-8550U
 メモリ 8GB
 SSD  500GB
 GPU  Geforce GTX1050(4GB)
 質量  1.18Kg


GTX1050のメモリが4GB搭載しているのが嬉しいです。
価格が132,800円(税抜き)、コストパフォーマンス高いと思います。


Ubuntu 16.04のインストール失敗


これまでLinuxでのAI開発環境はUbuntu 16.04を基本にマニュアル化されていました。

今回はインストールに3週間ハマりました。問題がいろいろ発生しました。
・インストール時Wifiが認識しない。
 →有線ネットワークで対応しました(有線LAN→USB変換)
・GPUが認識しない
 →強引にNVIDIAのドライバーを入れてnvidia-smiコマンドでGPUを認識しているように見えましたが、GTX1050と表示されません。
 デバイスを正しく認識してくれませんでした。

結局16.04のインストールは諦めました。


Ubuntu 18.04のインストール成功


18.04を試してみるとなんの問題もなくWfiが接続できました。
また、16.04で試した内容が役に立ち、スキマ時間を使いながら2日でインストールとセットアップが完成しました。


Ubuntu18.04をPS42にインストールする

インストールの手順を紹介します。
1)Ubntuインストール用のUSBメモリの準備
2)ノートPCのSSDの領域の縮小
3)USBメモリからUbuntuのインストールとDual bootの確認
4)NVIDIAドライバのインストール
5)CUDAのインストール
6)cuDNNのインストール
7)Ancondaのインストール
8)Chainerのインストール
9)Opencvのインストール
10)Pydicomのインストール
11)DICOM Tool Kitのインストール
12)Windowsの時刻同期の設定変更
13)Dropboxのインストール(オプション)



1)Ubntuインストール用のUSBメモリの準備

USBメモリにUbuntu18.04のisoイメージを入れてインストール用USBを作成します。
それぞれのリンク先を参考にしてください。
①Ubuntu 16.04 LTSのisoイメージをここからダウンロードします。
https://www.ubuntulinux.jp/News/ubuntu1804-ja-remix
②ツールを使ってインストール用USBにisoイメージファイルを焼きます。
https://linuxfan.info/make-linux-install-usb-on-windows

2)ノートPCのSSDの領域の縮小

・500GBはCドライブとDドライブにそれぞれ半分ずつ割り振られています。
・Cドライブの約120GをUbuntu用に確保してインストールします。
・DドライブはWindowsのデータ領域(Dropboxで共有)に使用しました。


手順
①Windowsファイルマネージャーの「PC」のアイコンを右クリックして,「管理」を選択します。

②「記憶域/ディスクの管理」をクリックします。

③Cドライブを選択し,右クリックして「ボリュームの縮小」を選択します。

④「縮小する領域サイズ(MB)」に「120000」(MB)と入力して,「縮小」ボタンをクリックします。
→Cドライブに約120GBの「未割当」領域ができます。

⑤「コンピュータの管理」を閉じ,コンピュータをシャットダウンします。

3)USBメモリからUbuntuのインストール

3-1)BIOSの設定を行います。

①PC起動時にドラゴンが現れたら「DELETE」キーを連打し,BIOSを起動します。

②「Security / Secure Boot / Secure」を「Disabled」に変更します。

③ (1)「Boot / Fast Boot」を「Disabled」に,(2)「Boot / Boot mode select」を「UEFI」に,(3)「Boot / FIXED BOOT ORDER Priorities」を「USB Hard Drive」に変更します。

④「Save & Exit」で「Save Change and Reset」を選択して設定を保存して終了します。(Windowsも終了して電源オフの状態にします)

3-2)Ubuntuのインストール

①上記1)で作成したUSBメモリをPCに挿入して電源を入れると,Ubuntuの起動・インストールのメニューが現れます。「Try Ubuntu without Installing」を選択します。

②Ubuntuが起動,ネットワークの接続(Wifi)を確認し,ディスクトップ上の左上にあるインストールアイコン「Ubuntu 18.04LTSのインストール」をダブルクリックします。

③「ようこそ」画面で「日本語」を選択し,「続ける」ボタンをクリックします。

④「Ubuntuのインストール準備」で「Ubuntuのインストール中のアップデートをダウンロードする」と「グラフィック,Wifi機器,・・・」の2つにチェックを入れて,「続ける」ボタンをクリックします。

⑤「インストールの種類」は「それ以外」を選択し,「続ける」ボタンをクリックすします。

⑥上記2)④で作成した120GBの未割当領域(空き領域)をクリックし,左下の「+」をクリックして,パーティション編集を行います。
・はじめにスワップ領域8GB を作成ます。パラメータは以下の通りです。
    サイズ           8000 MB
    新しいパーティションタイプ 論理パーテション
     新しいパーティションの場所 この領域の終点
    利用方法          スワップ領域



・次に残りの空き領域をクリックして,「+」ボタンをクリックしてインストール領域を確保します。
    サイズ           残りのサイズ 127977MB
    新しいパーティションタイプ 基本パーテション
    新しいパーティションの場所 この領域の始点
    利用方法          ext4ジャーナリングファイルシステム
    マウントポイント       /



⑦「インストール」ボタンをクリックしてインストールを開始します。
⑧インストールが終了したら,PCをシャットダウンすて,USBメモリを抜きます。

3-3)デュアルブートの確認

①PC起動時にドラゴンが現れたら「DELETE」キーを打ちBIOSを起動します。

②「Boot / UEFI Hard Disk Drive BBS Priorities/Boot Option #1」を「ubuntu」に設定します。(こうしないとOSの選択メニューが現れないでWindowsが起動する)



③「Save & Exit / Save Changes and Reset」で設定を保存して終了します。

④OSの起動メニューが現れ,「Ubuntu」を選択するとUbuntuが起動する。正常にUbuntuが起動できることを確認します。

⑤Ubuntuを再起動すします。

⑥OSの起動メニューが現れ,「Windows Boot Manager」を選択し,正常にWindows10が起動することを確認します。

4)NVIDIAドライバのインストール

・NIVIDIAのGPUボードを認識して利用するために必須なドライバーです。

参考 「環境構築 - Ubuntu 16.04 に NVIDIA ドライバをインストールする方法について」

①Ubuntuを起動します。
CUIモードで作業するため,ランレベルを3に設定します。
$ sudo telinit 3

②Ctl + Alt + F1 でCUIモードに移行します。

③Unbuntuのアップデートを行います。
$ sudo apt-get upgrade
$ sudo apt-get update

④レポジトリの追加をします。
$ sudo add-apt-repository ppa:xorg-edgers/ppa -y
$ sudo apt-get update

⑤インストール可能なNVIDIAドライバの一覧を検索します。
$ apt-cache search "^nvidia-[0-9]{3}$"

⑥一覧の中から最新のドライバ「nvidia-390」(20190416現在)を選び,インストールします。
$ sudo apt-get install -y nvidia-390

⑦インストールにしばらく時間がかかります。インストール終了後、再起動します。
$ reboot

⑧再起動後,ターミナルで次のコマンドを入力してNVIDIAのドライバーが正しくインストールされたことを確認します。
$ nvidia-smi
Wed Apr 10 16:01:46 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.116                Driver Version: 384.130                   |
|-------------------------------+----------------------+----------------------+
| 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 GTX 105...  Off  | 00000000:03:00.0 Off |                  N/A |
| N/A   53C    P0    N/A /  N/A |    332MiB /  4041MiB |      6%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1019      G   /usr/lib/xorg/Xorg                           195MiB |
|    0      1962      G   compiz                                       136MiB |
+-----------------------------------------------------------------------------+

5)CUDAのインストール

・CUDAはNVIDIA社の並列コンピューティングアーキテクチャです。

参考:Ubuntu18.04にNvidia Driver, CUDA, cuDNNを入れる

①CUDA9.1をインストールします。
$ sudo apt install nvidia-cuda-toolkit nvidia-driver-390


②再起動後にCUDAが認識されているか確認します。
$ nvcc –V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation>
Built on Fri_Nov__3_21:07:56_CDT_2017
Cuda compilation tools, release 9.1, V9.1.85

6)cuDNNのインストール

・NVIDIAが公開しているDeep Learning用のライブラリです。
NVIDIAからcudnnのファイルをダウンローします。
 ファイル名:cudnn-9.0-linux-x64-v7.4.2.24.tgz

①Ubuntuのホームディレクトリにファイルを置き,解凍します。cudaディレクトリが作成されます。
$ tar -zxf cudnn-9.0-linux-x64-v7.4.2.24.tgz

②cudaディレクトリに移動し,ファイルを所定の場所にコピーします。
$ cd cuda
$ sudo cp lib64/libcudnn* /usr/lib/cuda/lib64/
$ sudo cp include/cudnn.h /usr/lib/cuda/include/

③~/.bashrcファイルをテキストエディタで開き,最後の行に下記の内容を追加します。
$ gedit ~/.bashrc

ファイルの最後の行に次の2行を追加します。
# cuDNN
export PATH=/usr/lib/cuda/bin:${PATH}
export LD_LIBRARY_PATH=/usr/lib/cuda/lib64:${LD_LIBRARY_PATH}


7)Ancondaのインストール

・Python本体とよく利用されるライブラリをセットにしたPythonパッケージです。
・高度な数値計算やデータ分析、機械学習などが簡単にできるようになります。

参考 「Ubuntuを初めて触るド素人がAnacondaを入れてみた


Anaconda DistributionからLinuxのPython3.Xをダウンロードします。
ファイル名:Anaconda3-2019.03-Linux-x86_64.sh

①Anacondaをインストールします。
$ bash Anaconda3-2019.03-Linux-x86_64.sh

※インストール中すべてyesと入力

②pythonを起動して確認します。PythonとAnacondaのバージョンが表示されます。
$ python
Python 3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:09:58)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

③Anacondaのライブラリを確認します。リストが長いので結果は割愛します。
$ conda list


8)Chainerのインストール

・日本製の深層学習フレームワークです。
・ニューラルネットワークをPythonで柔軟に記述し、学習させることができます。
①CUDA9.0用のcupyのインストールします。
$ pip install cupy-cuda90

②chainerをインストールします
$ pip install chainer

③Pythonを起動して,Chainerとcupyが正しくインストールされたことを確認します。
$ python
Python 3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import chainer
>>> chainer.__version__
'5.4.0'
>>> 
>>> import cupy
>>> cupy.__version__
'5.4.0'


Version 5.4.0がインストールされています。


9)Opencvのインストール

・画像処理に関するさまざまな関数を備えたライブラリです。

①pipのアップグレードとOpencvのインストールを行います。
$ pip install –upgrade pip
$ pip install opencv-python

②Pythonを起動し,Opnecvのバージョンを確認します。
$ python
Python 3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.0'


10)Pydicomのインストール

PydicomはDICOM画像を扱うのに必須のライブラリです。

①pipでpydicomをインストールします。
$ pip install  pydicom

②Pythonを起動してpydicomのバージョンを確認します。
$ python
Python 3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pydicom
>>> pydicom.__version__
'1.2.2'


11)DICOM Tool kitのインストール

DICOM Tool kitはJPEG圧縮されたDICOM画像を解凍するときなどに使うDICOM関連のツール類です。

①DICOM Tool Kitをインストールします。
$ sudo apt install dcmtk

②インストールを確認します。
・DICOM画像の解凍を行うdcmdjpegコマンドのバージョンを確認します。
$ dcmdjpeg --version
$dcmtk: dcmdjpeg v3.6.2 2017-07-14 $

dcmdjpeg: Decode JPEG-compressed DICOM file

Host type: Debian
Character encoding: UTF-8

External libraries used:
- ZLIB, Version 1.2.11
- IJG, Version 6b  27-Mar-1998 (modified)

表示できたらOKです。

12)Windowsの時刻同期の設定変更

・Linuxとのデュアルブートの環境では,Linux終了後Windowsを起動すると時間がずれる現象が発生します(日本の場合は9時間ずれます)。詳細は参考をご覧ください。

参考:【Windows10】起動時にWindows Time Serviceを起動させる。


①Windows Timeサービスを「自動 (遅延開始)」に設定します。
・ディスクトップの左下の[スタート]をクリックしてプログラムの中から[Windows管理ツール/サービス]を選択します。
・一覧の中の[Windows Time]を右クリックして[プロパティ]を選択します。



・スタートアップの種類を[自動(遅延開始)]を選択し,[適用]をクリックして終了します。



②タスクスケジューラの「SynchronizeTime」タスクを「無効」にします。
・ディスクトップの左下の[スタート]をクリックしてプログラムの中から[Windows管理ツール/タスクスケジューラ]を選択します。
・[タスクスケジューラライブラリ / Microsoft / Windows / Time Synchronization]を選択します。


・[SynchronizeTime]を右クリックして[無効]を選択して終了します。

これで,Linux終了後にWindowsを起動しても時刻がずれることはなくなるはずです。これまで手動での時刻の修正は必要なくなります。

13)Dropboxのインストール(オプション)

開発環境を他のPC(main PCなど)と共有するのにとても便利なツールです。無償で2GB使えます。WindowsはもちろんLinuxやAndroidでも利用可能です。
ここでは,UbuntuにDropboxをインストールして利用する方法を紹介します。

①Dropboxのアカウントを作成する
 あらかじめDropboxのアカウントを作成しておきましょう

参考:Dropbox Basic (無料版) で使える容量は?プラン別の容量と無料で容量を増やす方法

②Dropboxをインストールする
 ターミナルから以下のコマンドを入力します。
$ cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

③Dropboxを起動する。
 ターミナルから以下のコマンドを入力します。
$ ~/.dropbox-dist/dropboxd

【注意】他のPCにあるファイルを編集状態で,自PCで同じファイルを起動し編集,保存すると不整合が発生します。Dropboxは「競合ファイル」として自動的に新しいファイルを別名で他のPCに保存しますが,基本的に同期がかかっているディレクトリのファイルは作業終了後、必ず閉じるように注意しましょう。


おわりに


今回,MSIのノートPCをWindowsとLinuxのDual boot環境を作成しました。
当初Ubuntu16.04で試みていましたが,過去の成功がじゃまして無駄な時間を使ってしまいました。
しかし,失敗の中にも効率的にインストール方法が見つけることができ,そのおかげでUbuntu18.04ではスムースにインストールすることができました。

Googleが提供するCollaboratoryなどクラウドでのAI開発環境など様々な環境がありますが,PCの中のローカルな環境にAIを構築することにこだわるのは医療情報を扱う場合,閉ざされた環境で実験,開発する必要があるからです。

今回,GPU搭載の1.18㎏のノートPCにAI環境を構築できたことで,いつでも開発・テストができる環境を得たことは大きいです。(もちろんデータは自分のサンプル画像しか入っていませんが)