個人での開発の環境を構築しますので,セキュリティ的には適当な箇所があります.くれぐれも複数人開発や社内・研究室内での環境構築の参考にはしないでください.
必要なもの
- USBメモ
- 計算用PC
- 根気
参考に私がこの記事を書くにあたり,実験したPCのスペックを載せておきます.
- GTX 2070
- CPU i7-5960X
- Memory : 32GB
以下、通常PCと計算用PCの2つでの作業になります。
Linuxのインストール
インストールメディアの作成
通常PCでの作業
Ubuntu ServerのISOファイルを公式サイトからダウンロードしてきます.
Ubuntu Server :
記事作成時点でのバージョンは22.04.1 LTSです.
![](https://emoclework.jp/wp-content/uploads/2024/05/d11476853d66-20230115.png)
USBインストールメディアの作成ソフトRufusをダウンロードしてきます.
Rufus :
![](https://emoclework.jp/wp-content/uploads/2024/05/e4db42b8e8c1-20230115.png)
Rufusを起動します.
![](https://emoclework.jp/wp-content/uploads/2024/05/dfdf43fee59c-20230115.png)
選択ボタンからダウンロードしたUbuntu ServerのISOファイルを選択し,下部のスタートボタンを押す.
イメージの書き込みが終わったらインストールメディアの作成完了.
Ubuntu Serverのインストール
計算用PCでの作業
初めにBIOSを起動し,Secure Bootの項目が無効化されていることを確認します(未設定の場合ははEnabledもしくはWindowsとなっており有効化されていることが多いです).
設定を保存し,USBインストールメディアを刺して再起動します.![]
BootMenue(もしくはBootOption)からインストールメディアを選択して,インストール画面に入ります.
Try or Install Ubuntu Serverを選択してインストールを始めます.
![](https://emoclework.jp/wp-content/uploads/2024/05/3688d417aaeb-20230115.png)
初めに言語選択が表示されます.Englishを選択します.
![](https://emoclework.jp/wp-content/uploads/2024/05/d6381504b31f-20230115.png)
インストーラをアップデートするかを聞かれます.without updatingを選択します()
![](https://emoclework.jp/wp-content/uploads/2024/05/6bf78081bb32-20230115.png)
キーボードレイアウトを聞かれます.好きなのを選んでください.SSHで接続するので,ほとんど関係ないです.
![](https://emoclework.jp/wp-content/uploads/2024/05/52a81d4c9b9b-20230115.png)
Ubuntuを最小構成にするかを聞かれます.どちらでもいいです.m
![](https://emoclework.jp/wp-content/uploads/2024/05/a427963e87ca-20230115.png)
IPアドレスの設定を聞かれます.固定IPの人はここでIPを設定したほうが楽です.
![](https://emoclework.jp/wp-content/uploads/2024/05/5fed2b54e8a9-20230115.png)
プロキシを使っているかを聞かれます.使ってない人は空白で次へ.
![](https://emoclework.jp/wp-content/uploads/2024/05/9e545d784ff3-20230115.png)
Ubuntuのアーカイブミラーを聞かれます.特に思い入れがない人は次へ.
![](https://emoclework.jp/wp-content/uploads/2024/05/d67c37856b93-20230115.png)
インストールするディスクを聞かれます.
![](https://emoclework.jp/wp-content/uploads/2024/05/16d5d7f310c8-20230115.png)
インストールの構成の詳細が確認されます.
![](https://emoclework.jp/wp-content/uploads/2024/05/9b7454bef0a1-20230115.png)
最終確認がでます.Continueを押してインストールを始めます.
![](https://emoclework.jp/wp-content/uploads/2024/05/b2fc25f79937-20230115.png)
名前,ホスト名,ユーザーネーム,パスワードが聞かれます.
![](https://emoclework.jp/wp-content/uploads/2024/05/e2c8574752d3-20230115.png)
SSHサーバーをインストールするか聞かれます.チェックを入れて次へ(Import SSH identityはNoでも大丈夫です).Nvidia driverも聞かれるかもしれませんが,Nvidia driverは後で入れます.
![](https://emoclework.jp/wp-content/uploads/2024/05/8acb71f722fa-20230115.png)
その他のソフトを追加でインストールするか聞かれます.何も選択せずに次へ.
![](https://emoclework.jp/wp-content/uploads/2024/05/a37c52ab4bc1-20230115.png)
インストールログが表示されます.インストールが終わるまで待ちます.
![](https://emoclework.jp/wp-content/uploads/2024/05/fa714cc27f9a-20230115.png)
Reboot Nowが表示されたらそれを押して再起動します.
![](https://emoclework.jp/wp-content/uploads/2024/05/2a9c88d58ce8-20230115.png)
以降の作業はSSH接続にて行います.
作業用PCでの作業
Windows10以降のPCであれはSSH Clinetが入っています.
「設定 > アプリ > オプション機能」の一覧にOpenSSHクライアントがあれば大丈夫です.なければ,「オプション機能を追加する」からOpenSSHクライアントを入れてください.
PowerShellやコマンドプロンプト,Windows Terminalなどの端末から
ssh user name@ip address
#例 ユーザー名comlew,ipアドレス192.168.0.10
#ssh comlew@192.168.0.10
とすることで,計算用PCにログインできます.ユーザーのパスワードを聞かれるので入力するとログインできます.また,初回ログイン時にはsshの情報を保存するかを聞かれます.yesで問題ないです.
以降,このログインした状態で環境構築を続けます.
updateとnvidia driverのインストール
はじめにubuntuのaptのアップデートをします.
comlew@comlewpc:~$ sudo apt update
Hit:1 http://jp.archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://jp.archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]
Get:3 http://jp.archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Get:4 http://jp.archive.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:5 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [818 kB]
Get:6 http://jp.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [783 kB]
Fetched 1,925 kB in 2s (774 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
59 packages can be upgraded. Run 'apt list --upgradable' to see them.
そのあとにupgradeをします.yを入力してアップグレードを完了させます.
comlew@comlewpc:~$ sudo apt upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
libflashrom1 libftdi1-2
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
python3-magic systemd-hwe-hwdb
The following packages will be upgraded:
apport apt apt-utils cloud-init cryptsetup cryptsetup-bin cryptsetup-initramfs distro-info-data dmidecode fwupd gzip
initramfs-tools initramfs-tools-bin initramfs-tools-core libapt-pkg6.0 libcryptsetup12 libfwupd2 libfwupdplugin5
libglib2.0-0 libglib2.0-bin libglib2.0-data libldap-2.5-0 libldap-common libnetplan0 libnftables1 libnss-systemd
libpam-systemd libpython3-stdlib libsasl2-2 libsasl2-modules libsasl2-modules-db libsystemd0 libudev1 netplan.io
nftables open-vm-tools python3 python3-apport python3-distupgrade python3-distutils python3-gdbm python3-lib2to3
python3-minimal python3-problem-report python3-software-properties python3-tz python3-update-manager rsync
software-properties-common sosreport sudo systemd systemd-sysv systemd-timesyncd tmux ubuntu-advantage-tools
ubuntu-release-upgrader-core udev update-manager-core
59 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 19.7 MB of archives.
After this operation, 1,002 kB disk space will be freed.
Do you want to continue? [Y/n]
最後に起動中のサービスを再起動するか聞かれます.特に弄らないでいいので,OKを選択します.
Nvidia driverをインストールします.多くの場合では最新版で問題ありません.apt installの際に,「nvidia-driver-」と入力後Tabキーを押せば,インストールできる候補が表示されます.
comlew@comlewpc:~$ sudo apt install nvidia-driver-
nvidia-driver-390 nvidia-driver-450 nvidia-driver-470-server nvidia-driver-520
nvidia-driver-418 nvidia-driver-450-server nvidia-driver-495 nvidia-driver-520-open
nvidia-driver-418-server nvidia-driver-455 nvidia-driver-510 nvidia-driver-525
nvidia-driver-430 nvidia-driver-460 nvidia-driver-510-server nvidia-driver-525-open
nvidia-driver-435 nvidia-driver-460-server nvidia-driver-515 nvidia-driver-525-server
nvidia-driver-440 nvidia-driver-465 nvidia-driver-515-open
nvidia-driver-440-server nvidia-driver-470 nvidia-driver-515-server
今回はnvidia-driver-525にしました.
sudo apt install nvidia-driver-525
と入力し,yを入力して数分待てばインストールが終わります.
最後に起動中のサービスを再起動するか聞かれます.特に弄らないでいいので,OKを選択します.
nvidia-driverの有効化を反映させるために再起動します.
sudo reboot
再起動するとSSH接続が切れるので,数分まってから再度SSH接続をします.
再起動したらNvidia driverが有効化されていることを確認します.nvidia-smi
と入力し,指しているグラボが表示されたら問題ないです.
comlew@comlewpc:~$ nvidia-smi
Sun Jan 15 08:27:04 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.60.11 Driver Version: 525.60.11 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A |
| 0% 47C P8 21W / 220W | 1MiB / 8192MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
Sambaのインストール
共有ディレクトリを作って,作業用PCから直接プログラムを編集できるようにします.
まずはのshell-sessionインストールをします.
sudo apt install samba
次に共有ディレクトリを作り,権限を権限をフルアクセス状態にします.
mkdir work_share
chmod 777 work_share
sambaの設定ファイルを開いて編集します.
sudo nano /etc/samba/smb.comf
設定ファイルの一番下に追記します.
[work_share]
path = /home/comlew/work_share
read only = no
browsable = yes
writable = yes
guest ok = no
create mode = 0777
directory mode = 0777
nanoの閉じ方は[Ctrl+X]の後に保存するか聞かれるので[y]を押し,保存ファイル名を変更せずに[Enter]でOKです.
共有ディレクトリにアクセスできるユーザーを登録します.Linuxのユーザー名と同じものにします.
sudo pdbedit -a [ユーザー名]
設定が終わったらSambaを再起動します.
sudo systemctl restart smbd
計算機のIPアドレスを調べます.わからない場合(SSH接続しているのでそんなことありませんが)はifconfigによって調べます.まずはnet-toolsを入れます.
sudo apt install net-tools
そのあとにifconfigを打って,返ってきた結果からIPアドレスを確認します.
comlew@comlewpc:~$ ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.18 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::a62:66ff:fe81:b673 prefixlen 64 scopeid 0x20<link>
ether 08:62:66:81:b6:73 txqueuelen 1000 (Ethernet)
RX packets 83606 bytes 14405820 (14.4 MB)
RX errors 0 dropped 125 overruns 0 frame 0
TX packets 4485 bytes 523077 (523.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xfb300000-fb320000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 760 bytes 54320 (54.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 760 bytes 54320 (54.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
上記の例だと127.0.0.1は自分を指す特殊IPなので,192.168.0.18がこのPCのIPアドレスになります.
Windowsのエクスプローラーの検索欄から[¥¥IPアドレス¥共有名]と打ち共有ディレクトリを検索します.
![](https://emoclework.jp/wp-content/uploads/2024/05/2293bb8978b8-20230117.png)
「ネットワーク資格情報の入力」が表示されます.pdbeditで登録した内容を入力します.画像中だとパスワードを一度ミスり,アクセスが拒否されてしまいました.
![](https://emoclework.jp/wp-content/uploads/2024/05/231c4b34ef53-20230117.png)
この本のプロジェクトファイルはこの共有ディレクトリに置きます.
Docker(Nvidia Docker)のインストール
Dockerのインストール
初めにDockerをインストールします.
Docker.comのhttps://docs.docker.com/engine/install/ubuntu/を参考にしました.
まずは関連・必要ソフトを入れます.
sudo apt install \
ca-certificates \
curl \
gnupg \
lsb-release
次にGPGキーを追加します.
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
そして,レポジトリを追加します.
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
アップデートします.
sudo apt update
最後にDockerおよびDocker Composeを入れます.
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
以下のテストコードでエラーが表示されなければDockerのインストールは成功です.
comlew@comlewpc:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:aa0cc8055b82dc2509bed2e19b275c8f463506616377219d9642221ab53cf9fe
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Docker Composeもversionが表示されれま問題ないです.
comlew@comlewpc:~$ docker compose version
Docker Compose version v2.14.1
Nvidia Dockerのインストール
通常のDockerだけだと,GPUを認識できず,利用できません.なのでNvidia Dockerという追加ソフトを入れて,DockerからGPUを利用できるようにします.
参考はdocs.nvidia.comのhttps://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.htmlです.
初めにGPGキーとレポジトリを追加します.
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
アップデートします
sudo apt update
nvidia-docker2をインストールします.
sudo apt install nvidia-docker2
dockerのサービスを再起動します.
sudo systemctl restart docker
docker上のコンテナでnvidia-smiコマンドが使えるかテストします.
sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
無事GPUがコンテナ上から認識できていればOKです.
comlew@comlewpc:~$ sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
Unable to find image 'nvidia/cuda:11.6.2-base-ubuntu20.04' locally
11.6.2-base-ubuntu20.04: Pulling from nvidia/cuda
846c0b181fff: Pull complete
b787be75b30b: Pull complete
40a5337e592b: Pull complete
8055c4cd4ab2: Pull complete
a0c882e23131: Pull complete
Digest: sha256:9928940c6e88ed3cdee08e0ea451c082a0ebf058f258f6fbc7f6c116aeb02143
Status: Downloaded newer image for nvidia/cuda:11.6.2-base-ubuntu20.04
Tue Jan 17 13:42:33 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.60.11 Driver Version: 525.60.11 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A |
| 0% 36C P8 18W / 220W | 1MiB / 8192MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
その他設定・ソフト追加
Dockerをsudoなしで実行
デフォルトだとDockerコマンドは多くの場合sudoが必要です.ここでは面倒なのでsudoは取ります.
ユーザをdockerグループに追加します.
sudo gpasswd -a $USER docker
dockerを再起動して,端末(ユーザー)からログアウトします.
sudo systemctl restart docker
exit
再度SSH接続し,計算機用PCにログインします(通常PCでの操作).
ssh [username]@[ip address]
ログイン後,psコマンド等でdockerコマンドがsudoなしで利用できることを確認します.
comlew@comlewpc:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Screenコマンドのインストール
SSH接続で作業もしくはプログラムを実行している最中に,ネットワークエラーやタイムアウトなどの理由で接続が強制的に切られることがあります.長期的なプログラムを実行中に途中でSSHを切られると,プログラムは強制終了されるのでこれは困ります.
これの対策方法はいくつかあるのですが,ここでは仮想端末ソフトであるscreenコマンドによって解決します.
screenコマンドは内部的(仮想的)に端末(ターミナル)を作成し,実際の端末と切り替えられるコマンドです.この仮想端末は生成元である端末が終了しても,強制的に終了しない限り残り続けます.
インストールは簡単でaptで入れるだけです.
sudo apt install screen
screenのコマンドはとりあえず5種類ほど覚えておけばよいです.
- screen(仮想端末の生成と仮想端末へのログイン)の生成
screen
- 仮想端末からのデタッチ(脱出).脱出は終了と異なり,実行中のプログラム・プロセスは保持されます.
[Ctrl + a] → [Ctrl + d]
- 現在実行中の仮想端末一覧の表示.この一覧の最初の数字が仮想端末のPIDです.
comlew@comlewpc:~$ screen -ls
There is a screen on:
7141.pts-0.comlewpc (01/17/2023 02:04:50 PM) (Detached)
1 Socket in /run/screen/S-comlew.
comlew@comlewpc:~$
- 仮想端末へのアタッチ(入出)
screen -r [PID]
また,SSHの接続終了などが原因で仮想端末をデタッチできずに抜けてしまうと,[-r]オプション単体では再度アタッチできません.その場合は[-d]オプションを追加します.
screen -d -r [PID]
- 仮想端末の終了.SSH(端末)の終了コマンド[exit]と同じですが,仮想端末内でexitを押してもSSH(端末)は終了しません.
exit
ファイル・ディレクトリ・プログラム編集
プログラムの編集やファイル操作は何を利用してもらっても構いません.
筆者はVisual Studio Codeを利用しています.
Visual Studio Codeはazure.microsoft.comからダウンロード・インストールできます.
インストール出来たら,フォルダを開く(Open)からSambaの共有ディレクトリのパスを入力します.
![](https://emoclework.jp/wp-content/uploads/2024/05/17749ab0b8b2-20230118.png)
プログラム編集やファイル作成等は,ここで行うとよいでしょう.
また,Linux上で生成したファイルもしくはディレクトリが,Windows上のエクスプローラーからは削除できない場合があります.
そんなときは,Linux上から削除しましょう.
ファイルを削除したいときは「rm」コマンドです.
rm ファイル名
ディレクトリ(中のファイルも)を削除したいときは「-rf」オプションを付けます.
rm -rf ディレクトリ名