Archive for the ‘環境構築’ Category

GPU稼働状況

水曜日, 7月 3rd, 2019

さくらGPUサーバ: [ ざっくり確認 ]

6月に入った辺りから利用希望者が出始めて、お試し的にやった学生や、実際に研究の一環として一度の実行に長時間(1回あたり1週間以上?)要するような利用まで出てきました。GPUの稼働率(GPUと内部メモリ)と、GPUの稼働率とをグラフ化するとこんな感じになりました。

横軸のメモリは、1単位あたり10分。10分刻みでvmstat, nvidia-smiで稼働状況を記録。
縦軸は、稼働率(100%上限)です。

GPUはTesla P100。青い線がGPU稼働率で、オレンジがGPUメモリの稼働率。

CPUは緑色で、E5-2623V3 (3.0GHz, 4C/8H)が16個搭載されてます。これがフル稼働で100%。

これを眺めると、2パターンの利用があって、
(1) 700手前までの前半は、GPU 50% (メモリ15%) ぐらいで稼働し続けていた。
(2) 後半は、CPUだけで70%強稼働し続けていた。
らしい。

(2)でGPU使われていないのが不思議なんですが、学生に確認する限りでは pip で tensorflow-gpu をインストールしたらしいし、実際 pip list で確認してもそうなってるらしい。ので、インストールの仕方によっては gpu 版入れてたつもりでも、GPU使わないことがあるらしい。あらまぁ。

さくら高火力(GPU)

木曜日, 6月 13th, 2019

5月末に設定してから、実際に使う人が少しずつ出始めました。現時点でのアカウント保持者は6名で、たまに稼働状況見る限りでは何かしら動いてます。ガンガン使ってください。

topコマンドでCPU稼働状況見る限りではほぼ800%。E5-2623V3なので、これが2つフル稼働。

top - 20:02:51 up 20 days,  6:57,  2 users,  load average: 6.63, 6.88, 7.12
Tasks: 238 total,   1 running, 237 sleeping,   0 stopped,   0 zombie
%Cpu(s): 47.4 us,  3.1 sy,  0.0 ni, 49.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 13190941+total, 72995144 free, 10503812 used, 48410460 buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used. 12002012+avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND    
13269 k198572   20   0   31.0g   9.4g 657772 S 805.6  7.5  37503:01 python     

ちなみにメモリは平均7〜8%。めっさ余ってるというか、そもそも実装されてる量が桁違いに多い、、。

(base) [tnal@localhost ~]$ free
              total        used        free      shared  buff/cache   available
Mem:      131909416    10476416    73023776      473208    48409224   120048048
Swap:       4194300           0     4194300

GPUは、nvidia-smiなんてコマンドで稼働状況確認できるらしい。おおよそ27%なので、まだまだ余裕あるっぽい。これはプログラムにも依存するでしょう。

(base) [tnal@localhost ~]$ nvidia-smi -l
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0     13269      C   python                                      2565MiB |
+-----------------------------------------------------------------------------+
Thu Jun 13 19:38:13 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67       Driver Version: 418.67       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P100-PCIE...  Off  | 00000000:02:00.0 Off |                    0 |
| N/A   47C    P0    50W / 250W |   2575MiB / 16280MiB |     27%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0     13269      C   python                                      2565MiB |
+-----------------------------------------------------------------------------+

上記のことを踏まえると、Tesla P100ぐらいのを使うならもっとそっちよりの実装を頑張って貰わないとあまり効果が期待できないということかしら。

Tesla P100 / CentOS7

金曜日, 5月 24th, 2019

さくらインターネットさんから一時的に高火力サーバ(Tesla P100)を借りています。諸々の事情があってなかなか試用希望学生がほとんどいないので、私の方で仮に環境構築してみました。というお話。

使ってみたい学生いたら當間まで連絡ください。ちなみに1,2台しか借りてませんので、集まり過ぎたらその時点で打ち切ります。


参考サイト
GPUを使えるようにする for tensorflow


GPU, OS, gcc, pythonの確認

[tnal@localhost ~]$ head /proc/cpuinfo | grep “model name”
model name : Intel(R) Xeon(R) CPU E5-2623 v3 @ 3.00GHz

[tnal@localhost ~]$ lspci | grep NVIDIA
02:00.0 3D controller: NVIDIA Corporation GP100GL [Tesla P100 PCIe 16GB] (rev a1)

[tnal@localhost ~]$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

[tnal@localhost ~]$ gcc –version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)

[tnal@localhost ~]$ python –version
Python 2.7.5

Pythonを3.xにしたいので、まずはそちらから。Anacondaで良いか。


Anacondaのインストール

[tnal@localhost ~]$ curl -O https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh
[tnal@localhost ~]$ sudo sh Anaconda3-2019.03-Linux-x86_64.sh
*ライセンス確認=> yes
*インストール先=> /anaconda3
*/anaconda3/bin をPATHに追加。

[tnal@localhost ~]$ which python
/anaconda3/bin/python
[tnal@localhost ~]$ python –version
Python 3.7.3

Anaconda3でインストールしたPythonが実行できることを確認。


CUDA Toolkitのインストール

参考1: NVIDIA CUDA Installation Guide for Linux
参考2: 専用サーバ:CUDA Toolkit/GPUカードドライバー導入手順

Download Installer for Linux CentOS 7 x86_64を参考に、以下の通り実行。さくらサーバの場合は、runfile (local) を選択するらしい。
[tnal@localhost ~]$ sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
[tnal@localhost ~]$ curl -O https://developer.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.168_418.67_linux.run
[tnal@localhost ~]$ chmod u+x cuda_10.1.168_418.67_linux.run
[tnal@localhost ~]$ sudo ./cuda_10.1.168_418.67_linux.run –toolkit –samples –samplespath=/usr/local/cuda-samples –no-opengl-libs
*ライセンス確認=> accept
*インストール対象(Driver, Toolkit, Samples, Demo Suite, Documentations)を選択して、Install。

環境変数の設定1。

/etc/profile.d/cuda.sh

export CUDA_HOME=”/usr/local/cuda”
export PATH=”$CUDA_HOME/bin:$PATH”
export LD_LIBRARY_PATH=”/usr/local/lib:$CUDA_HOME/lib64:$LD_LIBRARY_PATH”
export CPATH=”/usr/local/include:$CUDA_HOME/include:$CPATH”
export INCLUDE_PATH=”$CUDA_HOME/include”

環境変数の設定2。

/etc/profile.d/cuda.csh

setenv CUDA_HOME “/usr/local/cuda”
setenv PATH “$CUDA_HOME/bin:$PATH”
setenv LD_LIBRARY_PATH “/usr/local/lib:$CUDA_HOME/lib64:$LD_LIBRARY_PATH”
setenv CPATH “/usr/local/include:$CUDA_HOME/include:$CPATH”
setenv INCLUDE_PATH “$CUDA_HOME/include”

設定反映させるため、一度ログアウト&ログインし直し。
echo $HOME ぐらいで環境変数の反映確認。


GPUカード用ドライバーのインストール

NVIDIA Driver Downloadsから、Tesla P100, Linux 64-bitを選択。名前とか記入してダウンロード。

[tnal@localhost ~]$ chmod u+x NVIDIA-Linux-x86_64-418.67.run
[tnal@localhost ~]$ sudo ./NVIDIA-Linux-x86_64-418.67.run –no-opengl-files –no-libglx-indirect –dkms
*dkmsインストールされてないと怒られる。
*ぐぐる感じでは、dkmsはEPELに含まれているようだけど、EPSLはインストール済み。また、yumでインストールできると書いてる記事も見つかるが、古の話らしく、現時点ではrpm見つからず。個別にdkmsリポジトリからmakeするなりしてるケースも見つかるけど、今回は一先ず使わない(オプション削除)ことにしてインストール。

[tnal@localhost ~]$ sudo ./NVIDIA-Linux-x86_64-418.67.run –no-opengl-files –no-libglx-indirect
[tnal@localhost ~]$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Apr_24_19:10:27_PDT_2019
Cuda compilation tools, release 10.1, V10.1.168
*この時点でnvcc(NVIDIA Cuda compiler)が動いているっぽい。


cuDNNのインストール

NVIDIA cuDNNからcuDNNをダウンロード。メンバーシップ登録が必要。
「cuDNN Library for Linux」をダウンロード。
明らかにUbuntuのライブラリが充実してるので、そっち使ったほうが良い(楽)のでしょうね。

[tnal@localhost ~]$ tar xvfz cudnn-10.1-linux-x64-v7.6.0.64.tgz
[tnal@localhost ~]$ sudo mv cuda/include/cudnn.h /usr/local/cuda/include/
[tnal@localhost ~]$ sudo mv cuda/lib64/* /usr/local/cuda/lib64/


GPUの動作確認

[tnal@localhost ~]$ nvidia-smi 
Fri May 24 16:29:38 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67       Driver Version: 418.67       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P100-PCIE...  Off  | 00000000:02:00.0 Off |                    0 |
| N/A   32C    P0    28W / 250W |      0MiB / 16280MiB |      5%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

TensorFlow/Kerasのインストール

[tnal@localhost ~]$ sudo /anaconda3/bin/conda install tensorflow-gpu


比較用にGPUを使っていないTensorflow/Kerasもインストール

[tnal@localhost ~]$ conda init bash
(base) [tnal@localhost ~]$ conda create –name py37-no-gpu
(base) [tnal@localhost ~]$ conda activate py37-no-gpu
(py37-no-gpu) [tnal@localhost ~]$ conda info -e
# conda environments:
#
base /anaconda3
py37-no-gpu * /home/tnal/.conda/envs/py37-no-gpu

動作確認

MNISTのあれで、epochs=10までの設定で、model.fit()までに要する時間を計測してみました。

# GPUあり (Intel Xeon E5-2623 v3 3.00GHz, Tesla P100)
real 0m38.566s
user 1m4.615s
sys 0m9.587s

# GPU なし
real 0m46.104s
user 1m22.466s
sys 0m14.364s
 *ちゃんと動いてるようにみえるのだけど、変な出力も出てるので、何かインストールで不具合起きてるかも。

# 自分のPC (MacBook Pro 15, Late 2013)
482.48s user 484.70s system 662% cpu 2:26.06 total

流石に1分前後で終わるぐらいのものだとあまり差は出ていませんが、より現実的なものだとこの差が開いていくのでしょう。おまけでやった私の環境だとこのぐらいでも2分強かかってるのはご愛嬌というか、2013年のノートPCにも関わらずこのぐらいの性能で動いてるのは良いよな。だからまだ使い続けているのだけど。

インタプリタ設定 for PyCharm on macOS / Windows

木曜日, 6月 14th, 2018

先週の授業でPyCharmさせて、設定周りでかなり時間かかったのですが、環境構築自体はひとまず一度やれば基本的には良いので同じことやら無くて良いだろうなと思いつつ、実際には10人ぐらい?の学生が例題動かせず。

私が確認した範囲で多かったのは、「何故かインタプリタがPython2.7になっている」、「インタプリタ設定自体が消えている」。また、インタプリタ設定し直そうとすると「ターミナル上から起動してるインタプリタをフルパスで指定しようとしても、設定自体が通らない」。特に最後のやつはかなり悩んだんですが、結果的には「開いてるプロジェクトを閉じて、PyCharm本体のPreferencesからなら設定が通る」ことが判明。いや、確かにプロジェクト開いてる状態だと「そのプロジェクト上での設定」になるのは分かるけど、それならそれで設定通ってくれよ〜(この場合、また新規プロジェクト時にトラブル再発するわけだが)。

あと、2名?がWindows環境で頑張ってるんですが、このうち1名がAnaconda起動できず。具体的には、Anacondaのプロンプト起動しようとすると「activate.batが存在しない」となり、python自体が起動しない状態。ただし、実行ファイルがあるディレクトリに移動したら動く。赤嶺先生がいろいろ試した結果、「Anacondaインストール時に用意されるっぽい起動スクリプトは無視して、OSのシステム環境設定でpythonへのパスを通す」ことで動作するように。

なんだかんだで環境設定はやっぱり手間かかりますね。それ考えるとGoogle Colaboratoryは偉大だ。

アノテーションツール: brat(クイックスタート)

金曜日, 4月 6th, 2018

自然言語処理してる際のデータ構築にて、文章中の単語に「これは場所だ」とか目印をつける(=アノテーション)作業が発生することが多いですが、その際のツールのお話。

annotation tools ぐらいでググるとWhat are the best tools for manually annotating a text corpus with entities and relationships?みたいな一覧が出てきますね。他にも、代表どころでは GATE らしいですが、これは使いにくいからbrat使えよという話も見つかったので試してみました。以下、bratなお話。


[ brat rapid annoation tool ]

1. ソースファイルをダウンロード。

2. installtion instructionsに従ってインストール。インストール時に「CGIアプリ(≒webサービス)としてインストールするか、ローカル環境で使うか」でオプションが異なります。注意点としては、Python2にしか対応していない点。

3. 「python standalone.py」で起動。そこで出力されるURLにブラウザでアクセス。

4. tutorial を眺めながら使い方を学ぶ。
チュートリアルの途中で「アノテーションしてみよう」も出てきます。単語なりフレーズなり選択するとポップアップ表示が出て、そこからアノテーションできます。なお、そのページに注釈書かれてますが、「ログイン」してないとアノテーションできません。

5. ひとまず自分でテキスト用意して、そこにアノテーションしてみたいという場合には以下の手順が必要。
5-1. テキストファイルを data ディレクトリ以下に用意。拡張子はtxt。UTF-8しか確認してませんが日本語でもOKでした。
5-2. 同じディレクトリに、同じファイル名で、ann拡張子のファイルを用意。これがないとファイルを開けません。

ラベルの設定方法とか調べてませんが、チュートリアル進めれば出てくるんじゃないかな。

macOS Sierra 10.12.x -> High Sierra 10.13.3

金曜日, 3月 9th, 2018

新入生PCとなるべく同じ環境にするため、今のタイミングでOSアップグレード。前回の10.11 -> 10.12のときには手こずった記憶が強いのですが、今回は割とスムーズにいったか。brew更新時に同じような問題出ましたが、既に対策わかってるので同じようにやるだけで解決(したはず)。

ただ、学科で用意してるie-developers/ie tap周りでdeprecatedが出てるな。2018年度はどうする予定なんだろう。

Warning: Calling ‘depends_on :python’ is deprecated!
Use ‘depends_on “python@2″‘ instead.
/usr/local/Homebrew/Library/Taps/ie-developers/homebrew-ie/mercurial.rb:17:in `’
Please report this to the ie-developers/ie tap!


今日は電気電子の金子先生の最終講義でした。人それぞれ違うし、学生はまだ学生なのだから想定外の問題を抱え込んでしまうこともある。それを確認するためにも「2週連続で欠席したらまずは連絡を取るメソッド」を布教&実施してたのは、すごい。

プログラミング初学者向けのIDE

金曜日, 5月 12th, 2017

Thonny: Python IDE for beginnersなるものが。どんなものかはデモ動画見るのが早いでしょう。

No-hassle variables.
Simple debugger.
Step through expression evaluation.
Faithful representation of function calls.

あたりの組み合わせが凄くて、デバッグモードでstep-in実行すると「行単位じゃなくて、評価単位で実行」してくれるので理解しやすいし、関数呼び出すと「新しいサブウィンドウ開いて実行」したりしてくれてとても直感的です。

一方で、バージョン管理とか「その先」まではサポートしてないっぽい。そのあたりが「Python IDE for beginners」なのかも。一つの割り切り方としてありだな。

インストールもpipで楽ちん。

textlintで遊ぼう

木曜日, 5月 4th, 2017

Qiita:Team + Hubot + textlintで文章校正を自動で実行するという記事に触発されたので、textlintしてみよう。


事前準備

nvmのインストール。

textlintにはNode.jsが必要。それだけを準備しても良いのだけど、Node.jsを含む関連ライブラリのバージョン管理してくれる NVM (Node Version Manager を入れておくと便利っぽいので入れておきます。

cd
git clone https://github.com/creationix/nvm.git ~/.nvm
source ~/.nvm/nvm.sh

上記実行後、下記設定を ~/.zshrc に追加しておこう。

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm

Node.jsのインストール。

nvm install node

本題(textlint周り)

textlintとお試しルールのインストール。

デフォルトではtextlintでチェックするためのルールがないので、ここではtextlint-rule-preset-japanesetextlint-rule-preset-ja-technical-writingtextlint-spellcheck-tech-wordを入れてます。インストール時にtextlintバージョン周りのwarning出ても、気にしないのが吉かも。多分。4行目のtextlint-spellcheck-tech-wordはインストールでコケるのでコメントアウトしてます。あとtextlintを「-gオプション (global install)」付きでインストールしたのなら、ルールも同じようにインストールする必要があるらしい。

npm install textlint -g
npm install --save textlint-rule-preset-japanese -g
npm install --save textlint-rule-preset-ja-technical-writing -g
# npm install --save textlint-spellcheck-tech-word -g

インストールできたら、以下の設定を ~/.textlintrc に保存。

{
    "rules": {
        "spellcheck-tech-word": true,
        "preset-ja-technical-writing": true
    }
}

動作確認

適当なテキストファイルかMarkdownファイルを用意して、コマンドラインで以下のように実行。ちゃんと動くなら、~/.textlintrcでtrue設定したルールを適用した結果が出力されるはず。

textlint filename.txt


参考サイト


一応textlint自体は動くっぽいのだけど、ルールどうしよっかなー。

homebrew/pip3メモ2017

土曜日, 4月 22nd, 2017

学科(今年から知能情報コースか)のインストール大会で用意してもらってるinstall_homebrew.shがあるのですが、スクリプト眺めると冒頭で /opt/homebrew 作ってます。が、そっちにはインストールして無くて空のまま(多分消し忘れ)。去年の残骸と思われるコメントアウトされてる方では /opt/homebrew を指定してるのだけど、2017年度はデフォルトにしたらしい。デフォルトは/usr/local/binなのね。/opt/homebrew以下にインストールされなくて暫く悩んでました。

で、/usr/local 以下にあれこれインストールされまくるわけですが、過去の財産残った状態だと色んな所で問題起きまくり。一番多いのはパーミッションで、次点で古いアーキテクチャでコンパイルされてるライブラリか。後者はさっくり消したほうが早そうだけど、一先ず直接邪魔にならないなら放置しとこう(ぉぃ)。パーミッション問題の方は、単純に消すorパーミッション変更するだけでは駄目なケースがあって。あれこれ試した結果、/usr/local以下のowner設定するとうまくいってるように見えます。/usr/local 以下の ower を tnal:admin するのは老害的に微妙に気持ち悪くなるのですが、気持ちだけの問題とも言える。

ということで homebrew 周りはどうにかなりそうです。


もう一つの壁は、brew で入れた python3/pip3 の方。brew install 時にリンクでエラーになってた問題は ower変更で改善したのだけど、pip3の動作がまだ怪しい。具体的には、依存関係のあるモジュールを自動で入れてくれず、エラーになっちゃう。エラー見る限りではまだインストールされていないモジュールをimportしようとして失敗してるようにみえるのだけど、なぜインストール前にimportしようとしてるのかが謎。個別に関連モジュールをインストールすると、問題ないのだよな。

ということで、先に依存モジュールをインストールするとその先もインストールできるのだけど、これは何が悪いのだろう。ちょっとググる限りではそれらしい関連情報も見つからないのだよな。

ということで、一応場当たり的には使えてるけどちょっと面倒だな、という状態です。うーむ。

pyenv使うとまた別の問題が起きそうで試してないけど、逆にそっち使ったほうが良かったりするのかしら。

OSクリーンインストール失敗

金曜日, 4月 21st, 2017

Mac OS X 10.6ぐらい? ちゃんとは覚えてないですが、メインPCは相当古い時代(Mac OS X初代頃)からOSアップグレードを繰り返しています。一度だけクリーンインストールしたことがありますが、またもや古いライブラリが邪魔してるのか「初期状態からなら普通にインストールできるけど、こっちでは問題でまくり」という状況に直面することが多くなってきたので、時間見つけてクリーンインストールしようと。今日のお昼前から4時頃までかかってクリーンインストール+指定ディレクトリだけ復旧してたつもりなんですが、起動してみると「何も変わってないようにみえる」ぐらいには古いのが残りまくってました。

「/usr, /etc とかを初期化したい。/Applications, /Users, ネットワーク周りの設定は残したい」場合って、
 ・ホームディレクトリだけをTIme Machineから復旧。
 ・他は手動でやる。
ぐらいしか手段がないのかしら。

もう一回クリーンインストールするのはメゲてしまったので、取り敢えずhomebrew周りの問題を一つずつ解決してみることに。brew doctor/linkする度に問題でまくりで、さっきようやくghostscriptがインストールできました。楽するために入れてるはずなんだが。。