機械学習のためのGPUサーバー構築手順
こんにちは、けんご(@N30nnnn)です。
度々行っている、機械学習のためのGPUサーバー構築。
備忘録としてこのページでは、外部からssh接続できるGPUマシンの構築手順を記載します。
※ Ubuntu 16.10 以降を対象にしてます
ubuntuインストール
まずはubuntuのインストール。
インストールUSBメモリを用いてインストールディスクを作成して行います。
ネットワーク
まずはプロバイダーと固定IPを契約します。
その上で外部からssh接続できる様にするため、2箇所設定を施します
サーバーのローカルIPアドレス固定
次にサーバーのローカルIPアドレスを固定します。
ローカルIPアドレスは有効な範囲で好きなアドレスを設定できますが、他の機器に現在割り振られているアドレスを避けたりなど細かいことを考えなくて良いように、ここでは現在割り振られているアドレスに固定することを目指します。
まずは、現在繋がってる動的IPの情報を確認。
下記サンプルのうち、 以下項目を確認
XXXXX
: ネットワークインターフェース名inet 192.168.yy.yy
: 現在のローカルIPアドレス
$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: XXXXX: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd xx:xx:xx:xx:xx:xx inet 192.168.yy.yy/24 brd 192.168.zz.zz scope global noprefixroute XXXXX valid_lft forever preferred_lft forever inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link valid_lft forever preferred_lft forever
次に、ローカルIPアドレスを固定する為にnetplanの設定ファイルを追加します
$ sudo vi /etc/netplan/99-netcfg.yaml network: version: 2 renderer: NetworkManager ethernets: XXXXX: dhcp4: false dhcp6: false addresses: [192.168.yy.yy/24] # <- 先のローカルIPアドレスを記載. ネットマスクに合わせて`/24`は変える gateway4: 192.168.11.1 # <- プロバイダーから提供されたGWアドレス nameservers: addresses: - 192.168.11.1 # <- プロバイダーから提供されたDNSアドレス - 8.8.8.8
最後に設定を反映
$ sudo netplan apply
外部疎通のためのルーティング設定
ルーターに施す設定はルーターのメーカー毎に違います。
静的IPマスカレード
とか アドレス変換
仮想サーバー
ポート開放
あたりのワードで調べてみてください。
参考までにいくつかのメーカーの設定方法をリンク記載します
- Bufalo: アドレス変換(静的IPマスカレード)の設定方法/ポート開放手順
- TP-Link: どのようにTP-LINKルーターを使用して仮想サーバー(ポート開放)を使用することができますか?
- ASUS: ルーティングの設定方法
ファイアウォールの設定
このでは ufw
を用いてファイアウォールを設定します。
# インストールされてない場合 $ sudo apt update $ sudo apt-get install ufw $ sudo ufw disable $ sudo ufw default deny $ sudo ufw allow ssh $ sudo ufw enable
NVIDIA Driver/CUDAインストール
ドライバ・CUDAはapt経由でインストールします (これがが楽と公式も言ってる)
方法1
# インストールできるドライババージョンを一覧 $ sudo ubuntu-drivers devices # recommendバージョンをインストール # 備考: ドライバインストール時にセキュアブートが有効になってるとMOK用のパスワード設定を要求される。 # MOKの説明はここでは省くが、パスワードは次回再起動時に入力する $ sudo add-apt-repository ppa:graphics-drivers/ppa $ sudo apt update $ sudo apt install nvidia-driver-470 # !注意! # この再起動からの復帰時、一時的にssh接続できなくなるため # リモートで行わないこと(MOKをenableしてパスワード入力する必要がある) $ sudo shutdown -r now
方法2
公式のインストーラーページ から、該当する環境の deb[network] の手順書を参照
下記には Ubuntu 20.04 用のインストールコマンドを記します。
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin $ sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 $ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub $ sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" $ sudo apt-get update $ sudo apt-get -y install cuda-drivers $ sudo apt-get -y install cuda
Dockerインストール
$ sudo apt update $ sudo apt install apt-transport-https ca-certificates curl software-properties-common $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" $ sudo apt update $ apt-cache policy docker-ce $ sudo apt install docker-ce $ sudo usermod -aG docker # dockerグループを作成することで、dockerの呼び出しにsudoが不要化可
開発者ユーザーの追加
1. 開発者にsshキーペアを生成してもらう
$ ssh-keygen -b 4096
2. ユーザを発行する
発行とともに下記を行います
- デフォルトディレクトリの作成
- 公開鍵の登録
- グループへの追加
を行う
$ sudo useradd -m [username] -s /bin/bash $ sudo usermod -aG docker [username] # dockerグループに開発ユーザーを追加することで、docker呼び出しにsudoが不要化 $ sudo passwd [username] $ sudo vi /home/[username]/.ssh/authorized_keys # もらった公開鍵を記述 $ sudo chown [username]:[username] /home/[username]/.ssh/authorized_keys $ sudo chmod 400 /home/[username]/.ssh/authorized_keys $ sudo su [username] && poetry config virtualenvs.in-project true