Windows10にUbuntuの導入
はじめに
備忘録もかねてWindowsでUbuntuをデュアルブートしてPyTorchをGPUで動かすまでの手順を載せておきます。
追記(2020年1月23日)
ページ下部によく使用するソフトをインストールする手順を加えています。
(Git, VSCode, Chrome, Dropbox, Docker, kubectl, minikube)
追記(2020年1月24日)
root以外でもdockerコマンドを使用できる設定を追加しました。
1. SSDの増設
今回使用しているデスクトップPCは、「GALLERIA XZ ガレリア XZ(公式サイト)」です。
準備したものは以下の4点です。
- SSD(Samsung SSD 512GB 860PRO)
- ミリねじ
- SATAケーブル(赤)
- 電源ケーブル(黒)
購入したSSDに電源ケーブルとSATAケーブルを接続して、Windowsを起動します。
Windowsの「ディスクの管理」を起動すると、未割り当てのディスクが認識されていることがわかります。
ひとまずSSDの増設は終了です。
2. Ubuntuの準備
Ubuntuの公式サイトからUbuntu18.04.3 LTS(ubuntu-18.04.3-desktop-amd64.iso)をダウンロードします。
場所はどこでもいいです。
USBメモリへの書き込みに、UNetBootinを使用します。
最低でも4GB必要です。
UNetBootinを起動すると以下のような画面が出てくるので、「ディスクイメージ」を選択してダウンロードしたISOファイルを指定します。
そのあと、Ubuntuの起動に使用するUSBを指定して書き込みます。
では再起動を行って、BIOSを起動しましょう。
起動時にロゴが表示されている間に「F2」や「Del」などを押してBIOSを起動します。
3. BIOSの設定
ガレリアの場合、BIOSを起動すると以下のような画面が表示されます。
Ubuntuを起動する前にBIOSの設定を変更しておきます。
NVIDIAドライバを後で入れていきますが、この時にBIOSのSecure Bootが有効化されているとうまくいかないため、一時的に無効化させます。
(なお署名方式でもOKです。)
上記画面の「Advanced Mode(F7)」を選択して「Boot」の「Secure Boot」を選択します。
選択した後で表示される画面で、「OS Type」を「Other OS」に設定するとSecure Bootが無効化されます。
では元の画面に戻り「Boot Menu(F8)」を選択して、以下のような起動オプションを表示します。
見えづらいですが、一番上は「Windows Boot Manager」です。
今回はUbuntuを起動するので、下の「UEFI: TOSHIBA, Partition 1(7391MB)」を選択します。
この後にUbuntuの起動メニューが表示されるので、「try Ubuntu without Install」を選択します。
これでUbuntuの画面が起動できているはずです。
(ディスプレイの出力にNVIDIAのGPUを使用している場合は、解像度が正しく設定されていないことがあります。)
4. Ubuntuのインストール
Ubuntuのデスクトップ画面に、Ubuntuのインストールメニューが表示されているので、これを選択してインストールを開始します。
そのあと、画面の操作に従って進めていきますが以下の画面では、Ubuntuのブートローダを増設したSSDにインストールできるように「それ以外」を選択します。
この後に新しく増設したSSDにパーティションを作成してインストールを行います。
(画面とり忘れました…)
ここまで行えばUbuntuのインストールが始まります。
では再起動してUbuntuが立ち上がることを確認しましょう。
注意点
起動した際に、画面に「Couldn’t get size: 0x800000000000000e」が表示されて動かなくなってしまった場合は、Ubuntuの起動オプションの画面で「e」を押して、オプションを以下のように編集します。
linux 行の末尾におもむろに nomodeset を追記します。
参考URL:https://qiita.com/yoya/items/026317fe2ddb30ab411d
5. 前準備
ここまでで無事Ubuntuの立ち上げが終わっているはずです!
これからCUDAなどのライブラリをインストールしていきますが、その前にUbuntuの設定をいくつか変更しておきます。
まずはソフトウェアを最新の状態にしておきます。
$ sudo apt update
$ sudo apt upgrade
時刻設定
デフォルトの状態だと、Windowsの標準時刻がー9時間程度ずれるので、Ubuntu側から修正します。
sudo timedatectl set-local-rtc true
Directoryを英語にする
$ LANG=C xdg-user-dirs-gtk-update
このあと表示される画面で「Update Names」を選択すれば以下のようにディレクトリの名称が英語に変更されます。
6. GCCのインストール
gccコマンドを使用するのでインストールしておきます。
$ sudo apt-get install build-essential
$ gcc --version
以前にgccを導入していたので、以下のような画面になりました。
7. デフォルトドライバの変更
デフォルではnouveauのドライバが使用されているため、以下のコマンドでデフォルトの設定値を変更します。
$ sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
$ sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
$ sudo update-initramfs -u
$ sudo reboot
nouveauが無効化されているかどうかを確認します。
以下のコマンドを実行して、何も表示されなければ大丈夫です。
$ lsmod | grep -i nouveau
8. Nvidia Driverのインストール
まずは以前に導入したNvidiaドライバやCudaがあれば削除をしておきます。
$ sudo apt-get --purge remove nvidia-*
$ sudo apt-get --purge remove cuda-*
次にCUDAが実行可能なGPUであるかを確認します。
$ lspci | grep -i nvidia
次に使用しているUbuntu(今回は18.04)で推奨されているNvidiaドライバを確認します。
$ ubuntu-drivers devices
nvidia-driver-440が推奨されているので、公式サイトからダウンロードしてきて実行します。
ここで検索を実行すると、以下のようなダウンロード画面に遷移するので、ドライバをダウンロードします。
「Continue Installation」
ここまでで「nvidia-smi」を実行すると以下のように、NVIDIAドライバがインストールされていることが確認できます。
ここで表示されている「CUDA Version: 10.2」とは実際にインストールしているCUDAではなく(そもそもまだインストールしていない)、インストール可能なCUDAのバージョン情報です。
ここで再起動すると、NVIDIAドライバが適用されディスプレイの解像度も正しく設定されていることがわかります。(なお自分の場合は2画面で操作していますが、1画面でも問題ありません)
9. CUDAのインストール
CUDAをインストールしていきますが、現時点(2020年1月22日)で最新版のPyTorchとTensorFlowが対応しているCUDAのバージョンは10.1なので、最新の10.2ではなく10.1をインストールしていきます。
では公式サイトからバージョン10.1のCUDAをダウンロードします。
- Do you accept the above EULA? (accept/decline/quit):
- accept
NVIDIAドライバに関しては既に導入しているため、チェックを外しています。
今回はドライバをインストールしていないため、最後のほうに警告が発生しています。
最後に標準出力で言われているように環境変数を設定します。
なお環境変数の設定には、PATHを永続的に追加する(.bashrc)を利用します。ホームディレクトリ以下の.bashrc
ファイルにPATHを書き込んでいきましょう(ない場合は新規作成します)。
echo -e "\n## CUDA paths" >> ~/.bashrc
echo 'export PATH=/usr/local/cuda-10.1/bin:${PATH}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:${LD_LIBRARY_PATH}' >> ~/.bashrc
source ~/.bashrc
環境変数が設定されているかどうかを確認します。
$ export -p | grep cuda
一度ログオフして再度ログインします。
そしてCUDAがインストールされているかどうかを確認します。
無事CUDAのインストールが完了しました!
10. cudnnのインストール
cudnnをインストールしていきます。手順に関しては公式サイトを参考にしましょう。
(なおNVIDIA Developer Programに登録する必要があります。)
まずは使用しているGPUの計算能力が要求を満たしているかどうかをCUDA-GPUSで確認します。そして導入したNVIDIAドライバとCUDAのバージョンにあうcudnnのバージョンを一覧から確認しましょう。
登録を終えたあとに、以下の画面に遷移するのでCUDAのバージョンにあったcudnnをダウンロードします。
今回はUbuntu18.04なので、対応している「Runtime Library」と「Developer Library」と「Code Samples and User Guide」をダウンロードします。
ではダウンロードした先のフォルダで、コマンドを実行してインストールします。
$ sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.1_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.1_amd64.deb
$ sudo dpkg -i libcudnn7-doc_7.6.5.32-1+cuda10.1_amd64.deb
cudnnがインストールされているかどうかをテストします。
$ cp -r /usr/src/cudnn_samples_v7/ $HOME
$ cd $HOME/cudnn_samples_v7/mnistCUDNN
$ make clean && make
$ ./mnistCUDNN
>> Test passed!
cudnnも無事インストールできました!
11. PyTorchのインストール
まずはpip3のインストールを行います。
$ sudo apt install python3-pip
ではPyTorchをインストールします。
$ pip3 install torch torchvision
以下のようにPyTorchがインストールされており、cudaも使用可能であることがわかります。
終わり!!
補足
上記以外にも開発に必要なソフトウェアをいくつかインストールしたので、その手順も書き残しておく。
Git
# Gitのインストール
$ sudo apt-get install git
# Gitがインストールされたか確認する
# 以下のコマンドを叩き、バージョンが表示されていればOK
$ dpkg -l git
# Gitの初期設定を行う
# 以下のコマンドを叩き、初期設定を行う
$ git config --global user.name [任意のユーザ名]
$ git config --global user.email [任意のユーザ名]
Chrome
# 公開鍵の取得&追加
$ wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
# aptのインストールリストに追加
$ sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
# 更新
$ sudo apt update
## インストール
$ sudo apt install google-chrome-stable
VSCode
# curlを使用できるようにする
$ sudo apt install curl
# vscodeのdebをインストール
$ curl -L https://go.microsoft.com/fwlink/?LinkID=760868 -o vscode.deb
# ダウンロードの確認
$ ls -lh
# debパッケージから直接取得
$ sudo apt install ./vscode.deb
# version確認
$ code --version
Dropbox
インストーラー(nautilus-dropbox-1.6.2.tar.bz2 )を取得する。
$ tar xjf ./nautilus-dropbox-1.6.2.tar.bz2
$ cd ./nautilus-dropbox-1.6.2/; ./configure; make; make install;
# pgkpackageがインストールされていないと表示されるので対処する
$ sudo apt-get install -y pkg-config
うまくいかなかったので以下で対処
まずは公式サイトからdebパッケージをダウンロード
$ sudo dpkg -i dropbox_2019.02.14_amd64.deb
$ sudo apt install libpango1.0-0
$ sudo apt --fix-broken install
あとはDropboxを実行してインストールを実行します。
ただしLinuxではスマートシンクは使用できないため、選択型同期などで対処しましょう。
Docker
公式サイトの手順に従う
# 1. set up the repositpory first
# aptパッケージを更新
$ sudo apt-get update
# パッケージをインストールする
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# dockerの公式GPGキーを追加する
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# ダウンロードしたkきーキーの確認を行う
$ sudo apt-key fingerprint 0EBFCD88
# stableなリポジトリを設定します。
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 2. Docker Engineのインストール
# aptパッケージの更新
$ sudo apt-get update
# 最新のDocker Engineをインストールする
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
# 上記の最新版ではなくバージョンを指定する場合はお以下のように勧めていきます
# 使用可能なDockerのバージョンを一覧する
$ apt-cache madison docker-ce
# 特定のバージョンをインストールする
$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
最後にDockerを起動してみましょう。
$ sudo docker run hello-world
現状のままだと毎回コマンドを実行する際にsudo
を打つ必要があります。
そこで公式ガイドに従って以下のコマンドを実行します。
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
$ newgrp docker
$ docker run hello-world
これでrootユーザー以外でもsudo
を打つ必要なくDockerコマンドを実行できるようになりました。
VSCodeのRemote Development機能を使用する際に必要になると思います。
Kubectl & Minikube
まずはKubectlを公式のガイドに従って、バイナリでインストールしていきます。
# 最新版をダウンロード
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
# 実行権限を付与します
$ chmod +x ./kubectl
# バイナリにPATHを通します
$ sudo mv ./kubectl /usr/local/bin/
# インストールできているか確認します。
$ kubectl version --client
次にMinikubeを公式のガイドに沿ってインストールしていきます。
まずは以下のコマンドを実行して出力が空でない(=仮想化がサポートされている)ことを確認します。
$ grep -E --color 'vmx|svm' /proc/cpuinfo
次にminikubeの実行ファイルをダウンロードして、PATHに追加していきます。
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
&& chmod +x minikube
# PATHが通っているフォルダに追加する
$ sudo cp minikube /usr/local/bin
今回はDockerとUbuntu環境を使用して、ハイパーバイザを使用せずにminikubeを起動していきます。そのためには起動オプションに--vm-driver=none
を追加しましょう。
$ sudo minikube start --vm-driver=none
これでminikubeを使用してKubernetesコンポーネントを実行できました!
参考文献