アイドルのちコンピューティング

都内の平凡な情報系の大学生が日々のアイドル活動、プログラミング活動について垂れ流します

2018年アイドル・エモい歌部門優勝曲決定

エモいという単語ご存知ですか?  

エモいとは"Emotion"を日本語の形容詞である"~い"に当てはめた造語である。

使用例として:

オタク1 「今日のライブどうだった?」
オタク2 「最高だったわ〜、特にENであの曲がかかった時エモさが頂点に達して泣いてしまったわ〜」
オタク1 「わかるわぁ、エモさの極みって感じだ。。。」

次はエモい曲とはどんなものがあるのでしょうか?  

代表例として まねきケチャのきみわずらいをここで紹介します。


【MV】まねきケチャ『きみわずらい』

"全部、全部、君のせいだ〜、この世界はまるで地獄だね〜" この1文にエモさが凝縮されていますね、はい。  

そして落ちサビでエモさが頂点に達する、完璧です。  

"全部、全部、君のせいだ、さあ責任取って僕の胸に堕ちてよ〜"で優勝です。

2018年アイドルエモい歌部門に突如として現れる1曲

そしてアイドル部門エモい歌部門に突如として現れた新曲こそが「ゼンキンセン」です


26時のマスカレイド-ゼンキンセン(Music Video)

聞きましたか?エモいですよね?  

まずこのMVの照明の暗さがエモさに磨きをかけています、はい。  

次に「漸近線」とは?  

細かい定義は省略しますが「限りなく近づくものの交わることはない」という意味で解釈します。  

漸近線を歌詞に当てるなんでエモくならないなんていうことがあるのでしょうか?(いや、ない)  

そして落ちサビのこの歌詞

君が本当の気持ちに気付いてくれる時まで
僕は想い伝えなきゃね
こんなに好きで好きで好きで好きで 胸が苦しいなら
僕は変わって進まなきゃね
「好きだよ。ねぇ、気付いてよ。ばか。
ずっと好きだよ。大好きだよ。」
今日は君にちゃんと伝えるんだ

"Will not we cross forever?"

帰り道 「少し遠回りしよう?」
いつもと違う場所で
君の知らない"僕"は
君に言うの

「ねぇ、」

はぁ、僕はエモさでおかしくなりそうです。   26時のマスカレイド最高です。これかもニジマスのイベントはコツコツと通っていこうかなぁと決心しました。笑(チョロヲタ)

ちなみに僕のお嫁さんの写真も貼っておきます(キモオタvo)

twitter.com

f:id:wasabin_idol:20180324205838j:plainf:id:wasabin_idol:20180324205842j:plain

chainermnを導入する話

今回はchainermnの環境構築の話をします。 まずchainermnの環境構築に必要な物は、CUDA・MPI等の環境・cuDNN・NCCL・chainer本体などが必要になります。
それらの導入について

CUDAの導入

今回自分の環境下ではCUDAはすでにインストールされているのでpathを通すだけで終了しました。 もしCUDAが導入されていない場合ではnvidiaのサイトで自分のマシンと同じ環境に対応しているCUDAをDLする必要があります。

CUDA Toolkit Archive | NVIDIA Developer

#bashrcにpathを通す
CUDAROOT=path-to-your-cuda
export PATH="$CUDAROOT/bin:$PATH"
export LD_LIBRARY_PATH="$CUDAROOT/lib64:$LD_LIBRARY_PATH"

MPIの導入

Open MPI: Open Source High Performance Computing このサイトからtarファイルを自分の環境下にDLするかgitから直接cloneするのかをしたところで

$ tar xvf openmpi-2.1.2.tar.gz
$ cd openmp-2.1.2/
$ ./configure --prefix=your-path-to-MPI --enable-mpi-thread-multiple --with-cuda=your-path-to-CUDA
$ make & make install

普通はこれでうまくいくはずでした。。。
しかし結果はというと
libtool: error: require no space between '-L' and '-lrt'
と表示され何がおかしいのかもわからずにお手上げと思ってgitで調べてみると
OpenMPI/2.1.1-GCC-6.4.0-2.28 build fails if ucx-devel is installed on system · Issue #5805 · easybuilders/easybuild-easyconfigs · GitHub
これがヒットしました。
どうもmakefileのバグらしくこのような状態になってしまった場合./configure hogehoge --without-ucxとするのが今現在(2018/3/6)最も楽な対処策らしい、 のでこれを入れて実行したところ、無事インストール終了したので後はprefixで指定したpathをbashrcに書き込んで終了です。

#bashrcにpathを通す
MPIROOT=path-to-your-mpi
export PATH="$MPIROOT/bin:$PATH"
export LD_LIBRARY_PATH="$MPIROOT/lib:$LD_LIBRARY_PATH"
export MANPATH="$MPIROOT/share/man"

最後に$ which mpiexec等を打って自分の指定したpathが通っているのかを確認するといいでしょう。

NCCLの導入

NCCL(ニックル)とよんでいますが正しいかどうかは知りません()、次はニックルをインストールします。

$ git clone https://github.com/NVIDIA/nccl
$ cd nccl
$make CUDA_HOME=your-cuda-path

cuDNNの導入

cuDNNをインストールするためにまずnvidiaのHPで色々登録をする必要があるらしいですけど、自分的にはそこまで面倒ではなかったです。 メールアドレスの認証ぐらいでした。体感5分ほどで終了しました。

https://developer.nvidia.com/rdp/cudnn-download ここから自分の環境(OSやcudaのver)にあっているtarファイルをDLした後

$ tar xvf cudnn-9.0-linux-x64-v7.1.tgz
$ mv cuda/ /your-cudnn-path
#bashrcにpathを通す
$ vi ~/.bashrc
$ CUDNNROOT=your-cuDNN-path
$ export $LD_LIBRARY_PATH="$CUDNNROOT/lib64:$LD_LIBRARY_PATH"

これでcuDNNの導入は終了したはず。。!!

mpi4py,cupy等の導入

pip install ~で導入する方法と、git cloneで導入する方法があるので両方紹介します

pip install cupy

pipでインストールするだけなので秒で終了します

pip install cupy

この1行で終了します、ただCUDAやMPIのライブラリの依存の関係でうまくいかない場合があるそうなのでそういう場合はgitから直接cloneする方をおすすめします。

git clone https://github.com/mpi4py/mpi4py

$ git clone https://github.com/mpi4py/mpi4py
$ cd mpi4py
$ python setup.py build
$ python setup.py install

あとがき ちなみに自分はcupyをpipでインストールしたところエラーが出てしまったのでgitで入れました。(gitで入れることにコストがそこまで大きくないかつわかりやすいのでこっちのほうがおすすめ)

chainermnの導入

こちらもpipで入れるかgitで直接cloneする方法とあるのですが自分が直接cloneしました。

$ git clone https://github.com/chainer/chainermn
$ cd chainermn
$ python setup.py build
$ python setup.py install

以上で一応インストールは終了です。最後にしっかりとインストールされているのかの確認のために

mpiexec -n 1 python examples/mnist/train_mnist.py --gpu

とかでGPUを動かしつつ学習が進むのか確認できるでしょう.

f:id:wasabin_idol:20180311022306p:plain

自分がつまづいた点

自分はcupyのインストール時に詰まってしまいました。 上に書いたとおりにインストールをしていざmnistを走らせるとcupyとcuDNNの部分でエラーが表示されてしましました。 cupyを再インストールしようとしてみると

Modules:
  cuda      : Yes (version 9000)
  cudnn     : No
      -> Cannot link libraries: ['cudnn']
      -> Check your LDFLAGS environment variables
  nccl      : Yes (version 1.x)
  cusolver  : Yes
  thrust    : Yes

と表示され、cupyをインストールする時にcuDNNのpathがうまく通っていないっぽい?ので export LIBRARY_PATH="$CUDNNROOT/lib64:$LIBRARY_PATH" をbashrcに追記するとうまくcupyがインストールされました(LIBRARY_PATHでcudnnを参照してcupyをインストールしている様なログだったためにbashrcにそれに対応できるようcudnnのpathを追加したところ成功)

うちの研究室にはchainerを使っている人が多くいるかつ自分がmpi等を使ったことがあるためtensorflowよりもコードが何をしているのかが見やすい感じがします() とりあえずもっと使って精進します!(笑)

多人数アイドルグループにおける「アンダー」とは

アイドル戦国時代の現代において活躍しているAKBや乃木坂、欅坂すべての大人数アイドルグループでCDのA面を歌ったり歌番組に出ているのはその大人数の中から選抜された「選抜組」にほかならない。

残った者はアンダー、研究生、総選挙ではネクストフィーチャーなど色々な名で呼ばれているがアイドルなら多くのものはこの「選抜」を目指している、はず。

私は乃木坂、欅坂を中心に追っているのでこの2つのアンダーについて個人的な(ここ重要)述べさせていただきます。 

乃木坂46においてのアンダーとは?

2017年乃木坂にとっては大活躍の年になっていたのは火を見るより明らかだったのではないでしょうか?(東京ドーム、レコード大賞、CD売上、全握のアホみたいな混雑具合)

その裏でアンダーというメンバーが選抜に入れないことなどで苦悩・壁にぶつかっていたでしょう(もちろん選抜メンの多くも悩み苦しんで活動しているのは言うまでもない)

そんな中発売されたこのアンダー曲がこれです。


乃木坂46『アンダー』Short Ver.

僕はこの「アンダー」という歌がとても嫌いです。

スポットライトが当たっていないだの私のことが見えなくてもだのすごく聞くだけでイライラします。

 

この歌を聞いて感動した()とかほざいてる人は「ただ単に乃木坂のアンダーが自身の状況を悲劇的に嘆いてる歌という事実だけで妄信的に感動できる人」でしょう。

ひめたんの卒業曲をこれにした秋元康は一体中元日芽香にどんな恨みがあったんでしょうか?

またアンダーを語る上で外せないのが「アンダーライブ」

ただ最近のアンダーライブは正直面白くないし行く気がしないというのが感想です、、、

いつからアンダーライブは自身らアンダーの不遇を嘆く場所になったのでしょうか?

アンダーライブを見に行く人は少なくとも「アンダー」メンバーの作る「アンダーライブ」を見に行きたくてチケットを取っているという事実を見落としてはいないでしょうか?

2015年のアンダラ武道館で井上小百合の言葉で「私達を見つけてくれてありがとう」がアンダラの全てを凝縮していると思います。

乃木坂46、歴代メンバー集結のアンダーライブ終幕 井上小百合「私たちのことを見つけてくれてありがとうございました!」 - Real Sound|リアルサウンド

乃木坂のアンダーセンターは次シングルには選抜入りするというジンクスがあったのですが最近の乃木坂では上が詰まっていたり3期が詰まっていたりでもはやぐちゃぐちゃです笑

人気だけ見れば久保山下与田は余裕で福神ですしね、アンダーセンターが入る枠どころか3列目を落として3期の枠を開けなければいけないレベルでしょう

 

少し話はずれましたが僕はこのアンダーという曲が嫌いだしそれを妄信的に評価するクソみたいなやつも嫌いです

そして最近のアンダーライブは自身の状況を悲劇的に嘆きすぎだと思います、少なくともアンダーライブにはアンダーの作るライブを見に行きたくて行っている人がいるということを思い出してもらいたいです。

 

欅坂46における「アンダー」とは?

みなさんがどう捉えているのかはわからないですが僕は欅坂のアンダーは「ひらがなけやき」だと考えています。(事前に言っておきますが私はひらがな推しです)

事実として冠番組の欅って、書けないには漢字メンバーのみが出演きているしひらがなが出れるのはSPか漢字ひらがなの対決か選抜発表の会くらいでとてもとても限られています。

ただ僕はひらがなが選抜に入れる空気が微塵も感じられないことが悔しくて悔しくてたまりません。ひらがなメンが出たいといくら願っても今現状ではほとんど出演できないけやかけ、歌番組などに出演できるという可能性をひらがなは妹グループだと言うのなら運営は明示すべきではないのでしょうか?

漢字メンが一切コメントもせず喋りもせずに座っているその椅子はひらがなのメンバーが座りたくても座れなかった椅子であるという事実を見逃してはいないでしょうか?(こういう怠けるやつがいるから全員選抜とかいうクソシステムは即刻廃止すべきだと思います)

乃木坂との比較になってしまいますが4,5thの時期の乃木どことけやかけ比較しても正直けやかけつまらなくないですか?

確かに面白くないのは漢字メンバのみの責任ではないとは思います、スタッフ澤部さん土田さんなどもあるとは思います。ただ「欅って、かけない」の主役である欅のメンバーに面白くさせようとする気力を感じるメンバーが少なすぎます。

言いたいことがまとまらないのでここでやめます笑

 

漢字メンは全員選抜で甘えすぎでありそのポジションに座りたかった人がいるという事実をもっと重く受け止めるべきであり、運営は即刻全員選抜()とかいうゴミシステムを廃止すべきという僕の個人的意見でした。

現場備忘録: 2017年総振り返り編

私が2017年に通った現場で記憶に特に残っているものだけをピックアップしてアップしたいと思います。

2月 乃木坂46 Birth Day Live in SSA

初日は橋本奈々未の卒コンで2,3日目はいつもどおりのバスラでしたね。
初日のチケットだけ取り逃したので2,3日目のみの参戦でした、最終日のWENのガールズルールは乃木坂史上一番コールの揃ったガルルだったのではないでしょうか?
f:id:wasabin_idol:20180101200905j:plain f:id:wasabin_idol:20180101200909j:plain

3月 ひらがなけやきワンマンin ZeppTokyo

ひらがなしか興味がなかったので4月の欅のバスラよりこっち優先でした() ひらがなの沼にハマるのはまだまだ先の話
でも正直この3月の時点では「加藤史帆がかわいいなぁ」くらいにしか思っていませんでした、まだ今ほどひらがなのために遠征したりするモチベはこの時点ではなかったです。。。 f:id:wasabin_idol:20180101201243j:plain

8月 欅坂46全国ツアーin幕張メッセ千秋楽

このライブでの「永遠の白線」を聞いた時に自分の中でビビっときてしまいました。なんというかひらがなの出すあの空気に飲まれてしまいました。漢字欅は苦手です。 なんかよくわからない路線を進んでいますがひらがなはしっかりとアイドル道を進んでいるのではないでしょうか?
これ以降はひらがな一筋になってしまいました笑f:id:wasabin_idol:20180101201802j:plain

11月 乃木坂46真夏の全国ツアーFinla in 東京ドーム!

真夏?「真冬の全国ツアー」でしょとオタクにボコボコ叩かれた開催時期、もはや全ツではなくクリライなのでは?とも思いましたが、、、
内容うーん正直微妙です、アンダーコーナーは2015年のアンダラ武道館のダブアンの時を思い出すほどの胸の高鳴りを覚えたのですがそれ以外はまあこんなものでしょうか? 正直今の乃木坂は忙しすぎてライブをしっかり練習してからこなすというような体力と時間は残っていないんだなぁとこの東京ドームでひしひしと感じさせられました。
対してアンダラで練習を積んだであろうアンダーコーナーは最高でした、生まれたままで・咄嗟・君僕の3連は正直涙なしには見れなかったです。望遠鏡越しにひめたんが君僕を笑顔で歌っている姿を見て号泣してしまいました。 f:id:wasabin_idol:20180101202557p:plain
アンダーについて書きたい事がたくさんあるのでまた別日に書きたいと思います(主に今のアンダーへの不満が多いです。。。) f:id:wasabin_idol:20180101202716j:plain

12月 イコラブ全握・個握

ここで新登場した=LOVE


【MVフル】僕らの制服クリスマス / =LOVE [公式]

実は10月くらいから動画で見て存在は知っていたのですが12月に全握があったので参戦してみたところ、、、、
沼にハマってしまいましたwwwwww いおりんかわいいよぉ〜!みりにゃかわいいよぉ〜!!瞳!!!瞳!!!!
私はいい感じに坂道下りが進んでいるのでそろそろ地下落ちするのではないでしょうか?ww

ここには書いてないですがひらがな大阪福岡や個握・全握なども色々参戦しましたが2017年で記憶に残ったのはこいつらでしょうか?
2018年はひらがなとイコラブを中心にしてオタクしていければいいなぁって思います。現場で会った方はよろしくお願いします!!

全列挙について

最近プログラムを作っている際に全列挙の問題に直面しました
(このブログでは主にPyhtonを使っていきます、宣言し忘れてたので、、、笑)

全列挙とは?

Input: 1,2,3,4  
Output: None,1,2,3,4,12,13,14,23,24,
              34,123,124,134,234,1234  

のように入力の要素全てを舐めるように見て組み合わせを出力するという作業です。 これをプログラム中で出力したいと考えた時にどのようにしたら良いでしょうか?

データが木構造を持っている場合

木構造とは下の図のようなやつです()
親が子を持つようなデータ構造ですね、はい
f:id:wasabin_idol:20171226003513p:plain
こういう場合は再帰を使って

def f():
    hoge...
    if ~
        f()
    else
    return ~~

のようにしてデータが一番下まで降りたら上に戻ってくるような再帰関数を書けば終わります。

データがリストだった場合は?

ここからが本題です、僕が悩んだ問題は以下のような問題です。

Input: list a = [1,2,3,4] 
Output: Answer = [[None],[1],[2],[3],[4],[12],[13],[14],[23],[24],
              [34],[123],[124],[134],[234],[1234]]

上のようにリストから全列挙したリストを返してほしい場合どうしたら良いでしょうか。。。。?
再帰関数を使ってでも書けそうなのですがここで一つ便利なパッケージであるitertoolsを紹介します。

itertoolsとは?

Pyhonの標準ライブラリです

10.1. itertools — 効率的なループ実行のためのイテレータ生成関数 — Python 3.6.3 ドキュメント

このライブラリではイテレーションを組む際に必要な作業を担ってくれる便利な物になっています笑。 itertoolsを使うことで順列・組み合わせ・直積を容易に生成してくれます。また順列・組み合わせ・直積などから上の全列挙・重複順列・重複組み合わせなども生成できます。

>>> a = [1,2,3]
>>> list(itertools.permutations(a))
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
>>> a = [1,2,3,4,5,6,7,8,9]
>>> list(itertools.combinations(a,2))
[(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (5, 6), (5, 7), (5, 8), (5, 9), (6, 7), (6, 8), (6, 9), (7, 8), (7, 9), (8, 9)]
>>> len(list(itertools.combinations(a,2)))
36

上を見るとpermutationsで順列が、combinationsでリストと何個取るのかを引数にしてそれに対応した組み合わせが確かに出力されています。
今回の全列挙は以下のようにすると即出力されます。

>>> a = [1,2,3]
>>> for i in range(len(a)+1):
...     for j in itertools.combinations(a,i):
...             print(j)
...
()
(1,)
(2,)
(3,)
(1, 2)
(1, 3)
(2, 3)
(1, 2, 3)

出力はタプルで出てくるのですが普通にキャストして上げれば問題はなさそうです。itertoolsを用いることでリストからfor文を作る作業が楽になりそうです?笑
(たぶん知ってる人にしたらこれは常識なんだろうなぁと思ってこのブログを書きました)

GTCJapanに行った話

GTCJapanに参加する機会があったので参加させていただきました。
(とは言っても学生はタダで入場できます) f:id:wasabin_idol:20171214110820j:plain

www.gputechconf.jp

目的もなしに参加してもしょうがないので事前に行きたいセッションだけ幾つかリストアップしておきます。
DAY-1;
TensorFlow:Open Source Machine Learning
ちなみにこれ寝坊して行けませんでした、、、(^o^)
Hot Tips on GPU Computing
DAY-2;
ディープラーニングによる高速かつ効率的なモデル構築のための最先端開発環境「PowerAI」

などでしょうか?2日目は基本はHPCブースにへばりついて適当な時間にポスター なども見に行ってみたいですね。。
1日目は大事な大事なひらがなけやき全国ツアーファイナル幕張公演初日があるので早めに退散したいと思います笑

感想

DAY-1;
Hot Tips on GPU Computing
GPUプログラミングにおける基本的な手法についての発表でした。
ざっとまとめるとn*nのマス目上にランダムで数値が入っており1マスの更新は周りの4マスの周りの平均値で更新を行う以下のような更新式で定義されています。

new_A[x+n*y] = 0.25 *(old_A[x+(n-1)*y] + old_A[x-1+n*y] + old_A[x+1+n*y] old_A[x+(n+1)*y])

並列計算を学ぶ人にとっては結構よく見る例題ですね、並列化も容易です。
この発表ではどのようにして実験結果を測定するか(ストロングスケーリング、ウィークスケーリング)、マルチスレッド?マルチプロセス?などの話から並列計算におけるボトルネックの話(通信コストや通信のオーバーラップなど)を1時間で結構わかりやすく発表していました。

Chainerで加速する深層学習とフレームワークの未来
すっごく混んでました、、、後ろの方で立ち見も出てすごかったです。
ただ有名な海野さんの話は結構おもしろかったです、ChainerとTensorflowやpyTorch,Caffe2などとの違いから長所やこれからのDeepについてなどの話をされていました。

DAY-2;
キーノート
2時間の話でしたがすごく面白かったです。一番記憶に残ったのは「More buy GPU, more save money」でしょうか?黒革ジャンが文句を言わずにとっととGPU積みまくれと言っているようにしか(ry
しかしNVIDIAは本当にすごいですね、近年のAIではGPUが必要不可欠な現状ですしね。ChainerMNの15分で学習をした話もGPUを積みまくったクラスターで学習をした結果だし自分の研究でもGPUは必要ですからね。
2日目については学生向けの内容と言うよりは結構企業の人たちが実際にどのようにしてGPU機械学習等の技術を活用させていくのかに重きが置かれているので正直退屈でした、、、

あとがき

こういうカンファレンスに初めて参加した感想としてすごくご飯が豪華でした。
f:id:wasabin_idol:20171214110719j:plainf:id:wasabin_idol:20171214110724j:plain f:id:wasabin_idol:20171214110752j:plain
これがタダで食べれるってすごいですね、会場では飲み物も配っていて自分の好きなように取っていって行く感じでした笑
全握会場もこれくらい至れり尽くせりだといいんですけどね()、混み具合は全握にも負けてないくらい混んでいたと思います笑さすがに合計人数はGTCが余裕で負けてますけどね。
人混みが苦手な自分としてはなかなかに厳しい環境でしたが結構面白い話も多かったので次回もこういう機会があれば参加したいですね(企業向けの話は興味が無いのでそういうのは行かなくていいかな?笑)

Tensorflow-gpuを導入しようとした際にlibcuda.soがないというエラーを吐かれた話

アイドルの話だけじゃなくてプログラミングについての話も投稿しましょう笑

ImportError: libcuda.so.1: cannot open shared object file: No such file or directory

サーバー上に

pip install tensorflow-gpu

でTensorflow-gpuを導入しようとした際に上記の様なエラーが出ました。 もちろんサーバー上にはCUDAもcuDNNも入っています。
エラー文を読む限りlibcuda.so.1っていうfileがないぞ!と怒っています。
こういう際にはインストールされているCUDAからlibcuda.soの入ってるpathを探してきてそれを環境変数として設定して上げる必要があるそうです。 ということで探しましょう、これは個人のマシンによってバラバラなのですが自分は

/hogehoge/cuda/8.0/lib/libcuda.so.1

のような形で入っていました。このpathさえ見つかれば後はこれを環境変数としてbashrcやbash_prtofileに書いて通してあげるだけです

export PATH=/hogehoge/cuda/8.0/bin:${PATH}
export LD_LIBRARY_PATH=/hogehoge/cuda/8.0/lib/${LD_LIBRARY_PATH}

ここまで書いたところ新しいエラーが...

RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6

Python3.6.1の環境でtensorflow-gpuを導入しようとするとこういうエラーを吐かれてしまうらしいです。 対処策としては今のところ下に書かれている中ではTensorflowのversionを1.4.0から1.3.0に落とすか、Pythonのversionを3.5に落とすか、エラー文を無視して動かすか、非公式のパッチを当てる?かの4択っぽいです。 このエラー自体吐かれていても一応動くらしいのですが自分は気持ち悪いので3.5にPythonをダウングレードさせて動かしました。
github.com

以上で無事サーバー上にTensorflow-gpuが入りました! f:id:wasabin_idol:20171210172748p:plain