Bag of ML Words

ML = Machine Learning, Music Love, and Miscellaneous things in daily Livings

dockerの使い方

これも恥ずかしいけど、基本的なところから

 

イメージを作成する

Dockerfileのあるディレクトリで?

docker build -t [image name] [path to save image?]

 

ログインしないで、取得したイメージでコンテナを起動、則コマンドを実行する

docker run [image name] [command]

e.g. docker run my_image:latest echo "hello world"

 echo "hello world"がコマンド。

 

取得したイメージでコンテナを起動、bashシェルでログイン

docker run -i -t [image name] /bin/bash

 

zzshでログインするなら/bin/zsh

 

コンテナとホストの間でファイルのコピー

docker conainer ps でコンテナのID番号を調べて

docker cp {container ID}:{file path on container} {dir(file?} path on host}

docker cp {file path on host} {container ID}:{dir(file?) path on container} 

 

 

コンテナにホストのファイルシステムをマウント

 

Docker imageなどの管理系

 

作成したdocker imageをprivateなレジストリに置くためにタグをつける

docker tag {作ったdocker imageの名前} {docker-hostのドメイン}/{リポジトリ名}:{tag}

今のイメージが新しい名前で登録される。 

 

作ったイメージをレポジトリとかにpush

dockerpush {docker-hostのドメイン}/{リポジトリ名}:{tag} 

 

使っていない/止まっているコンテナ、イメージなどの整理

docker system prune

 

git(hub)の使い方 自分用メモ(随時修正)

恥ずかしい気もするけど間違えるよりはずっといい。

 

これもメモしていかないと・・・

 

レポジトリやブランチをもらってくる系の操作

 

レポジトリをコピー(clone)してくる

git clone <.git アドレス>

 

特定のブランチをコピー(clone)してくる

git clone -b <branch name> <.gitアドレス>

 

ローカルに新しいブランチを作る

現在のブランチのファイル内容そのままで名前だけ変わる

git branch <new branch name>

 

ローカルで指定のブランチに移る

git checkout <branch name>

 

ローカルの指定のブランチをremote/originに一致(pull)させる

git checkout <branch name>

git pull origin <branch name>

 

git pullは実際にはfetchしてmergeするのに似ている。

あえてfetch, mergeと分けたほうがいいこともある。

特に、upstreamなど、origin以外のリモートレポジトリを参照するとき。

 

あるレポジトリを参照するリモート ブランチに追加。upstreamという名前にする

git remote add upstream <repository .git to refer>

 

自分のmasterを、公式レポのmasterに追従するときとかに使える。(でも、ものとしては公式とは分離しておく、危ないから)

 

git checkout master # これはローカルのmaster

git fetch upstream master   # upstreamの最新masterをダウンロード

git merge upstream/master # upstreamのmasterブランチを、自分のローカルブランチに統合(merge)

 

リモートレポはいくらでも作れる。

 

消す系の操作

ローカルの特定ファイルの修正をなかったことにする

git checkout <file name>

 

ローカルのすべてのファイルの修正をなかったことにする

git checkout .

 

ローカルで特定のブランチを消す

git branch -D <branch name to be deleted>

 

HEADとかの操作系

ローカルで開発しているうちにmasterが進んでいたので、masterの先頭から延びたようにする

git checkout master

git pull origin master

git checkout <developing branch>

git rebase origin/master

 

 

Headとは、ツリーとは。。。

勉強して自分の理解を記録していく

 

rebaseしたらコンフリクトしたので修正してrebase続行

git add <fixed file>

git rebase --continue

 

 

git rebaseよくわからない!取りやめ!

git rebase --abort

 

git submoduleの自分用メモ書き

git submoduleはほかのレポジトリの「特定コミット」を自分の内部の構成要素にする仕組みで、大きいものを作るときや、各要素が複雑enoughな時に役立つっぽい。

 

基本コマンド

git submodule update --recursive

これでトラックするsubmoduleのコミット状況を更新かな?

 

 

git submodule foreach git pull origin master

foreachコマンドはその名の通り、同じ処理を繰り返し順番にやってくれる。

これでやれるのは各submoduleにおいてpull origin masterをするってこと

 

git pull origin [specific-commit identifier]

各submoduleのディレクトリにおりて、そこで上記の通常pullを行うと、そのsubmoduleについては特定のコミットを落としてくることができる。

zsh on Ubuntu on Windows Subsystem for Linux

WSLのデフォルトシェルはバッシュなんですけど、やっぱzsh使いたいよねぇとか、あとWSLならではの設定とかいろいろここ1か月苦労していたので、メモを残しておきましょう。

随時修正ってことで。

 

zshでしょ

まあ、これは普通にzsh入れればいいんですが、普通にやると、bash on windows起動 --> zsh起動になってうれしくない。

今の私の環境は、Ubuntuのアイコン(ショートカット)がデスクトップとアイコンバーにあって、それをクリックするとzshのターミナルが開く状態です。

 

どうやるか

普通に考えると.bashrcでまずzsh開くようにすればよい。

if [ -t 1 ]; then
exec zsh
fi

 

私の場合は、chshを使って/etc/passwdの中身を書き換えています。

参考:

Zsh on Ubuntu on Windows

 

zshを入れた後は、preztoとかauto-completionとかいれて、

あとはコンソールの見た目を手でいじります。時間入れたりとか。

参考:

prezto:  

GitHub - sorin-ionescu/prezto: The configuration framework for Zsh

auto-completion: 

GitHub - zsh-users/zsh-autosuggestions: Fish-like autosuggestions for zsh

fzf(超便利): 

GitHub - junegunn/fzf: A command-line fuzzy finder

zsh-syntax-hilighting(多分上記をインストールするとenableされてる): 

GitHub - zsh-users/zsh-syntax-highlighting: Fish shell like syntax highlighting for Zsh.

 

 

 

 

Dockerが動かない・・・?

結論から言うと、Ubuntu上でaptとかしてdocker入れても動きません。Windowsネイティブのdocker for windoesをインストール、常駐してもらったうえで、それと通信するような感じに使う必要があります

 

どうやってやるか(to be written)

 

SSHが毎回主導でサービス起動しないといけない

Ubuntu上でpython環境とかをpyenvで作っているので、windowsネイティブのエディタ(pycharmとかVS Codeとか)もそのpythonを参照してデバッグとかコンパイルしたいです。pycharmはそのための仕組みとしてremote interpreterがあるんですけど、そのためにはUbuntusshd サービスを起動していないといけません。

普通のUbuntuなら何も考えずにサービス起動しっぱなしなんですが、WSLだと普通にやると起動のたびにsshdサービスが止まります。のでめんどい。これを、windowsが起動した瞬間からsshが欲しい。

 

どうやってやるか(now working)

Lapack for Torch

ちょっとSVDが必要だったのでtorch.svdをしたら"LAPACKがないよ"と怒られました。

 

torchの線形代数ライブラリはLapackをラッパしているだけなので、そもそもコンパイル時にLapackがないとだめ。

 

ということでOpenBLASをインストールする。

 

git clone https://github.com/xianyi/OpenBLAS.git

cd OpenBLAS

make NO_AFFINITY=1 USE_OPENMP=1

sudo make install

 

これで/opt/OpenBLASにBLASが入ります。

 

あとはpathを通す。

export CMAKE_LIBRARY_PATH=/opt/OpenBLAS/include:/opt/OpenBLAS/lib:$CMAKE_LIBRARY_PATH 

 

このパスが正しく通っていればTorchの再コンパイルLapackが使えるようになっているはず。

 

Installing CUDA9 + CuDNN7 + Torch on CentOS 7 (Japanese post + English post)

このポストの目的

下記の自著記事を基にして、CUDA8 + CuDNN5.1はinstallした計算機があります。

今度はこのマシンのCUDA, CuDNNを更新します。

 

dr-kayai.hatenablog.com

 

Purpose of this post: 

update the CUDA (8 --> 9) and CuDNN (5 -->7) on CentOS 7. 

 

作業開始!

CUDA, CuDNNのダウンロード

まずはnvidiaの公式ページよりCUDAのrpm(network install)とCuDNNのtgzを確保します。

Download the .rpm file of CUDA9 (network install) and .tgz file of CuDNN7. 

 

CUDA Toolkit Download | NVIDIA Developer

NVIDIA cuDNN | NVIDIA Developer

 

CUDA、CuDNNのインストール

特に何も考えずにrpmインストールです。

Simplu install CUDA from RPM

sudo rpm --install cuda-repo-rhel7-9.0.176-1.x86_64.rpm

sudo yum clean expire-cache

sudo yum install cuda

環境変数をアップデートします。sourceを忘れずに。

Update the environmental variables. Do not forget source-ing!

export PATH="/usr/local/cuda-9.0/bin:$PATH"
# THIS IS OBSOLETE export PATH="/usr/local/cuda-8.0/bin:$PATH"


export LD_LIBRARY_PATH="/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH"

# THIS IS OBSOLETE export LD_LIBRARY_PATH="/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH" 

 CuDNNについては、.tgzファイルを解凍して、出来上がるcudaディレクトリの中身を/usr/local/cudaディレクトリにコピーするだけです。

Copy the contents of the CuDNN .tgz file to /usr/local/cuda. 

 sudo cp -a cuda/lib64/* /usr/local/cuda/lib64

sudo cp -a cuda/include/cudnn.h /usr/local/cuda/include

 

TorchのRe-install

事前情報を得ていたので、以下の環境変数を設定。

Set the following varaible. 

export TORCH_NVCC_FLAGS="-D__CUDA_NO_HALF_OPERATORS__"

 

Torchディレクトリからinstall. 躓いたら、./clean.shをしてからもう一度やってみましょう。

Install. If you failed, try ./clean.sh, then update all relevant packages and libraries. 

cd ~/torch

./install-deps

./update.sh

./clean.sh

export TORCH_NVCC_FLAGS="-D__CUDA_NO_HALF_OPERATORS__"

./install.sh

<<After successful installation, do luarocks for torch packages>>