2016/04/24(日)ubuntu 16.04 インストール(1)

ubuntu 16.04が4月21日にリリースされました。

14.04以来2年ぶりのLTS (Long Time Support)で、5年間のサポート期間があります。半年毎にアップデートするのは面倒なのでLTSを愛用していますが、ubuntuではセキュリティパッチは当たるものの基本的にソフトウェアのバージョンは上がらないので、14.04はそろそろ古くなってきました。

というわけで、16.04に乗り換えるべく、いろいろインストールして試してみます。その過程を日記として残します。

Ubuntu 16.04 (Xenial Xerus)から、 ubuntu-16.04-desktop-amd64-iso をダウンロードします。自分が落としたときはリリース直後だったのでtorrentを使いました。もう数日すると「日本語remix」バージョンも公開されるとは思いますが、待ちきれずに本家を入れました。

VMwareで作業しました。新規仮想マシン→標準→後でOSをインストール。仮想マシンの種類はLinux Ubuntu 64bit。ディスクはデフォルトの20Gじゃ少ないので256Gに増やしました。仮想マシンの設定でisoをマウントし起動。
  • 「日本語」を選ぶ。
  • 「Ubuntuをインストール」を選ぶ。
  • 「Ubuntuのインストール中にアップデートをダウンロードする」、「グラフィックス、Wi-Fi機器、Flash、MP3やその他のメディアに必要なサードパーティーソフトウェアをインストールする」をチェック
  • 「安全のため新しいUbuntuのインストールを暗号化する」、「新しいUbuntuのインストールにLVMを使用する」はチェックしない。
  • 「Tokyo」を選ぶ。
  • キーボードは「日本語」「日本語」
  • 「ログイン時にパスワードを要求する」を選ぶ。
インストールは全く問題なく終了しました。

初めてubuntuを使うとメニューから端末を出せずにびっくりするかもしれませんが、左上の渦巻きみたいなアイコンから「terminal」を検索して出します。右クリックして「Launcherへ登録」するといいでしょう。

2015/06/24(水)INTLAB version 9をubuntu上のoctaveで使う

INTLAB version 9の重要性の記事で書いたように、INTLAB version 9を使えばmatlabに頼らずにオープンソースな環境で精度保証付き数値計算を行うことができます。今回、ubuntu 14.04にoctaveをインストールし、その上でINTLABを動かしてみたので、その様子を記録しておきます。

INTLABは、http://www.ti3.tu-harburg.de/rump/intlab/で、50ユーロで購入できます。有償なのが残念ですが、PayPal経由で支払いを済ませると一時間だけ有効なダウンロードリンクがメールで送られてきます。ダウンロードしたファイルは完全にソースコードを見ることができます。また、Linux/Mac/Windows用、あるいはmatlab用/octave用といった区別はなく、すべてこのファイルでOKです。

octaveのインストールは、ubuntu 14.04で、
sudo apt-get install octave
sudo apt-get install octave-doc
sudo apt-get install octave-htmldoc
sudo apt-get install liboctave-dev
のように行いました。特に最後のliboctave-devが必要なことに注意してください。また、ubuntu 14.04でBLASを使うの記事のようにATLASやopenblasを導入すれば、octaveから使われるBLASがそれに置き換わります。openblasを入れることをお勧めします。

ダウンロードした INTLAB.zip を任意のdirectoryに展開します。例えば ~/Intlab_V9/ としましょう。まず、octaveを起動し、必要ならば cd Intlab_V9 などとしてINTLAB directoryに移動し、
startintlab
と実行します。これは、そこのdirectoryにある startintlab.m を実行しています。うまく行けば、これだけでintlabが使える状態になる筈です。初回起動時は、裏で
  • Intlab_V9/setround/octave/setround.mex
  • Intlab_V9/INTLAB_Data_Intlab_Version_9_x86_64-pc-linux-gnu3_8_1.mat
の2つのファイルが作られました。1つめは丸めの向きを変えるためのファイルで、2つめは数学関数の誤差を調査し記録しておくためのファイルです。1つめのファイルを作成するために、先に入れた liboctave-dev が必要になります。C++コンパイラもインストールされている必要があると思います。2つめのファイルは内部にdirectory情報を含んでいるらしく、intlab一式の場所を移してしまうと動かなくなります。その場合はそのファイルを削除して再度 startintlab を実行すれば大丈夫です。

実際に区間演算をしてみます。T先生からの挑戦状で計算した例題です。
octave:1> format long
octave:2> x=intval(1);
octave:3> y=intval(1);
octave:4> for i=2:10; z=(1+2*y)/(x*y^2); x=y; y=z; i, z, end
i =  2
intval z = 
   3.00000000000000
i =  3
intval z = 
   0.77777777777777
i =  4
intval z = 
   1.40816326530612
i =  5
intval z = 
   2.47448015122873
i =  6
intval z = 
   0.68995395922102
i =  7
intval z = 
   2.0203934747424_
i =  8
intval z = 
   1.7898074714308_
i =  9
intval z = 
   0.7075878600520_
i =  10
intval z = 
   2.69514211796___
octave:5> 
のように計算出来ました。最初の intvalaffari に変更すればaffine arithmeticで計算させることもできます。

また、行列積を計算させてみると、
octave:1> a=rand(5000);b=rand(5000);
octave:2> tic;a*b;toc
Elapsed time is 3.20024 seconds.
octave:3> tic;intval(a)*b;toc
Elapsed time is 8.66678 seconds.
くらいでした。core i7 4770Kですがvmwareを挟んでいるので生で使うと更に速いでしょう。

なお、octave起動時に毎回startintlabを実行させるのは面倒なので常時実行させるには、
  • /usr/share/octave/site/m/startup/octaverc
  • home directoryの.octaverc
  • current directoryの.octaverc
のいずれかのファイルに、
addpath('/intlabを入れたパス/Intlab_V9')
startintlab
と書いておけば良さそうです。

余談ですが、octave起動時に
octave --force-gui
とすると、

Screenshot.png


のような感じで起動します。変数一覧とか見られて便利そう。

openblasで丸め変更に問題はないかとか、検証する必要はあるかと思います。

自分はmatlab嫌いなものでINTLABの使い方はよく分かっていませんが、お楽しみ下さい。

2015/06/21(日)ubuntu 14.04でBLASを使う

ubuntu 14.04上でBLASをパッケージで入れて使ってみたのでメモを残しておきます。

BLASは、Basic Linear Algebra Subprogramsの略で、行列積などの基本的な行列計算のためのライブラリです。LAPACKなどの様々なプログラムから呼び出されます。行列計算は環境によって最適な書き方が違うので、行列計算の部分を差し替え可能なように分離しておきユーザが最適なBLASに差し替えて最高の性能を出す、ということを意図しています。

多くの環境で、デフォルトのBLASは単なるfor文で書かれたちっとも速くない「reference BLAS」と呼ばれるものになっています。自分の環境でも、reference BLASが入っていました。この場合例えばnumpyの行列計算は、全くCPU本来の性能を出せていません。

ubuntu 14.04では、atlasとopenblasという高速なBLASがパッケージで提供されています。今回は、それらをインストールしてnumpyの速度がどうなるか調べてみました。

インストールは次のように行いました。
sudo apt-get install libatlas-base-dev
sudo apt-get install libatlas-doc
sudo apt-get install libopenblas-base
sudo apt-get install libopenblas-dev
これで3種類のBLASがインストールされたことになりますが、これらは差し替えて使うことを意図しているのでshared libraryとして同一のファイル名になっています。Ubuntuでは、これらをsymbolic linkを張り直すことによって使い分ける仕組みがあります。
sudo update-alternatives --config libblas.so.3
と入力すると、
% sudo update-alternatives --config libblas.so.3
alternative libblas.so.3 (/usr/lib/libblas.so.3 を提供) には 3 個の選択肢があり>ます。

  選択肢    パス                                  優先度  状態
------------------------------------------------------------
* 0            /usr/lib/openblas-base/libblas.so.3      40        自動モード
  1            /usr/lib/atlas-base/atlas/libblas.so.3   35        手動モード
  2            /usr/lib/libblas/libblas.so.3            10        手動モード
  3            /usr/lib/openblas-base/libblas.so.3      40        手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください:
のように表示され、どのBLASを使うか選択することができます。単にインストールした場合はUbuntuが定めた優先度に従って選ばれるようで、openblasが選択された状態でした。

これを切り替えてnumpyで5000x5000の逆行列を計算させてみて、速度がどうなるか計測してみました。環境は、core i7 3770T で、VMwareを使ってメモリを4G、CPUコアを4個与えた状態で行いました。

まずreference BLASで。
% python
>>> from numpy import *
>>> from time import *
>>> a=random.rand(5000,5000); t=time(); a=linalg.inv(a); time()-t
241.60200095176697
このように241秒かかりました。

ATLASに切り替えてみました。
% python
>>> from numpy import *
>>> from time import *
>>> a=random.rand(5000,5000); t=time(); a=linalg.inv(a); time()-t
32.59469819068909
32秒に高速化されました。しかし、topでCPUを見ると100%となっており、どうやら一つのコアしか使っていないようです。

最後にopenblasです。
% python
>>> from numpy import *
>>> from time import *
>>> a=random.rand(5000,5000); t=time(); a=linalg.inv(a); time()-t
6.014795780181885
6秒まで高速化されました。topのCPU表示は400%となり、4コア使って計算しているようです。

もともとテキサス大学の後藤先生という方が開発したgotoblas(ごとうブラス)という高速で有名なパッケージがあったのですが、後藤先生がIntelに移られて開発が中止してしまい、それを有志が引き継いだのがopenblasです。後藤先生は現在はIntelの商用BLASであるMath Kernel Libraryの開発をされているようです。

最後に、ATLASに関して少し注釈を述べておきます。
ATLASはAutomatically Tuned Linear Algebra Softwareの略で、ライブラリのmake時にそのCPUのコア数やキャッシュサイズなどを調査し、それに最適化したライブラリを生成する仕組みです。すなわち、本来バイナリパッケージで入れるには適さないもので、ATLASの真の性能を引き出すには計算を行うCPUでライブラリをmakeし直す必要があります。
また、ATLASはLAPACKの一部を高速化したものを含んでいて、ATLASをインストールするとATLAS版LAPACKがインストールされます。
% sudo update-alternatives --config liblapack.so.3
alternative liblapack.so.3 (/usr/lib/liblapack.so.3 を提供) には 2 個の選択肢があります。

  選択肢    パス                                    優先度  状態
------------------------------------------------------------
* 0            /usr/lib/lapack/liblapack.so.3             10        自動モード
  1            /usr/lib/atlas-base/atlas/liblapack.so.3   5         手動モード
  2            /usr/lib/lapack/liblapack.so.3             10        手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 
しかし、このように優先度が低くなっており、デフォルトでは使われていません。これがUbuntuの(というかDebianの)開発チームの見解ということでしょうか。

2014/12/14(日)ubuntu on vmwareが起動しなくなった

日頃からubuntu 14.04をvmware上で使っています。

余り使っていないマシンで何気なくアップデートをかけたところ、起動しなくなってしまって真っ青。ログインは出来るのですが、背景だけになってしまいメニュー等が何も出ず、操作できない状態。

ctrl-alt-F1で裏から入るのは全く問題なし。sudo restart lightdmとかしてもダメ。/var/log以下で怪しいエラーを探したがよく分からない。リカバリーモード起動してパッケージの修復とか試してもダメ。

途方にくれて何気なくtwitterで検索したら、すぐに同じ症状発見!

Ubuntu 14.04.1 latest updates broke Unity session (Player 6.0.4)

ubuntuがupdateで誤ってNvidia Driverを入れてしまい、それで起動しなくなっている。
sudo apt-get purge nvidia*
でnvidia関連をばっさり消したら直った、とのこと。確かにこれで起動するようになった。

そのうち修正される気がするので、メインで使ってるマシンはしばらくアップデートは保留しておこう。

2014/07/27(日)ubuntu 14.04その後

ubuntu 14.04を使いながらいろいろ気づいた点など。

時計が10.04と同じじゃないと不安なので。
時刻と日付の設定→時計 で、時計の表示設定の「曜日」と「月日」をクリック。

bashのファイル名補完がccとc++に対してなぜか効かない(gccとかg++なら効く)。
/usr/share/bash-completion/completions/gcc
に、
complete -F _gcc cc c++
を加えた。この対処で正しいかどうかは謎。

terminalを複数開いているといつの間にかかな漢字変換が起動できなくなってしまう問題。
terminalは一つしか開かずにタブ切り替えしてれば問題は起きないことが分かった。むしろ慣れたらタブの方がいいや。

mpfr遊びするために、
sudo apt-get install libgmp-dev
sudo apt-get install libgmp10-doc
sudo apt-get install libmpfr-dev
sudo apt-get install libmpfr-doc
それぞれ5.1.3と3.1.2が入った。

sudoを使うと、
no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory
とか表示されるのは直らず。多分sambaを入れると起きる。実害はなさそう?なので放置。

こんなもんかなあ。実によく動いてくれている。
OK キャンセル 確認 その他