Skip to content

Instantly share code, notes, and snippets.

@richarddwang
Created June 26, 2021 02:28
Show Gist options
  • Save richarddwang/0352a3731256c8187bb5fb937e43d37a to your computer and use it in GitHub Desktop.
Save richarddwang/0352a3731256c8187bb5fb937e43d37a to your computer and use it in GitHub Desktop.

1. SSH鍵の作成

localuser@localhost ~ $ mkdir ~/.ssh
# mkdir: cannot create directory /home/localuser/.ssh: File exists (githubを設定したら既に作られたはず)

localuser@localhost ~ $ ls ~/.ssh
id_ed25519  id_ed25519.pub # 他のssh鍵があるかもしらない(github用鍵とか)

localuser@localhost ~ $ ssh-keygen -t rsa

Enter file in which to save the key (/home/localuser/.ssh/id_rsa): # 同directory下に同名の鍵ないか確認、あるなら別の名前を入力(/home/localuser/.ssh/別の名前)、ないならenterで確認。ここからは名前変えてないと仮定し、`id_rsa`でデモするので注意してください。

xxxx passphrase xxxx: # そのまま enter (passphraseを使わない)

作ったid_rsa.pub (public key) とid_rsa (private key) を、パソコン替えるなどの時でも見つかるように、ちゃんと保管してください。
 

2. アカウント作成

id_rsa.pub、"希望のユーザ名" を笹野さんに送る。さすれば笹野さんから"初期パスワード"が貰える。注意するのは以下の二点

  • id_rsa (private key) を送るのではない
  • ユーザ名は誰なのか区別できるようなのを選んでください(中国語の名前は姓がよくかぶるので、名前のローマ字でよいでしょう)

3. ログイン確認とパスワード変更

localuser@localhost ~ $ ssh -i ~/.ssh/id_rsa <username>@cr.fvcrc.i.nagoya-u.ac.jp
# そしてパスワードを入力

This is the Z Shell configuration function for new users ... # 2 (recommended by admin) を入力してenter, デフォルトのzsh設置を使う

username@fvcrc-gateway ~ % yppasswd
# そして指示に従ってパスワードを変更する

他のサーバに繋がってみる

username@fvcrc-gateway ~ % ssh fvcrc03
# 先ほど設定したパスワードを入力

username@fvcrc03 ~ % 
# CTRL + d でこの (gatewayから06に繋ぐ)ssh session からログアウト

username@fvcrc-gateway ~ %
# CTRL + d でこの (localからgatewayに繋ぐ) ssh sessionからログアウト

localuser@localhost ~ $ # localに戻った

4. 簡単にサーバに繋ぐための設定

毎回長いコマンドgatewayに入って、また別の入りたいサーバに繋ぐのはすごく面倒から、以下の設定で簡単に任意のサーバに繋ぐことができる。(註:研究室のネットワーク以外のところは、唯一 public address を有する fvcrc-gateway しか見えないので、一旦 fvcrc-gateway に繋がないと、他のサーバに繋げないことを、心に留めておくよいでしょう)

~/.ssh の下で config という名前のファイルを作成し、中には以下のように記述して保存する

Host lab-gateway
  HostName cr.fvcrc.i.nagoya-u.ac.jp
  User <username>
  IdentityFile ~/.ssh/id_rsa
  ForwardAgent yes

Host lab03 # ユーザが付ける任意区別しやすいサーバのニックネーム
  HostName fvcrc03
  User <username>
  ProxyCommand ssh -W %h:%p lab-gateway

# 以下はfvcrc03を定義するblockと同じの理屈で各サーバに名前を付ける
localuser@localhost ~ $ ssh lab03

username@fvcrc03 ~ % # 一つ短いコマンドで入れました🥳

説明: ssh する時は自動的に~/.ssh/configを探して読み込む、その中に最初のブロックではfvcrc-gateway(外部から見る名前はcr.fvcrc.i.nagoya-u.ac.jp)に繋ぐためのユーザ名とパスワードを事前に織り込んで、さらにlabe-gatewayというニックネームを付けて、中継器として設定した。他のブロックはfvcrc03を例で説明すると、ssh lab03を実行する時に、代わりにProxyCommandを実行する。そしてProxyCommandではlab-gatewayを中継して繋げようと記述した。
 

5. サーバ上で自分の Python 環境を構築する

system が使っている Python 環境は干渉され壊れないように、一般のユーザには package のインストールなどの権限を与えていない。皆はお互いに干渉しない自分の Python 環境作ってある。

まずは、Miniconda のダウンロードページにアクセスして、最新 Python version の Miniconda3 Linux 64-bit のダウンロードリンクを見つけてコピーする。

そして任意の研究室サーバに繋いで、Python 環境を構築する。(註:どのサーバも同じ /home にアクセスするので、どのサーバでするのも構わないし、一回築いたらどのサーバからでもこの Python 環境を利用できる)

username@fvcrc03 ~ % wget <コピーしたリンク>

username@fvcrc03 ~ % sh Miniconda3-latest-Linux-x86_64.sh # プログレスバーがフリーズすることはよくあるので、慌てずに待っていてあげよう

Do you wish the installer to initialize Anaconda3 by running conda init? # yes 入力してenter

username@fvcrc03 ~ % ls # 今いる directory の内容をプリント
miniconda3 ...

username@fvcrc03 ~ % conda # conda が正しくインストールされ、システムに見えるか検証

# (optional) conda: command not found の場合のみする
username@fvcrc03 ~ % export PATH="~/miniconda3/bin:$PATH" # 一時的にcondaのいる場所を教える

username@fvcrc03 ~ % conda init

これで system と独立の python 環境が整えた。しかし今にいる conda の base 環境もまた壊れたら厄介なので、普通はそれと別の環境を作って使う。

username@fvcrc03 ~ % conda create -n <新環境名> python=3.9 # 3.9を希望の python 環境に変えてください、miniconda の installer の Python version と関係ないです。

username@fvcrc03 ~ % conda activate <新環境名> # 毎回 terminal でサーバに繋ぐした後、このコマンドで希望の環境に入って、中の packages を利用する

username@fvcrc03 ~ % conda env list
base            /home/user/miniconda3
<新環境名>   *  /home/user/miniconda3/env/<新環境名>
# "*" は現在にいる環境を表記している

username@fvcrc03 ~ % python --version
Python 3.9.2 # 先ほど新環境を作成した時に希望した version

環境を起動した後、必ず使う package をインストールしてみよう。

username@fvcrc03 ~ % pip install jupyter

# Deep learning framwork (Pytorch/Jax) をインストールしよう、ここはPytorch でデモする
# !!! 必ずGPUのあるサーバでイストールしよう !!! 
username@fvcrc03 ~ % conda install pytorch cudatoolkit=11.1 -c pytorch -c nvidia # https://pytorch.org/get-started/locally/ にて、Stable/Linux/Conda/Python/CUDA <最新 version> を選らんで、コマンドをコピぺする

username@fvcrc03 ~ % python
>>> import torch
>>> torch.cuda.is_available()
True # もしもGPUのあるサーバで試しているのに、 RuntimeError: CUDA driver initialization failed, you might not have a CUDA gpu. が出たら、もう一つのチュートリアル「サーバ使用のtroubleshoot」の CUDA version の部分を見てみよう
# CTRL + d で Python session から出る

6. 研究室資源の利用仕方

二つの方式に一つ選ぶだけでいい

6.1 VSCode で遠距離開発 (おすすめ)

  1. VSCode を自分のパソコンでインストールして開く

  2. 左 Menu の Extensions をクリックして、Remote-SSH を検索してインストール。インストール完了後、指示どおりに Reload Window をクリックする。

  3. 左 Menu 新しく現れた Remote Explorer に入って、~/.ssh/config で設定したサーバのニックネームが見えるはず。サーバを右クリックして繋ぐ。

  4. 再び Extensions に入って、JupyterPythonVisual Studio IntelliCode をインストールする

  5. 左 Menu の Explores に入って、open directoryで自分の repository を開く

6.2 SSH tunnel 使って サーバ環境を使用している jupyter notebook を local で操作する

まずは Jupyter の設定です

username@fvcrc03 ~ % jupyter notebook --generate-config

username@fvcrc03 ~ % ipython
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password: 
Verify password: 
Out[3]: 'sha1:...' # これをコピーしておく

username@fvcrc03 ~ % vim ~/.jupyter/jupyter_notebook_config.py

以下のように記述する

c = get_config()
c.NotebookApp.ip='*' # 任意のipアドレスからアクセス可能( jupyter notebookのバージョンによっては'*'を'0.0.0.0' にする必要がある)
c.NotebookApp.password = 'sha1:...' # コピーしておいた文字列をペースト
c.NotebookApp.open_browser=False # ブラウザは自動で開かない
c.NotebookApp.port=9000 # サーバーのportを適当に設定しておく(要変更!!!)

そして ssh tunnel を使った ssh session で jupyter server を起動する

localuser@localhost ~ $ ssh -L 8888:localhost:8900 [email protected] -t ssh -L 8900:localhost:<さっき設定したport> fvcrc03 

username@fvcrc03 ~ % conda activate [環境名]

username@fvcrc01 ~ % jupyter notebook

註: 前も説明したように、サーバに繋ぐためには、fvcrc-gateway (外部名 cr.fvcrc.i.nagoya-u.ac.jp) で中継しなければならない。上のsshコマンドは、gatewayに繋ぐ同時に自分のパソコンの port 8888 を gateway の port 8900 にくっつけて、同コマンドの後半は gateway から fvcrc03 に繋ぐ同時に gate way の port 8900 を fvcrc03 の port 9000 とくっつける。こうすることで、local の port 8888 から fvcrc03 の port 9000 にアクセスすることができる。

terminal を閉ざさずに、パソコンのブラウザーで http://localhost:8888を開いたら、jupyter notebook の interface が見えるはず。
 

Credit

2018年所属の山田康輔さんと、2020年所属の塚越駿さんの資料に基づいて、2020年所属の王億祥 (Yi-Siang Wang) Twitter が個人の経験に併せて作成したチュートリアルです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment