NAL’s blog @ 琉球大学情報工学科 » 日記

### 硬い地盤の上には高く積み立てやすい

### 火曜日, 6月 11th, 2019

卵が先か鶏が先かみたいな話でもあるし、教え方学び方に正解があるわけでもないですが、分からなくなった時に例示は理解の試金石する（手を動かす）のは大きくて。

良く分からない数式が出てきた。
良く分からないコードが出てきた。
良く分からない定義が出てきた。
エトセトラエトセトラ。

何にでも小さな例から始めて、実際に手を動かしてみないと「腑に落ちる」というのは難しい。私も時間の都合でやっちゃうことありますが、「イメージとしてやってることを伝える」のは、あくまでもイメージであってそれ以上ではない。わかりやすそうに書いてる教科書は、取っ掛かりとしては一つの選択肢だけれども、そこで手を動かすことを省略してしまうと、ふわっとしたまますぐ消えてしまう。

先週来てた留学生は、たまたまかもしれませんが数学（偏微分、重積分、行列あたり）の知識はしっかりしてて、たかだか数回のレクチャーで機械学習入門ぐらいを理解（自分で説明できる）できました。別に見たケースだと、プログラミング全く触ったこと無いけれども数学しっかりしてきたある学生は、そこから「プログラミングを学ぶ力」がとても高くて、驚くほど速くレベルアップしてく様子を目の当たりにしたことがあります。

そういう意味で、何か具体的にやりたいことがある訳ではない学生へは数学英語に加えて論理的に読み書きする力という意味での国語をしっかりやろうと伝えてますが、目標がないままだと持続しないことも多くて。持続できる人はそれ自体がレアスキルという説もあるか。

面白そうな課題なり用意してみるけれども、それだけで終わってしまうと「そういうものだ」で理解が留まってしまうので、どしどし手を動かしてほしいのだよな。

（課題間の繋がりや、科目間の繋がりでもっと連携とって積み上がる形に設計しろよという話でもある）

Posted in 教育, 日記 | No Comments »

### インターンシップ4日目

### 金曜日, 6月 7th, 2019

今日は私が時間取れないということで丸々自習に充ててもらい、最後の時間に今週のサマリをプレゼンして貰いました。

[ 1日目 | 2日目 | 3日目 ]

やったところについては大凡咀嚼して貰えているようで、質問にも自分の言葉で返答してくれます。すごい（語彙数）

来週からは遠藤研でのインターンシップなので、楽しんできてください〜。

P.S.
やってる最中に気づきましたが、もう少しこっちの学生にタスク割り当ててあげた方が学習の機会提供の面で良かったと反省中。特に今回は高々1週間だったし、1ヶ月だか前には分かっていたので準備する時間は取れたんだよね。皆で何やるか話し合ってそれをサポートする形でやるとか、やりようはあったな。一方で、学生は学生でバイトで忙しい人がいるのも避けて通れない事実で、バランスが難しいのだよな。でも、こういう経験は提供してあげるのがベターなんでしょう。

Posted in NAL研議事録, 日記 | No Comments »

### インターンシップ3日目

### 木曜日, 6月 6th, 2019

PC環境周りでのトラブルがあって我慢してもらう部分がありましたが、過学習まで含めた一つのストーリーを触れるところまでやれました。具体的には、

・最小二乗法と勾配降下法の特徴。（これは動作比較まではしてない）
・線形回帰を最小二乗法で実装。
・データ例で動作確認。
・改めてコードを振り返り、これだけからはどんなモデルが裏側にあるか分からないことの確認。（だからアルゴリズム自体の勉強が必要だというお話）
・多項式拡張で線形回帰でも非線形関係を表現できること。
・一方でモデルの表現能力を向上しすぎると、データセットに過剰適応（過学習）したモデルになりがちなこと。
・データセットの質と量を改善できるならした方が良い。
・アルゴリズム側の一つの工夫として、パラメータへのペナルティ項を導入するという話。
・交差検証でモデルの平均的な精度をみるのも一つの手。

ぐらいの話。手を動かしてるのは数箇所ぐらいですが、PythonとNumpyの基本的な使い方ぐらいをワークショップ的にやれたので良し。ここまでが授業での内容。この後で2〜3時間ぐらいを自習として、Python Machine Learningを勉強してもらいました。

明日は私の方で授業する時間は取れないので自習メインにやってもらい、最後に今週のサマリとしてのプレゼンをして貰います。どんな話をしてくれるのかな〜。

昨日は1時間ぐらいしかやれてなかったので、今日は授業形式で1コマ（90分）と、3時間ぐらいの自習としてPython Machine Learning, 2nd Ed.をやって貰おうと。

そのための前準備として、モデルやコスト関数、最小二乗法、勾配降下法を例に機械学習が内部で何をやってるかをイメージするための素地を紹介。後はPython, Numpyの「よく使う記法」と、Scikit-learnのiris分類学習例をワークショップ的にやりました。この説明＋ワークショップで80分ぐらい。

偏微分も理解してるし、全体の流れを俯瞰した理解が早い。気になる点は質問するし、その質問はその前までに出てきた内容と結びつけて考えるようにしているのが良く分かる仕方になっている。

とはいえ色んな要素は絡んでいて、
そもそも自ら海外インターンシップを選択するぐらいには学ぶ意志が強いし、
マンツーマン授業なのでそもそも集中が強制される環境だし、
インターンシップでもあるので「他の授業」とかの要素がほぼないので1つのことに集中しやすい。

それでも並列度の低さによる集中のしやすさという点では、4学期制のメリットを強く感じるな。平均10科目ぐらいを並行して16週（≒1科目毎週1コマ）やるよりは、平均5科目を並行して8週（≒1科目毎週2コマ）やる方が学生は集中しやすいよね。

Posted in NAL研議事録, 日記 | No Comments »

### 留学生インターンシップ受け入れの始まり

### 火曜日, 6月 4th, 2019

具体的な日程が直前まで良く分からなかったとかありましたが、今日から始まりました。とはいっても、

・2限目（11時から1時間）：1週目のプログラム確認、機械学習概要（定義とか分類タスクの例とか）。
・3限目：ゼミ。学生ら全員による自己紹介＋研究紹介。
・4限目：お茶会。来たばかりだし、疲れてるだろうし、NAL研文化だし。
・5限目：総情センターでのセキュリティ講習の予定が数十分程の局地的豪雨＆雷落ちまくりだったため、延期。
・夕方：歓迎食事会。なんだけど、5限目がフリーになったため早めに晩ごはんとってたらしい。

という具合で、ま、スタートとしては良いかなぐらい。

Python知らないようですが、C, C++, Javaの経験あるようなので、数時間で基本的な文法だけ押さえれば、後はコード例見ながら必要に応じて調べるというやり方で十分なのかも。

お寿司に挑戦したかったものの、生魚と知らなかったようで蒸しエビ＆酢飯だけしか食べれなかったのは残念。挑戦してもらえたのは嬉しかったですが。

イギリス英語＆インド訛りで聞き取りづらい学生が多いらしい。それは私も留学時に感じたな。そもそもネイティブな人の方が少ないので、訛り英語で話す良い機会を活用しよう。こっちだって日本語訛りだしね。

Posted in NAL研議事録, 日記 | No Comments »

### 最低限の仕様

### 月曜日, 6月 3rd, 2019

デフォルトではBYODを想定しているということかもしれませんが、明日から始まるインターンシップ学生用に貸し出して貰えるPCのスペックが悪い意味で凄くて。

異常に時間かかるなと思ったらこのスペックだったのか。2015年のMacBook Air の方が快適なんですが、、 pic.twitter.com/2GplXZB4E7

— Naruaki TOMA 温泉旅行… (@naltoma) June 3, 2019

i3 で 4GB な環境だと、開発は難しいんじゃないかなぁ。。特に今回は機械学習希望しているし。とはいえ内容無関係に昨年だかに購入したやつを使いまわしているだけでもあるので、文書作成みたいな用途だけで済むタスクなら問題になりにくいのでしょう。とはいえ、工学部で情報系コースの中にいて、こういう仕様のPCを目の当たりにするとは思ってもいませんでした。

でもそれより前に購入した手持ちのMacBook Air（i5, 8GB, SSD）の方が快適ってのもなぁ。ま、どちらを使いたいかは学生に選んでもらおう。

ディープラーニングによる画像認識は万能ではなく、とんでもない落とし穴がある件。これは有名ですね。 pic.twitter.com/C2fWsXXwrp

— Shuuji Kajita (@s_kajita) June 3, 2019

今日の全体ゼミでも話題に取り上げましたが、機械学習は意味を理解している訳ではない（そもそも理解するってどういうことなのという話もあるけど）ので、想定外の誤り方をすることがあるという話。笑い男じゃないですが、意図的に誤認識させる研究もあったはず。

Posted in 日記, 複雑研 | No Comments »

### ケーブル配線経路確認の旅

### 水曜日, 5月 29th, 2019

工学部1号館のネットワーク、主にサーバ室から各フロアまで、もしくは321までの部分は、工学部1号館建築時に配線した時のまま（？）らしい。Wi-Fiの802.11ac Wave 2で2.34Gbpsぐらい出るらしいですが、そもそもそこに繋がってるケーブルが1Gbpsな所が多い（全部？）ので、端末更新したところで殆ど効果がないという状況。実際にはWave 1よりも少しの改善が見られるとは思うけども、軽微に留まる可能性が高い。

ということで、「基幹部分の配線し直すならおいくら？」見積もってみようと、業者さんとサーバ室から出発し、各階EPSに設置されてるフロアスイッチ、地創棟への経路（地下っぽい）、321室への経路（地下かー）、をあちこち探検して回る旅に。

321室は3階から直接配線できると良かったのだけど、防火扉の都合で屋根裏も無理らしい。防火扉の役割考えたらそれも当然か。ということで321室には今使っている遠回り経路を取らざるを得ないので、その分、手間かかって高くつくと。しくしく。

Posted in 日記 | No Comments »

### 留学生対応は来週火曜日から

### 火曜日, 5月 28th, 2019

具体的にどのタイミングで動き始めるのかが分からなかったのですが、昨晩届いてた情報によると、

・6/3(月): 夜に那覇着。
・6/4(火): 2限目から、学生を担当教員へつなぐ。後はこちらで。

という流れらしい。

どのぐらいのスキルが有るのか確認しながらじゃないとコンテンツ用意しにくいけども、来ないことにはどうしようもない部分もあるし。そもそもある程度知識あるなら、「機械学習やりたい」とか大雑把なリクエスト出さないだろうしな。

Posted in 日記 | No Comments »

### インターンシップ留学生（機械学習）向け準備

### 月曜日, 5月 27th, 2019

事前情報が「機械学習やりたい」だけで、事前にどのぐらいの知識があるのか全くわからない状況で準備してます。あれもこれも的外れにならないと良いのだけど、、。

大雑把な1週目のシラバスを準備。

Part 1は、データマイニング班の前半でやってる、モデルとか損失関数とか中身の話を軽くやりつつ、実際に実装までやれると良いなと。

Part 2は、Python Machine Learning, 2nd Ed.で自習して貰います。どこまで読めるかは謎ですが、動くコードがあるのは良いし。

ゼミにも参加してもらう予定。受け入れ中のサポート含めて、学生の皆さんは準備宜しく〜。

Posted in 日記 | No Comments »

### 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にも関わらずこのぐらいの性能で動いてるのは良いよな。だからまだ使い続けているのだけど。