Ubuntu 18.04 LTSにSingularityをインストールして、NGCコンテナーのTensorFlowを使ってみるまでの手順を詳しく解説します。

  1. 準備
  2. NVIDIA Driverのインストール
  3. go 言語のインストール
  4. Singularity のインストール
  5. NGC コンテナーの TensorFlow を Singularity で pull する
  6. pull した NGC コンテナーを singularity で実行する

1.準備

Ubuntu 18.04 LTS Desktopはすでにインストールされているものとします。
最初にインターネットに接続できるようにネットワークを設定します。その後OSを最新の状態にアップデートします

sudo apt update 
sudo apt upgrade -y 

sshで別のPCから作業する場合は、

sudo apt install -y openssh-server 

でsshサーバーをインストールします。
Desktopで作業している場合はTerminalを開き、他のPCで作業の場合はssh -Y ユーザーID@IPアドレス でログインします。
現在のOSの情報は cat /etc/os-release で表示することができます。

dl@dl@dl@dl@dl-machine:~$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
dl@dl-machine:~$

2.NVIDIA Driverのインストール

NVIDIA Driverをインストールする方法はいろいろ紹介されていますが、runファイルでインストールする方法はお勧めできません。これからお勧めする方法に比べて不要な手順が必要で、ステップ数も大きいからです。最も簡単でアップデートも apt upgrade だけやれば完了するやり方は、CUDA の CUDA Driver だけをインストールする方法です。どなたでも間違い無く実行可能で失敗することはあり得ません。ここではそれを行います。
firefox & でfirefoxを立ち上げて cuda download を検索します。
cuda download search result
上図検索結果の 一番上の CUDA Toolkit 10.2 Download | NVIDIA Developer をクリックします。
cuda toolkit download
上図の Select Target Platform 中の Linux をクリックします。
cuda toolkit download linux
出てきた上図の Architecture の下の x86_64 をクリックします。
cuda toolkit download linux
その下に出てきた上図の Distribution の下の Ubuntu をクリックします。
cuda toolkit download linux
その下に出てきた Versionの下の 18.04 をクリックします。
cuda toolkit download linux
その下に出てきた Installer Type 下の deb (network) をクリックします。
cuda toolkit download linux
するとその下に Installation Instructions: が表示されますので、それを最後の行を除いて実行していきます。

dl@dl-machine:~$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
--2020-05-05 16:16:49--  https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
developer.download.nvidia.com (developer.download.nvidia.com) をDNSに問いあわせています... 152.199.39.144
developer.download.nvidia.com (developer.download.nvidia.com)|152.199.39.144|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 56 [application/octet-stream]
`cuda-ubuntu1804.pin' に保存中

cuda-ubuntu1804.pin         100%[===============================================>]      56  --.-KB/s    時間 0s    

2020-05-05 16:16:49 (635 KB/s) - `cuda-ubuntu1804.pin' へ保存完了 [56/56]

dl@dl-machine:~$ sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
[sudo] dl のパスワード: 
dl@dl-machine:~$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
Executing: /tmp/apt-key-gpghome.TGsdUTaGwD/gpg.1.sh --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
gpg: 鍵を'https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub'から要求
gpg: 鍵F60F4B3D7FA2AF80: 公開鍵"cudatools "をインポートしました
gpg: 処理数の合計: 1
gpg:               インポート: 1
dl@dl-machine:~$ sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
無視:1 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  InRelease
取得:2 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  Release [564 B] 
取得:3 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  Release.gpg [819 B]                                         
ヒット:4 http://jp.archive.ubuntu.com/ubuntu bionic InRelease                                                                                     
取得:5 http://jp.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]                                                      
取得:6 http://jp.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]                                                        
取得:7 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  Packages [141 kB]                                   
取得:8 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 DEP-11 Metadata [301 kB]                                       
取得:9 http://jp.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 DEP-11 Metadata [273 kB]                                  
取得:10 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]                                                                        
取得:11 http://jp.archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 DEP-11 Metadata [2,468 B]   
取得:12 http://jp.archive.ubuntu.com/ubuntu bionic-backports/universe amd64 DEP-11 Metadata [7,964 B]
取得:13 http://security.ubuntu.com/ubuntu bionic-security/main amd64 DEP-11 Metadata [38.7 kB]                
取得:14 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 DEP-11 Metadata [42.0 kB]
取得:15 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 DEP-11 Metadata [2,464 B]
1,062 kB を 2秒 で取得しました (454 kB/s)                                     
パッケージリストを読み込んでいます... 完了
dl@dl-machine:~$ sudo apt-get update
ヒット:1 http://jp.archive.ubuntu.com/ubuntu bionic InRelease
ヒット:2 http://jp.archive.ubuntu.com/ubuntu bionic-updates InRelease                                                                                
ヒット:3 http://jp.archive.ubuntu.com/ubuntu bionic-backports InRelease                                                                              
無視:4 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  InRelease                                                          
ヒット:5 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  Release                                  
ヒット:6 http://security.ubuntu.com/ubuntu bionic-security InRelease                               
パッケージリストを読み込んでいます... 完了                                                      
dl@dl-machine:~$
CUDA全部をインストールするのではなく、ドライバーだけをインストールします。
dl@dl-machine:~$ sudo apt install cuda-drivers
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  build-essential dkms dpkg-dev fakeroot g++ g++-7 gcc gcc-7 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan4
  libatomic1 libc-dev-bin libc6-dev libcilkrts5 libfakeroot libgcc-7-dev libitm1 liblsan0 libmpx2 libnvidia-cfg1-440 libnvidia-common-440
  libnvidia-compute-440 libnvidia-decode-440 libnvidia-encode-440 libnvidia-fbc1-440 libnvidia-gl-440 libnvidia-ifr1-440 libopengl0 libquadmath0
  libstdc++-7-dev libtsan0 libubsan0 libvdpau1 libxnvctrl0 linux-libc-dev make manpages-dev mesa-vdpau-drivers nvidia-compute-utils-440
  nvidia-dkms-440 nvidia-driver-440 nvidia-kernel-common-440 nvidia-kernel-source-440 nvidia-modprobe nvidia-prime nvidia-settings nvidia-utils-440
  pkg-config screen-resolution-extra vdpau-driver-all xserver-xorg-video-nvidia-440
提案パッケージ:
  menu debian-keyring g++-multilib g++-7-multilib gcc-7-doc libstdc++6-7-dbg gcc-multilib autoconf automake libtool flex bison gcc-doc
  gcc-7-multilib gcc-7-locales libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan4-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg
  libcilkrts5-dbg libmpx2-dbg libquadmath0-dbg glibc-doc libstdc++-7-doc make-doc libvdpau-va-gl1 nvidia-vdpau-driver
  nvidia-legacy-340xx-vdpau-driver
推奨パッケージ:
  libnvidia-compute-440:i386 libnvidia-decode-440:i386 libnvidia-encode-440:i386 libnvidia-ifr1-440:i386 libnvidia-fbc1-440:i386
  libnvidia-gl-440:i386
以下のパッケージが新たにインストールされます:
  build-essential cuda-drivers dkms dpkg-dev fakeroot g++ g++-7 gcc gcc-7 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl
  libasan4 libatomic1 libc-dev-bin libc6-dev libcilkrts5 libfakeroot libgcc-7-dev libitm1 liblsan0 libmpx2 libnvidia-cfg1-440 libnvidia-common-440
  libnvidia-compute-440 libnvidia-decode-440 libnvidia-encode-440 libnvidia-fbc1-440 libnvidia-gl-440 libnvidia-ifr1-440 libopengl0 libquadmath0
  libstdc++-7-dev libtsan0 libubsan0 libvdpau1 libxnvctrl0 linux-libc-dev make manpages-dev mesa-vdpau-drivers nvidia-compute-utils-440
  nvidia-dkms-440 nvidia-driver-440 nvidia-kernel-common-440 nvidia-kernel-source-440 nvidia-modprobe nvidia-prime nvidia-settings nvidia-utils-440
  pkg-config screen-resolution-extra vdpau-driver-all xserver-xorg-video-nvidia-440
アップグレード: 0 個、新規インストール: 54 個、削除: 0 個、保留: 0 個。
135 MB 中 102 MB のアーカイブを取得する必要があります。
この操作後に追加で 528 MB のディスク容量が消費されます。
続行しますか? [Y/n] y
*** 以下省略 ***
dl@dl-machine:~$ 
リブートしてドライバーを有効にします。 nvidia-smi を実行してGPUが認識されるか確認します。
dl@dl-machine:~$ nvidia-smi
Tue May  5 17:13:10 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64.00    Driver Version: 440.64.00    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 107...  On   | 00000000:01:00.0 Off |                  N/A |
| N/A   42C    P8     3W /  N/A |    487MiB /  8119MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1059      G   /usr/lib/xorg/Xorg                           303MiB |
|    0      1283      G   /usr/bin/gnome-shell                         181MiB |
+-----------------------------------------------------------------------------+
dl@dl-machine:~$

3.go 言語のインストール

firefox & で firefox を立ち上げて、https://golang.org/dl/ にアクセスします。
cuda toolkit download linux
表示された画面の Featured downloads の下の Linux をクリックします。
cuda toolkit download linux
小さなウインドウに「このファイルをどのように処理するか選んでください」と表示されますので「ファイルを保存する 」をクリックします。
cuda toolkit download linux
小さなウインドウ右下の「OK]をクリックします。
cuda toolkit download linux
小さなウインドウ右下の「OK]をクリックします。
少し待つとダウンロードが終わりますので、/usr/localの下に展開します。

dl@dl-machine:~$ sudo tar -C /usr/local -xzf ~/Downloads/go1.14.2.linux-amd64.tar.gz 
[sudo] dl のパスワード: 
dl@dl-machine:~$ ls /usr/local
bin  etc  games  go  include  lib  man  sbin  share  src
dl@dl-machine:~$
/usr/local の下に go というディレクトリができているのがわかります。
全てのユーザーが go を使えるように、/etc/profile の PATH に /usr/local/go/bin を加えます。
dl@dl-machine:~$ echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee -a /etc/profile
export PATH=$PATH:/usr/local/go/bin
dl@dl-machine:~$ cat /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
export PATH=$PATH:/usr/local/go/bin
dl@dl-machine:~$ 
変更を有効にするためにターミナルをクローズして再度開くか、sshをログアウトしてログインしなおします。
PATH に /usr/local/go/bin が加わっているのがわかります。go version とすると go のバージョンが表示されます。
dl@dl-machine:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/go/bin
dl@dl-machine:~$ go version
go version go1.14.2 linux/amd64
dl@dl-machine:~$ 

4.Singularity のインストール

必要なライブラリをインストールします。

dl@dl-machine:~$ sudo apt-get update && sudo apt-get install -y \
>     build-essential \
>     uuid-dev \
>     libgpgme-dev \
>     squashfs-tools \
>     libseccomp-dev \
>     wget \
>     pkg-config \
>     git \
>     cryptsetup-bin
[sudo] dl のパスワード: 
無視:1 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  InRelease
ヒット:2 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  Release
ヒット:3 http://jp.archive.ubuntu.com/ubuntu bionic InRelease                                                        
取得:4 http://jp.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]                                        
取得:5 http://jp.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]                                      
取得:7 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]                                         
取得:8 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [932 kB]
取得:9 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages [675 kB]         
取得:10 http://security.ubuntu.com/ubuntu bionic-security/main amd64 DEP-11 Metadata [38.7 kB]
取得:11 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 DEP-11 Metadata [301 kB]  
取得:12 http://jp.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 DEP-11 Metadata [273 kB]
取得:13 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 DEP-11 Metadata [42.1 kB]
取得:14 http://jp.archive.ubuntu.com/ubuntu bionic-updates/universe DEP-11 64x64 Icons [457 kB]            
取得:15 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 DEP-11 Metadata [2,464 B]            
取得:16 http://jp.archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 DEP-11 Metadata [2,468 B]         
取得:17 http://jp.archive.ubuntu.com/ubuntu bionic-backports/universe amd64 DEP-11 Metadata [7,972 B]
2,984 kB を 2秒 で取得しました (1,697 kB/s)                                   
パッケージリストを読み込んでいます... 完了
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
build-essential はすでに最新バージョン (12.4ubuntu1) です。
build-essential は手動でインストールしたと設定されました。
pkg-config はすでに最新バージョン (0.29.1-0ubuntu2) です。
pkg-config は手動でインストールしたと設定されました。
squashfs-tools はすでに最新バージョン (1:4.3-6ubuntu0.18.04.1) です。
wget はすでに最新バージョン (1.19.4-1ubuntu2.2) です。
提案パッケージ:
  git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn
  seccomp
以下のパッケージが新たにインストールされます:
  cryptsetup-bin git git-man libassuan-dev liberror-perl libgpg-error-dev libgpgme-dev libseccomp-dev uuid-dev
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 0 個。
5,421 kB のアーカイブを取得する必要があります。
この操作後に追加で 36.7 MB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 cryptsetup-bin amd64 2:2.0.2-1ubuntu1.1 [92.9 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 liberror-perl all 0.17025-1 [22.8 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 git-man all 1:2.17.1-1ubuntu0.7 [804 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 git amd64 1:2.17.1-1ubuntu0.7 [3,915 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 libassuan-dev amd64 2.5.1-2 [92.1 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 libgpg-error-dev amd64 1.27-6 [94.8 kB]
取得:7 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libseccomp-dev amd64 2.4.1-0ubuntu0.18.04.2 [60.2 kB]
取得:8 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libgpgme-dev amd64 1.10.0-1ubuntu2 [306 kB]
取得:9 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 uuid-dev amd64 2.31.1-0.4ubuntu3.6 [33.2 kB]
5,421 kB を 1秒 で取得しました (6,061 kB/s)
以前に未選択のパッケージ cryptsetup-bin を選択しています。
(データベースを読み込んでいます ... 現在 172551 個のファイルとディレクトリがインストールされています。)
.../0-cryptsetup-bin_2%3a2.0.2-1ubuntu1.1_amd64.deb を展開する準備をしています ...
cryptsetup-bin (2:2.0.2-1ubuntu1.1) を展開しています...
以前に未選択のパッケージ liberror-perl を選択しています。
.../1-liberror-perl_0.17025-1_all.deb を展開する準備をしています ...
liberror-perl (0.17025-1) を展開しています...
以前に未選択のパッケージ git-man を選択しています。
.../2-git-man_1%3a2.17.1-1ubuntu0.7_all.deb を展開する準備をしています ...
git-man (1:2.17.1-1ubuntu0.7) を展開しています...
以前に未選択のパッケージ git を選択しています。
.../3-git_1%3a2.17.1-1ubuntu0.7_amd64.deb を展開する準備をしています ...
git (1:2.17.1-1ubuntu0.7) を展開しています...
以前に未選択のパッケージ libassuan-dev を選択しています。
.../4-libassuan-dev_2.5.1-2_amd64.deb を展開する準備をしています ...
libassuan-dev (2.5.1-2) を展開しています...
以前に未選択のパッケージ libgpg-error-dev を選択しています。
.../5-libgpg-error-dev_1.27-6_amd64.deb を展開する準備をしています ...
libgpg-error-dev (1.27-6) を展開しています...
以前に未選択のパッケージ libseccomp-dev:amd64 を選択しています。
.../6-libseccomp-dev_2.4.1-0ubuntu0.18.04.2_amd64.deb を展開する準備をしています ...
libseccomp-dev:amd64 (2.4.1-0ubuntu0.18.04.2) を展開しています...
以前に未選択のパッケージ libgpgme-dev を選択しています。
.../7-libgpgme-dev_1.10.0-1ubuntu2_amd64.deb を展開する準備をしています ...
libgpgme-dev (1.10.0-1ubuntu2) を展開しています...
以前に未選択のパッケージ uuid-dev:amd64 を選択しています。
.../8-uuid-dev_2.31.1-0.4ubuntu3.6_amd64.deb を展開する準備をしています ...
uuid-dev:amd64 (2.31.1-0.4ubuntu3.6) を展開しています...
git-man (1:2.17.1-1ubuntu0.7) を設定しています ...
liberror-perl (0.17025-1) を設定しています ...
libgpg-error-dev (1.27-6) を設定しています ...
libseccomp-dev:amd64 (2.4.1-0ubuntu0.18.04.2) を設定しています ...
uuid-dev:amd64 (2.31.1-0.4ubuntu3.6) を設定しています ...
libassuan-dev (2.5.1-2) を設定しています ...
cryptsetup-bin (2:2.0.2-1ubuntu1.1) を設定しています ...
libgpgme-dev (1.10.0-1ubuntu2) を設定しています ...
git (1:2.17.1-1ubuntu0.7) を設定しています ...
man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ...
install-info (6.5.0.dfsg.1-2) のトリガを処理しています ...
dl@dl-machine:~$ 
~/Downloads の下に singularity を git clone します。
dl@dl-machine:~$ cd Downloads/
dl@dl-machine:~/Downloads$ git clone https://github.com/sylabs/singularity.git
Cloning into 'singularity'...
remote: Enumerating objects: 175, done.
remote: Counting objects: 100% (175/175), done.
remote: Compressing objects: 100% (135/135), done.
remote: Total 90705 (delta 71), reused 80 (delta 26), pack-reused 90530
Receiving objects: 100% (90705/90705), 29.04 MiB | 1.64 MiB/s, done.
Resolving deltas: 100% (57978/57978), done.
dl@dl-machine:~/Downloads$
clone された singularity のディレクトリに移動して安定版の v3.5.3 に checkout して ./mconfig を実行します。
dl@dl-machine:~/Downloads$ cd singularity/
dl@dl-machine:~/Downloads/singularity$ git checkout v3.5.3
Note: checking out 'v3.5.3'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b 

HEAD is now at 8d88457d9 Merge pull request #5044 from dctrud/cp-353-5043
dl@dl-machine:~/Downloads/singularity$ ./mconfig
Configuring for project `singularity' with languages: C, Golang
=> running pre-basechecks project specific checks ...
=> running base system checks ...
 checking: host C compiler... cc
 checking: host C++ compiler... c++
 checking: host Go compiler (at least version 1.13)... /usr/local/go/bin/go
 checking: host C compiler option -Wall... yes
 checking: host C compiler option -Werror... yes
 checking: host C compiler option -Wfatal-errors... yes
 checking: host C compiler option -Wno-unknown-warning-option... yes
 checking: host C compiler option -Wstrict-prototypes... yes
 checking: host C compiler option -Wpointer-arith... yes
 checking: host C compiler option -Wbad-function-cast... yes
 checking: host C compiler option -Woverlength-strings... yes
 checking: host C compiler option -Wframe-larger-than=2047... yes
 checking: host C compiler option -Wno-sign-compare... yes
 checking: host C compiler option -Wclobbered... yes
 checking: host C compiler option -Wempty-body... yes
 checking: host C compiler option -Wmissing-parameter-type... yes
 checking: host C compiler option -Wtype-limits... yes
 checking: host C compiler option -Wunused-parameter... yes
 checking: host C compiler option -Wunused-but-set-parameter... yes
 checking: host C compiler option -Wno-discarded-qualifiers... yes
 checking: host C compiler option -Wno-incompatible-pointer-types... yes
 checking: host C compiler option -pipe... yes
 checking: host C compiler option -fmessage-length=0... yes
 checking: host C compiler option -fPIC... yes
 checking: host `ar' path... ar
 checking: host `ld' path... ld
 checking: host `ranlib' path... ranlib
 checking: host `objcopy' path... objcopy
 checking: target C compiler... cc
 checking: target C++ compiler... c++
 checking: target `ar' path... ar
 checking: target `ld' path... ld
 checking: target `ranlib' path... ranlib
 checking: target `objcopy' path... objcopy
 checking: host compiles static binaries... yes
 checking: target compiles static binaries... yes
 checking: host os type... unix
 checking: host architecture... x86_64
 checking: target architecture... x86_64
 checking: host architecture word size... 64
 checking: target architecture word size... 64
 checking: project version... 3.5.3
 checking: project short version... 3.5.3
=> running post-basechecks project specific checks ...
 checking: namespace: CLONE_NEWPID... yes
 checking: namespace: CLONE_FS... yes
 checking: namespace: CLONE_NEWNS... yes
 checking: namespace: CLONE_NEWUSER... yes
 checking: namespace: CLONE_NEWIPC... yes
 checking: namespace: CLONE_NEWNET... yes
 checking: namespace: CLONE_NEWUTS... yes
 checking: namespace: CLONE_NEWCGROUP... yes
 checking: feature: NO_NEW_PRIVS... yes
 checking: feature: MS_SLAVE... yes
 checking: feature: MS_REC... yes
 checking: feature: MS_PRIVATE... yes
 checking: user capabilities... yes
 checking: header linux/securebits.h... yes
 checking: header linux/capability.h... yes
 checking: function setns... yes
 checking: libssl+headers... no

Unable to find the libssl, need package openssl-devel (libssl-dev on Debian/Ubuntu)

dl@dl-machine:~/Downloads/singularity$ 
libssl-dev が無いと言われたのでインストールして再度 ./mconfig を実行します。
dl@dl-machine:~/Downloads/singularity$ sudo apt install -y libssl-dev
[sudo] dl のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
提案パッケージ:
  libssl-doc
以下のパッケージが新たにインストールされます:
  libssl-dev
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
1,566 kB のアーカイブを取得する必要があります。
この操作後に追加で 7,846 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libssl-dev amd64 1.1.1-1ubuntu2.1~18.04.5 [1,566 kB]
1,566 kB を 1秒 で取得しました (2,874 kB/s)
以前に未選択のパッケージ libssl-dev:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 173578 個のファイルとディレクトリがインストールされています。)
.../libssl-dev_1.1.1-1ubuntu2.1~18.04.5_amd64.deb を展開する準備をしています ...
libssl-dev:amd64 (1.1.1-1ubuntu2.1~18.04.5) を展開しています...
libssl-dev:amd64 (1.1.1-1ubuntu2.1~18.04.5) を設定しています ...
dl@dl-machine:~/Downloads/singularity$ ./mconfig
Configuring for project `singularity' with languages: C, Golang
=> running pre-basechecks project specific checks ...
=> running base system checks ...
 checking: host C compiler... cc
 checking: host C++ compiler... c++
 checking: host Go compiler (at least version 1.13)... /usr/local/go/bin/go
 checking: host C compiler option -Wall... yes
 checking: host C compiler option -Werror... yes
 checking: host C compiler option -Wfatal-errors... yes
 checking: host C compiler option -Wno-unknown-warning-option... yes
 checking: host C compiler option -Wstrict-prototypes... yes
 checking: host C compiler option -Wpointer-arith... yes
 checking: host C compiler option -Wbad-function-cast... yes
 checking: host C compiler option -Woverlength-strings... yes
 checking: host C compiler option -Wframe-larger-than=2047... yes
 checking: host C compiler option -Wno-sign-compare... yes
 checking: host C compiler option -Wclobbered... yes
 checking: host C compiler option -Wempty-body... yes
 checking: host C compiler option -Wmissing-parameter-type... yes
 checking: host C compiler option -Wtype-limits... yes
 checking: host C compiler option -Wunused-parameter... yes
 checking: host C compiler option -Wunused-but-set-parameter... yes
 checking: host C compiler option -Wno-discarded-qualifiers... yes
 checking: host C compiler option -Wno-incompatible-pointer-types... yes
 checking: host C compiler option -pipe... yes
 checking: host C compiler option -fmessage-length=0... yes
 checking: host C compiler option -fPIC... yes
 checking: host `ar' path... ar
 checking: host `ld' path... ld
 checking: host `ranlib' path... ranlib
 checking: host `objcopy' path... objcopy
 checking: target C compiler... cc
 checking: target C++ compiler... c++
 checking: target `ar' path... ar
 checking: target `ld' path... ld
 checking: target `ranlib' path... ranlib
 checking: target `objcopy' path... objcopy
 checking: host compiles static binaries... yes
 checking: target compiles static binaries... yes
 checking: host os type... unix
 checking: host architecture... x86_64
 checking: target architecture... x86_64
 checking: host architecture word size... 64
 checking: target architecture word size... 64
 checking: project version... 3.5.3
 checking: project short version... 3.5.3
=> running post-basechecks project specific checks ...
 checking: namespace: CLONE_NEWPID... yes
 checking: namespace: CLONE_FS... yes
 checking: namespace: CLONE_NEWNS... yes
 checking: namespace: CLONE_NEWUSER... yes
 checking: namespace: CLONE_NEWIPC... yes
 checking: namespace: CLONE_NEWNET... yes
 checking: namespace: CLONE_NEWUTS... yes
 checking: namespace: CLONE_NEWCGROUP... yes
 checking: feature: NO_NEW_PRIVS... yes
 checking: feature: MS_SLAVE... yes
 checking: feature: MS_REC... yes
 checking: feature: MS_PRIVATE... yes
 checking: user capabilities... yes
 checking: header linux/securebits.h... yes
 checking: header linux/capability.h... yes
 checking: function setns... yes
 checking: libssl+headers... yes
 checking: libuuid+headers... yes
 checking: libseccomp+headers... yes
 checking: cryptsetup... yes
=> generating fragments ...
=> building Makefile ...
=> generating singularity.spec ...
=> project singularity setup with :
    - host arch: x86_64
    - host wordsize: 64-bit
    - host C compiler: cc
    - host Go compiler: /usr/local/go/bin/go
    - host system: unix
      ---
    - target arch: x86_64
    - target wordsize: 64-bit
    - target C compiler: cc
      ---
    - config profile: release
      ---
    - SUID install: yes
    - Network plugins: yes
      ---
    - verbose: no
      ---
    - cryptsetup: /sbin/cryptsetup
      ---
    - version: 3.5.3
=> /home/dl/Downloads/singularity/builddir/Makefile ready, try:
   $ cd /home/dl/Downloads/singularity/builddir
   $ make
dl@dl-machine:~/Downloads/singularity$
./mconfig が正常終了したので make -C ./builddir を実行します。
dl@dl-machine:~/Downloads/singularity$ make -C ./builddir
make: ディレクトリ '/home/dl/Downloads/singularity/builddir' に入ります
go: downloading github.com/spf13/cobra v0.0.5
*** 省略 ***
 GEN /home/dl/Downloads/singularity/scripts/go-generate
 GO singularity
    [+] GO_TAGS "containers_image_openpgp sylog imgbuild_engine oci_engine singularity_engine fakeroot_engine apparmor selinux seccomp"
 GEN etc/bash_completion.d/singularity
 GEN singularity.conf from /usr/local/etc/singularity/singularity.conf
 GO clean -cache
 GO cmd/starter/c/starter
 GO cmd/starter/c/starter-suid
    [+] GO_TAGS "containers_image_openpgp sylog singularity_engine fakeroot_engine apparmor selinux seccomp"
 CNI PLUGIN dhcp
go: downloading github.com/d2g/dhcp4client v1.0.0
go: downloading github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c
 CNI PLUGIN host-local
go: downloading github.com/alexflint/go-filemutex v0.0.0-20171028004239-d358565f3c3f
 CNI PLUGIN static
 CNI PLUGIN bridge
go: downloading github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56
 CNI PLUGIN host-device
 CNI PLUGIN ipvlan
 CNI PLUGIN loopback
 CNI PLUGIN macvlan
 CNI PLUGIN ptp
 CNI PLUGIN vlan
 CNI PLUGIN bandwidth
 CNI PLUGIN firewall
 CNI PLUGIN flannel
 CNI PLUGIN portmap
go: downloading github.com/mattn/go-shellwords v1.0.5
 CNI PLUGIN tuning
 GEN /home/dl/Downloads/singularity/scripts/go-test
make: ディレクトリ '/home/dl/Downloads/singularity/builddir' から出ます
dl@dl-machine:~/Downloads/singularity$
正常終了したので sudo make -C ./builddir install を実行してインストールします。
dl@dl-machine:~/Downloads/singularity$ sudo make -C ./builddir install
make: ディレクトリ '/home/dl/Downloads/singularity/builddir' に入ります
 INSTALL /usr/local/bin/singularity
 INSTALL /usr/local/etc/bash_completion.d/singularity
 INSTALL /usr/local/etc/singularity/singularity.conf
 INSTALL /usr/local/etc/singularity/remote.yaml
 INSTALL /usr/local/libexec/singularity/bin/starter
 INSTALL /usr/local/var/singularity/mnt/session
 INSTALL /usr/local/bin/run-singularity
 INSTALL /usr/local/etc/singularity/capability.json
 INSTALL /usr/local/etc/singularity/ecl.toml
 INSTALL /usr/local/etc/singularity/seccomp-profiles/default.json
 INSTALL /usr/local/etc/singularity/nvliblist.conf
 INSTALL /usr/local/etc/singularity/rocmliblist.conf
 INSTALL /usr/local/etc/singularity/cgroups/cgroups.toml
 INSTALL SUID /usr/local/libexec/singularity/bin/starter-suid
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/dhcp
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/host-local
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/static
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/bridge
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/host-device
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/ipvlan
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/loopback
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/macvlan
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/ptp
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/vlan
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/bandwidth
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/firewall
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/flannel
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/portmap
 INSTALL CNI PLUGIN /usr/local/libexec/singularity/cni/tuning
 INSTALL CNI CONFIGURATION FILES
 DONE
make: ディレクトリ '/home/dl/Downloads/singularity/builddir' から出ます
dl@dl-machine:~/Downloads/singularity$ 
これで singularity がインストールされました。singularity version でバージョンを表示します。
dl@dl-machine:~/Downloads/singularity$ cd
dl@dl-machine:~$ singularity version
3.5.3
dl@dl-machine:~$ 

5.NGC コンテナーの TensorFlow を Singularity で pull する

firefox を立ち上げて https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow を表示させます。
cuda toolkit download
Pull Command の下の nvcr.io/nvidia/tensorflow:20.03-tf2-py3 から下記の singularity pull コマンドを実行します。

dl@dl-machine:~$ mkdir singularity
dl@dl-machine:~$ cd singularity
dl@dl-machine:~/singularity$ singularity pull docker://nvcr.io/nvidia/tensorflow:20.03-tf2-py3
INFO:    Converting OCI blobs to SIF format
INFO:    Starting build...
Getting image source signatures
Copying blob 423ae2b273f4 done
*** 省略 ***
Copying config fabc6c87fb done
Writing manifest to image destination
Storing signatures
2020/05/06 09:50:34  info unpack layer: sha256:423ae2b273f4c17ceee9e8482fa8d071d90c7d052ae208e1fe4963fceb3d6954
*** 省略 ***
INFO:    Creating SIF file...
INFO:    Build complete: tensorflow_20.03-tf2-py3.sif
dl@dl-machine:~/singularity$ ls
tensorflow_20.03-tf2-py3.sif
dl@dl-machine:~/singularity$
すると singularity 用のコンテナーができます。
dl@dl-machine:~/singularity$ ls
 tensorflow_20.03-tf2-py3.sif
dl@dl-machine:~/singularity$

6.pull した NGC コンテナーを singularity で実行する

firefox を立ち上げて https://www.tensorflow.org/tutorials/quickstart/beginner を表示させます。
cuda toolkit download
上記のサンプルコードを実行します。

dl@dl-machine:~/singularity$ singularity exec --nv tensorflow_20.03-tf2-py3.sif python <<.
> import tensorflow as tf
> mnist = tf.keras.datasets.mnist
> 
> (x_train, y_train),(x_test, y_test) = mnist.load_data()
> x_train, x_test = x_train / 255.0, x_test / 255.0
> 
> model = tf.keras.models.Sequential([
>   tf.keras.layers.Flatten(input_shape=(28, 28)),
>   tf.keras.layers.Dense(128, activation='relu'),
>   tf.keras.layers.Dropout(0.2),
>   tf.keras.layers.Dense(10, activation='softmax')
> ])
> 
> model.compile(optimizer='adam',
>               loss='sparse_categorical_crossentropy',
>               metrics=['accuracy'])
> 
> model.fit(x_train, y_train, epochs=5)
> model.evaluate(x_test, y_test)
> .
Usage example: change_mofed_version.sh 4.5-1.0.1
2020-05-07 10:14:29.140887: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.2
2020-05-07 10:14:30.383732: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer.so.7
2020-05-07 10:14:30.388451: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer_plugin.so.7
2020-05-07 10:14:31.394149: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-05-07 10:14:31.402508: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-07 10:14:31.403026: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce GTX 1070 with Max-Q Design computeCapability: 6.1
coreClock: 1.2655GHz coreCount: 16 deviceMemorySize: 7.93GiB deviceMemoryBandwidth: 238.66GiB/s
2020-05-07 10:14:31.403042: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.2
2020-05-07 10:14:31.403067: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-05-07 10:14:31.420054: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-05-07 10:14:31.426511: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-05-07 10:14:31.465072: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-05-07 10:14:31.472224: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-05-07 10:14:31.472262: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-05-07 10:14:31.472365: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-07 10:14:31.472953: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-07 10:14:31.473386: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
2020-05-07 10:14:31.501739: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2199995000 Hz
2020-05-07 10:14:31.505331: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x57d8dc0 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-05-07 10:14:31.505390: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-05-07 10:14:31.575850: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-07 10:14:31.576224: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x5856d60 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
2020-05-07 10:14:31.576239: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): GeForce GTX 1070 with Max-Q Design, Compute Capability 6.1
2020-05-07 10:14:31.576386: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-07 10:14:31.576668: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce GTX 1070 with Max-Q Design computeCapability: 6.1
coreClock: 1.2655GHz coreCount: 16 deviceMemorySize: 7.93GiB deviceMemoryBandwidth: 238.66GiB/s
2020-05-07 10:14:31.576706: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.2
2020-05-07 10:14:31.576718: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-05-07 10:14:31.576729: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-05-07 10:14:31.576738: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-05-07 10:14:31.576746: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-05-07 10:14:31.576755: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-05-07 10:14:31.576762: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-05-07 10:14:31.576792: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-07 10:14:31.577061: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-07 10:14:31.577362: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
2020-05-07 10:14:31.578820: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.2
2020-05-07 10:14:34.256585: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1096] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-05-07 10:14:34.256614: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102]      0 
2020-05-07 10:14:34.256620: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] 0:   N 
2020-05-07 10:14:34.258533: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-07 10:14:34.258883: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-07 10:14:34.259193: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1241] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6941 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070 with Max-Q Design, pci bus id: 0000:01:00.0, compute capability: 6.1)
Train on 60000 samples
Epoch 1/5
2020-05-07 10:14:34.770875: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
60000/60000 [==============================] - 7s 124us/sample - loss: 0.2952 - accuracy: 0.9156
Epoch 2/5
60000/60000 [==============================] - 8s 130us/sample - loss: 0.1402 - accuracy: 0.9580
Epoch 3/5
60000/60000 [==============================] - 8s 137us/sample - loss: 0.1037 - accuracy: 0.9683
Epoch 4/5
60000/60000 [==============================] - 7s 124us/sample - loss: 0.0841 - accuracy: 0.9734
Epoch 5/5
60000/60000 [==============================] - 8s 137us/sample - loss: 0.0728 - accuracy: 0.9771
10000/10000 [==============================] - 0s 33us/sample - loss: 0.0736 - accuracy: 0.9765
dl@dl-machine:~/singularity$