Do1e

Do1e

github
email

CITE Lab サーバー使用ガイド

この文は Mix Space によって xLog に同期更新されています
最適なブラウジング体験を得るために、元のリンクを訪れることをお勧めします
https://www.do1e.cn/posts/citelab/server-help


接続とログイン#

ssh 接続または vscode で remote-ssh プラグインをダウンロードしてください。詳細は自分で検索してください。

::: banner {error}
2024 年 8 月 11 日以降、すべてのサーバーはパスワードログインができなくなります。新しいアカウントを割り当てる際には、公開鍵を提供してください。
:::

鍵ペアを作成します:

ssh-keygen -t rsa -b 8192

Linux/Mac ではデフォルトで ~/.ssh/id_rsa (秘密鍵)、~/.ssh/id_rsa.pub (公開鍵) に保存されます。
Windows ではデフォルトで C:\Users\[username]\.ssh フォルダーに保存され、名前は同じです。
公開鍵は公開可能で、サーバーの ~/.ssh/authorized_keys ファイルに保存されます。各行は異なる PC の秘密鍵に対応する公開鍵です。

::: banner {error}
秘密鍵は漏洩しないように保存してください。すべての PC で同じ鍵を使用することは強くお勧めしません!
:::

自分のコンピュータで ~/.ssh/config を次のように設定できます。これにより、ssh s1 コマンドでサーバーに直接接続でき、便利です。

Host s1
  HostName s1.xxx.cn
  Port 22
  User xxx
  IdentityFile xxx/id_rsa

詳細なチュートリアルは:VSCode で SSH 接続してリモートサーバーに接続する方法をご覧ください。

ターミナルが $ 記号のみの解決方法#

以下のコマンドを使用して、デフォルトのターミナルを bash または他の使いやすいターミナルに変更し、パスワードを入力します(Linux ではパスワードを入力しても表示されず、反応がないのは正常です。入力後は Enter を押してください)。その後、ターミナルを再起動するか、再接続してください。

chsh -s /usr/bin/bash

環境設定#

conda#

特別な要件がない場合は、直接 conda を使用できます。conda: command not found と表示された場合は、以下のコマンドを実行してからターミナルを再起動してください。

/opt/anaconda3/bin/conda init

そして、~/.condarc ファイルを以下のように編集します(南大のミラーソースを使用すると速く、自分のホームパスに環境を保存できます)
注:すべてのユーザーに対して設定済みで、~/.condarc を個別に設定する必要はありませんが、pip config set global.index-url https://mirror.nju.edu.cn/pypi/web/simple を使用して pypi ソースも南大ソースに置き換える必要があります。

環境は ~/.conda ディレクトリに保存されるため、サーバーを切り替える際は、ディレクトリ全体をコピーするだけで環境移行が完了します。再設定は不要です。また、~/.condarc を以下のように編集し、envs_dirspkgs_dirs/nasdata/[name]/.conda/[envs/pkgs] に変更することで、nas 上に環境を設定し、1 つの環境を複数のサービスで使用できます。

show_channel_urls: true
default_channels:
  - https://mirror.nju.edu.cn/anaconda/pkgs/main
  - https://mirror.nju.edu.cn/anaconda/pkgs/r
  - https://mirror.nju.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirror.nju.edu.cn/anaconda/cloud
  msys2: https://mirror.nju.edu.cn/anaconda/cloud
  bioconda: https://mirror.nju.edu.cn/anaconda/cloud
  menpo: https://mirror.nju.edu.cn/anaconda/cloud
  pytorch: https://mirror.nju.edu.cn/anaconda/cloud
  simpleitk: https://mirror.nju.edu.cn/anaconda/cloud
auto_activate_base: false
envs_dirs:
  - ~/.conda/envs
pkgs_dirs:
  - ~/.conda/pkgs

環境設定後に conda clean —allrm -rf ~/.cache/pip を実行すると、多くの不要な conda キャッシュを削除でき、スペース不足の問題を軽減できます。

docker#

システムソフトウェアが要件を満たさない場合は、docker を使用できます。具体的なチュートリアルは自分で検索して学んでください。ただし、すべての docker コンテナは通常ユーザーとして起動する必要があります。そうしないと削除されます(2-6 行は必ず保持し、他は状況に応じてカスタマイズしてください)。

docker container run --name pytorch-dpj \
  --gpus all \
  --user $(id -u ${USER}):$(id -g ${USER}) \
  -v /etc/passwd:/etc/passwd:ro \
  -v /etc/group:/etc/group:ro \
  -v /etc/shadow:/etc/shadow:ro \
  -v /data1/peijie:/data/:rw \
  -v /home/peijie:/home/peijie:rw \
  -it fenghaox/pyt1.3cu10.1:v2 /bin/bash

ホームスペース不足の問題を軽減する#

  • conda clean --all :conda キャッシュを削除
  • rm -rf ~/.cache/pip :pip キャッシュを削除
  • rmoldvs :古い vscode-server を削除(vscode のターミナルで使用する必要があります)

GPU 使用状況の確認#

https://nvtop.nju.do1e.cn/
または nvtop コマンド

2024 年 12 月 29 日以降、実験室の機密を保護するために、https://nvtop.nju.do1e.cn/ は IP ホワイトリストユーザーのみアクセス可能です。あなたの学号を刁培杰に送信すると、テーブルを共有してもらえます。そこにあなたの IP を記入してください。5 分ごとに更新されます。

指定した GPU の使用#

並列処理を有効にしない場合、pytorch はデフォルトで 0 号 GPU を使用します。並列処理を有効にすると、すべての GPU を使用します。
コードを実行する前に CUDA_VISIBLE_DEVICES 環境変数を設定して使用する GPU を指定します。並列処理を使用しない場合は 1 号を使用します:

export CUDA_VISIBLE_DEVICES=1

または並列処理で 0-3 号を使用します:

export CUDA_VISIBLE_DEVICES=0,1,2,3

自分で多 GPU 並列処理の方法 DataParallel(実装は比較的簡単ですが、最初の GPU で追加のメモリオーバーヘッドがあり、メモリ利用率は高くありません)と DistributedDataParallel(実装は比較的複雑でデバッグも難しいですが、効率は高いです。コードが固定された後にこの方法に変更することをお勧めします)を学んでみてください。

nvtop で GPU の使用状況を確認できます。使用中の人と調整してください。

ネットワーク接続の問題#

プロキシが設定されています。ネットワーク接続の問題(github など)がある場合は、必要なコマンドの前に proxychains を追加してください。例えば:

proxychains curl https://www.baidu.com

p.nju.edu.cn にログインする必要がある場合は、このプロジェクトを参考にしてください:

バックグラウンドでコードを実行#

サーバーには tmux がインストールされており、バックグラウンドでコードを実行する(ターミナルを退出しても実行を続ける)には、基本的な機能を使用するだけで済みます。

ターミナルで tmux new と入力すると、新しいターミナルが表示され、そこで長時間実行するコマンドを実行します。その後、ctrl+B を押し、次に D を押すと、退出できます。この時点でコードはバックグラウンドで実行され続けます。
または、tmux new -s <name> を使用して新しいターミナルの名前を指定できます。デフォルトは 0 から始まる数字です。

tmux ls でバックグラウンドで実行中のターミナル名を確認できます。
tmux attach -t <name> でそのターミナルに戻って実行状況を確認できます。

tmux ターミナルで ctrl+B を押し、次に [ を押すと、上下キーでページをめくることができ、q を押すとページめくりモードを終了します。

データ!!!#

データ保存場所#

::: warning
ホームディレクトリのスペースが小さいため、データファイルはホームディレクトリに置かないでください。/data1 に置いてください。
:::

あまり使用しないファイルは /nasdata に置くことができます。詳細は以下の NAS 説明セクションを参照してください。

データバックアップ#

::: warning
公共サーバーでは、自分でデータの安全を確保する必要があります。
:::

サーバーには rclone がインストールされており、便利で定期的なバックアップ方法(サーバーから重要なファイルを NJUBox に同期)を提供します:

rclone config

n → カスタム設定名(例えば njubox)→ 56 (seafile) → https://box.nju.edu.cn → 学号 → パスワード(最初に y を入力し、その後パスワードを 2 回入力)→ 2fa(そのまま Enter)→ データベース名(そのまま Enter で全ての未暗号化データベース)→ 他は指示に従ってください。

rclone の一般的な使用方法#

リモートファイルの確認#

rclone ls [設定名]:/[ディレクトリ]

image

同期#

初回実行時はすべてのファイル(ソースアドレス)をリモート(ターゲットアドレス)にコピーします。
その後は変更されたファイルと新しいファイルのみをコピーします。

::: warning
特に注意: 毎回実行後、ターゲットアドレスのファイルはソースアドレスと完全に一致します。ソースアドレスで削除した場合、同期を実行するとターゲットアドレスの対応するファイルも削除されます(rclone copy を使用するとターゲットアドレスのファイルは削除されません)。
:::

rclone sync -v [ソースディレクトリ] [設定名]:/[ターゲットディレクトリ]

image

定期的な同期#

上記の同期コマンドをコピーし、crontab を使用して定期タスクを設定します。具体的にはインターネットで検索して、多くの関連チュートリアルがあります。

NAS の説明#

群晖からアプリをダウンロード:企業网盘 | Synology Drive_私有云_随时存取数据_多人共享协作 | 群晖科技 Synology Inc.
または直接ウェブページにアクセス:https://nas.njucite.cn:5001

IP / ドメイン:nas.njucite.cn

アプリにログインすると Drive の home ディレクトリのみが表示されます。このディレクトリは自分だけが見えます。
ウェブログインでは share ディレクトリが見えます。このディレクトリは共有ディレクトリで、各サーバーにマウントされています /nasdata、サーバー間でデータを転送するために使用できます。一部のサーバー(s4 と s5)は NAS との間に万兆接続があり、残りは千兆です。

::: warning
/nasdata はすべての人が権限を持っているため、他の人による誤削除を防ぐために、重要なデータは rclone を使用して設定することをお勧めします。以下のrclone を使用してローカルと NAS ファイルを同期するを参照し、url を置き換えてください。
:::

ウェブページで 2 つのディレクトリ内のファイルを移動できます。

image

webdav マウントも使用できます。webdav アドレス:https://nas.njucite.cn:5006

接続速度をテストするために iperf3 を使用します:

iperf3 -c nas.njucite.cn

image

rclone を使用してローカルと NAS ファイルを同期する#

rclone config
e/n/d/r/c/s/q> n # 新しい設定を作成
name> nas # 設定名をnasに
Storage> 52 # WevDAV、rcloneのバージョンによって異なる場合があります
url> nas.njucite.cn:5006 # サーバー上では万兆ネットワークの10.0.0.100:5005を推奨
vendor> 7 # 他のサイト/サービスまたはソフトウェア、rcloneのバージョンによって異なる場合があります
user> abcd # NASユーザー名
y/g/n> y # パスワードを入力
password: ... # NASパスワードを2回入力
# 残りはそのままEnterを押してください

上記の手順でローカルコンピュータに設定を作成した後、以前に紹介した rclone copy または rclone sync コマンドを使用してファイルを同期できます(ローカルファイルを NAS にアップロードしたり、NAS ファイルをローカルにダウンロードしたりすることができます)。

::: warning
特に注意: 毎回実行後、ターゲットアドレスのファイルはソースアドレスと完全に一致します。ソースアドレスで削除した場合、同期を実行するとターゲットアドレスの対応するファイルも削除されます(rclone copy を使用するとターゲットアドレスのファイルは削除されません)。
:::

上級#

以前に入力したコマンドを自動的に補完する#

zsh をデフォルトのターミナルとして使用し、oh-my-zshpowerlevel10kzsh-autosuggestionszsh-syntax-highlighting を設定できます。

zsh+oh-my-zsh+powerlevel10k ターミナル設定_powerlevel10k 設定 - CSDN ブログ

または、私の設定を直接使用し、以下のファイルを解凍して自分のホームディレクトリに置くだけで済みます。
zshconfigs.tar.gz

GUI 関連#

特定のコマンドはディスプレイがないと表示されます。他に方法がない場合は、GUI を使用する必要がある場合は、以下の 2 つの方法を参考にしてください。最初の方法は自分のターミナルでコマンドを実行するのに適しており、2 番目の方法は MobaXterm 内で実行する必要があります。前者は追加の設定が必要で、後者はすぐに使用できます。

方法 1#

ローカルコンピュータにMobaXtermをインストールし、X サーバーを開きます。

image

マウスを上に置くと [IP]:[x11port] が表示されます。非ルーター NAT 下で(南大では一般的に非 NAT IP は 114 または 172 で始まり、ルーター NAT 下の IP は一般的に 192.168 または 10 で始まります)の IP とポートを選択し、サーバーターミナルで次のように入力します。

export DISPLAY=[IP]:[x11port]

その後、GUI に関連するコマンドを入力し、ローカルコンピュータにポップアップしたウィンドウで「はい」をクリックします。

image

方法 2#

直接 mobaxterm を使用して ssh 接続し、GUI 関連のコマンドを実行します。

表示進捗をコピー#

~/.bashrc または ~/.zshrc に以下を追加します:

function rcp() {
    local src=$1
    local dst=$2
    if [[ ! -e "$dst" ]]; then
        dst_dir=$(dirname "$dst")
        dst_base=$(basename "$dst")
        rsync -a --info=progress2 "$src" "$dst_dir/"
        mv "$dst_dir/$(basename "$src")" "$dst"
    else
        rsync -a --info=progress2 "$src" "$dst"
    fi
}

トレーニング終了 / 失敗後にメール通知を送信#

トレーニングスクリプトの後ろに以下の Python コードを追加するだけです。

sender = "noreply@do1e.cn"             # 送信者のメールアドレスを設定
sender_name = "s1"                     # 送信者の名前を設定、ここではサーバー名を定義
passwd = "xxxxxxx"                     # メールパスワード、QQメールの場合は認証コード
server = "smtphz.qiye.163.com"         # 送信者のメールサーバー、QQメールの場合はsmtp.qq.com
port = 465                             # 送信者のメールポート番号、一般的にはこれです
receiver = "pjdiao@smail.nju.edu.cn"   # 受信者のメールアドレス
receiver_name = "Peijie Diao"          # 受信者の名前
subject = "train on s3"                # メールの件名
message = "Training on s3 is finished" # メールの内容

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
import socks

# サーバーはログインしないとインターネットに接続できないため、ここでプロキシを設定します。自分の小猫ちゃんの局域網接続を許可することができます。
socks.set_default_proxy(socks.SOCKS5, "xxxx", 7891)
socks.wrapmodule(smtplib)

msg = MIMEText(message, 'plain', 'utf-8')
msg['From'] = formataddr((sender_name, sender))
msg['To'] = formataddr((receiver_name, receiver))
msg['Subject'] = subject

server = smtplib.SMTP_SSL(server, port)
server.login(sender, passwd)
server.sendmail(sender, [receiver], msg.as_string())
server.quit()
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。