grbl1.1+Arduino CNCシールドV3.5+bCNCを使用中。
BluetoothモジュールおよびbCNCのPendant機能でスマホからもワイヤレス操作可能。
その他、電子工作・プログラミング、機械学習などもやっています。
MacとUbuntuを使用。

CNCマシン全般について:
国内レーザー加工機と中国製レーザー加工機の比較
中国製レーザーダイオードについて
CNCミリングマシンとCNCルーターマシンいろいろ
その他:
利用例や付加機能など:
CNCルーター関係:



*CNCマシンの制作記録は2016/04/10〜の投稿に書いてあります。


ラベル Anaconda の投稿を表示しています。 すべての投稿を表示
ラベル Anaconda の投稿を表示しています。 すべての投稿を表示

2018年6月10日日曜日

Ubuntu 18.04:Anaconda仮想環境「conda activate py36」に変更

これまでは、Anacondaの仮想環境を切り替えるには、

source activate py36

をターミナルで入力していましたが、いつのまにか(conda4.4から)

conda activate py36

に変わっていたらしく、設定を変えてみました。



pyenvも導入しているため「activate」がそもそも重複しており問題がありました。おそらくこれで問題解消できるのかもしれません。変更方法については、conda Change logに説明があります。

これまでは「.bashrc」に、

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
export PATH="$PYENV_ROOT/versions/anaconda3-5.1.0/bin/:$PATH"

を記入していました。1〜3行目はpyenv用、4行目がAnaconda用。
それを以下のように変更(4行目だけ)。

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
. $PYENV_ROOT/versions/anaconda3-5.1.0/etc/profile.d/conda.sh

これで次回から、

conda activate py36

を入力して仮想環境を切り替えることになります。


ランチャー用のスクリプトの場合:
ランチャー(.desktopファイル)を使って「py36」仮想環境に入った状態でターミナルを起動させるには、

#!/bin/bash
eval '$BASH_POST_RC'
BASH_POST_RC='conda activate py36' gnome-terminal

このスクリプトを「py36.sh」などと保存して、

chmod +x py36.sh

で実行権限を与えておきます。
そして「.bashrc」のほうに

eval '$BASH_POST_RC'

を書いておいて、ターミナルが起動する前に「conda activate py36」が実行されるようにしておきます。
そしてランチャーのコマンドにこのスクリプトを実行させるため、

Exec=/home/mirrornerror/myScript/py36.sh

などと「py36.sh」までのパスも含めて記入しておきます。
あとはランチャーをダブルクリックすれば起動するはずです。


Macの場合:
MacのほうでもpyenvとAnacondaを導入しているので同じようにやってみましたが、Macの場合は「.bashrc」ではなく「.bash_profile」のほうに書くと問題なく起動しました。

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
. $PYENV_ROOT/versions/anaconda3-5.1.0/etc/profile.d/conda.sh

ちなみに、MacでのbCNC(Gコード送信アプリ)を開くためのランチャー用スクリプトは、

#!/bin/bash
. ~/.pyenv/versions/anaconda3-5.1.0/etc/profile.d/conda.sh
conda activate py27
python bCNC.py

にしています。


2018年5月31日木曜日

Ubuntu 18.04: Gnome-Shell-Extensionsでターミナル起動+Anaconda仮想環境に入る

Ubuntu 18.04のカスタマイズのついでに、自作Gnome Shell Extensionsにチャレンジ。ネットを探してもあまりサンプル例がなく、最初はこちらを参考にしました。


今回つくろうとしたもの:

・トップバーにアイコン(下画像:左から3個目のアイコン)をつける
・アイコンをクリックすると、Anacondaの仮想環境に入った状態でターミナル起動

というものです。


Anacondaの仮想環境を使っているため、通常はターミナルを立ち上げて、

source activate py36

を打ち込んで仮想環境に入りますが、この部分をワンクリックでできないかというものです。設定した「py36」という仮想環境には、機械学習用にTensorfowやPytorchなどのライブラリが入っています。


「source activate py36」のシェルスクリプト:
まず、仮想環境に入るためのコマンドである「source activate py36」を記入する「py36.sh」ファイルをつくります。そのまま「source activate py36」を実行させればいいというわけではなく(やってみたら失敗)、こちらを参考にしました。「source 〜」の場合は以下のようにやるといいようです。
追記:その後「conda activate py36」へ変更しました(こちらへ)。

・「py36.sh」ファイルをつくる(場所は問わず)。

・「py36.sh」の中に、以下の2行を書いて保存。

eval '$BASH_POST_RC'
BASH_POST_RC='source activate py36' gnome-terminal

・「py36.sh」を実行可能にするために、ファイルを右クリックで「プロパティ>アクセス権>プログラムとして実行可能」にチェック(「chmod +x py36.sh」でも可)。



・「.bashrc」ファイル末尾のほうに

eval "$BASH_POST_RC"

を書き込んでおく。以上。

・「py36.sh」ファイルをダブルクリックすれば先程の画像のように仮想環境に入った状態で起動するはず。そのままランチャーにしてもいいし、desktopファイルと連携してもいいと思います。

そのままコマンドを書いただけだと実行したらターミナルは終了となってしまうので、今回のようにターミナルが起動する直前に「eval」を使って「.bashrc」からコマンドを実行させると大丈夫なようです。
あとは、このシェルスクリプトを実行させるGnome Shell Extensionsをつくります。

screenを使った場合(おまけ:その1):
「eval」の方法が分からず「screen」で仮想環境をつくって試したこともありました。
以下のスクリプトをランチャーのようにダブルクリックで起動させると、screenで仮想環境のなかのAnacondaの仮想環境の中に入った状態でターミナルが起動します。

#!/bin/bash

#まず外部からscreen仮想環境をつくる
screen -dmS sc1

#外部から、そのscreen仮想環境にAnaconda仮想環境をつくる
screen -S sc1 -X stuff 'source ~/.pyenv/versions/anaconda3-5.1.0/bin/activate py36'`echo -ne '\015'`

#最後にその二重の仮想環境に入る
gnome-terminal -e 'screen -x'

一応大丈夫なのですが、消し忘れるとすっど動いているということと、ここまで無理する必要もないかと、ようやく今回の方法に至りました。screenの勉強にはなったのでいずれ何かに使えればと。
尚、「sudo apt-get install screen」でインストール。

xdotoolを使った場合(おまけ:その2):
キー入力を自動化してくれる「xdotool」というのがあり、そのまま今回の「source activate py36(リターン)」を打ち込ませるスクリプトを書くだけ。

#!/bin/bash

#まずターミナル起動
gnome-terminal

#ターミナルが開くまで1秒ディレイ
sleep 1s

#仮想環境に入るコマンド
xdotool type 'source activate py36'

#最後にリターンキー入力
xdotool key Return

「py36.sh」などと保存し、右クリックで「プロパティ>アクセス権>プログラムとして実行可能」にチェック。ダブルクリックすればターミナルを起動しコマンドを実行してくれます。
長いスクリプトは「type」、一文字打つだけなら「key」を使って、普段ターミナルで打ち込むコマンドを書けばいいだけです。
この他、画面にフォーカスを与えたりマウス入力も可能なので、いろんなものを簡単に自動化できます。
xdotoolは、「sudo apt-get install xdotool」でインストール。


Gnome Shell Extensions(サンプル)をつくる:
Javascriptなので簡単なのかと思ったら独特の構文でわかりにくく、ネットで検索してもチュートリアルやサンプルも少なかったり(古かったり)するので、フルスクラッチでコーディングするよりも似たようなものを書き換えたほうがいいらしいです。
まずはこちらを参考に、ターミナルで以下を入力すると

gnome-shell-extension-tool --create-extension

対話形式で名前や説明など(とりあえず簡単に書いておく)を決めていくと、
「Hello World」サンプルをつくることができます。


Name: Open_py36
Description: Open Terminal @py36
Uuid: 記入しなかったため自動的に「Open_py__@mne-ubu」になった

そうすると、以下のような画面がでてきます。


これは、メインのスクリプトの「extension.js」。
あとは、CSSとJSONファイルが付属しています。


これらのデータは、「~/.local/share/gnome-shell/extensions/」にあります。


サンプルを動かしてみる:
サンプルを動かすには再起動が必要なのですが、「Alt+F2」を押すと画面はそのままでExtensionsの再起動ができます。「Alt+F2」を押すと以下の画面がでてくるのでここで「r」を入力してリターンを押します。


ちょっと画面が変化して再起動します。
「Gnome-Tweaks>機能拡張」を開くと、先程のExtensionがリストに加わっているのでオンにします(以下:上から二段目)。


そうすると、トップバー右上にアイコンがでてきます。
このサンプルはトップバー上のアイコンをクリックすると画面中央に「Hello World」という文字が出現してフェイドアウトしていく(2秒間)というものなので、「Gnome-Tweaks>外観>アニメーション」をオンにしておく必要があります。



スクリプトを書き換える:
次は、このサンプルをベースに最初につくった「py36.sh」を実行させるプログラムに書き換えます。
スクリプトを実行させるファンクションは、検索するとここが参考になりました。

const Util = imports.misc.util;

Util.spawnCommandLine("script");

一行目でライブラリをインポートし、二行目はスクリプト実行するファンクションのようです。「script」のところに、「py36.sh」のパスを入れればよさそうです。
「Hellow World」の表示内容を「env: py36」に変更し、位置も少し上の方に変えておきます。


const St = imports.gi.St;
const Main = imports.ui.main;
const Tweener = imports.ui.tweener;

//追加:ライブラリインポート
const Util = imports.misc.util;

let text, button;

function _hideHello() {
    Main.uiGroup.remove_actor(text);
    text = null;
}

function _showHello() {
    //以下表示テキスト内容を「env: py36」へ変更
    if (!text) {
        text = new St.Label({ style_class: 'helloworld-label', text: "env: py36" });
        Main.uiGroup.add_actor(text);
    }

    text.opacity = 255;

    let monitor = Main.layoutManager.primaryMonitor;

    //以下の高さ(monitor.height / 4)へ変更
    text.set_position(monitor.x + Math.floor(monitor.width / 2 - text.width / 2),
                      monitor.y + Math.floor(monitor.height / 4 - text.height / 2));

    Tweener.addTween(text,
                     { opacity: 0,
                       time: 2,
                       transition: 'easeOutQuad',
                       onComplete: _hideHello });

 //以下のスクリプト実行コマンドを追加
 Util.spawnCommandLine("/home/mirrornerror/Documents/myshell/py36.sh");
}

function init() {
    button = new St.Bin({ style_class: 'panel-button',
                          reactive: true,
                          can_focus: true,
                          x_fill: true,
                          y_fill: false,
                          track_hover: true });

    //以下のアイコンをターミナルへ変更
    let icon = new St.Icon({ icon_name: 'utilities-terminal-symbolic',
                             style_class: 'system-status-icon' });

    button.set_child(icon);
    button.connect('button-press-event', _showHello);
}

function enable() {
    Main.panel._rightBox.insert_child_at_index(button, 0);
}

function disable() {
    Main.panel._rightBox.remove_child(button);
}

5箇所ほど変更追加(赤文字)しただけです。
アイコンについては、「Icon Browser」が便利です。
以下のようにアプリケーションとして、既存のアイコンリストを見ることができます。
たしか「sudo apt-get gtk3-icon-browser」でインストールできたはずです。


NormalとSymbolicというのがあり、Symbolicがシンプルなアイコンです。


今回参考としたサイト:
あまりないのですが、以下。あとは既存のExtensionsのコードを参考に改造していくほうが早そうです。
GNOME Shellの拡張機能を作ってみよう
How I developed my first gnome-shell extension
GNOME WIKI: Extensions
github gnome-shell-extensions
GNOME Developer: Tutorial for beginners and code samples
GNOME Developer: gtk3-icon-browser


「Argos」というGnome-shell-extensions:
簡単なものであれば、gnome-shell-extensionsにある「Argos」というextensionが非常に便利です。トップバーに追加できる機能拡張で、よく使うフォルダや自作のスクリプトなども実行できます。


Argosのgithubサイトに使い方など詳しくのっています。

今回つくったAnaconda仮想環境に入るためのスクリプトも入れてみましたが結構簡単に実装できました。


この画像にあるように比較的よく使うものを組み込んでみました。
・普通のターミナル起動
・Anaconda仮想環境ターミナル起動
・ローカルネットワークサーバ起動
・各ディレクトリ(Home/Documents/Downloads)

一番下にある「argos.r.sh」をクリックするとスクリプトを書くためのファイルが開きます(以下)。
#!/usr/bin/env bash

URL="github.com/p-e-w/argos"
DIR=$(dirname "$0")
HOME=/home/mirrornerror
DOC=/home/mirrornerror/Documents
DWN=/home/mirrornerror/Downloads
PYTHON=/home/mirrornerror/.pyenv/versions/anaconda3-5.1.0/bin//python

echo "| iconName=view-more-symbolic"
echo "---"
echo "Terminal | iconName=utilities-terminal-symbolic bash=pwd terminal=true"
echo "Anaconda py36 | iconName=utilities-terminal-symbolic bash='/home/mirrornerror/Documents/myshell/py36.sh' && 'terminal=false'"
echo "192.168.3.7:8008 | iconName=utilities-terminal-symbolic bash='$PYTHON -m http.server 8008 --bind 192.168.3.7' && 'terminal=true'"
echo "---"
echo "home | iconName=folder-symbolic href='file://$HOME'"
echo "Documents | iconName=folder-symbolic href='file://$DOC'"
echo "Downloads | iconName=folder-symbolic href='file://$DWN'"
echo "---"
echo "more"
echo "--$URL | iconName=help-faq-symbolic href='https://$URL'"
echo "--$DIR | iconName=folder-symbolic href='file://$DIR'"

いまのところこんな感じです。
echoを追加していくことで、内容がリスト化(ネストも可)されていきます。あとはタイトルとアイコン、そしてコマンドを記入していきます。外部にシェルスクリプトを配置しておけば、ここからコマンド起動させることができるので、いろんなことができそうです。

関連:
gnome shell extensions:自作その2

2018年4月17日火曜日

JupyterLabを使ってみた(便利そうだけど、いまいち)

最近は、Jupyter Notebookを使っていますが、それと似たようなものでJupyterLabというのがAnaconda Navigatorに前からあったので試しにつかってみました。

Jupyter Notebookと同様にブラウザ上で使うことができるので便利。
さらにツリービュー、ターミナル、エディタもあり、画面分割可能でだいたい一通りのことができます。

Anaconda Navigatorからすぐにインストール(不要ならアンインストール)できるので試してみるにはよさそう。
かなりJupyter Notebookからは進化しているのですが、まだベータ版のようです。

右クリックでコピペできない:
ということでしばらく使っていると、やはりベータ版なのか多少不便な点が。
まず、マウス右クリックでコピペがメニューに出てこない。右クリックすると、以下のようなメニュー。

セル単位でのコピペは可能。しかし単語や行だけのコピペはできないために、仕方なくキーボードでCtrl+C、Ctrl+Vを入力するしかない。なんとメニューバーにすらない。

もうひとつとして、せっかくターミナルも同一画面上で使用できるのにもかかわらず、同様に右クリックだけではコピペできない。そのかわり、シフトキーを押しながらの右クリックならメニューが出てくる(以下)。

つい癖で右クリックしてみたものの、コピペできないということが少しストレスを感じてしまいます。改良されないのでしょうか?


%matplotlib nbaggが使えない:
Jupyter notebookではplt.plot()で表示するするとき、%matplotlib inlineを使いますが、アニメーションなどを表示するには、%matplotlib nbaggを使っています。しかしnotebookのほうでは使えるけれども、JupyterLabのほうだと、Javascriptエラーがでてしまいます。

JavaScript output is disabled in JupyterLab

しかし、このページにいくつか対処策があるようです。

conda install notebook jupyterlab # for updating jupyter notebook and lab
pip install ipympl
jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-matplotlib

事前にnodejsとnpmをインストールしておき、notebookとjupyterlabをアップデート、さらにipympl、jupyter-matplotlibをインストールとのこと。
しかし、それでもなぜかエラーがでてしまいます。このページでも話されていることなのですが、まだダメっぽい。

また、%matplotlib nbaggを使っても、

こんな感じのエラーがでてしまいます。%matplotlib ipymplを使うともっとひどいエラーがでてしまい、jupyter-matplotlibがダメみたい。何回かインストールし直してみましたが改善されないので、今回は保留。

ということから、結構使い勝手はよくなっているJupyterLabなのですが惜しい。ベータ版なので仕方ないのかもしれませんが、しばらく待ってみることにします。
そもそも、Jupyter Notebookなら特に問題ないので、今まで通りJupyter Notebookでいいかと。

しかし、その後、jupyter-matplotlibのサイトをみると、

It requires matplotlib 2.0 or and ipywidgets 7.0 more recent.

と書いてあることからチェックしてみると、ipywidgetsのバージョンが低いことが判明。さっそくアップデートしてみました。
すると、いままで%matplotlib nbaggではだめだったgifアニメーション制作が可能になりました。
そして、上のようにバックエンドを確認してみたところ、いままではnbAggと出力されていたのが、'module://ipykernel.pylab.backend_inline'になっていました。少しだけ進展したのですが、あいかわらずアニメーション自体は表示されず、もう少しというところ。しばらくすれば、また進展あるかも。
要は、このようなアニメーションをJupyterLab上で表示させたいのですが、一コマごとに出力したpngファイルを順番に表示することができずにいるということです。このアニメーションはpngを束ねてgifアニメにしたものですが、それも表示できません。バージョンアップによって制作はできるようになったので、よかったのですが惜しい。もちろんJupyter Notebook上では表示も制作も問題ないというわけです。

その後もう少しやってみると、どうやらJupyterLabではmatplot.animationを使う場合、アニメーション出力はHTML(ani.to_html5_video())を使うと大丈夫でした。もうひとつHTML(ani.to_jshtml())というのもあるのですが、こちらはダメみたい。Jupyter Notebookではどちらとも大丈夫ですが、JupyterLabの場合はHTML(ani.to_html5_video())を使ったほうがよさそうです。

追記:
その後、GIFアニメーションの作成+読込み+再生について実験してみました


データ分析ツールJupyter入門
Posted with Amakuri at 2018.12.21
掌田津耶乃
秀和システム
販売価格 ¥3,024

2018年2月26日月曜日

Anaconda NavigatorのVSCODE

Anaconda NavigatorにVSCODEが追加されたようなのでアップデートしてみました。
環境は、Ubuntu16.10です。


アップデートしてみると、たしかにVSCODE(右下)に追加されています。
選択した仮想環境内にあるVSCODEの「install」をクリックすれば、すぐにインストールされるようです。もうすでにPythonの環境に適応した状態になっているようなので、余計な設定などしなくてもいいようです。
もともとAnaconda Navigatorにはspyderというエディタも入っているのですが、おそらくVSCODEのほうが使いやすいかと。

しかし、普段はAtomエディタを使っているので(以前いろいろ設定したので)、VSCODEはたぶん使用しないとは思いますが、徐々に便利になっていることは確かです。やはりPythonを使うならばAnacondaを導入するのがおすすめです。

追記(2021年):
その後、VSCODEの機能拡張も進化したのでかなり便利になり、VSCODE内でJupyter Notebookも使えるようになりました。唯一問題なのは、Jupyter Notebookでmatplotlibを使った際にインタラクティブ表示(バックエンドを%matplotlib notebookにすることができない)が非対応ということでしょうか。そのため、Jupyter Notebookを使う際には、いまだにブラウザを使用しています。ちなみにJupyterLabでもインタラクティブ表示ができない。

2017年11月16日木曜日

デュアルブートWindows10/Ubuntu16.10/NVIDIA-384/CUDA9.0/cuDNN7.0/Anaconda

前回の投稿にも書きましたが、現在使用しているMacBook Pro(2014年製)の後継機として、MSI GS43VR 7RE Phantom Proという14型のゲーミングノートパソコンを購入しました。GeForce GTX1060のGPU内蔵なので、Deep Learningの計算をさせればMacBook Proよりもずっと速いはずです。Windows10ですが、Deep Learningのプログラミング環境では、Linuxのほうが高速に処理してくれるらしいので、Linux(Ubuntu)とWindows10のデュアルブートにしました。
MSI GS43VR 7RE Phantom Pro ゲーミングノートパソコン:
プロセッサ:Intel Core i7-7700HQ
GPU: GeForce GTX1060(6GB)
RAM: 16GB
HD: 256GB(PCIEx Gen3) + 256GB(SSD/SATA:オプション変更)
画面:14インチ/1920x1080px
サイズ:345x245x22.8mm
重量: 1.8kg

Deep Learning用のパソコンにするには、以下のことが必要らしい。
・デュアルブート(万が一LinuxがダメならWindowsに戻るため)
Ubuntuのインストール(ほぼ定番)
NVIDIAドライバ(GPUドライバ)のインストール
CUDA(NVIDIA/GPU並列計算プラットフォーム)のインストール
cuDNN(NVIDIA/Deep Learning用ライブラリ)のインストール
Anaconda(Python統合環境/Python3.6含む)のインストール
Pytorch(Deep Learningライブラリ)のインストール
Tensorflow(Deep Learningライブラリ)のインストール
PyCharm(エディタ)のインストール

1日で終わればいいけど、そう簡単には終わらないはず。特にLinux(Ubuntu)で環境を整えるのは、バージョンの違いなどもあるためかなりハマりそう。ネットで調べてみてもトラブルが多い。
結果的には何とか動きましたが、何回もインストールし直し、思うようにいかず設定に数日かかってしまいました。

これはUbuntu16.10上の画面です。通常Ubuntu16.04が最適なバージョンですが、MSiのゲーミングノートPCとは相性が悪いのかフリーズしたりほとんど使えない状態でした。やむを得ず、Ubuntu16.10にしてみて悪戦苦闘の結果なんとか動いたという感じです。Ubuntuのバージョンによって、対応するドライバやライブラリなどが変わってしまうので、その組み合わせが難しい。
Ubuntuを何回もインストールし直していると、コンピューター好きには楽しいのですが(コンピュータの構造、シェルコマンド、viエディタの使い方などに詳しくなってしまう)、いつのまにか環境構築が目的(達成感や克服感)となってしまい、本来の目的であるLinuxで何をするかということから次第に遠ざかってしまい、時間ばかり消費してしまうのであまり深追いはしないほうがいいと思います。

理想的な組み合わせ:
・Ubuntu16.04
・NVIDIAドライバ nvidia-384(多分低すぎなければいい)
・CUDA 8.0(対応:Ubuntu16.04/14.04、Tensorflowなども対応)
・cuDNN 6.0/7.0

最終的な組み合わせ:(なぜか無事動いた)
・Ubuntu16.10/Windows10デュアルブート(gcc 6.2.0)
・NVIDIAドライバ nvidia-384
・CUDA 9.0(対応:Ubuntu17.04/16.04、未対応:Tensorflow/Pytorch)
・cuDNN 7.0.4 for CUDA 9.0
・Anaconda 4.3.30(cuda80/cudnn6.0.21/Tensorflow-gpu1.3.0)
・Pytorch (Linux/conda/Python3.5/CUDA8.0)

矛盾するけれどもAnacondaで解消?
NVIDIA製CUDA8.0だとUbuntu16.04のgccバージョン5(6未満)でなければならず、Ubuntu16.10にしてしまうとgcc6.2になってしまう。仮にgccを5へダウングレードしても、CUDA8.0をUbuntu16.10にインストールするとgcc6.2へアップグレードされてしまうので、やむを得ずCUDA9.0ならびにcuDNNもCUDA9.0用をインストール。とりあえず、CUDA9.0とcuDNN7.0のマニュアルにある動作確認では問題なし。
ちなみにTensorflowやPytorchはまだCUDA9.0には未対応。
Tensorflow1.5からCUDA9.0に対応するらしい。いちおうベータ版Tensorflow1.5はあるけれども、ソースをコンパイルしてインストールしなければならない。またベータ版PytorchであればCUDA9.0でも動くらしい
しかしながらAnacondaをインストールしてみると、仮想環境のおかげなのかCUDA8.0+cuDNN6.0対応のTensorflow-gpu1.3とPytorchのサンプルがきちんと動きました。もしかしたらUbuntu17.10(最新)でも動くかもしれないけれど、またインストールし直すのは大変なのでやめました。

Tensorflow-gpu/CNN/CIFAR10での実験:
ということで、CIFAR10のサンプルで試してみました。以下がGPU(GeForce GTX1060)で動かしてみた内容。右端の数値を見ると0.018〜0.019sec/batchとなっています。これはかなり高速。
ちなみに、MacBook Pro(GPUなし)のほうでも同じように動かしてみると、以下。
0.680sec/batch前後という結果。比較すると、GPUのほうが約36倍速いということになります。あまりに違うので、いままでMacBook Proを使っていたのが馬鹿馬鹿しく感じてしまいます。その他VAEのサンプルで試すと約6.5倍の速さでした。CNNのサンプルに関しては、cuDNNを使っているためか、かなり効果があるようです。特にエラーもでないし、このような歴然とした結果からおそらくGPUはきちんと機能しているはずです。

ネットで設定例がたくさん見つかるので、ここでは細かな内容は省きますが、手順を一通り書いておきます。

デュアルブート下準備:
・Windowsの「ディスクの管理」でパーティションを区切り約120GBをUbuntu用に確保
・USBメモリースティック(8GB)をFAT32フォーマット化
・Ubuntuをダウンロード
Rufusソフトをダウンロード
・Rufusを使ってUbuntuをUSBメモリースティックへLiveCDとして書き込む
・再起動しBIOS画面にする(起動中Deleteキー連打/違う機種だとF2キー連打)
・BIOS画面内でFast boot無効、USBメモリースティックを最優先に起動順序を変える
ハマりどころ:
Windows10のボリュームはすでに5個くらいに分割されており、Ubuntu用に充分な領域を確保できないけれども、後から変えることもできるはず。それほどこの段階では問題はない。

Ubuntu:
・USBメモリースティックからUbuntuが立ち上がったらWifiとつないでおく
・Ubuntuのインストール(使用言語、地域、ユーザ名、パスワードなどの設定)
・インストールされれば再起動
・また起動中にBIOS画面にしてPCにインストールしたUbuntuを最優先起動に設定する
・Ubuntuとして起動したら、Wifiなど基本事項を設定
ハマりどころ:
Ubuntu17.10が最新バージョンだけれども、CUDAには正式に対応していないためUbuntu16.04を選ぶのがいいとされる。しかし16.04(日本語版)をインストールしてみたところディスプレイ解像度変更不可、ネットがつながらないなどの問題発生。オリジナル版もフリーズしたり機能上の不具合が多くで断念。つぎに16.10を試してみると何とか動いた。さらに次の候補となる17.04もフリーズ、17.10はかろうじて動くがたまにフリーズする。16.10くらいしかまともに動かないため、やむを得ず16.10で以下の作業を進めることに。しかし気がかりなのは、CUDAが17.04か16.04にしか正式に対応していないという点。

NVIDIAドライバ:
NVIDIAサイトからドライバのダウンロード
・Nouveauの無効化
・Ubuntu上で仮想コンソールへ移動してドライバのインストール
・BIOS画面でセキュアブート無効にする
ドライバを入れた後(CUDA無し)、ターミナルでnvidia-smiを入力してこの画面が出ればOK(しかしなかなか出なかった)。

ハマりどころ:
ほとんどはUbuntuのターミナルからインストールするけれども、一旦GUI表示を無効にして仮想コンソールへ場所を移して、そこでドライバのインストールをするというややこしい手順。また、viでNouveau無効化ファイル作成するため、viの使い方も知らないといけない。セキュアブート無効を忘れるとログインループにハマったりGUI画面が表示されなくなったりします。後から気づいたけれども、セキュアブート無効にすればこのような面倒な手順は不要かもしれない。最初nvidia-375をインストールしていましたが、他のソフトを入れると最新のnvidia-384に引き上げられてしまうようです。結果的には問題なし。

CUDA:
NVIDIAサイトからインストーラのダウンロード
・CUDAのインストール
・パスの追加
ハマりどころ:
作業事態は単純だけれども、どのバージョンをインストールしたらいいのか迷う。最新はCUDA9.0だけれども、まだTensorflowやPytorchは対応していない。それではCUDA8.0にすればいいかというと、Ubuntu16.10のgccのバージョンと対応しなくなる。現状では他の環境やライブラリがまだCUDA8.0にしか対応していないため、CUDA9.0を使わないほうがいいみたい。CUDA8.0にとどまるなら、Ubuntuを17.04にアップグレードするという手もあるけれども、このMSI GS43VRは17.04でもフリーズしてしまう。かろうじてUbuntu17.10では動くのだけれども、一旦ここまでインストールしてしまうと17.10へ変えにくい。というわけで、使用するパソコン、ライブラリ、ドライバ、プラットフォームのそれぞれのバージョンがうまく噛み合わなくて選択が難しい。CUDAのバージョンに振り回される。
CUDAでつまづくようなら、NVIDIAサイトからダウンロードせずに、
sudo apt-get install nvidia-cuda-toolkit
でインストールしたほうがいいかもしれません。

cuDNN
・メール登録が必要
・CUDAのバージョンに合わせてNVIDIAサイトからダウンロード
・Ubuntuへインストール
ハマりどころ:
特に難しくはない。このライブラリを使うとかなり高速になるようです。tarファイル版は一気にダウンロードできるけれども、なぜかマニュアルにある動作確認用サンプルが含まれていない。3つあるdeb版なら3つ目がサンプルなのでいいかもしれない。

Anaconda
・pyenvを最初にインストール(こちらを参考にしました
・pyenvにパス通す
・Anacondaをインストール(Python3.6含む)
・tensorflow-gpu1.3をインストール(Anaconda内)
・pytorchをインストール(Anaconda内:pytorch/torchvision/cuda80)
・cudnnをインストール(Anaconda内)
*Anaconda経由(あるいはanaconda-navigator)で、tensorflow-gpu1.3、pytorch、cuda80、cudnn6.0をインストールできるのでかなり楽。Anaconda cloudに登録し、cloud上で必要なライブラリを探すのもいいと思います。場合によってはpython2.7もインストールして仮想環境をつくっておくといいらしい。
結果的には、まだ未対応のCUDA9.0とcuDNN7.0(CUDA9.0用)をNVIDIAからインストールしたにもかかわらず、Anacondaの仮想環境とpytorch/cuda80/cucnn6.0のおかげで無事動いたのかもしれない。

PyCharm(エディタ):
サイトから無料のcommunity版をダウンロード
・解凍したあと、pycharm-community-2017.2.4/binへ移動し、./pycharm.shで起動。
・Anacondaのパスとつなげておく(確かデフォルトでつながっていたような)
・エディタ内でターミナル使用、git pullも可能
・pytorchのdcganサンプルなどにあるコマンドラインオプション/引数なども登録可能
*例えば、
python main.py --batchSize 128 --cuda --ngpu 1
などのmain.pyのうしろにつける設定項目(こちらを参考に)。

まとめ:
・Linuxと使用するパソコンとの相性次第(ダメならWindowsで)
・BIOS画面でFast BootとSecure Bootを必ずオフにする
・Anacondaを使う
前半は先が見えずかなり苦戦し、UbuntuがだめならWindows10にインストールするしかないとも考えていました。海外国内問わずネット上にはなかなか動かない例もたくさんあり、予想以上に面倒でした。Linux固有のトラブルと、ハード、ソフトそれぞれの対応が微妙にずれており、しかも今後リリースされるライブラリも徐々にバージョンアップしていくので、またインストールし直す時がくるので面倒です。Ubuntuは年2回(4月と10月)にバージョンアップするらしく、次回18.04は2018年4月という意味でLTS(Long Term Support/5年間)になる予定。
しかしながら、一度設定できればGPUのパワーはすごい。MacBook Proもそこそこ速いのではないかと思っていましたが、そんなことはありませんでした。やはりGPU搭載のパソコンは圧倒的に作業時間が短縮されていいと思います。特にCNNなどの層が厚いアルゴリズムでは効果てきめんという感じです。

Linuxはトラブルが多いと思うのですが(ドラブルがあれば自分で直すという姿勢からか)、一旦動き出せば、機能も見た目もシンプルだし元々軽快なためか計算速度も速いらしいでの、できるだけWindowsを使いたくありませんでした。WindowsはしばらくTensorflowにも対応しておらず、Pytorchにおいては公式ではLinuxとMac版だけ(WIndows版はAnacondaからインストール可能)。MicrosoftがCNTKをリリースしたものの、Windowsはやや一歩遅れというのも気になります。

また、DockerやAWSなどのクラウドへUbuntu16.04をインストールし(必要に応じてその他のライブラリも)、GPUで計算させるという方法もあるようです。どうしても時間を短縮したいという場合は有料(数百円)にはなるけれどもいいかもしれません。コーディングは普通のノートパソコンでやって、計算のときはクラウド利用するというのが一番スマートな方法(ものを持ちすぎない)だと思います。

Tensorflow1.4でKerasが取り込まれ、さらにはEager(まだpre-alpha版)も登場し(tf.learnやtf-slimはどうなってしまったのか)、まだまだ変化がありすぎる状況です。現在はCUDA8.0とcuDNN6.0/7.0が主流だと思うのですが、数ヶ月以内ですぐにCUDA9.0に対応してしまうと思います。半年後にはUbuntu18.04LTSがリリースされ、そのころにはまた新たなライブラリや環境が登場していると思うのできりがないという感じです。

人気の投稿