TSUBAME3.0備忘録

#本記事の概要
まっっっっっったくと言っていいほどPCの知識がない学生が，TSUBAME3.0と格闘した記録．
もし似たような境遇の学生がいたら，参考にしてくれることを祈って更新していきたい．
**なお，最も参考にすべきは[公式の使い方ガイド](https://www.t3.gsic.titech.ac.jp/manuals)や[利用の手引き](https://helpdesk.t3.gsic.titech.ac.jp/manuals/handbook.ja/pdf/handbook.ja.pdf)です．**


#基本的な使い方（2021/09/15）
##SSHの設定

自分のPCのホームディレクトリ直下に`.ssh`ディレクトリがあることを確認．なければ作る．（`~/.ssh`という位置になるように．）

その後，`ssh-keygen`コマンドでrsa形式の鍵を作成する．

```bash:keygen
#rsa形式で"tsubame_rsa"という名前を指定して鍵のペアを作る
ssh-keygen -t rsa -f tsubame_rsa
```

パスワードは好きなようにつけておk．なくても可（エンター連打してるとパスなしになる）．
これで鍵ができた．`.ssh`ディレクトリ内に`tsubame_rsa`と`tsubame_rsa.pub`があることを確認．

tsubameポータルを開き，「SSH公開鍵の登録」からファイルの中身のコピペまたはファイルアップロードによって公開鍵（`.pub`がついてる方）を登録する．

これで繋げるようにはもうなっているが，もっとラクにsshする方法が以下．

1. `.ssh`内部に`config`ファイル（拡張子なし）を作る
1. `config`内を次のように書き換える

```bash:config
Host tsubame                #ログインに使うショートカット．任意でいいが，長くしすぎずわかりやすいものが吉
    Hostname login.t3.gsic.titech.ac.jp
    User 01B34567      #学籍番号
    TCPKeepAlive yes
    ServerAliveInterval 120
    ServerAliveCountMax 30
    ForwardX11 yes          #Xquarzを使いたい場合は書く．ローカル側にもインストールが必要で，まだだとエラーが出るので，この行は基本なくていいかも．
    IdentityFile ~/.ssh/tsubame_rsa     #秘密鍵の絶対パス
```


以上の操作により，たった10文字程度でsshログインが可能に！
ログインコマンドは以下．

```bash:ssh
ssh tsubame      #"tsubame"の部分は，configファイル中のHostで指定した文字列
```


##ジョブの投げかた
大きく2通りの方法がある．

###ログインノードからジョブを投げる
まずジョブスクリプトを書く必要がある．雛形はこんな感じ

* bash（`#!/bin/bash`）
* ジョブ名をGaussian_jobに指定（`#$ -N Gaussian_job`）
* h_nodeを1つ（`#$ -l h_node=1`）
* 1時間（`#$ -l h_rt=1:0:0`）
* Gaussianモジュールをロード（`module load gaussian16/B01`）
* Gaussianでfilename.comを実行（`g16 filename.com`）

のスクリプト例

```batch:batch
#!/bin/bash
#$ -cwd
#$ -N Gaussian_job
#$ -l h_node=1
#$ -l h_rt=1:0:0
#$ -V

. /etc/profile.d/modules.sh
module load gaussian16/B01

g16 filename.com

```

このスクリプトのファイル名を"sample.sh"として保存したあとは，以下のワンライナーでお手軽にジョブが投げられる．

sample_groupグループから（`-g sample_group`）実行する例

```bash:qsub
qsub -g sample_group sample.sh
```

###計算ノードに入って直接コマンドで実行する

* sample_groupグループから（`-g sample_group`）,
* q_coreを1つ（`-l q_core=1`），
* 10分間（`-l h_rt=0:10:0`）

で計算ノードを利用する場合のコマンド例

```bash:qrsh
qrsh -g sample_group -l q_core=1 -l h_rt=0:10:0
```
これで計算ノードに入った後は，ローカルマシンと同じように動かしていける

##投げたジョブのあれこれ
**・投げたジョブの状態を確認**
以下のコマンドでジョブの状態を確認できる．

```bash:qstat
qstat
```

何も表示されない場合は，ジョブが終了している．カレントディレクトリに標準出力である`(指定したジョブ名).o(ジョブID)`ファイルと，標準エラー出力である`(指定したジョブ名).o(ジョブID)`ファイルができている．

**・投げたジョブを削除**
上記の`qstat`で消したいジョブのIDを確認したあと，以下のコマンドで消せる．

```bash:qdel
qdel 消したいジョブのID
```

**・終了したジョブの終了理由を確認**

```bash:qacct
qacct -j 確認したいジョブのID
```
詳しくは[ここ](https://www.t3.gsic.titech.ac.jp/node/139)を参照．

##基本のモジュールのロードの仕方
coming soon

##ファイルのやり取り

scpを使うのが楽そう．
sshでログイン用のショートカットコマンドを設定しているのなら，以下のように送受信可能．
ちなみに操作はローカルのターミナルでやるよ

**ローカルマシン→リモート**

* configで`tsubame`というのを登録してあり`ssh tsubame`とすればログインできるようにしてあり
* ローカルマシンのカレントディレクトリにある`test.py`を
* リモートマシンのホームディレクトリに移動したい
場合のワンライナーが以下．

```bash:scp1
scp test.py tsubame:~/
```

**リモートマシン→ローカル**

* configで`tsubame`というのを登録してあり`ssh tsubame`とすればログインできるようにしてあり
* リモートマシンの`~/hoge/fuga/`以下にある`bar.py`を
* ローカルマシンのカレントディレクトリに移動したい
場合のワンライナーが以下．

```bash:scp2
scp tsubame:~/hoge/fuga/bar.py ./
```

#以下，さらに必要になった情報を追記していく部分
## Anacondaを使う（2021/09/15）
[このサイト](https://reiven-c-t.github.io/Programming/ubuntu-anaconda-only-commandline.html)を参考にしたのでこっちを読むことをお勧めするが，本記事は自分用の備忘録として書き留めておく．本記事のURLだと2021.5バージョンが入ることになる．

以下のコマンドを打ち込んでいき，インストールが完了したら一度TSUBAMEからログアウトし，再度入ればConda環境の出来上がり．

```bash:anaconda
mkdir anaconda-install
cd anaconda-install
curl -O https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
chmod +x Anaconda3-2021.05-Linux-x86_64.sh
./Anaconda3-2021.05-Linux-x86_64.sh
```

###Anacondaの基礎コマンド
* **conda環境の一覧を表示**
`conda info -e`

* **作成済みのconda環境に入る**
`source activate 環境名`または`conda activate 環境名`

* **現在の環境に入っているライブラリの確認**
確認したい環境中で`conda list`，または任意の環境中で`conda list -n 環境名`
特定のライブラリを検索したい場合は`conda list　ライブラリ名（部分一致でも可）`

* **新しいライブラリのインストール**
まずは`conda search ライブラリ名`でAnaconda上に対応するライブラリのバージョンがあるか確認．
現在入っているpythonとの互換性があるバージョンを確認し，`conda install ライブラリ名=バージョン`でインストール

* **作成した環境の削除**
`conda remove -n myenv --all`で`myenv`環境を削除できる．

###qsubするときに自前のConda環境のパッケージを利用して欲しい
投げるスクリプトに以下のように書き足せばおk

`my_env`環境で`sample.py`を実行したい場合，例えばこんな感じのスクリプト


```bash:script
#!/bin/bash
#$ -cwd
#$ -N Sample
#$ -l f_node=1
#$ -l h_rt=0:10:0
#$ -V


. /etc/profile.d/modules.sh
module load cuda/11.2.146 cudnn/8.1

source  ~/.bashrc　　　　　　　　　　　　　　##ここと　
conda activate my_env   ##ここでConda環境を立ち上げる
export PYTHONPATH="/hoge/fuga:$PYTHONPATH" ##ここは本サブセクションとは関係ないが，sample.py内でインポートしたいモジュールに自分で作ったものがある場合，ここでパスを通してやらないと死ぬ

python3 ./sample.py
```


###RDKitを入れたい（2021/09/15）
RDKitを入れた環境を作りたい．ていうかそのためにanaconda入れた．
というわけで環境の作り方の紹介．
python3.7でRDKitを入れた環境’myenv’を作るコマンドは以下．

```bash:make_env
conda create -n myenv python=3.7
conda activate myenv
conda install -c rdkit rdkit -y
```
###xgboostとやらの古いバージョンを入れたい（2021/09/16）
再現したいGithubコードの環境に合わせるべく，xgboost1.0.2とやらを入れてみようとなったのだが，python3.7.11環境下（上の手順で作ったもの）で`conda search xgboost`してみたら

```bash:search
(myenv) hogehoge@login0:~> conda search xgboost
Loading channels: done
# Name                       Version           Build  Channel             
xgboost                        1.3.3  py36h06a4308_0  pkgs/main           
xgboost                        1.3.3  py37h06a4308_0  pkgs/main           
xgboost                        1.3.3  py38h06a4308_0  pkgs/main           
xgboost                        1.3.3  py39h06a4308_0  pkgs/main  
```

あれっっ欲しいバージョンがないぞ．．．．．．．．

となってしまったので，ググった結果このコマンドで解決しました↓

```bash:installxgboost
conda install -c conda-forge py-xgboost=1.0.2
```

何が何だかわからないおまじないがついているけど，上手いことはいったっぽいので，ヨシ！

(2021/09/22 追記)
`-c`オプションはチャンネルを指定してインストールするためのものだそう．今回なら`conda-forge`チャンネルで用意されているパッケージを使ってインストールさせてもらっているようだ．ありがたや〜


###tensorflow-gpu2.5.0を入れたい（2021/09/21）
これは解決しているのかわからないので真似するのは非推奨．

普通に`conda install`でどうにかなるかと思いきや，目的のバージョンがなくてpipすることに．
実行したのは以下．tensorflow-gpuの2.5.0が欲しかっただけなのだが，誤ってtensorfloeの2.5.0を初手でインストールするアホさ加減．多分いらない工程．（何が違うのかよくわかってない顔）

```bash:install_tensorflow-gpu
pip install tensorflow==2.5.0
pip install tensorflow-gpu==2.5.0
```

これでうまく入ったんじゃないかなあ．結果は以下の通り

```bash:list
$ conda list tensorflow
# packages in environment at hoge
#
# Name                    Version                   Build  Channel
tensorflow                2.5.0                    pypi_0    pypi
tensorflow-estimator      2.5.0                    pypi_0    pypi
tensorflow-gpu            2.5.0                    pypi_0    pypi
```

まあうまくいったと思いたいですね．
anacondaで全部インストールできると思ってたのでpipのお世話になると思ってなかった．パスとかうまく通ってるんだろうか...