備忘録とか日常とか

学んだこととかを書きます。

ubuntu14.04 theanoとかgpgpu環境構築メモ

まっさらなlinux環境にtheano, pylearn2のgpgpu環境を導入する手順をメモする
ほぼ自分用みたいなとこある

環境は以下
ubuntu14.04LTS
GeForce GTX 970

インストール

ubuntu14.04にはpython2.7が最初から入っているのでパッケージから入れてく。

sudo apt-get install python-numpy python-scipy python-dev python-matplotlib python-pip python-setuptools  python-nose g++ libopenblas-dev git
sudo pip install Theano
git clone git://github.com/lisa-lab/pylearn2.git
cd pylearn2
python setup.py develop

できたら

import pylearn2

とかして確認。

pylearn2のデータパスを追加しておく。
ホームディレクトリ内の .bashrc の末尾に以下を追加

export PYTHON_DATA_PATH="/home/username/pylearn2data"

別に場所はどこでもいいと思うので適当に。

CUDA入れる

以前Caffeのインストールを試みた時に、CUDAのパッケージからそのままインストールするとうまく行かなかった(今はわからん)。CUDAのパッケージにビデオドライバも含まれているらしく、先にドライバを入れてたのでそのせいかもしれない。
なのでtoolkitとサンプルを別々に入れる。
参考は以下
Caffe(本家サイト版)をインストールして試してみる - 論理 Hearts Club Band

GPUドライバの導入はこの記事の下の方で書いたのでその通りにする。
まずCUDAの最新版を入手する↓
CUDA Toolkit 9.2 Download | NVIDIA Developer
2016/2/11現在で最新は7.5

環境を選択してrunファイルをダウンロード
作業しやすいようにホームディレクトリにおいておく

その後ランレベルを変えるため再起動する。
ぶっちゃけこの辺の仕組みとか理由とかわかってない・・・Linux勉強しなきゃなあ

GRUBのメニュー画面に入る(自動で表示しない場合はUbuntu起動中にEscキーぽちぽちする)
カーソルをUbuntuに合わせた状態で「e」キーを押してオプションを表示

linux の行のところに"quiet splash"って書いてあるので、その直後に"text 3"と追記する。
その後F10で起動
この設定は今回のみ有効となっている。


できたらCUDAインストーラの実行権限を変更して、

sudo chmod 755 cuda_7.5.18_linux.run

インストーラを生成するため-extractオプションをつけて実行する

sudo ./cuda_7.5.18_linux.run -extract=$HOME/nvidia_install

するとディレクトリが生成され、中にドライバ、ツールキット、サンプルのインストーラが入っている。
生成されたディレクトリ内に入り、

sudo ./cuda-linux64-rel-7.5.18-19867135.run

を実行

するとEULAが表示されるのでスペースキーで進んでいく
各項目について聞かれるので、以下のように入力する

  • ソフトウェア使用許諾: "accept"
  • インストールパス:[Enter]
  • デスクトップメニューショートカットの作成:[Enter]
  • シンボリックリンクの作成:[Enter]

Installation Completeと表示されたら完了。


同様の手順でサンプルもインストールする。

sudo ./cuda-samples-linux-7.5.18-19867135.run

各項目について以下で回答。

  • ソフトウェア使用許諾: "accept"
  • インストールパス: [Enter]


ここまでできたら再起動しておく。

theanoでgpu設定

theanoでgpuを使えるようにする。
以下のテキストを.theanorcというファイルとしてホームディレクトリに保存する。

[global]
floatX = float32
device = gpu0

[lib]
cnmem = True

[cuda] 
root = /usr/local/cuda-7.5

cudaの項目はバージョンに合わせて変更する。

その後pythonを起動し、以下のcheck.pyを実行する

# check.py


from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time

vlen = 10 * 30 * 768  # 10 x #cores x # threads per core
iters = 1000

rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], T.exp(x))
print f.maker.fgraph.toposort()
t0 = time.time()
for i in xrange(iters):
    r = f()
t1 = time.time()
print 'Looping %d times took' % iters, t1 - t0, 'seconds'
print 'Result is', r
if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):
    print 'Used the cpu'
else:
    print 'Used the gpu'

実行後、最後に"Used the gpu" と表示されればgpuが使えてることになる。

Anaconda入れる

ここは別に入れなくてもいい
まあ使えるとなにかと便利なので

Anacondaを公式からダウンロードしてくる
https://www.continuum.io/downloads
bashする

bash bash Anaconda2-2.5.0-Linux-x86_64.sh

指示に従ってインストール
パスを追加するか聞かれるので、追加する。

するとubuntuに元から入ってた方のpythonパッケージが使えなくなるので、パスを通す。
.bashrcに以下を追加

export PYTHONPATH="/usr/local/lib/python2.7/dist-packages:/home/username/pylearn2:"$PYTHONPATH

できたらpythonを起動して以下を試す。

import pylearn2

GPU使ってますよーみたいなメッセージが出ればおけ。

空の内蔵HDDにUbuntu14.04をインストールしてマルチブート(nvidia GPU使用)

いろいろあって仮想環境ではないLinuxが必要になったので、HDDを増設して新たにubuntuをインストールすることにした。
自分みたいな情弱はデュアルブートする勇気はまだない・・・というかCドライブが128GBのSSDなのでそんなことする余裕もない。

とりあえず内蔵HDDを買ってきた。
かなり急だったので全然メーカーとか調べてなかったが、近所の某工房にはでかでかとPOPが出てたのでこれを購入。

安さにびっくり。500GBでこのお値段。しかも1TBでもそんなに値段が変わらない。
まあ今回はLinuxブート用なので1TBも使うわけないと思い、500GBにしました。
あと忘れずにSATAケーブルも買う。電源ケーブルは分岐が余ってたので買わなかった。


メインはWindows8.1を使い、別HDDにUbuntu14.04をインストールする。
普通にisoファイルをDVDに焼いてインストールできると高を括っていたが、なんかできない。

「情弱がマルチブートを試みるのは無謀だったか・・・」

と諦めかけたが、試行錯誤した結果なんとか入ったっぽいので手順をメモしておく。
どうやらnvidia製のGPUがつながってるとき特有の症状があるらしい。

参考元は以下
Carpe Diem Ubuntuでインストールディスクが起動しない場合
http://kledgeb.blogspot.jp/2014/04/ubuntu-1404-uefi-2-uefipcubuntu-1404.html
Ubuntu に最新の NVIDIA Driver をインストールする。 - ZONDEEL BLOG


環境は
Windows8.1のシステムドライブ
windows用Dドライブ
空のHDD(ubuntu14.04インストール用)
GeForce GTX970



試す前に、万が一に備えてバックアップを取る。
自分はBTOで買ったプリインストールのWindows8.1だったのでwindowsのインストールディスクとかは付属してなかった(最近のはメーカー製でもついてこないのが多い?)。とりあえずイメージバックアップと回復ドライブを作ることを推奨する。
下を参考にすればだいたいできるはず。
https://121ware.com/qasearch/1007/app/servlet/qadoc?QID=015953
Windows8.1 回復ドライブの作成と復元(リカバリ)手順 : 下手の横好き!

自分みたいな情弱はまともにバックアップとかとったこと無い。ゆえに回復がどうたら言われてもぱっとしない。
回復ドライブとイメージバックアップの違いは以下がわかりやすかったかも。
fanblogs.jp


また自分みたい(ry 、空のHDDでさえもパーティションを切るのが怖かった
失敗を恐れに恐れた
その結果「Ubuntu以外のHDDはずせばええやん!」と思い、インストールをしてみた

すると一応インストールはできた。が、他のHDDをつなぐとうんともすんとも言わなくなる。。
BIOS設定とかいじってみるけど変わらず。内部でHDDの順番とか認識してるのかもしれない
なのでHDDは全部つないだ状態でインストールを行う必要がある


Ubuntu14.04 のインストールディスクを書き込む

インストールディスクがないことには始まらないので作ることにする。
windows8には標準でDVDにisoイメージを焼く機能がついてたので、それを使うことにする。

下記のサイトからubuntu14.04のisoファイルをダウンロード
Ubuntu Desktop 日本語 Remixのダウンロード | Ubuntu Japanese Team

その後、空のDVD-Rを挿入して
isoファイルを右クリック -> 「ディスクイメージの書き込み」 を選択。
するとツールが立ち上がって書き込み先を聞かれるので、
DVDドライブを指定して「書き込み」を押す。
ディスク確認は別にしなくてよい。

「ディスクイメージの書き込み」がない場合、isoファイルが他のプログラムと関連付けされてるので直す。
isoファイルを右クリック -> プロパティ -> 全般タブ、プログラム欄の変更ボタンを押す
プログラム一覧が出るので「エクスプローラ」を選択する。これで書き込みできる。


長々と書いたがここを見たほうがわかりやすい。

ubuntuをインストールするHDDを増設

これはまあ適当に。
SATAポートとかつなぐ順番があるのかと思ってたけど、テキトーにつないでも何も起きなかったのであんまり関係ないのかもしれない。とかゆうと詳しい人に怒られるだろうから、心配な人は周囲の詳しい人(あるいはgoogle先生)の教えを請うのが良さそうです

上で述べたように、インストールの際は全てのHDDをつなぐ必要がある(はず)。
少なくとも自分の場合はうまく行かなかったので。
ubuntu以外のディストリならできるかもしれないが試したことはない。


初めてのHDD増設だったがゆえにドライブベイにHDDをセットするのにクソ時間かかったのはまた別の話
危うくインストール前に物理的に破壊するとこだった

BIOS設定してDVDからブート

作成したインストールディスクを入れ、シャットダウンして起動、BIOSを立ち上げる。
これはメーカーによって立ち上げ方が違うだろうけど、F2とDelポチポチしとけば何とかなる。
boot priorityをCD/DVDが1番になるようにし、設定保存して再起動。

すると真っ黒い画面に

Try ubuntu without installing
Install Ubuntu
...

みたいなのが出る。ここでそのままInstall Ubuntuを選びたいところだがそうはしない
nvidia製のGPUを使ってる場合はUbuntuが起動しないと思われる
(確定的ではない、つまりよくわからん)

そこでカーソルを「Install Ubuntu」に合わせ、キーボードで'e'を入力
ブートパラメータがずらっと表示される。
その中の「quiet splash」を「nomodeset」に書き換える。できたらF10で起動。


すごい低解像度でubuntuの画面が起動したらめでたし。

パーティションを切る

いよいよHDDにパーティションを切っていく。
のだがスクショとか撮ってないので、下のサイトのほうがわかりやすいです。。
http://kledgeb.blogspot.jp/2014/04/ubuntu-1404-uefi-2-uefipcubuntu-1404.html

概要をざっくりまとめると

ubuntuではwindowsのように、「システムドライブだからC:」とかそういうのはない。これはおそらくポートの接続順とかになってるのではなかろうか。各HDDがどれであるかは把握しておく必要がある(まあパーティション情報見たらわかる)
パーティションは作られた順にsda1, sda2, ... となる。
ubuntuwindowsパーティションのフォーマットが違うので、ubuntu側からwindowsをいじるときは注意する。
スワップ領域とはメモリの中身を一時的にHDDに退避させる領域である。メモリが十分にあるならそこまで必要ではない。


手順は以下。

1. パーティションテーブルを作る

インストールするHDDを選択し、「新しいパーティションテーブル」のボタンを押す。
自分の場合は/dev/sdc にインストールした。
確認するダイアログが出るけど続ける。


2. EFIシステムパーティションを作る

インストールするHDD下にできた「空き領域」を選択し、左下の方にある「+」ボタンを押す。
ウインドウがでるので、利用方法を「EFIブートパーティション」にする
サイズは100MB程度あれば十分。自分は128MBとした
パーティションタイプは基本パーティション、場所は空き領域の始点とする。これは他のパーティションでも同じ。


3. ルートパーティションを作る

2.がおわると/dev/sdc1 ができ、タイプがefiとなっているはず。間に空き領域があったり数値が若干違ったりするけど失敗じゃないのでびびらない。
一番下の空き領域を選択し、同じように「+」ボタンを押す
今度は利用方法を「ext4 ジャーナリングファイルシステム」とする。
マウントポイントは「/」を入力
サイズだが、スワップ領域以外を全てルートに使う。なのでスワップに使う領域を予め決めておく。自分はスワップに4GB割り当てることにしたので、ルートパーティションのサイズは「空き領域 - 4000」MBと入力した。


4. スワップパーティションを作る

3.が終わると予め決めた分だけ空き領域が残る。それを選択して「+」ボタン。
利用方法を「スワップ領域」として、サイズは空き領域全て使う。


5. ブートローダの設定

最後に、「ブートローダをインストールするデバイス」という項目で、2.でつくったEFIシステムパーティションを選択する。自分は/dev/sdc1だった。タイプがefiになっていることを確認。



ここまでできたらインストールを押す。その後も指示に従うだけ。
お疲れ様でした!


...と言いたいところだが、このままではnvidiaGPU使ったら起動できない問題が解決していない。
次でGPUドライバをインストールする。


GPUドライバをインストール

ubuntuをインストールできたら自動的に再起動される。その時にDVDを取り出す。
再起動時にBIOSで、Boot順をUbuntuが入っているHDDが1番になるように設定する。

するとGRUBのブート画面が出る。(出ない場合はnvidiaGPU問題により起動が止まっているかも。その際は再起動してubuntu起動中にEscキーをポチポチしてGRUBを呼び出す)
こんな画面↓
f:id:may46onez:20160204194446j:plain
画像元:http://eiji-kb.hatenablog.com/entry/2015/07/29/200733


ブート画面に入れたら、Ubuntuにカーソルをあわせ、
最初にやったように'e'押して「quiet splash」->「nomodeset」としてF10で起動

CUIでいじるとこがあるので、ディレクトリネームを英語にしておく。
前回記事参照。

以下URLから、自分のGPUにあったrunファイルをダウンロードする。
http://www.nvidia.co.jp/Download/index.aspx?lang=jp
その後はここを参考にする。


ctr + alt + F1 でCUIモードにした後、以下のコマンドを入力

sudo apt-get purge nvidia*
sudo service lightdm stop
sudo service gdm stop
sudo chmod 755 ~/Downloads/NVIDIA-Linux-x86_64-340.32.run  # ここは各自ファイル名置き換え
cd Downloads
sudo ./NVIDIA-Linux-x86_64-340.32.run                      # ここも同様

ここからはここが参考になる
なにやら青い画面が出てくるので、「Accept」を選択

自分の環境ではプレインストールスクリプトがどうちゃら、みたいなのが出た
気にせず「Continue installation」を選択

次は署名がどうたら言われる
めげずに「install without signing」を押す。その後何度か確認みたいなのが出るので「OK」で。

今度はNVIDIA XドライバをXconfigurationに反映させるか尋ねてくる。
いらいらせず「Yes」を選択する。
何事もなければインストール完了する。その後sudo rebootで再起動。


これでGRUBブート画面からUbuntuを「そのまま」選択し、何も起こらなければインストール完了。
ドライバが入ったことで高解像度になってるはず。
今度こそお疲れ様でした。。。

ちなみにwindowsを起動したいときは、GRUBの画面でWindows Boot Managerを選択すればよい。

まとめ

UbuntuWindowsで別HDDによるマルチブートするなら、
HDDを全てつないだ状態でUbuntuインストールを行う。

nvidiaGPUを使う場合は少々めんどい。

パーティションは情弱でもある程度切れる。


この環境を構築するにあたって参考にさせていただいた先人達の努力に感謝。

texmaker 設定とか

自宅PCにもtexの環境を整えるため、texmakerを導入したのでメモ。
とりあえず使えるようにしただけで、未だに各設定の意味とかは分からないままだけど・・・
参考元は以下
しゅがーの美しい日々 : Texmakerの設定(win) - livedoor Blog(ブログ)

環境はWindows8.1です(たぶん7でも同じようにできる)
LaTeXのインストールはここがわかりやすいかも

LaTeXをインストールするとデフォルトのエディタとしてtexworksがついてくる。とりあえず書くことを目的とするならこれでも使えるが、やっぱり機能的なエディタがあったほうが書きやすいので。
色々種類はあるらしいけど自分はtexmakerを使います。

インストール

以下のリンクからosにあったものをダウンロードしてインストール。
2016/1/30現在で最新バージョンは4.5
http://www.xm1math.net/texmaker/download.html#windows

設定あれこれ

インストールが終わったらtexmakerを立ち上げる。デフォルトでは英語なので、日本語にしたい方はこことか参考になるかも。
立ち上げたら Options -> Configure texmaker でオプションを開く。

いっぱい出てくるので、以下のように直す。
f:id:may46onez:20160131003244p:plain

書き直す箇所は以下

platex -no-guess-input-enc -kanji=utf8 -synctex=1 -src-specials -interaction=nonstopmode -jobname=% %.tex

  • PdfLaTeX

pdflatex -synctex=1 -interaction=nonstopmode %.tex

  • LaTeXmk  

latexmk -e "$pdflatex=q/pdflatex -synctex=1 -interaction=nonstopmode/" -pdf %.tex

pbibtex -kanji=utf8 %

  • Makeindex  

mendex -U %.idx

  • dvips     

dvips -Ppdf -t a4 -o %.ps %.dvi

  • Dvipdfm   

dvipdfmx %.dvi

  • ps2pdf    

ps2pdf.bat %.ps

  • metapost  

pmpost -kanji=utf8 -interaction=nonstopmode %

  • Asymptote 

asy %.asy

  • R Sweave 

R CMD Sweave %.Rnw

  • DVI Viewer 

"C:/w32tex/dviout/dviout.exe" -1 %.dvi

  • PS Viewer

"C:/Program Files/Ghostgum/gsview/gsview32.exe" -e %.ps

  • PDF Viewer

「Built-in Viewer」を選択、「Embed」にチェック


その後、左側のQuick Buildから 「LaTeX + pdivdfm + view PDF」を選択して設定終わり。
DVI Viewer、 PS Viewer 、 ghostscript は適宜自分の環境に合わせてパスを設定する。
普通にLaTeXをインストールしたらProgram Filesの下か、ドライブの直下にフォルダができてると思われ。

動作確認

以下のリンクのサンプルを.texで保存し、コンパイルする。
http://www.damp.tottori-u.ac.jp/~hoshi/info/doc-info-2009/sample.tex
コンパイルは画面上部のQuick Buildのボタンを押す。F1キーでもできる
成功するとPDFがtexファイルと同じ場所に出力される(PDF以外にもいろいろできる)

ついでに

OSによっては、日本語を変換すると文字と背景が真っ暗になって読めなくなる現象が起こる。(Windows7で確認)
その時は Options -> Configure texmaker から Editerを選択し、真ん中らへんにある「Dark theme」というボタンを押す。
するとテキスト編集画面の背景が黒くなり、文字が白で表示されるようになるのでとりあえず使えるように。


さらにtexmakerの初期設定では、日本語の部分すべてに文字校正の赤線が表示されて画面がごちゃごちゃする。
直すなら同じくEditor から、「Spelling dictionary」の部分を空白にする。

Ubuntu14.04 まっさらからtex環境構築・設定

sudo apt-get install texlive-lang-cjk texlive-latex-recommended texlive-latex-extra
sudo apt-get install kile kbibtex

したあとに公式ページからtexmakerのパッケージをダウンロード・インストール
(i386は32bit, amd64は64bit)

その後Options->Configure Texmakerから設定を以下のように変更する

Commands

latex → platex -kanji=utf8

bibtex → pbibtex -kanji=utf8

  • Dvipdfm

dvipdfm → dvipdfmx

Quick Build

[LaTeX + dvipdfm + View PDF]にチェック

Editor

スペルチェック辞書欄を消す

【曲紹介とかしてみる】Tombo in 7/4 (A Bossa Electrica)

今年は暖冬と聞いてすっかり油断していましたが、ここ数日で急激に寒くなりましたね。
寒すぎて外に出るのが億劫です・・・

こんな寒い日こそ、熱い曲を聴いてあったまりましょう!
今回はサンバの曲をご紹介します。季節外れとか言わない。

A Bossa Electricaで、「Tombo in 7/4」です。


[Count the Beats] A Bossa Electrica - Tombo in 7/4


タイトルにもある通り、7/4拍子です。ベースラインもいいのですが、ドラムとパーカッションが刻むビートが秀逸です。7拍子とか聴いてると気持ち悪さが先行しそうなものなのに、この曲に関しては延々とドラムソロを聴いていたくなります。。
サビの部分は誰もが聴いたことがあるでしょう。Samba de janeiroという曲で、世界中でダンスミュージックとして古くから親しまれています。日本では野球とかサッカーの応援歌で有名でしょう。
あろうことか、Samba de janeiro のサビ部分をそのまま丸パクリ引用している曲です。どうしてこうなった。


Tombo in 7/4のオリジナルはAirto Moreira(1941-)という方が作曲しました。サンバの本場ブラジルのパーカッショニストだそうです。この曲は色んなアレンジがされていますので、他のが知りたければyoutubeで調べてみるといいと思います。
で、上のアレンジをしたのがA Bossa Electricaというスウェーデンの6人グループ。調べてみましたが情報が少ないのであまりよくわかりませんでした・・・音楽的なジャンルとしては北欧ブラジリアンフュージョン?というらしいです。スウェーデン人が北欧ブラジリアンとはこれいかに。



あともう一つ、jazz界でも屈指の腕を持つピアニストであるMichel Camilo(1954-)もこの曲をアレンジしています。


Michel Camilo - Tombo7/4

さすがの超絶技巧です。。こっちのほうが気持ち悪さ3割り増しですねー
セカンドリフが最高にきもかっこいい(褒め言葉です)
ドラムはDave Weckl 、ベースはAnthony Jacksonが担当してます。個人技が突出しているので、フュージョン好きな方や何か楽器をされてる方はこのアレンジも気に入ると思います。興味ない人がBGMとして聴くと意味不明になりそうですが・・・


聴いてても暖かくならないかもしれないですけど、演奏者は汗だくになること請け合いです。
興味があれば是非。。

matlabとnumpy reshapeの違い

matlabは特に行列計算が容易に書けるが、ライセンスが有料なので気軽には使えなかった。そこで無料で導入できるpythonに、matlabのような使い勝手の良い数値計算ライブラリ(numpyとかmatplotlibとか)が開発されたわけである。機械学習を利用する上で便利な言語としてpythonが使われだしたのも、これらのライブラリが開発された頃からであるとどっかの本で読んだ気がしなくもない。

matlabを使っている時に、行列の構造を変えるreshapeという関数でつまずいたのでメモしておく。
pythonにもnumpy.ndarrayの中に全く同じ名前のメソッドがあるが、若干仕様が違う。

例えば以下のようなベクトルがあるとする

% in matlab
>> a = [0 1 2 3 4 5 6 7 8 9 10 11]

a =

     0     1     2     3     4     5     6     7     8     9    10    11

これをreshapeして(3,4)の行列にするのだが、pythonだと以下のようになる

# in python
>> a.reshape((3,4))
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

これに対し、matlabで普通にreshape関数を使うと

% in matlab
>> reshape(a,[3,4])

ans =

     0     3     6     9
     1     4     7    10
     2     5     8    11

こうなってしまう。
列から埋めるか、行から埋めるかという違いがあるらしい。

pythonmatlabと同じような結果にするには、orderという引数を与える。

# in python
>> a.reshape((3,4),order="F")
array([[ 0,  3,  6,  9],
       [ 1,  4,  7, 10],
       [ 2,  5,  8, 11]])

こんな感じ。デフォルトではorder="C"となっている。詳しくはドキュメントを参照

matlabでの結果をpythonorder="C"の場合にする方法は、調べたところよくわからない。。
なので以下のようにする

% in matlab
>> reshape(a,[4,3]).'

ans =

     0     1     2     3
     4     5     6     7
     8     9    10    11

普通にreshapeしてから.'で転置をとるだけである。


pythonに慣れてたので不意打ちを食らった