GPU PC (Desktop) のセットアップメモ

Ubuntu 18.04.5 LTS (Bionic Beaver)

Ubuntu 18.04、Windows 10のデュアルブート環境を構築する。 プロキシ下を想定しているので、不要な場合は適宜調整。

時刻ずれの解消

Linux環境設定/デュアルブートのWindows時刻をUTCにする - Linuxと過ごす

デュアルブート環境では、BIOSの時刻を介してWindows側の時刻管理(ローカル時間)とUbuntu側の時刻管理(UTC時間)が衝突して、タイムゾーンの時差分、時計がずれてしまう。ここでは、Windows側の時刻管理をUTC時間にするようにレジストリを変更して対処する。

Windows上で管理者権限でコマンドプロンプトを起動し、以下のコマンドを実行する。

1
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f

NTPサーバの設定(プロキシ環境)

時刻同期のためプロキシ内のNTPサーバを設定する。

Settings > Details > Date & Timeで使われるNTPサービスはsystemd-timesyncd

設定ファイルの/etc/systemd/timesyncd.confを開いて編集する。

1
2
[Time]
NTP=YOUR_NTP_SERVER
1
sudo systemctl restart systemd-timesyncd

これで時刻が同期される。

プロキシの設定 (1) Environment Variable, apt

Settings > Networkからプロキシを設定する。設定した内容はHTTP_PROXYなどの環境変数に出力される。スキーム部分は不要(OS側で付けるので二重プロトコルになってしまう)。

また/etc/apt/apt.confを作成し、プロキシ設定を追記する

1
2
Acquire::http::proxy "http://YOUR_HTTP_PROXY";
Acquire::https::proxy "http://YOUR_HTTP_PROXY";

Package Indexの更新とPackageの更新

1
2
sudo apt update
sudo apt upgrade -y

git、ビルドツールほかのインストール

1
2
3
4
5
6
sudo apt install -y \
  git \
  build-essential \
  make \
  cmake \
  vim
1
2
3
4
git config --global core.editor vim
git config --global credential.helper cache
git config --global user.name YOUR_NAME
git config --global user.email YOUR_EMAIL

~/.vimrc

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
set shiftwidth=4
set tabstop=4
set expandtab
"set number
set cursorline
set smartindent
set laststatus=2
syntax enable

set hlsearch
nmap <Esc><Esc> :nohlsearch<CR><Esc>

日本語IME(ibus-mozc)、言語サポートのインストール

1
2
3
4
sudo apt install -y ibus-mozc

ibus restart
gsettings set org.gnome.desktop.input-sources sources "[('ibus', 'mozc-jp'), ('xkb', 'jp')]"
1
sudo apt install -y $(check-language-support)

プロキシの設定 (2) git

1
2
git config --global http.proxy ${HTTP_PROXY}
git config --global https.proxy ${HTTPS_PROXY}

pyenv、Pythonのインストール

pyenv/pyenv: Simple Python version management

新しいPythonを使うため、それからシステムと開発環境を分離してモジュール管理をaptとpipで分けて衝突事故を起こさないようにするため、pyenvを使うのが安定。

1
2
3
4
5
6
7
8
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc

source ~/.bashrc
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
sudo apt install -y \
  libssl-dev \
  zlib1g-dev \
  libbz2-dev \
  libreadline-dev \
  libsqlite3-dev \
  wget \
  curl \
  llvm \
  libncurses5-dev \
  libncursesw5-dev \
  xz-utils \
  tk-dev \
  libffi-dev \
  liblzma-dev \
  python-openssl

pyenv install 3.8.5
pyenv global 3.8.5

Docker & Docker Composeのインストール

Install Docker Engine on Ubuntu | Docker Documentation

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
sudo apt remove docker docker-engine docker.io containerd runc
sudo apt update
sudo apt install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -x "${HTTP_PROXY}" \
  | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io

Install Docker Compose | Docker Documentation

1
2
3
4
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" \
  -o /usr/local/bin/docker-compose \
  -x "${HTTP_PROXY}"
sudo chmod +x /usr/local/bin/docker-compose

一応、sudoせずにdockerを実行できるようにしておく。

1
2
sudo groupadd docker
sudo adduser $USER docker

プロキシの設定 (3) Docker

1
sudo systemctl edit docker

このコマンドで開いたファイルに以下を追記する。

1
2
3
[Service]
Environment="HTTP_PROXY=YOUR_HTTP_PROXY"
Environment="HTTPS_PROXY=YOUR_HTTP_PROXY"
1
2
3
4
sudo systemctl restart docker

docker pull hello-world
docker run --rm hello-world

正常に実行されればOK。

CUDA & NVIDIA Driverのインストール

Start Locally | PyTorch

PyTorchの対応バージョンを見ながらCUDA Toolkitをインストールする。

CUDA Toolkit 10.2 Download | NVIDIA Developer

~~CUDA Installerのrunfileを使って、runfileに同梱されているNVIDIA Driverを同時に入れるのが安定(2.5GBくらいで結構重いが)。~~

追記(2021/01/04):カーネルアップデートのたびに再インストールする必要が出てくるので、ドライバについてはDKMSが使える通常のNVIDIA Driverインストールをした方がいい。 適切にPATH、LD_LIBRARY_PATHを設定すれば問題ない。

Download runfile installer for Ubuntu 18.04

CUIモードでないとインストールに失敗するので、ダウンロードが終わったら一度デスクトップからログアウトし、Ctrl+Alt+F2などでCUIモードにする。

1
2
sudo systemctl stop gdm
# sudo systemctl stop lightdm # for Ubuntu 16.04

これでデスクトップマネージャを止めてからインストールを始める(再起動してGUIモードでログインせずにCUIモードにして実行でもいけるかも)。

1
2
wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
sudo sh cuda_10.2.89_440.33.01_linux.run

~/.bashrcに以下を追記する。

1
2
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

PyTorchが入ったあと(どちらを先にいれてもいい)、

1
2
import torch
torch.cuda.is_available()

でTrueが返ってくればOK。

OpenCV-Python, Numpy, PyTorchほかのインストール

1
2
3
4
5
6
pip3 install -U pip
pip3 install -U \
  opencv-python \
  numpy \
  Pillow \
  --proxy "${HTTP_PROXY}"
1
2
3
4
5
6
pip3 install -U \
  torch \
  torchvision \
  torchtext \
  torchaudio \
  --proxy "${HTTP_PROXY}"
1
2
3
4
5
6
7
pip3 install -U \
  matplotlib \
  tqdm \
  jupyter \
  PyYAML \
  tensorboardX \
  --proxy "${HTTP_PROXY}"

SSH Serverほかのインストール

1
sudo apt install -y openssh-server net-tools
1
ifconfig
1
sudo vim /etc/ssh/sshd_config

必要に応じてパスワード認証を無効にする。

1
PasswordAuthentication no

ownCloudのインストール

Install package isv:ownCloud:desktop / owncloud-client

1
2
3
4
echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/desktop/Ubuntu_18.04/ /' | sudo tee /etc/apt/sources.list.d/isv:ownCloud:desktop.list
curl -fsSL https://download.opensuse.org/repositories/isv:ownCloud:desktop/Ubuntu_18.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/isv:ownCloud:desktop.gpg > /dev/null
sudo apt update
sudo apt install owncloud-client

その他のインストール

1
ssh-keygen -f KEYNAME
1
sudo apt install tmux autossh

おまけ

sshのプロキシ設定

~/.ssh/configのHostの下に書く。Windowsの場合はconnectをビルドする必要がある。

1
2
3
4
5
6
7
8
    # Linux
    ProxyCommand nc -X connect -x YOUR_HTTP_PROXY %h %p

    # Windows
    ProxyCommand MY_APP_DIRECTORY\connect\connect.exe -H YOUR_HTTP_PROXY %h %p

    # Mac
    ProxyCommand ncat --proxy-type http --proxy YOUR_HTTP_PROXY %h %p
1
2
# for build `connect.c` on Windows
gcc -o connect -lwsock32 connect.c -lws2_32