目录
1.2.1 OSError: [Errno 122] Disk quota exceeded 清理pip packages缓存
1.2.2 OSError: [Errno 122] Disk quota exceeded 清理server home缓存
1.2.3 OSError: [Errno 122] Disk quota exceeded 清理project code缓存
3.1.3 extension: server安装和配置miniconda虚拟环境
3.1.4 将服务器本地pip指令路径指向miniconda
3.5.6 The VS Code could not connect to the remote server解决
4.2 -bash: bad interpreter: No such file or path
4.2 ModuleNotFoundError: No module named 'torch._C'
4.3 torch geometric: OSError: torch_sparse/_version_cuda.so: undefined symbol
oserror: libcudart.so.11.0: cannot open shared object file: no such file or directory
4.4 ImportError: cannot import name 'show_config' from 'numpy' (unknown location)
4.5 AttributeError: module 'torch' has no attribute 'sparse_csc'
4.8 Linux无法导入自定义的python文件,ModuleNotFoundError: No module named 'data_process'
4.9 服务器安装en_core_web_lg package
4.10 PBS Server -Job exceeded resource walltime -》pytorch checkpoint断点保存
5.1.1 使用qsub -I model.qsub交互式方式运行程序,提升1/3速度
5.2.2 tensor matrix没有传到GPU-CUDA上去,仍然在cpu上运算
5.3.1 大型tensor matrix 处理和运算没有放到GPU上去
5.5 误区:pytorch如何将model之外自己定义的def functions 用CUDA上传到GPU上,对data进行预处理
注意事项:修改文件读取、保存路径
nvidia-smi
-g是以GB为单位;也可以使用-m,即以MB为单位。
free -g
Mem 行(第二行):是内存的使用情况。
Swap 行(第三行):是交换空间的使用情况。
total: 列显示系统总的可用物理内存和交换空间大小。
used: 列显示已经被使用的物理内存和交换空间。
free: 列显示还有多少物理内存和交换空间可用使用。
shared: 列显示被共享使用的物理内存大小。
buff/cache: 列显示被 buffer 和 cache 使用的物理内存大小。
available: 列显示还可以被应用程序使用的物理内存大小
超过使用硬存了! 删除miniconda缓存和无效packages
https://tools-platform-guide.readthedocs.io/zh_CN/latest/anaconda/[conda%20clean]%E7%8E%AF%E5%A2%83%E6%B8%85%E7%90%86/ 清理linux服务器磁盘垃圾释放空间 - Java学习之道
查看分配给你个人的限制和已经使用的配额:
quota -uvs username
- 查看当前文件夹大小。du -sh
- 查看当前目录下各个文件和文件夹大小。du -h –max-depth=1 *
first clear the cache
pip3 cache purge
# 查看文件占用大小 du -hm --max-depth=1 -h
# 删除没有用的包 conda clean -p
# 删除tar打包 conda clean -t
# 删除无用的包和缓存 conda clean --all
有个超大bug是保存model 超参数args = args_register()时,明明1k的文件,非要说超硬存了。
删除服务期日志文件
至于为啥之前运行不报错,后来报错,可能是因为args.txt保存太多次了吧。
rm -rf *.log ----直接删除日志文件
删除服务期缓存文件
ls -a
- # 查看.cache缓存文件大小
- du -h -d1 ~/.cache | sort -rh
-
- # 删除server home下的.cache缓存文件夹
- rm -rf ~/.cache
-
- # 删除server home下的.conda缓存文件夹
- rm -rf ~/.conda
-
- # 删除home下的.vscode-server缓存文件夹,Visaul Studio每次连接的缓存文件,删了不碍事。
- rm -rf ~/.vscode-server
-
- # 删除porject下的缓存文件
- rm -rf ~/project_name/.cache
删除 .local
目录可能会导致用户个人设置和数据的丢失,因此在删除之前需要谨慎考虑。
- # 检查文件夹大小
- du -sh ~/.local
-
- # 清理.local缓存文件
- rm -rf ~/.local/cache
-
- # 清理.local日志文件
- rm -rf ~/.local/log
-
- # 清理.local临时文件
- rm -rf ~/.local/temp
-
- # 清理.local软件安装包
- rm -rf ~/.local/share
像python运行产生的.cache、.idea等缓存文件都可以删除!
lscpu
hello_world.sh
bash hello_world.sh
破解版下载
PBS(Protable Batch System)作业管理,即以qsub、qstat、qdel命令为核心的集群作业管理系统,且它是开源的。
即submit、state、delete
用户通过qsub命令来向系统提交任务,有两种方式提交:脚本方式和命令行方式。(一般情况下,不允许root用户使用qsub命令提交作业)
用户将需要执行的程序或命令写入脚本中,在加入一些必要或可选的语句,就可以通过脚本方式提交。脚本方式比较方便,用户可以用最简单的文字编辑器(e.g. vim)编写一个脚本,然后使用qsub命令提交该脚本,pbs会按照脚本内容执行相应的任务。 脚本提交的不足之处就是需要用户执行任务前编写脚本。
脚本方式提交任务的一般格式为:
qsub [script_name],script_name 是任务脚本文件的名称,比如: myname.pbs。
qsub myname.pbs
pbs任务脚本的编写方法:
#PBS -l [选项=] [选项对应的值],l表示小L
#!/bin/bash,设置bash shell命令
#PBS -P ,设置项目名
#PBS -q normal#PBS -l nodes=X:host,表示分配X个主机名称中含有host的执行节点
#PBS -l ncpus=12,表示请求12个cpu服务
#PBS -l mem=64GB,表示任务所有进程能够分配到的最大物理内存#PBS -q gpuvolta,
#PBS -l ngpus=1#PBS -l jobfs=0
#PBS -l walltime=04:00:00,请求任务运行时间module load pytorch/1.4.0
### 在server上自定义的anaconda虚拟环境
source /conda.sh
conda activate hnn
### source表示指向anaconda指令路径,启用anaconda虚拟环境,需要将指令路径指向相应的anaconda配置文件bash.sh,系统默认指向的是server环境。,要不然会造成指令混乱。
python3 /execute.py
在pbs脚本里使用source命令更改指令路径,太容易造成指令混乱,一不小心指令就崩溃
其实,还有一种更简单安全的方法,那就是提前启动anaconda虚拟环境,去掉source /conda.sh和conda activate hnn两条命令,直接在相应虚拟环境里执行python3 /exectue.py。
因为 server安装miniconda, miniconda的指令路径会自动覆盖代替server本地环境。
Note that,需要判断pip、conda、python指向的到底是哪个虚拟环境:服务器本地home、还是anaconda自带的base env、还是创建的虚拟环境env,要不然需要调整pip指令指向路径,确保实验结果准确性和复现性。
参考:CSDN
#!/bin/bash,设置bash shell命令
#PBS -P ,设置项目名
#PBS -q normal#PBS -l nodes=X:host,表示分配X个主机名称中含有host的执行节点
#PBS -l ncpus=12,表示请求12个cpu服务
#PBS -l mem=64GB,表示任务所有进程能够分配到的最大物理内存#PBS -q gpuvolta,
#PBS -l ngpus=1#PBS -l jobfs=0
#PBS -l walltime=04:00:00,请求任务运行时间python3 /execute.py
最常用的几种资源是:walltime, ncpus, men, host。其他可以不用太关心
qsub
//输入qsub命令后回车
[directives] //pbs指示语句(以#PBS为前缀)
[tasks] //任务或命令
ctrl-D //结束输入,提交任务
在server上安装miniconda,miniconda指令路径会自动覆盖服务器本地路径,将conda、pip、python、torch等路径全部指向miniconda,而不是原先server本地的python、pip、torch等路径。
使用前请确认一下python运行环境,check virtual env。
深入浅出PyTorch: pytorch教程_天狼啸月1990的博客-CSDN博客
anaconda配置文件,在安装目录下 etc/profile.d/conda.sh。
在服务器上安装linux版anaconda
找到下载好的安装包(文件名为 Anaconda3-2019.10-Linux-x86_64.sh),打开终端,用sh命令install 安装包,然后根据提示输入密码即可。
另一种方法:用wget直接将miniconda安装包下载到远程服务器:
wget
miniconda 会自动覆盖pip路径
使用前查看pip和conda指令路径和安装的packages安装路径
千万别乱动配置文件,容易造成指令混乱
建议重装miniconda。因为重新配置路径文件太费劲,还配不好!
深入浅出PyTorch: pytorch教程_天狼啸月1990的博客-CSDN博客
如果因为配置server python导致conda命令失效,需要重置.bashrc文件,重新定义命令指向地址。
echo 'export PATH="~/anaconda3/bin:$PATH"' >> ~/.bashrc
source .bashrc
这样pip
qstat
参数说明:
-f jobid 列出指定作业的信息
-a 列出系统所有作业
-i 列出不在运行的作业
-n 列出分配给此作业的结点
-s 列出队列管理员与scheduler 所提供的建议
-R 列出磁盘预留信息
-Q 操作符是destination id,指明请求的是队列状态
-q 列出队列状态,并以alternative 形式显示
-au userid 列出指定用户的所有作业
-B 列出PBS Server 信息
-r 列出所有正在运行的作业
-Qf queue 列出指定队列的信息
-u 若操作符为作业号,则列出其状态。
若操作符为destination id,则列出运行在其上的属于user_list中用户的作业状态。
例:# qstat -f 211 查询作业号为211 的作业的具体信息。
- qdel [任务编号],删除正在等待的命令
- qsig -s KILL [任务编号],删除正在运行的命令
pbs脚本返回结果一般会在脚本目录里,返回两个文件:.e文件、.o文件。
pbs虽然可以在server目录下生成output文件和error文件,但每次查看太麻烦。
交互查看程序运行结果,可以用VS code编辑器,连接server
由微软推出的一款轻量级编辑器,拥有大量可拓展插件,可以根据自己的需求添加插件使编辑器的功能丰富起来。VScode和Sublime Text应该是最受欢迎的两款编辑器
总结:微软爸爸厉害,vs code做得又轻又nb。
该服务的作用是让你可以在终端使用ssh指令,Windows10通常自带OpenSSH不需要安装。
按下快捷键Win + X
,选择Windows PoweShell(管理员)
,输入以下指令:Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
如果电脑未安装OpenSSH,则State
会显示NotPresent
:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Win+R
输入cmd进入终端,输入ssh
命令应该得到如下结果:Remote-SSH是VScode的插件,安装完VScode以后,直接在插件中搜索ssh,即可找到Remote-SSH,点击install
安装。
安装完Remote-SSH以后左侧会出现一个远程资源管理的图标,选择SSH Targets,进入config配置文件。
在配置文件中设置服务器信息,输入HostName和User,保存以后左侧会出现对应机器名称。
更改设置,File->Preferences->Settings->Extension->Remote-SSH
,找到Show Login Terminal并勾选
点击SSH TARGETS下的服务器旁边的按钮纽行连接,弹出让你输入密码:
在这里可能会弹出让你选择服务器的平台linux(linux、windows、macOS),需要选择以后才会出现输入密码的步骤
成功连上服务器,点击有右侧的+
号创建服务器的终端窗口,可以正常使用了!
Note that on the top right of terminal window,need to choose the bash shell。
打开以后可以看到服务器文件目录,直接在文件目录中选择文件进行编辑,实时同步到服务器上,这时候已经可以开始愉快的进行开发了,开发体验媲美本地开发!
打开命令面板(Windows: Ctrl+Shift+P,macOS:Cmd+Shift+P),搜索“Kill VS Code Server on Host”,选择出问题的实例进行自动清除,然后重新进行连接
参考:bad interpreter: No such file or directory解决办法
一般是linux直接用了windows的文件,编码不识别导致的,所以只需要把dos格式换成unix的即可。
1. 编辑文件
vim filename
2. 查看文件格式
set ff
3. 修改文件格式
set ff=unix
4. 保存退出
wq
torch package出现故障,需要重装!
原因:
解决方案:
查询server python对应的torch-cuda和geometric version
不要通过anaconda来安装Torch,而是通过pip从以下网址下载特定版本的pytorch: https://pytorch-geometric.readthedocs.io/en/latest/notes/installation.html
具体解决步骤:
卸载原有的包:pip uninstall 相应的依赖包(如torch、torch-scatter、torch-sparse)
通过pip安装指定cuda版本的torch:
pip install torch==1.11.0+cu102 -f https://download.pytorch.org/whl/torch_stable.html
此处我安装的torch-1.11.0+cu102,也可以安装别的版本,但是一定要通过pip安装!!!
https://data.pyg.org/whl/index.html
安装torch-geometric相关依赖包
(1)如果之前不确定安装的torch版本和对应的cuda,先通过如下语句查看:
- python -c "import torch; print(torch.__version__)"
- python -c "import torch; print(torch.version.cuda)"
ERROR: No matching distribution found for cudatoolkit==10.2
注意需要安装的是torch1.11.0+cu102,这是一个单独的torch版本,不是单独安装cudatoolkit。
(2)然后安装相关包:
- pip install torch-scatter==2.0.9 -f https://pytorch-geometric.com/whl/torch-1.11.0+cu102.html
- pip install torch-geometric
此处的torch版本和cuda版本要与前面的对应! 参考:https://data.pyg.org/whl/index.html
这个报错是由于Scipy与Numpy版本不兼容导致的,一般是由于Scipy版本过高,而Numpy版本过低
You need at least PyTorch 1.12 in order to run PyG 2.3 :(
原因: GPU CUDA 只支持tensor操作,不支持numpy操作
将tensor从显卡传回本地 -》tensor.cpu()
原因很简单就是tensors没有都转存到GPU上!
Note 还很有可能是additional model没有转存到GPU上!
使用GUDA的简便理解,把参与running的tensors和model都存到GPU上!
原因:windows和Linux上python package path解析不同。
创建一下临时文件路径。
- import sys
- sys.path.append('/home/HAN_Model/')
参考:en_core_web_md安装与使用_Jean_Wu的博客-CSDN博客
- # 安装 spacy
- pip install spacy
- # 安装 en_core_web_lg
- python -m spacy download en_core_web_md
参考:https://www.cnblogs.com/hypnus-ly/p/13044312.html
原因:文件太大,运行时间太长!
- # step16: early stop
- if validation_nmi > best_vali_nmi:
- best_vali_nmi = validation_nmi
- best_epoch = epoch
- wait = 0
- # save model
- model_path = save_path_i + '/models'
- if (epoch == 0) and (not os.path.isdir(model_path)):
- os.mkdir(model_path)
- p = model_path + '/best.pt'
- torch.save({'epoch': epoch,
- 'model': model.state_dict(),
- 'optimizer': optimizer.state_dict(),
- }, p)
- print('Best model was at epoch ', str(best_epoch))
- "-----------------loading best model---------------"
- # step18: load the best model of the current block
- best_model_path = save_path_i + '/models/best.pt'
- checkpoint = torch.load(best_model_path)
- start_epoch = checkpoint['epoch']
- model.load_state_dict(checkpoint['model'])
- optimizer.load_state_dict(checkpoint['optimizer'])
- print('Best model loaded.')
参考: PBS 作业管理系统 - 简书
原因:不要直接qsub提交,要加上-I参数,用交互式作业方式。
- qsub -I model.qsub # 相当于根据model.qsub里的参数分配了一个虚拟的GPU主机,如果没有model.qsub设置参数,只有qsub -I缺少参数情况下就只能分配个cpu主机
- python model.py
problem: python running results will output to terminal, and can't check the GPU status with nvidia-smi instruction.
nohup Linux后台运行命令
https://wsgzao.github.io/post/nohup/
nohup python model.py &
停止nohup后台命令
ps 输出的PID字段意思,ps命令输出字段的含义
GPU CUDA支持pytorch tensor运算,不支持numpy。如果torch写的model涉及到numpy运算,就面临着GPU和CPU交互,耗费时间!
除了evaluation等部分,其他的矩阵运算全部用tensor来计算!否则,相当于没用gpu加速运算!
而且,model calculation过程中的numpy会造成gradient 梯度和optimizer 优化过程出问题!
哪怕是没报错,用了torch.from_numpy()将numpy改回torch tensor,仍可能存在梯度计算和优化问题。cpu()和gpu()交互传递数据也耗费太多时间!
-》就改回纯pytorch tensor矩阵操作
参考:
[1] 深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析_num_workers 变慢_是否龙磊磊真的一无所有的博客-CSDN博客
因为存在 large tensor matrices process and calculation are performed on CPU rather than GPU.
- # 将二维矩阵list 转换成adj matrix list
- def relations_to_adj(filtered_multi_r_data, nb_nodes=None):
- relations_mx_list = []
- for r_data in filtered_multi_r_data:
- data = torch.ones(r_data.shape[1])
- relation_mx = torch.sparse_coo_tensor(indices=r_data, values=data, size=[nb_nodes, nb_nodes], dtype=torch.int32)
- relations_mx_list.append(relation_mx.to_dense())
- return relations_mx_list
较少print()和file save操作
- def preprocess_data(data):
- # 在这里进行你的数据预处理操作
- processed_data = data * 2 # 这只是一个示例,你可以根据需要进行更复杂的操作
- return processed_data
- data = torch.randn(10, 3) # 假设有一个示例数据
- data = data.to('cuda') # 将数据移到CUDA设备上
-
- processed_data = preprocess_data(data) # 处理tensor数据
https://www.cnblogs.com/overmore/archive/2012/05/29/2524824.html