今日はこんなことについて学びました

当面はLinux, Machine Learningです

週末に読んだKaggle DBS関連のリンク

CapsLock

f:id:wac2:20180406195651j:plain

f:id:wac2:20180406195659j:plain

f:id:wac2:20180406195656j:plain

CAPSLOCK IS SHIT

qiita.com

Kaggle DBS

Teaching notebook for total imaging newbies | Kaggle

Nuclei Overview to Submission | Kaggle

Step-By-Step Explanation of Scoring Metric | Kaggle

Keras U-Net starter - LB 0.277 | Kaggle

Tensorflow U-Net starter - LB 0.34 | Kaggle

  • pathlib

qiita.com

qiita.com

  • imageio

Welcome to imageio’s documentation! — imageio 2.3.0 documentation

  • distribution of intensity

いまさらきけない光学計算 第4回 点像分布関数の計算:光学総合サイト:サイバネット

-otsu's threshold

https://www.researchgate.net/post/what_is_the_basic_idea_of_otsus_method

3.3.9.7. Otsu thresholding — Scipy lecture notes

  • tqdm

https://torina.top/detail/119/

  • itertools

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

  • sys.stdout.flush

stackoverflow.com

www.programcreek.com

qiita.com

Pocket (reading later)

qiita.com

  • glob

www.sejuku.net

  • regular expressions

www.sejuku.net

www.sejuku.net

AWSの環境設定(スポットインスタンスで学習を回せるようになるまで)/Linuxのパッケージ管理について

AWSについて

■スポットインスタンスを使いたい

スポットインスタンスとは余剰なリソースを廉価版として提供してくれてるインスタンスで、要は超お得にインスタンスが使える方法のこと。

■スポットインスタンスの問題点

スポットインスタンスの価格がリアルタイムで変動し、自分の設定した上限価格を上回ってしまうとインスタンスが強制的に削除される。 また、インスタンスは停止することができないため、立ち上げたら立ち上げっぱなしにするかインスタンスを削除するしかない。

学習を回すたびにスポットインスタンスを立ち上げれば良いんじゃないの? と思ったが問題点がいくつかある。

前者はカスタムAMIを、後者はS3をマウントすれば解決しそう。

■AMIとは

AMIとは、スナップショットとインスタンスの管理情報が入っており、 これを使ってOS、CUDA、プログラミング環境などを設定した状態の新規インスタンスを作成できるようになるらしい。 スナップショットとは簡単に言うとルートボリュームからインスタンスの環境をそのままコピーしたもので、パソコンのバックアップみたいなもの。 AWSにはDeepLearning AMIというものがあり、それを選択してインスタンスを作成すればすぐにGPUで学習が回せるらしいが、なぜかスポットインスタンスを作成するときにはDeepLearning AMIが選択できない。 そこで、オンデマンドインスタンス(普通のインスタンス)でDeepLearning AMIを選択して起動し、カスタムAMIを作成して、それを元にスポットインスタンスを作成すればいけそう。

■S3のマウント

S3とのデータのやり取り自体はAWS CLIで簡単にできるが、システムファイルとしてマウントすればいちいちEC2インスタンス上に学習データをコピーしなくても済む。 ただ、その場合学習速度が下がるかもしれないので、試してみないとわからない。

S3のマウントにはgoofysを使えば良いらしいがインストールで問題が発生。 yumgolangを入れようと思ってもエラーを吐いて前に進まない。 っていうかyumってよく使わされるけどなんやねん。 ということでここからLinuxのお勉強に時間を当てた。

Linuxのパッケージ管理周辺の知識をインプット

■パスを通すってなんやねん

こちらの記事がわかりやすい。

qiita.com

要約すると、 環境変数:ローカル内でどこでも使える変数

コマンド検索パス:Shell(ターミナル)がコマンドを実行するとき、そのコマンドがどこにあるのかを示してる環境変数

$PATH:コマンド検索パスを保存してる

インストールでよくやらされる「パスを通す」とはこの$PATHにコマンド検索パスを追加して、コマンド入力を簡単にしてるということ。

環境変数exportで追加、unsetで削除、printenvでリストを表示できる。 $PATHはPATH=/Users/hoge/.rbenv/shims:/Users/hoge/.pyenv/bin:/Users/hoge/.phpbrew/php/php-5.6.23/binみたいにコロンで複数定義されている。 なのでインストールの手順でよく見るexport PATH="$PATH:/opt/local/bin"なんかは$PATHの最後尾に新たなコマンド検索パスを追加している。

yumってなんやねん

こちらの記事がわかりやすい。

eng-entrance.com

Ubuntu環境を整えてすぐにyumコマンドで何かをインストールしようとしてもyumが入っておらず、apt-getyumをインストールしても以下のようなエラーが出てくる。

There are no enabled repos.
 Run "yum repolist all" to see the repos you have.
 You can enable repos with yum-config-manager --enable <repo>

調べてみるとUbuntuではyumではなくてapt-getを使えとのこと。

ok, so my problem was that I tried to install the package with yum which is the primary tool for getting, installing, deleting, querying, and managing Red Hat Enterprise Linux RPM software packages from official Red Hat software repositories, as well as other third-party repositories.

But I'm using ubuntu and The usual way to install packages on the command line in Ubuntu is with apt-get. so the right command was:

sudo apt-get install libstdc++.i686

ただし、apt-getでは対応しておらずyum経由でしかインストールできないパッケージが存在するかもしれないので、レポジトリを追加する方法も一応調べておいた。

qiita.com

■apt-getじゃなくてたまにaptのときもあるのはなぜ

これも前から思ってた疑問。 apt-getは構造上欠点があるからこれからはaptを使っていこうぜとのこと。 apt-getはビットコイン、aptはイーサリアム的な。 詳しくは以下を参照。

intheweb.io

■PPAってなに

Personal Package Archiveの略で、これを使えばUbuntuの公式レポジトリからダウンロードできないパッケージをダウンロードできるようになるらしい。

PPAの便利なところは、一度、信頼するソフトウェアの提供元として追加すると、公式のレポジトリからダウンロードしたソフトウェアと同様にアップデートがあるかどうか自動でチェックし、一括アップデートできることです。ソフトウェアのインストールや削除も公式のソフトと同じように、Ubuntuのソフトウェアセンターから一元管理できます。

PPAの名前自体はUbuntu特有のものですが、他のディストリビューションでも、人気のFedoraにはFedora People Repos、OpenSUSEにはopenSUSEビルド・サービスが提供されています。

詳しくはこちらから。

allabout.co.jp

S3のバケットをEC2のインスタンス上にマウントする

Linuxでのパッケージ管理ついての知識を多少入れられたのでこちらを参考に再チャレンジしてみた。

qiita.com

コメントにもある通り、上記のサイトの手順通りgo getをするとエラーを吐くので、goをアップデートしないとダメだった。

あとはDeepLearning AMIからインスタンスを作成し、上記の手順でgoofysを入れ、AMIイメージを作成すれば、次回からカスタムAMIを利用してスポットインスタンスを立ち上げて、費用を抑えながら学習を回せそう。