2018年3月14日水曜日

サンプルプログラムの実行にかかる時間

本書では、動作が高速なRaspberry Pi 3やRaspberry Pi 2の利用を推奨し、動作の遅いPi ZeroやPi 1 B+の利用を推奨しませんでした。

本ページでは、実際にどの程度速度に違いがあるのかを表にしてまとめます。

単位は全て秒です。GUIプログラムの場合は「画面が現れて操作可能になるまでの時間」を表しています。

おおむね「Pi ZeroはPi 3 Bの4~5倍程度」、「Pi 1 B+はPi 3 Bの6~7倍程度」の時間がかかるのがご覧いただけるのではないかと思います。

また、Pi 3 B+がPi 3 Bよりも若干高速なこともわかるでしょう。

なお、ディープラーニングの演習のために用いるkeras + theanoは、バージョンアップに応じて計算時間が変わることがあるようです。下記の表では「ml-10」で始まるファイルが該当します。これらのプログラムに対する計算時間は表作成時のものであり、目安とお考えください。

本書のプログラムの実行にかかる時間(単位はすべて秒)
Pi 1 B+ Pi Zero W Pi 2B Pi 3B Pi 3B+ 備考
ml-03-01 13 9 5 2 2
ml-04-01 12 7 3 2 2
ml-04-02 33 22 10 7 6
ml-04-03 35 23 10 7 6
ml-04-04 44 30 14 8 7
ml-04-05 12 8 3 2 2
ml-05-01 112 73 30 17 15
ml-05-01 (itr_max=50000) 5040 3300 590 300 280 長時間の実験(必ずしも実行しなくて良い)
ml-05-02 88 58 23 13 11
ml-05-02 (itr_max=100000) 14400 9000 1260 720 615 長時間の実験(必ずしも実行しなくて良い)
ml-06-01 20 11 4 4 3
ml-06-02 135 86 27 16 14
ml-06-03 47 29 11 7 6
ml-06-04 27 17 5 3 3
ml-06-05 291 188 71 45 41 ランダムなので目安
ml-06-06 22 15 5 3 3
ml-06-07 262 161 74 42 41 ランダムなので目安
ml-06-08 24 15 6 3 3
ml-06-09 225 165 82 44 36 ランダムなので目安
ml-06-10 - - - - - ml-06-08と同等
ml-06-11 - - - - - ml-06-09と同等
ml-07-01 10 7 3 2 2
ml-07-02 11 7 3 2 2
ml-07-03 13 8 3 2 2
ml-07-04 13 8 3 2 2
ml-08-01 7 5 3 3 3
ml-08-02 16 12 4 3 3
ml-08-03 900 300 140 72 83 ランダムなので目安
ml-08-04 17 11 5 3 3
ml-09-01 20 13 5 3 3
ml-09-02 - - - - - ml-09-01と同等
ml-03-01 初回 40 35 13 7 5 kerasインストール後
ml-03-01 二回目 32 25 10 7 5 kerasインストール後
ml-10-01 - - - 490 400 ディープラーニングの学習
(必ずしも実行しなくて良い)
ml-10-02 初回 1580 1007 448 272 200
ml-10-02 二回目 260 172 75 42 35
ml-10-03 - - - 9449 8450 ディープラーニングの学習
(必ずしも実行しなくて良い)
ml-10-04 初回 1709 1168 488 310 230
ml-10-04 二回目 370 245 96 55 49
ml-10-05 - - - - - ml-10-04と同等
ml-10-06 - - - - - ml-10-04と同等
ml-10-07 - - - 24000 20640 ディープラーニングの学習
(必ずしも実行しなくて良い)
ml-10-08 初回 320 232 92 57 43 ml-10-04でCNNの最適化が済んでいるため速い
ml-10-08 二回目 310 225 82 48 42
ml-10-09 - - - - - ml-10-08と同等
ml-10-10 - - - - - ml-10-08と同等


プロキシ(Proxy)環境下での本書の演習の実行

はじめに

職場や学校などでは、ネットワークに接続するためにプロキシ(Proxy)サーバーと呼ばれるものを介する場合が多いと思います。そのような環境下では、本書でネットワーク接続を必要とする演習をそのままでは実行できません。

下記の設定を行えば、全ての演習を実行できるようになりますが、上級者向けの内容ですので、職場や学校のネットワーク管理者など、ネットワークに詳しい方と一緒に作業することをお勧めします。

apt-getコマンド

ソフトウェアのインストールの際に実行するapt-getコマンドを用いるための方法です。

まず、ターミナルソフトウェアLXTerminalを起動し、以下のようにテキストエディタleafpadで設定ファイル/etc/apt/apt.confを作成します。
sudo leafpad /etc/apt/apt.conf
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
sudo mousepad /etc/apt/apt.conf
このファイルに下記の内容を記述します。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。
Acquire::http::proxy "http://プロキシサーバー名:ポート番号/";
Acquire::https::proxy "https://プロキシサーバー名:ポート番号/";
Acquire::ftp::proxy "ftp://プロキシサーバー名:ポート番号/";
Acquire::socks::proxy "socks://プロキシサーバー名:ポート番号/";
記述が終わったら、ファイルを保存してからleafpadを閉じてかまいません。

以上で、「sudo apt-get update」、「sudo apt-get install (パッケージ名)」などのコマンドが実行できるようになります。

ブラウザなど

次に、ブラウザなどを利用するための方法です。ここでは、Raspbian Stretch用の方法のみ記します。

ターミナルソフトウェアLXTerminalを起動し、以下のように管理者権限のテキストエディタleafpadで設定ファイル/etc/environmentを編集用に開きます。
$ sudo leafpad /etc/environment
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
$ sudo mousepad /etc/environment
Raspbianのバージョンにもよりますが多くの場合 /etc/environment は何も書かれていない空のファイルですので、そのまま以下の3行を記入してください。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。もし何かが書かれていた場合も、その内容を壊さないように注意しながら、ファイルの末尾に以下の内容を記します。
http_proxy=http://プロキシサーバー名:ポート番号/
https_proxy=http://プロキシサーバー名:ポート番号/
ftp_proxy=http://プロキシサーバー名:ポート番号/
以上の設定を記述したらファイルを保存してleafpadを閉じます。この設定を読み込むためにRaspberry Piを再起動してください。再起動後、ブラウザでインターネット上のウェブサイトを閲覧できるようになっているはずです。

なお、Raspbian Jessie や Wheezy用の方法は、別の書籍用ページである「Raspberry Piで学ぶ電子工作補足情報『プロキシ(Proxy)環境下での本書の演習の実行』」に記しましたので必要に応じて参照してください。

時刻合わせ

プロキシ環境下ではRaspberry Piの時刻合わせが機能しない場合が多いと思います。そのような場合、もし職場や学校内に時刻合わせサーバーが存在すれば、下記の方法で時刻を合わせることができます。

RaspbianのStretchでは、時刻合わせにsystemd-timesyncdが用いられていますので、その設定を行います。ターミナルソフトウェアLXTerminalを起動し、 leafpadで設定ファイル/etc/systemd/timesyncd.confを開きます。
sudo leafpad /etc/systemd/timesyncd.conf
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
sudo mousepad /etc/systemd/timesyncd.conf
ファイル内で下記のような箇所を見つけます。
(略)
[Time]
#NTP=
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3
.debian.pool.ntp.org
このうち、NTPに関する行の先頭の「#」を削除し、「=」の右辺にお使いの時刻合わせサーバーを記述します。 時刻合わせサーバが存在するかどうかはネットワーク管理者にお尋ねください。
記述後、ファイルを保存してからleafpadを閉じます。そして、Raspberry Piを再起動すれば時刻が合うようになります。

なお、時刻合わせサーバーを用いず、手動で時刻を設定したい場合、ターミナルでコマンドを実行して時刻を合わせます。例えば、3月14日23:09に合わせたい場合は下記のようなコマンドを実行します。
sudo date 03142309


10章のpipコマンド

10章では、kerasとtheanoのインストールにpipコマンドを用いました。プロキシ環境下でpipコマンドを使う場合、下記のようにコマンドを読み替えてください。もちろん、「プロキシサーバー名:ポート番号」の部分は環境に応じて読み替える必要がありますので、ネットワーク管理者にお尋ねください。
sudo pip --proxy=http://プロキシサーバー名:ポート番号 install keras theano