Bag of ML Words

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

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

 

Pull Request

送るとき

 

rebaseをきれいに実施して、commit logをきれいにしておくといい

 

 

受けたとき

 

てもとで動作させるために、ローカルにリクエストを持ってくる

$ git checkout <pull request URL>

これでやってみて、動くようならいいし、動かないようなら修正してもらう

 

 

PRを間違ってmergeしてしまったとき

 

tweeeety.hateblo.jp

 

git submoduleの自分用メモ書き

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

 

基本の理解

 

  • submodule内のレポと本体のレポは別物
  • 本体としてはsubmoduleのコミット番号のみを記憶している
  • submoduleを直接修正pushしてらsubmoduleのレポだけが更新されるが、本体は何の更新も見えない
  • submodule更新してから、submoduleのディレクトリの外でgit submodule updateすると、本体レポの記憶しているコミット番号が更新される

 

これ良かったね 

Git submodule の基礎 - Qiita

 

基本コマンド

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をインストール、常駐してもらったうえで、それと通信するような感じに使う必要があります

 

どうやってやるか

 もうずいぶんまえのことで忘れてしまったけども。

qiita.com

に書いてあるようなやりかたでできます。

 

  1. まず、WSL上のUbuntuにapt-getでdockerを入れます。これはクライアント(?)になります。
  2. 次に、windows上でdockerアプリをインストールします。多分、これはPowerShellとかでそのまま使うことを想定している。

    docs.docker.com

  3. Docker for windowsが起動すると、タスクトレイに白いクジラさんが出てくるので、右クリックしてsetting --> General --> Expose daemon in tcp://localhost:2375 without TLSをonにする。
  4. ubuntuのdockerがこのポートと通信するように設定する。.bashrcや.zshrcに

export DOCKER_HOST='tcp://0.0.0.0:2375'

を書き足せばOK

 

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>>

OpenNMT-py "raise lengths array has to be sorted in decreasing order"

まだクローズしていないバグを踏んでちょっと時間をとられたので情報共有です*1

 

OpenNMT-py, 正確にはtorchtext-0.20の修正のせいで、いま、最新のOpenNMT-pyをgitダウンロードで使うと、train.pyやtranslate.pyが表題エラーの通りに死ぬ事象が起きています。

github.com

 

フィックスの方法としては、torchtextのバージョンを下げるのが一番簡単なのですが、今後pytorch, openNMTはtorchtext-0.20の方針でいくので、このworkaroundはあまりアレです。

 

10/30追記

下記の修正で訓練(train.py)は動くのですが、どうやらtranslate.py(翻訳側)はだめなようです。なので、現段階はtorchtext-0.1.1にダウングレードしてください・・・

 

 

 

で、私の修正方法ですが、

  1. torchtextをpythonシステムからアンインストール
  2. pipで改めて最新版のtorchtextをインストール
  3. 上記リンクの中ほど、@JianyuZhan さんがベタ書きしているパッチの内容を OpenNMT-py/onmt/IO.py, OpenNMT-py/train.py, OpenNMT-py/translate.pyにそれぞれ適用する

の3段階でした。

*1:NMTやっていて、しかもpytorchという奇特な方にしか役立ちませんが・・・