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してしまったとき
git submoduleの自分用メモ書き
git submoduleはほかのレポジトリの「特定コミット」を自分の内部の構成要素にする仕組みで、大きいものを作るときや、各要素が複雑enoughな時に役立つっぽい。
基本の理解
- submodule内のレポと本体のレポは別物
- 本体としてはsubmoduleのコミット番号のみを記憶している
- submoduleを直接修正pushしてらsubmoduleのレポだけが更新されるが、本体は何の更新も見えない
- submodule更新してから、submoduleのディレクトリの外でgit submodule updateすると、本体レポの記憶しているコミット番号が更新される
これ良かったね
基本コマンド
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を入れた後は、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をインストール、常駐してもらったうえで、それと通信するような感じに使う必要があります
どうやってやるか
もうずいぶんまえのことで忘れてしまったけども。
に書いてあるようなやりかたでできます。
- まず、WSL上のUbuntuにapt-getでdockerを入れます。これはクライアント(?)になります。
- 次に、windows上でdockerアプリをインストールします。多分、これはPowerShellとかでそのまま使うことを想定している。
- Docker for windowsが起動すると、タスクトレイに白いクジラさんが出てくるので、右クリックしてsetting --> General --> Expose daemon in tcp://localhost:2375 without TLSをonにする。
- 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があるんですけど、そのためにはUbuntuがsshd サービスを起動していないといけません。
普通の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を更新します。
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が表題エラーの通りに死ぬ事象が起きています。
フィックスの方法としては、torchtextのバージョンを下げるのが一番簡単なのですが、今後pytorch, openNMTはtorchtext-0.20の方針でいくので、このworkaroundはあまりアレです。
10/30追記
下記の修正で訓練(train.py)は動くのですが、どうやらtranslate.py(翻訳側)はだめなようです。なので、現段階はtorchtext-0.1.1にダウングレードしてください・・・
で、私の修正方法ですが、
- torchtextをpythonシステムからアンインストール
- pipで改めて最新版のtorchtextをインストール
- 上記リンクの中ほど、@JianyuZhan さんがベタ書きしているパッチの内容を OpenNMT-py/onmt/IO.py, OpenNMT-py/train.py, OpenNMT-py/translate.pyにそれぞれ適用する
の3段階でした。
*1:NMTやっていて、しかもpytorchという奇特な方にしか役立ちませんが・・・