[2020-09-18 / 2021-05-14]

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上で管理者権限でコマンドプロンプトを起動し、以下のコマンドを実行する。

#!cmd
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を開いて編集する。

#!systemd
[Time]
NTP=YOUR_NTP_SERVER
#!bash
sudo systemctl restart systemd-timesyncd

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

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

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

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

#!apt
Acquire::http::proxy "http://YOUR_HTTP_PROXY";
Acquire::https::proxy "http://YOUR_HTTP_PROXY";

Package Indexの更新とPackageの更新

#!bash
sudo apt update
sudo apt upgrade -y

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

#!bash
sudo apt install -y \
git \
build-essential \
make \
cmake \
vim
#!bash
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

#!vim
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)、言語サポートのインストール

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

プロキシの設定 (2) git

#!bash
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を使うのが安定。

#!bash
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
#!bash
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

#!bash
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

#!bash
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を実行できるようにしておく。 注意として、共有サーバにおいては特権昇格できてしまうため、Docker 20.10以降のDocker rootlessを設定する。

#!bash
sudo groupadd docker
sudo adduser $USER docker

プロキシの設定 (3) Docker

#!bash
sudo systemctl edit docker

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

#!systemd
[Service]
Environment="HTTP_PROXY=YOUR_HTTP_PROXY"
Environment="HTTPS_PROXY=YOUR_HTTP_PROXY"
#!bash
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モードにする。

#!bash
sudo systemctl stop gdm
# sudo systemctl stop lightdm # for Ubuntu 16.04

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

#!bash
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に以下を追記する。

#!bash
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

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

#!python
import torch
torch.cuda.is_available()

でTrueが返ってくればOK。

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

#!bash
pip3 install -U pip
pip3 install -U \
opencv-python \
numpy \
Pillow \
--proxy "${HTTP_PROXY}"
#!bash
pip3 install -U \
torch \
torchvision \
torchtext \
torchaudio \
--proxy "${HTTP_PROXY}"
#!bash
pip3 install -U \
matplotlib \
tqdm \
jupyter \
PyYAML \
tensorboardX \
--proxy "${HTTP_PROXY}"

SSH Serverほかのインストール

#!bash
sudo apt install -y openssh-server net-tools
#!bash
ifconfig
#!bash
sudo vim /etc/ssh/sshd_config

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

#!sshd
PasswordAuthentication no

ownCloudのインストール

Install package isv:ownCloud:desktop / owncloud-client

#!bash
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

その他のインストール

#!bash
ssh-keygen -f KEYNAME
#!bash
sudo apt install tmux autossh

おまけ

sshのプロキシ設定

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

#!ssh
# 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
#!cmd
# for build `connect.c` on Windows
gcc -o connect -lwsock32 connect.c -lws2_32