CITE Lab 服务器使用指南
连接和登录
ssh连接或者vscode下载remote-ssh插件,具体自行搜索
创建密钥对:
ssh-keygen -t rsa -b 8192
在Linux/Mac上默认保存在 ~/.ssh/id_rsa
(私钥),~/.ssh/id_rsa.pub
(公钥)
在Windows上默认保存在 C:\Users\[username]\.ssh
文件夹下,名称同上
公钥可公开,保存在服务器的 ~/.ssh/authorized_keys
文件中,每行一个公钥对应自己不同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_dirs
和pkgs_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 —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
命令
使用指定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退出翻页模式。
数据!!!
数据存储位置
/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 copy
或rclone sync
命令进行文件同步(如将本地文件上传到NAS或将NAS文件下载到本地)
rclone copy
不会删除目标地址的文件)进阶
自动填充之前输入过的命令
可使用zsh
作为默认终端,并配置 oh-my-zsh
、powerlevel10k
、zsh-autosuggestions
、zsh-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()