久々に自作PC作りました
皆さんこんにちは
お元気ですか。私は元気です。
私、久々に自作PCを作成してみました。
目的
Kaggleやり始めてGPUマシンが欲しくなった。計算時間の短縮を図る。
結構ハイスペックにします。OSはUbuntu14.04 Serverです。
購入物品
マザーボード
なんでもいいっす
ASUSTeK Intel H97チップセット搭載マザーボード H97-PRO 【ATX】
- 出版社/メーカー: Asustek
- 発売日: 2014/05/17
- メディア: Personal Computers
- この商品を含むブログを見る
CPU
結構悩みましたが、暫く、そこまでCPUの爆発的向上はないと思い、適当に購入
i7-4790K(Devil's Canyon 4.00GHz) LGA1150
- 出版社/メーカー: インテル
- 発売日: 2014/06/26
- メディア: Personal Computers
- この商品を含むブログ (2件) を見る
Memory
32GB欲しいです。
シー・エフ・デー販売 Elixir デスクトップ用メモリ DDR3 W3U1600HQ-4G DDR3 PC3-12800 CL9 4GB x 2枚セット ヒートシンク付
- 出版社/メーカー: シー・エフ・デー販売
- メディア: Personal Computers
- クリック: 28回
- この商品を含むブログを見る
GPU
これはかなり悩みました。
GTX970は致命的な欠陥を抱えています。NDIVIA社は仕様として貫き通していますが、、
3.5G以上メモリを使うと急激に速度が低下するような設計になっているようで、何やら返品騒ぎとかになってるそうです。
僕はそこまでメモリを使うゲームとかしないので、GTX970を選択しました。
ASUSTek社製 NVIDIA GeForce GTX 970搭載グラフィックスカード(オーバークロック) STRIX-GTX970-DC2OC-4GD5
- 出版社/メーカー: Asustek
- 発売日: 2014/05/27
- メディア: Personal Computers
- この商品を含むブログを見る
電源
適当、そこまで電力食わないので、割りと安いのを
Corsair CP-9020059-JP (CX500M)
- 出版社/メーカー: CORSAIR
- メディア: Personal Computers
- この商品を含むブログを見る
ケース
少し、静音を気にしました。何分自室にあるものですから。。。
- 出版社/メーカー: Antec
- 発売日: 2011/11/19
- メディア: エレクトロニクス
- 購入: 1人 クリック: 2回
- この商品を含むブログを見る
SSD
256GBあれば、特に他に問題はないので適当に購入
Crucial Micron純正 M550 2.5インチ 内蔵SSD ( 256GB / SATA 6Gbps / 7mm / 9.5mmアダプタ付属 ) 国内正規品 CT256M550SSD1
- 出版社/メーカー: Crucial Technology
- メディア: Personal Computers
- この商品を含むブログ (5件) を見る
完成画像
感想
正確にベンチマークを行っていないのですが、
GPUは強かった。プランクトン(Kaggle)を学習させているのですが、CPUより凄く速いです。
Ubuntu14.04 ServerでCUDA 6.5.14の環境を整える
皆さんこんにちは
お元気ですか。私は元気です。
さて、今日はUbuntu 14.04 ServerでCUDAの環境を整えようと思います。
何やらapt-getを使う方法がweb上では沢山見受けられますが、今回はrunを使ってインストールしてみます。
環境
OS:Ubuntu 14.04 Server LTS
CPU:Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz
GPU:GeForce GTX 970
sudo apt-get install build-essential
Driverについては別のversionを利用したいので、extractを使ってDriver ,Tool kit,Sampleを分離します。
wget http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda_6.5.14_linux_64.run sudo a+x ./cuda_6.5.14_linux_64.run ./cuda_6.5.14_linux_64.run -extract=/home/user/ndivia_installers
nouveauに邪魔されておそらく動作しないと思います。インストールできたら幸せです。下手にやるとこんなメッセージも出ます。
Unable to load the kernel module 'nvidia.ko'. This happens most frequently when this kernel module was built against the wrong or improperly configured kernel sources, with a version of gcc that differs from the one used to build the target kernel, or if a driver such as rivafb, nvidiafb, or nouveau is present and prevents the NVIDIA kernel module from obtaining ownership of the NVIDIA graphics device(s), or no NVIDIA GPU installed in this system is supported by this NVIDIA Linux graphics driver release. Please see the log entries 'Kernel module load error' and 'Kernel messages' at the end of the file '/var/log/nvidia-installer.log' for more information.
ということでこのnouveauを無効化します。
nouveauの無効化
まずは、ファイルを編集します。
vim /etc/modprobe.d/blacklist-nouveau.conf
以下の文字を記載してください。
blacklist nouveau blacklist lbm-nouveau options nouveau modeset=0 alias nouveau off alias lbm-nouveau off
次にoptionを追加
echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
更新する
update-initramfs -u
reboot
Install
cd nvidia_installers
sudo ./cuda-linux64-rel-6.5.14-18749181.run
sudo ./cuda-samples-linux-6.5.14-18745345.run
sudo ./NVIDIA-Linux-x86_64-340.29.run
※ドライバが新しいものが必要な場合は公式から取得します。
NVIDIAドライバダウンロードのページから取得してください。
実行方法は同じです。
Sample
cd /usr/local/cuda/samples/1_Utilities/deviceQuery make ./deviceQuery
近況報告とKaggle
皆さんこんにちは
お元気ですか。私は元気です。
最近は修士論文も修了し、来年からの社会人生活を送るための準備してます。
引っ越しって大変ですね。
最近はKaggleと呼ばれるデータを扱うコンペティションを集めたサイトがあるのですが
このKaggleのいくつかのコンペに出場しています。
主に解読しているのは2つです。
torch7を使って記載しています。なんか扱いやすいのでこのライブラリを使っています。
正直、これらのコンペティション皆強くて面白いです。Forumの文章読んでいるだけでも参考になります。
過去の結果と上位の解析手法は公開されているので色々と勉強になります。皆さんもよければ、やってみましょう。
各コンペティションが終わったら、僕の解法ぐらい掲載しようかなと思います。
Torch7によるニューラルネットワークを使った機械学習
皆さんこんにちは
お元気ですか。私は元気です。
Torch7を使って具体的に、機械学習を実装してみようと思います。
Torch7におけるフレームワーク
基本的に以下に添って実装すれば問題ありません。
1.データセットを構築する
2.モデルを構築する
3.学習する
4.テストする
※コードはこちらを参考にさせて頂いてます。
nn/training.md at master · torch/nn · GitHub
実際の過程
データセット構築
データセットの入力と出力の構築は基本的にtorch.Tensorで行います。
dataset={}; function dataset:size() return 100 end for i=1,dataset:size() do local input = torch.randn(2); local output = torch.Tensor(1); if input[1]*input[2]>0 then output[1] = -1; else output[1] = 1 end dataset[i] = {input, output} end
①datasetテーブルを設定し、入力と出力を入れること
入力、出力共に、torch.Tensorで設定しますが、それぞれをテーブルに入れます。
それを以下の通り入力します。
dataset[i] = {input, output}
②labelもinputもtorch.Tensorで
local input = torch.randn(2); local output = torch.Tensor(1);
③function dataset:size() return 100 endを定義すること
後述するトレーニング内の関数で、この関数を呼び出しているので、なければ、動きません。
モデル構築
nnパッケージを使って実装します。
nn.Sequential()が層を作るように
nn.Linearの追加により層を増やすことができます。
よくある発火関数、Tanhを後で追加することで、ニューラルネットワークを構成することができます。
以下、入力層2,中間層50,出力層1のニューラルネットワークです。組み合わせ方によってConvolutional Neural NetworkやAutoEncoderを作ることができるそうです。
model = nn.Sequential(); model:add(nn.Linear(2,50)) model:add(nn.Tanh()) model:add(nn.Linear(50, 1)) model:add(nn.Tanh())
因みに内部の構成は以下のような感じになります。
nn.Sequential { [input -> (1) -> (2) -> (3) -> (4) -> output] (1): nn.Linear(2 -> 50) (2): nn.Tanh (3): nn.Linear(50 -> 1) (4): nn.Tanh }
学習する
誤差関数を指定し、学習を開始します。(以下のは2乗誤差)
trainerのメンバ変数(luaではなんと呼ぶのでしょうか?)にパラメータを与えることで学習回数や学習係数を設定することができます
criterion = nn.MSECriterion() trainer = nn.StochasticGradient(model, criterion) trainer.learningRate = 0.01 --学習係数 trainer.maxIteration = 100 --学習回数 trainer:train(dataset)
テストする
先程、学習したモデルでforwardを実行します。与え方はtorch.Tensorで与えます。
x = torch.Tensor(2) x[1] = 0.5; x[2] = 0.5; print(model:forward(x)) x[1] = 0.5; x[2] = -0.5; print(model:forward(x)) x[1] = -0.5; x[2] = 0.5; print(model:forward(x)) x[1] = -0.5; x[2] = -0.5; print(model:forward(x))
Source Code 全文
require 'torch' require 'nn' dataset={}; function dataset:size() return 100 end for i=1,dataset:size() do local input = torch.randn(2); local output = torch.Tensor(1); if input[1]*input[2]>0 then output[1] = -1; else output[1] = 1 end dataset[i] = {input, output} end model = nn.Sequential(); model:add(nn.Linear(2,50)) model:add(nn.Tanh()) model:add(nn.Linear(50, 1)) model:add(nn.Tanh()) criterion = nn.MSECriterion() trainer = nn.StochasticGradient(model, criterion) trainer.learningRate = 0.01 --学習係数 trainer.maxIteration = 100 --学習回数 trainer:train(dataset) x = torch.Tensor(2) x[1] = 0.5; x[2] = 0.5; print(model:forward(x)) x[1] = 0.5; x[2] = -0.5; print(model:forward(x)) x[1] = -0.5; x[2] = 0.5; print(model:forward(x)) x[1] = -0.5; x[2] = -0.5; print(model:forward(x))
Torch7 のインストール
皆さんこんにちは
お元気ですか。私は元気です。
Facebookが一部をオープンソースにしたとかで、最近話題のTorch7について記載してみた。
Install
公式ホームページ通りで基本は問題ありませんが一箇所だけ変更しておいたほうが良い箇所があります。
curl -sk https://raw.githubusercontent.com/torch/ezinstall/master/install-deps | bash git clone https://github.com/torch/distro.git ~/torch --recursive cd ~/torch; ./install.sh
私の時はhomebrewが仕事をしていました。
最初のは、依存パッケージのインストールを行い、次のスクリプトはLuaに関するスクリプトが走ります。
次にパスを記載します。パスについては公式とは別の方法を取る方が良いです。
起動時にprofileを読み込まないので、bash_profileに以下の文を記述します。
export PATH=~/torch/bin:$PATH; export LD_LIBRARY_PATH=~/torch/lib:$LD_LIBRARY_PATH;
そして読み込みでsourceを使います。
source ~/.bash_profile
インストール確認の為に一度実行してみましょう。以下の通りであれば問題ありません。
$th ______ __ | Torch7 /_ __/__ ________/ / | Scientific computing for Lua. / / / _ \/ __/ __/ _ \ | /_/ \___/_/ \__/_//_/ | https://github.com/torch | http://torch.ch
因みにgitで手に入れたtorchが邪魔であれば、以下のコマンドを実行してください。
rm -rf ~/torch
パッケージ管理
Pythonのpip,Rubyのgemのようにluaにもluarocksを用いて、パッケージ管理を行うことができます。
試しに公式でインストールしているimageを例にするとこんな感じでインストールすることができます。
luarocks install image
インストールされているパッケージを確認したい場合はlistを引くと、簡単に調べることができます。
luarocks list
起動してから以下のように記載し、特に問題がなければ大丈夫です。
th> require 'image' true
わからない時は
Cheatsheetのリンクが妙に充実しているのでこれ見れば大抵のことはわかります。
Cheatsheet · torch/torch7 Wiki · GitHub