業界最安値のGPUaaS「GPUSOROBAN」を実際に試してみた(5)~Dockerコンテナを使用し機械学習プロト環境を作る~【GPUSOROBANのベアメタルの導入編】

皆さん、こんにちは。
本ブログは最新のGPUが使える上に、とても安いと噂の「GPUSOROBAN」がどんな感じのものなのか、Dockerコンテナを使用し機械学習プロト環境を作成し、最終的にはオンプレ環境とクラウド環境でリアルタイムに顔検出を行う工程を実際に試してみたブログです。
今回は、GPUSOROBANのベアメタルの導入についてお伝えします。
公開鍵の作成と送付から、Dockerをインストールする様子までをお伝えしていますので、ご参考になれば幸いです。
それでは、始めましょう。
目次
GPUSOROBANのベアメタルの導入
「業界最安値のGPUAAS「GPUSOROBAN」を実際に試してみた」のブログでは仮想インスタンスの試用手順と仮想インスタンスではDockerが使えないことを書きましたが、今回はDockerを使用するためにベアメタルインスタンスを使用します。
そこでベアメタルインスタンスの試用までの手順を確認しました。
- (1)
- 以下URLまたはメールにて弊社の担当にベアメタルを試用したい旨を伝える
URL: https://www.paltek.co.jp/solution/gpucloud/index.html
- (2)
- 以下URLから会員登録を行う
URL: https://soroban.highreso.jp/
- (3)
- 株式会社ハイレゾにてベアメタルの準備が行われる
- (4)
- sshの認証用の公開鍵の送付依頼が来るので鍵を作って公開鍵を送る
- (5)
- 株式会社ハイレゾにて公開鍵が登録されてアクセス可能となった通知が来る
標準の試用期間は仮想インスタンスと同じで3日間です。
仮想インスタンスとの大きな違いは以下になると思います。
- ・
- マシンを完全に専有できる
- ・
- OSを壊さない限りオンプレ同様に自由に改変できる
- ・
- Webのコントロールパネルでは管理できない
個人的には障害が発生しない限りコントロールパネルの必要性を感じていないので特に問題はありません。気になるのは間違ってshutdownをしてしまったときにどうやって起動するのかというところですが、まだ確認していません。
(3)までは連絡するだけで進みました。
その後、(4)の公開鍵の送付依頼が来たので、公開鍵を用意するところから書きます。
公開鍵の作成と送付
一般的なRSAの鍵を用意します。手順も特に変わりありません。いつも使っている自分の鍵とは別に新たに作成しました。本格的に使う場合はビット長を4096以上にした方が良いでしょう。
鍵のディレクトリはデフォルトのパスでも問題ありませんが、PCのストレージを頻繁に差し替えて行方不明になったり、どれが何の鍵か分からなくなったりすることがあるのでディレクトリを作成してそこに入れました。
kirin@xeon-e3:~$ mkdir /home/kirin/.ssh/sshkey-bare-20220711
kirin@xeon-e3:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kirin/.ssh/id_rsa): /home/kirin/.ssh/sshkey-bare-20220711/id_rsa_soroban
Enter passphrase (empty for no passphrase):パスフレーズを入力してエンター
Enter same passphrase again: パスフレーズを入力してエンター
Your identification has been saved in /home/kirin/.ssh/sshkey-bare-20220711id_rsa_soroban.
Your public key has been saved in /home/kirin/.ssh/sshkey-bare-20220711/id_rsa_soroban.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx kirin@xeon-e3
The key's randomart image is:
+---[RSA 2048]----+
|o.o==+ .o.** |
|oo.+*++..+. o |
|..o==oOo.. o |
| E+ooB.* o |
| ooo o S |
| . * |
| . . |
| |
| |
+----[SHA256]-----+
kirin@xeon-e3:~$ ls -la ~/.ssh/sshkey-bare-20220711
合計 16
drwxrwxr-x 2 kirin kirin 4096 7月 11 15:39 .
drwx------ 4 kirin kirin 4096 7月 11 15:38 ..
-rw------- 1 kirin kirin 1766 7月 11 15:39 id_rsa_soroban
-rw-r--r-- 1 kirin kirin 395 7月 11 15:39 id_rsa_soroban.pub
出来上がった公開鍵のid_rsa_soroban.pubを送付しました。
ベアメタルにログイン
自分の公開鍵を送付すると接続が可能になったとの返信が来て、インスタンスのIPアドレスやポート、アクセスサーバの公開鍵等の情報が送られてきました。
アクセスサーバでインスタンスとローカルPC間にトンネルを掘って、トンネル経由でインスタンスに接続するという仕組みは仮想インスタンスと同じです。
私は以下のようなパラメータを与えてトンネルを掘っています。
ssh -g -L [ローカルのポート]:[インスタンスのIPアドレス]:[インスタンスのsshポート] \
-l user [アクセスサーバのIPアドレス] -p [アクセスサーバのsshポート] \
-i [送付されてきたアクセスサーバの公開鍵ファイル]
トンネルを掘ってからインスタンスにsshでログインします。
ssh -i [自分の秘密鍵ファイル] [インスタンスのユーザid]@localhost -p [ローカルのポート]
各IPアドレスやポート、鍵ファイルはクラウド用の環境変数に設定しています。
蛇足になりますが、インスタンスとの接続を切断して処理を継続することや、不慮のネットワークの切断に備えて作業にはscreenを使います。
インストールの途中で切断してパッケージシステムやDockerのデータベースなどが壊れたときの不復旧にかかる時間を考えると通信が切断しても状態を維持できるscreen等のツールを使っておく方が安心できます。
私が太古から使っているscreenの設定ファイルです。
buser@gpu55:~$ cat ~/.screenrc
escape ^t^t
hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w"
defscrollback 10000
デフォルトの設定だとCTRL-aでscreenのコマンド入力になりますが、bashの行頭に戻るコマンドとダブっているのでCTRL-tに変更しています。その他にもガイダンスの表示とバッファサイズを変更しています。
screenに関しては以下の記事も参考になると思います。
- 参考:
- 【GPUSOROBAN】時間のかかるプログラムを「screen」でバックグラウンド実行しよう
サイト | EdgeHUB |
---|---|
タイトル | 【GPUSOROBAN】時間のかかるプログラムを「screen」でバックグラウンド実行しよう |
URL | https://soroban.highreso.jp/edgehub/background-execution-with-screen/ |
ベアメタルインスタンスの確認
ベアメタルインスタンスにログインしたら、いつものごとく現在の環境を確認します。
OS関連の情報を確認します。
buser@gpu55:~/cuda_sample/cuda-samples$ uname -a
Linux gpu55 4.15.0-167-generic #175-Ubuntu SMP Wed Jan 5 01:56:07 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
buser@gpu55:~/cuda_sample/cuda-samples$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
CUDA関連の情報を確認します。
buser@gpu55:~$ nvidia-smi
Tue Jul 5 23:03:11 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 455.23.05 Driver Version: 455.23.05 CUDA Version: 11.1 |
|-------------------------------+----------------------+----------------------+
| 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 A100-PCIE-40GB On | 00000000:C1:00.0 Off | 0 |
| N/A 43C P0 34W / 250W | 0MiB / 40536MiB | 0% Default |
| | | Disabled |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
buser@gpu55:~$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 455.23.05 Fri Sep 18 19:37:12 UTC 2020
GCC version: gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
buser@gpu55:~$ nvcc -V
Command 'nvcc' not found, but can be installed with:
sudo apt install nvidia-cuda-toolkit
今回用意したコンテナのCUDAのバージョンは11.4.0ですが、インスタンスはnvidia-msiの結果から11.1までしか使えません。よって、CUDAを入れ替えます。
CUDA環境を入れ替える
オンプレであればCUDAの入れ替えに失敗して復旧できなくなっても最悪は自力でOSのインストールからやり直すことができますが、ベアメタルのインスタンスでどうなるのか心配であり、気になるところです。現在も進化中のGPUSOROBANですが、まだOSの初期化機能はないそうです。
心配だったのでGPUSOROBANのサポートに手順を質問したところ、以下のサイトを紹介されました。アンインストールしてからの再インストールがうまくいくのかが最も心配でしたが、たぶん実績のある手順なのでしょう。これを参考に入れ替えてみます。
サイト | Qiita |
---|---|
タイトル | ubuntuにCUDA、nvidiaドライバをインストールするメモ |
URL | https://qiita.com/porizou1/items/74d8264d6381ee2941bd |
サイト | Qiita |
---|---|
タイトル | CUDA Toolkit 11.4 Update 4 Downloads |
URL | https://developer.nvidia.com/cuda-11-4-4-download-archive?target_os=Linux& target_arch=x86_64&Distribution=Ubuntu&target_version=18.04&target_type=deb_local |
現状インストールされているCUDA nvidiaドライバの削除をします。
buser@gpu55:~$ sudo apt-get --purge remove nvidia-*
Reading package lists... Done
: (省略)
update-initramfs: Generating /boot/initrd.img-4.15.0-167-generic
W: Possible missing firmware /lib/firmware/ast_dp501_fw.bin for module ast
buser@gpu55:~$ sudo apt-get --purge remove cuda-*
Reading package lists... Done
: (省略)
Purging configuration files for cuda-repo-ubuntu1804 (10.1.243-1) ...
Purging configuration files for cuda-keyring (1.0-1) ...
インストールすべきドライバを調べます。
buser@gpu55:~$ sudo apt install ubuntu-drivers-common
Reading package lists... Done
Building dependency tree
Reading state information... Done
: (省略)
Processing triggers for ureadahead (0.100.0-21) ...
ureadahead will be reprofiled on next reboot
Processing triggers for libc-bin (2.27-3ubuntu1.2) ...
buser@gpu55:~$ ubuntu-drivers devices
WARNING:root:_pkg_get_support nvidia-driver-515: package has invalid Support PBheader, cannot determine support level
WARNING:root:_pkg_get_support nvidia-driver-510-server: package has invalid Support PBheader, cannot determine support level
WARNING:root:_pkg_get_support nvidia-driver-510: package has invalid Support PBheader, cannot determine support level
: (省略)
driver : nvidia-driver-510 - distro non-free
driver : nvidia-driver-470 - distro non-free recommended
driver : nvidia-driver-450-server - distro non-free
driver : nvidia-driver-515-server - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
nvidia-driver-470がrecommendedとなっておすすめされました。
どのドライバがおすすめになるかは使用しているGPUによって異なります。
おすすめされたドライバをインストールします。
buser@gpu55:~$ sudo add-apt-repository ppa:graphics-drivers/ppa
Fresh drivers from upstream, currently shipping Nvidia.
## Current Status
Current long-lived branch release: `nvidia-430` (430.40)
Dropped support for Fermi series (https://nvidia.custhelp.com/app/answers/detail/a_id/4656)
Old long-lived branch release: `nvidia-390` (390.129)
: (省略)
Get:12 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu bionic/main Translation-en [9,188 B]
Fetched 342 kB in 3s (117 kB/s)
Reading package lists... Done
buser@gpu55:~$ sudo apt update
Hit:1 http://jp.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://jp.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:3 http://jp.archive.ubuntu.com/ubuntu bionic-backports InRelease
: (省略)
Building dependency tree
Reading state information... Done
224 packages can be upgraded. Run 'apt list --upgradable' to see them.
buser@gpu55:~$ sudo apt install nvidia-driver-470
Reading package lists... Done
Building dependency tree
Reading state information... Done
: (省略)
Processing triggers for initramfs-tools (0.130ubuntu3.9) ...
update-initramfs: Generating /boot/initrd.img-4.15.0-167-generic
W: Possible missing firmware /lib/firmware/ast_dp501_fw.bin for module ast
インスタンスを再起動します。
sudo reboot
再起動後、インスタンスにログインして確認します。
buser@gpu55:~$ nvidia-smi
Mon Jul 11 11:55:20 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.129.06 Driver Version: 470.129.06 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| 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 A100-PCI... Off | 00000000:C1:00.0 Off | 0 |
| N/A 52C P0 38W / 250W | 0MiB / 40536MiB | 29% Default |
| | | Disabled |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
buser@gpu55:~$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 470.129.06 Thu May 12 22:52:02 UTC 2022
GCC version: gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
buser@gpu55:~$ nvcc -V
Command 'nvcc' not found, but can be installed with:
sudo apt install nvidia-cuda-toolkit
buser@gpu55:~$ nvidia-container-cli info
NVRM version: 470.129.06
CUDA version: 11.4
Device Index: 0
Device Minor: 0
Model: NVIDIA A100-PCIE-40GB
Brand: Nvidia
GPU UUID: GPU-923c3199-8995-b8c0-06a1-cc4ae4458fcf
Bus Location: 00000000:c1:00.0
Architecture: 8.0
11.4になり、A100も認識しているようです。ホッとしました。
Dockerをインストール
コンテナにとってホストPCとインスタンスは同じものに見えるようにする必要があるので、インスタンスにも「3. 環境構築 その2」の以下の工程を実施します。
- ・
- Dockerのインストール
- ・
- CUDAが使えるコンテナの作成準備
インストール前に「2. 環境構築 その1」の共通環境変数とクラウド用環境変数をベアメタルインスタンスの~/.bashrcに追加しておきます。
同じOSなので当たりまえですが、Dockerのインストールも問題なく完了しました。
おわりに
いかがでしたでしょうか。次回は最終回で、やっとクラウドを使ってオンプレと同じものを動かしはじめます。
最後までご覧いただきありがとうございました!
次回もよろしくお願いします。