CITE Lab 服务器使用指南

2024 年 11 月 23 日 星期六(已编辑)
/
123
1

CITE Lab 服务器使用指南

连接和登录

ssh连接或者vscode下载remote-ssh插件,具体自行搜索

2024.08.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的私钥

私钥保存好不能泄露,强烈不建议自己的所有PC使用同一个密钥!

在自己电脑上可以配置~/.ssh/config 如下,这样可直接使用ssh s1命令连接服务器,较为方便

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

详细教程可见:VSCode配置 SSH连接远程服务器+免密连接教程

终端只有$符号解决方法

使用下述更改默认终端为bash或者其他用着顺手的终端,输入密码(Linux下输入密码不会显示,没有反应正常,输入完后按回车就行),之后重启终端或者重新连接即可

chsh -s /usr/bin/bash

环境配置

conda

如果没有特殊需求可以直接使用conda,若发现没有:conda: command not found,执行下述命令后重启终端

/opt/anaconda3/bin/conda init

并且编辑文件~/.condarc如下(使用南大镜像源更快,并且保存环境到自己的home路径)
注:已为所有用户配置,不需要再单独配置~/.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上实现一个环境多个服务都可以使用

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

缓解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白名单用户访问,将你的学号发给刁培杰,会给你共享一个table,在里面填写你的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(实现较为复杂,也不好debug,但效率高,建议代码固定后修改为这种方法)

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退出翻页模式。

数据!!!

数据存储位置

home目录空间较小,数据文件不要放在home目录下,请放在/data1下。

不常用的文件可放在/nasdata下,详见下述NAS说明章节。

数据备份

公用服务器务必自己保证数据安全。

服务器上安装了rclone,提供一种便捷的,定时的备份方法(从服务器同步重要文件到NJUBox):

rclone config

n → 自定义配置名称(比如njubox)→ 56(seafile) → https://box.nju.edu.cn → 学号 → 密码(先输入y再输入两遍密码)→ 2fa(直接回车) → 资料库名称(直接回车表示所有未加密资料库) → 其他按照提示即可

rclone常用方法

查看远程文件

rclone ls [配置名称]:/[目录]

同步

首次运行会复制所有文件(源地址)至远程(目标地址) 之后只会复制更改和新增的文件

特别注意: 每次运行后目标地址的文件会和源地址完全一致,源地址删除后运行同步会也会删除目标地址的对应文件(使用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之间为万兆连接,其余为千兆

/nasdata所有人都有权限,为防止他人误删,重要数据更建议通过rclone进行配置,参考下文的使用rclone同步本地和NAS文件,注意替换url。

可在网页端移动两个目录下的文件

也可使用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 # Other site/service or software,rclone版本不同可能不一样
user> abcd # NAS用户名
y/g/n> y # 输入密码
password: ... # 输入两次NAS密码
# 剩下的直接回车就行

按上述步骤在本地电脑新建好配置后可使用之前介绍的rclone copyrclone sync命令进行文件同步(如将本地文件上传到NAS或将NAS文件下载到本地)

特别注意: 每次运行后目标地址的文件会和源地址完全一致,源地址删除后运行同步会也会删除目标地址的对应文件(使用rclone copy不会删除目标地址的文件)

进阶

自动填充之前输入过的命令

可使用zsh作为默认终端,并配置 oh-my-zshpowerlevel10kzsh-autosuggestionszsh-syntax-highlighting

zsh+oh-my-zsh+powerlevel10k终端配置_powerlevel10k 配置-CSDN博客

或者直接使用我自己的配置,将下面这个文件解压放入自己的home目录即可
zshconfigs.tar.gz

GUI相关

某些命令会提示没有显示器,如没有其他办法一定要用GUI的话可参考下述方法两种方法,第一种方法适用于在自己的终端执行命令,第二种要求在MobaXterm内执行。前者需要额外配置,后者开箱即用。

方法一

本地电脑安装MobaXterm,并打开X server

鼠标放在上面会显示[IP]:[x11port],选择非路由器NAT下(在南大一般非NAT IP由114或172开头,路由器NAT下的IP一般由192.168或10开头)的IP和端口,并在服务器终端中输入

export DISPLAY=[IP]:[x11port]

之后输入与GUI有关的命令,并在本地电脑上弹出的窗口点击 是 即可。

方法二

直接使用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()

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...