- 前ページ
- 次ページ
機械学習の事をもう少し深く学びたくて、昨年の11月から取り組んでいた、「機械学習」(講師:筑波大学 システム情報系教授 佐久間 淳さん)を先日(4/26)ようやく終了した。
実際に筑波大学で2019年に行われた、全10回の講義(約2時間)を前半後半の1時間毎にビデオになっている。
上記のURLを開くとこのページ(画像はコースのトップ画面のハードコピー)。
講義を視聴するだけなら、約20時間で終了するが、途中理解できなかた部分を戻ったり、また板書をメモするため、ポーズしたりで、20時間以上は掛かったと思う。
なかなかモチベーションが続かなくて、途中で間が空いたりして半年も掛かった。
大学の授業なので、数式の展開を板書で順番に追ってもらえるのが、非常にありがたかった。
実際に手を動かす部分は、大学の専用のシステムでのやりとりなので、そこが出来なかったのは、残念な部分。
全てを理解し切ったわけではないけど、機械学習に関する「用語」に馴染めたことは、大きな収穫だと思っている。
このような講義を公開された筑波大学、および講義された佐久間教授に感謝。
近々Courseraの機械学習を受講しようと考えている。この講座は、Angrew Ngさんが講師で既に300万人近くが登録している超人気コースである。
そのコースでは、OctaveをいうMATLAB互換のソフトを使うようだ。
その準備のため、Octaveをインストールして、使える環境を整えてみたい。
インストールにあたっては、このページを参考にした。また、どの方式でインストールしようかと悩んだときには、こちらのページを参考にした。このページの情報により、dmg形式でインストールすることにした。その上で、先に紹介したページを参考にインストールした。先人に感謝。
(1)ダウンロードとインストール
・ダウンロードするファイルは、GNU Octave on Macのページのダウンロードページにある、Octave 4.4.1 u1である。
・ダウンロードした、dmgファイルをダブルクリックする。
・ライセンス条項を「Agree」する。
・指示に従って、applicationにドラッグすると、applicationフォルダに入っている。
(2)起動
・上記のダウンロードページに記載してある通り、「開発元が未確認」なので、次の手順を取る。
・Finderのアプリケーションを開く。
・Controlキーを押しながら、対象のアイコンをクリック。
・開いたメニューで、「開く」を指定する。
・開発元を検証できないけど、開いて良いかのパネルで、「開く」をクリック。
・Font関連のメッセージが出るが、「OK」
・改めて、ランチャーから、対象のアイコンをクリックする。
(3)確認
・インストールの参考にしたこのページのサンプルコードを貼り付けて、実行(改行)すると、動いていることが、確認できた。それが、次のスクリーンショット。
グラフも合わせて表示される。
(4)今後について
・コマンドラインからもOctaveが使えるように、インストールの参考にしたページの通り、シンボリック・リンクを張った。
・次のスクリーンショットが、コマンドラインからの操作。
・上記の操作は、このページを参考に試した結果。このページの内容を一通り触ってみて、Octaveを学習しよう。このページの作者にも感謝。
このページの記事あるように、Folding@homeは、分子動力学シュミレーションでタンパク質のフォールディングを分散コンピューティング技術で全世界のボランティアベースで解析中。
解析対象に、新型コロナウイルス(SARS-CoV-2)が加わったようで、ボランティアが急速に増えているようだ。
あけんじも参加することにした。
このページを参考に、Dockerイメージのクライアントを使うことにした。
(1)Passkeyを得る
このページに登録すると、「Username」と「Passkey」がメールで送られてくる。
これは、必須ではないようだ。
(2)起動(使用するGPUをdevice=0と指定)
$ sudo docker run --gpus device=0 --rm -it -p7396:7396 johnktims/folding-at-home:latest --user=xxxxxxx --team=0 --power=full
「user=xxx」のところは、(1)で得られたUsername。ディフォルトは、Anonymous。
以下、状況を表すメッセージが出力される。
・次の方法で、起動中のdockerイメージに入ることも可能。
(3ff843c9dadcは、上記で起動したdockerのID?)
$ sudo docker exec -it 3ff843c9dadc /bin/bash
(3)ブラウザから接続する
・ブラウザで、http://localhost:7396と入力すると次の画面、状況を確認できる。
(4)その他
・GPUはフル稼働しているようだ。
・温度も上がっている。
前回の記事までで、PGIコンパイラー( Open ACC)イメージをSingularityで使えるようになった。
Z620とZ820の2つのサーバーは、CPU、メモリ、GPUの環境は異なるが、同じイメージが使えるようになっている。各々の環境は次の通り。
・Z620:Xeon E5-1620 3.6GHz、64GBメモリ、GeForce GTX TITAN
・Z820:Xeon E5-2643 3.3GHz、24GBメモリ、GeForce GTX 1080
上記2台のサーバで同じOpen ACCのプログラム(単精度、倍精度)を動かして、性能を見てみようと思う。
(1)課題のプログラム
・特に自分が適切な問題を持っていないので、「Open ACC 基本と実践」の第5章のライプニッツの公式で円周率を求める問題をコンパイル・実行した。以下が本のカバー。
・ライプニッツの公式で円周率を単精度(float)と倍精度(double)で求めるサンプルが乗っている。
・コンパイル時には、GTX TITANでは-ta=tesla:cc35、GTX 1080では-ta=tesla:cc60オプションでコンパイル。
(2)実行結果
・以下に実行結果をまとめた。
(3)考察
・2台とも単精度と倍精度との差がほとんどないように見えることが疑問。
特にGTX 1080は、単精度、倍精度演算用のシェだー数からして1/32の差が出ると考えていたのだが。(GTX TITANの場合は、1/2程度か?)
・また、CPUのみ(C:行)とGPU(OpenMP:行)との差が40〜60倍も少し大きいように思われる。
・今後、別の課題を使って、性能については更に検証していく。
以前の記事までで、Singularityをインストールできたので、PGIコンパイラーコミュニティ版のイメージを作成する。
(0)GPUボードを交換
・この記事で書いたとおり、このサーバに搭載していたQuadro 4000では、最新のドライバーが使えず、これため使用するCUDAのバージョンも9.0となってします。
・こちらのサーバと同じCUDAバージョンを使うため、最新のドライバーが使える、Quadro K2000をヤフオクから購入。
・インストールしていたnvidia-driver-390を削除して、最新の440をインストールする。
$ sudo apt remove --purge nvidia-driver-390
$ sudo apt install nvidia-driver-440
※これで、最新のcudaバージョンのDockerイメージ(nvidia/cuda:latest)が使える。
→ Dockerfile:FROM nvidia/cuda:latest
(1)PGIコミュニティ版
・このページから、最新版のPGIコミュニティエディション(pgilinux-2019-1910-x86-64.tar.gz)をダウンロードする。
→ Dockerfile:ADD ./pgilinux-2019-1910-x86-64.tar.gz /tmp
(2)Dockerfile
・このページ(hopobcn/pgi-ce)を参考にしてDockerfileを作った。
上記の「→ Dockerfile:」も参考。特にADDの「./pgi・・・」の部分は要注意!
・Dockerイメージを作成
$ sudo docker build -t pgi-ce .
(3)Singularityイメージを作成
・上記で作成されたDockerイメージを指定するため、docker-daemon:を付ける。
$ sudo singularity build sifs/pgi-ce.sif docker-daemon://pgi-ce:latest
※あけんじの環境では、SIFファイルをsifsディレクトリ配下に格納している。
(4)Singularityで起動
$ singularity shell --nv sifs/pgi-ce.sif
Singularity pgi-ce.sif:~>
これまで、Ubuntu 18.04をインストールしたサーバに、Singularityをインストールするまでをメモしてきた。
今回は、Ubuntuでの開発環境を整えるため、各種の設定を行ったので、自身の備忘録として、以下にメモする。
(1)エディタ(emacs, vim)の設定。
・emacsについては、このページとこのページを参考にした。
・実際に設定しているのは、vimでは、これだけ。emacs側は略。
$ cat ~/.vimrc
set showmatch
set tabstop=2
(2)固定IPアドレスの設定。
・固定IPにする目的は、次で設定するWake on LANのため。以前、raspberry Piでの設定を記事にした。今回は、Ubuntu 18.04への設定。
・最初は、勉強も兼ねて、CUIで設定しようとしたが、ワークステーションタイプでインストールしたこのサーバでは、CUI設定のページの説明と現状が違うようなので、GUI方式で設定することにした。
・「設定」を開き、左のメニューから「ネットワーク」を選び、接続している有線LANの「歯車」を開くと、設定するプロパティが開くので、以下のように設定した。
ぼかしている箇所に、設定したいアドレス、ゲートウェイ、およびDNSのアドレスを記述する。(ゲートウェイとDNSは同じことが多い)
(3)Wake on LANの設定
・Biosの設定を確認する。
幸い、このZ820は、既にWake on LANが有効になっていた。
・設定に関連して必要なコマンドをインストール。
先ずは、アドレスを確認するifconfigを使うため、net-toolsをインストールする。
$ sudo apt install net tools
・次にWake on LAN設定のためのethtoolをインストールする。
$ sudo apt ethtool
$ sudo ethtool デバイス名 | grep wake-on
Supports Wake-on: pumbg
Wake-on: g
と、「Wake-on: g」となっているので、Wake on LANが使える設定済。
※デバイス名の部分は、使っている有線LANのデバイス名。(2)で「ネットワーク」で名称は現れる。あけんじの場合は、enp1s0と入力。
(4)キックするサーバの設定
・常時起動させている、Raspberry Piに設定する。
・/usr/local/sbinにPATHを通して、以下を追加。
$ /usr/local/sbin/wol_z820.sh
wakeonlan -i 192.xxx.xxx.xxx yy:yy:yy:yy:yy:yy
※xxxの部分は起動するサーバのIPアドレス(上記(2)で設定)、yyの部分は、MACアドレス。
以上の設定で、Raspberry Piからサーバの電源を投入することが可能となった。
前回の続きで、Singularityのインストールのメモ。
本家のページを参考にインストールする。
(1)必要なパッケージをインストール
$ sudo apt-get update && sudo apt-get install -y \
build-essential \
libssl-dev \
uuid-dev \
libgpgme11-dev \
squashfs-tools \
libseccomp-dev \
wget \
pkg-config \
git \
cryptsetup
(2)Goをインストールする
$ export VERSION=1.12 OS=linux ARCH=amd64 && \ # Replace the values as needed
wget https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz && \ # Downloads th\
e required Go package
sudo tar -C /usr/local -xzvf go$VERSION.$OS-$ARCH.tar.gz && \ # Extracts the \
archive
rm go$VERSION.$OS-$ARCH.tar.gz # Deletes the ``tar`` file
(3)Goへのpathを設定する
$ echo 'export PATH=/usr/local/go/bin:$PATH' >> ~/.bashrc && \
source ~/.bashrc
(4)Singularityをダウンロード
$ export VERSION=3.4.0 && # adjust this as necessary \
wget https://github.com/sylabs/singularity/releases/download/v${VERSION}/si\
ngularity-${VERSION}.tar.gz && \
tar -xzf singularity-${VERSION}.tar.gz && \
cd singularity
(5)Singularity ソースコードをコンパイル
$ ./mconfig && \
make -C builddir && \
sudo make -C builddir install
(6)起動を確認
$ singularity help
(7)Sigularityを色々とbuildしてみる
・nvidia/cuda:9.0-base
$ sudo singularity build cuda9.sif docker://nvidia/cuda:9.0-base
・・・
$ singularity exec --nv cuda9.sif nvidia-smi
次回は、PGI コンパイラーコミュニティ版のSingularityイメージを作り、OpenACCを試してみる。
先日、Z820にUbuntu 18.04をインストールした記事を書いた。
DockerとSingularityをインストールし、Singularityを使って、OpenACCを使うようにしたので、その内容をメモする。
※ 一気に書こうかとも思ったが、長くなるので、今回はDockerインストール部分のみ。
1.Dockerインストール
本家のこのページを参考にインストールする。
(1)atpパッケージインデックスを更新
$ sudo apt-get update
(2)必要なパッケージをインストール
$ sudo apt-get install \
> apt-transport-https \
> ca-certificates \
> curl \
> gnupg-agent \
> software-properties-common
→ ca-certificates,software-properties-commonは既に最新バージョンだった。
(3)Dockerの公式GPGキーを追加
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
「OK」とのみ出力される。
$ sudo apt-key fingerprint 0EBFCD88
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ 不明 ] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
(4)stableリポジトリを設定する。
$ sudo add-apt-repository \
> "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
> $(lsb_release -cs) \
> stable"
・Community版のDocker Engineをインストール。
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
(5)インストール後の確認
$ sudo docker run hello-world
(6)DockerでGPUを使う
$ sudo docker run --gpus all --rm nvidia/cuda:9.0-base nvidia-smi
※ 最新版でなく、cuda:9.0を使うのは、nvidia-driver-390のため。
理由は、前回の記事。
※ 次のようなエラーが出た場合は、このページを参考にリカバ。
docker: Error response from daemon: could not select device driver "" with capa\
bilities: [[gpu]].