この文は 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_dirs
とpkgs_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 —all
と rm -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
home のスペース不足問題の緩和#
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 にログインする必要がある場合は、このプロジェクトを参考にしてください:
使用命令行登录南京大学校园网(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
home ディレクトリのスペースが小さいため、データファイルは home ディレクトリに置かないでください。/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 [設定名]:/[ディレクトリ]
同期#
初回実行時はすべてのファイル(ソースアドレス)をリモート(ターゲットアドレス)にコピーします。
その後は変更されたファイルと新しいファイルのみがコピーされます。
::: warning
特に注意: 毎回実行後、ターゲットアドレスのファイルはソースアドレスと完全に一致します。ソースアドレスを削除した後に同期を実行すると、ターゲットアドレスの対応するファイルも削除されます(rclone copy
を使用するとターゲットアドレスのファイルは削除されません)。
:::
rclone sync -v [ソースディレクトリ] [設定名]:/[ターゲットディレクトリ]
定期的な同期#
上記の同期コマンドをコピーし、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 つのディレクトリ内のファイルを移動することもできます。
また、webdav を使用してマウントすることもできます。webdav アドレス:https://nas.njucite.cn:5006
iperf3 を使用して接続速度をテストする:
iperf3 -c nas.njucite.cn
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-zsh
、powerlevel10k
、zsh-autosuggestions
、zsh-syntax-highlighting
を設定できます。
zsh+oh-my-zsh+powerlevel10k ターミナル設定_powerlevel10k 設定 - CSDN ブログ
または、私の設定を直接使用し、以下のファイルを解凍して自分のホームディレクトリに置くだけで済みます。
zshconfigs.tar.gz
GUI 関連#
一部のコマンドはディスプレイがないと表示されます。他に方法がない場合は GUI を使用する必要がある場合、以下の 2 つの方法を参考にしてください。最初の方法は自分のターミナルでコマンドを実行するのに適しており、2 番目の方法は MobaXterm 内で実行することを要求します。前者は追加の設定が必要で、後者はすぐに使用できます。
方法 1#
ローカルコンピュータにMobaXtermをインストールし、X サーバーを開きます。
マウスを上に置くと[IP]:[x11port]
が表示され、非ルーター NAT 下(南大では一般的に非 NAT IP は 114 または 172 で始まり、ルーター NAT 下の IP は一般的に 192.168 または 10 で始まります)の IP とポートを選択し、サーバーターミナルに次のように入力します。
export DISPLAY=[IP]:[x11port]
その後、GUI に関連するコマンドを入力し、ローカルコンピュータにポップアップするウィンドウで「はい」をクリックします。
方法 2#
直接 mobaxterm を使用して ssh 接続し、GUI 関連のコマンドを実行します。
進捗を表示するコピー#
~/.bashrc
または~/.zshrc
に次のように追加します。
function rcp(){
local src=$1
local dst=$2
if [ -f "$src" ] && [ -d "$dst" ]; then
dst="$dst/$(basename "$src")"
fi
mkdir -p "$(dirname "$dst")"
rsync -a --info=progress2 "$src" "$dst"
}
その後、rcp を使用できます。cp のロジックとは完全に同じではなく、2 番目のパラメータ dst はターゲットディレクトリであり、cp のように名前を変更することはできません。
トレーニング終了 / 失敗後のメール通知#
トレーニングスクリプトの後に以下の Python コードを追加するだけです。
sender = "[email protected]" # 送信元メールアドレスを設定
sender_name = "s1" # 送信者名をサーバー名として定義
passwd = "xxxxxxx" # メールパスワード、QQメールの場合は認証コード
server = "smtphz.qiye.163.com" # 送信元メールのサーバー、QQメールの場合はsmtp.qq.com
port = 465 # 送信元メールのポート番号、一般的にはこのポート
receiver = "[email protected]" # 受信者メールアドレス
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()