• linux服务器基本操作


    目录

    1. 查看服务器硬件信息

    1.1 查看server显卡运行情况

    1.2 查看内存

    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缓存

    1.3 查看server cpu统计信息

    2. linux shell 操作命令

    2.1 运行sh脚本文件

    2.2 shell文件操作指令

    2.3 vim文件操作命令

    2.4 服务器可视化工具

    2.4.1 可视化运行工具Xshell

    2.4.2 文件管理工具Xmanager

    2.4.3 文件管理工具WinSCP

    3. pbs 服务器命令脚本

    3.1 pbs 提交任务命令

    3.1.1 脚本提交

    3.1.2 命令行提交

    3.1.3 extension: server安装和配置miniconda虚拟环境

    3.1.4 将服务器本地pip指令路径指向miniconda

    3.2 查看任务状态命令

    3.3 删除任务命令

    3.4 pbs脚本返回结果 

    3.5 VS code 连接服务器 

    3.5.1 VS code简介

    3.5.2 安装OpenSSH

    3.5.3 vs code安装Remote-SSH插件

    3.5.4 连接服务器

    3.5.5 VS code打开服务器文件夹

    3.5.6 The VS Code could not connect to the remote server解决

    4. Server Error 

    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.6 TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

    4.7 RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

    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断点保存

     4.11 RuntimeError: CUDA out of memory. Tried to allocate 6.84GiB (GPU 0; 31 GiB total capacity, 20.79 GiB already allocated, 3.19 free, 27GiB reserved in total by Pytorch)

    5. 优化GPU:提升running speed

    5.1 nvidia-smi 查看显卡使用情况时,NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

    5.1.1 使用qsub -I model.qsub交互式方式运行程序,提升1/3速度 

    5.2 显存占用高,但GPU利用率却为0%

    5.2.1 numpy array-> tensor matrix。model和数据计算存在numpy,CUDA不支持numpy data format;numpy影响gradient和optimizer计算

    5.2.2 tensor matrix没有传到GPU-CUDA上去,仍然在cpu上运算

    5.3 提升GPU运算速度

    5.3.1 大型tensor matrix 处理和运算没有放到GPU上去

    5.3.2 torch SparseTensor 稀疏矩阵 

    5.4 减少不必要的操作

    5.5 误区:pytorch如何将model之外自己定义的def functions 用CUDA上传到GPU上,对data进行预处理

    5.5.1 实际情况是不用,只需要将large tensor data用CUDA上传到GPU上去就行,因为CUDA会自动调用自己定义的def functions在GPU上进行tensor计算。因此,不用把自己定义的def function上传到GPU上!

    参考


    注意事项修改文件读取、保存路径

    1. 查看服务器硬件信息

    1.1 查看server显卡运行情况

    nvidia-smi 

     

    1.2 查看内存

    -g是以GB为单位;也可以使用-m,即以MB为单位。 

    free -g

    Mem 行(第二行):是内存的使用情况。
    Swap 行(第三行):是交换空间的使用情况。
     
    total: 列显示系统总的可用物理内存和交换空间大小。
    used: 列显示已经被使用的物理内存和交换空间。
    free: 列显示还有多少物理内存和交换空间可用使用。
    shared: 列显示被共享使用的物理内存大小。
    buff/cache: 列显示被 buffer 和 cache 使用的物理内存大小。
    available: 列显示还可以被应用程序使用的物理内存大小

    1.2.1 OSError: [Errno 122] Disk quota exceeded 清理pip packages缓存

    超过使用硬存了! 删除miniconda缓存和无效packages

    参考:Conda清理缓存_周先森爱吃素的博客-CSDN博客 

    conda 清理不必使用的缓存安装包 - 掘金

    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

    1.2.2 OSError: [Errno 122] Disk quota exceeded 清理server home缓存

    有个超大bug是保存model 超参数args = args_register()时,明明1k的文件,非要说超硬存了。

    删除服务期日志文件

    至于为啥之前运行不报错,后来报错,可能是因为args.txt保存太多次了吧。

    rm -rf *.log ----直接删除日志文件 

    删除服务期缓存文件

    • 查看server home下所有隐藏文件

    ls -a

    • 删除.cache缓存文件
    1. # 查看.cache缓存文件大小
    2. du -h -d1 ~/.cache | sort -rh
    3. # 删除server home下的.cache缓存文件夹
    4. rm -rf ~/.cache
    5. # 删除server home下的.conda缓存文件夹
    6. rm -rf ~/.conda
    7. # 删除home下的.vscode-server缓存文件夹,Visaul Studio每次连接的缓存文件,删了不碍事。
    8. rm -rf ~/.vscode-server
    9. # 删除porject下的缓存文件
    10. rm -rf ~/project_name/.cache
    •  删除.local缓存文件

    删除 .local 目录可能会导致用户个人设置和数据的丢失,因此在删除之前需要谨慎考虑

    1. # 检查文件夹大小
    2. du -sh ~/.local
    3. # 清理.local缓存文件
    4. rm -rf ~/.local/cache
    5. # 清理.local日志文件
    6. rm -rf ~/.local/log
    7. # 清理.local临时文件
    8. rm -rf ~/.local/temp
    9. # 清理.local软件安装包
    10. rm -rf ~/.local/share

    1.2.3  OSError: [Errno 122] Disk quota exceeded 清理project code缓存

    像python运行产生的.cache、.idea等缓存文件都可以删除!

    1.3 查看server cpu统计信息

    lscpu

    2. linux shell 操作命令

    2.1 运行sh脚本文件

    • windows 系统,可以直接在terminal窗口执行。
    hello_world.sh
    • linux 系统,用bash命令执行。
    bash hello_world.sh

    2.2 shell文件操作指令

    • 创建文件夹,mkdir
    • 创建文件,vim
    • cd命令,进入目录
      • cd ..,返回上一层文件夹
      • cd + 空格,返回主目录
    • ls,查看当前目录下的文件
    • pwd,查看当前路径
    • 用cat命令查看linux服务器日志文件内容
    • 删除文件,rm file:删除文件file,系统会先询问是否删除。
      • rm -f file,强制删除file,系统不再提示
    • 删除文件夹,rm -rf /usr/java
    • 将目录A重命名为B,mv A B
    • 将/a目录移动到/b目录下,并重新命名为c。 mv /a /v/c

    2.3 vim文件操作命令

    • i--编辑状态
    • esc--回到原始状态
    • :wq,保存退出;:q,只退出不保存
    • dd,删除整行

    2.4 服务器可视化工具

    2.4.1 可视化运行工具Xshell

    破解版下载 

    2.4.2 文件管理工具Xmanager

    • 上传文件rz,xmanager的rz命令从本地上传文件到服务器
    • 下载文件sz,xmanager的sz命令从服务器下载文件到本地 

    2.4.3 文件管理工具WinSCP

    WinSCP-SFTP管理传输软件安装使用教程 - 知乎

    3. pbs 服务器命令脚本

    PBS(Protable Batch System)作业管理,即以qsubqstatqdel命令为核心的集群作业管理系统,且它是开源的。

    即submit、state、delete

    3.1 pbs 提交任务命令

    用户通过qsub命令来向系统提交任务,有两种方式提交:脚本方式命令行方式。(一般情况下,不允许root用户使用qsub命令提交作业) 

    3.1.1 脚本提交

    用户将需要执行的程序或命令写入脚本中,在加入一些必要或可选的语句,就可以通过脚本方式提交。脚本方式比较方便,用户可以用最简单的文字编辑器(e.g. vim)编写一个脚本,然后使用qsub命令提交该脚本,pbs会按照脚本内容执行相应的任务。 脚本提交的不足之处就是需要用户执行任务前编写脚本。

    脚本方式提交任务的一般格式为:

    qsub [script_name],script_name 是任务脚本文件的名称,比如: myname.pbs。

    qsub myname.pbs

    pbs任务脚本的编写方法:

    • shell说明语句:用来说明用户使用的是哪种shell,e.g. #!/bin/sh说明用户需要使用Bourne shell,如果用户没有指定,则默认为Bourne shell。
    • pbs指示语句:pbs指示语句是用户用来请求任务运行时所需的资源或设置任务的一些属性的。以PBS开头,如#PBS -N taskname是用来设置任务名称的。pbs指示语句是可选的,用户可以不用关心它如何写,系统会自动设置。

    #PBS -l [选项=] [选项对应的值],l表示小L

    • pbs指示语句的一个主要作用是请求任务执行时所需的系统资源,如cpu数目、存储空间、运行时间、运行优先级等等。
    • 一个完整的系统资源psub文件

    #!/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。其他可以不用太关心

    3.1.2 命令行提交

    qsub          //输入qsub命令后回车
    [directives]     //pbs指示语句(以#PBS为前缀)
    [tasks]       //任务或命令
    ctrl-D        //结束输入,提交任务

    3.1.3 extension: server安装和配置miniconda虚拟环境

    在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

    • 一种方法:到Anaconda官网或清华源地址下载所需的Anaconda 版本至自己的电脑。

      找到下载好的安装包(文件名为 Anaconda3-2019.10-Linux-x86_64.sh),打开终端,用sh命令install 安装包,然后根据提示输入密码即可。

    • 另一种方法:用wget直接将miniconda安装包下载到远程服务器:

    wget

    •  安装linux version anaconda:bash Miniconda3-latest-Linux-x86_64.sh

    3.1.4 将服务器本地pip指令路径指向miniconda

    miniconda 会自动覆盖pip路径

    使用前查看pip和conda指令路径和安装的packages安装路径

    千万别乱动配置文件,容易造成指令混乱

    建议重装miniconda。因为重新配置路径文件太费劲,还配不好!

    深入浅出PyTorch: pytorch教程_天狼啸月1990的博客-CSDN博客

    如果因为配置server python导致conda命令失效,需要重置.bashrc文件,重新定义命令指向地址。 

    echo 'export PATH="~/anaconda3/bin:$PATH"' >> ~/.bashrc 

    source .bashrc

    这样pip

    3.2 查看任务状态命令

    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 的作业的具体信息。

    3.3 删除任务命令

    • qdel [任务编号],删除正在等待的命令
    • qsig -s KILL [任务编号],删除正在运行的命令

    3.4 pbs脚本返回结果 

    pbs脚本返回结果一般会在脚本目录里,返回两个文件:.e文件、.o文件。

    • .e文件。用来记录你运行错误的
    • .o文件。用来记录最终输出的,就是python print所有打印的结果

    pbs虽然可以在server目录下生成output文件和error文件,但每次查看太麻烦。

    交互查看程序运行结果,可以用VS code编辑器,连接server 

    3.5 VS code 连接服务器 

    「效率」使用VScode连接远程服务器进行开发 - 知乎

    3.5.1 VS code简介

    由微软推出的一款轻量级编辑器,拥有大量可拓展插件,可以根据自己的需求添加插件使编辑器的功能丰富起来。VScode和Sublime Text应该是最受欢迎的两款编辑器

    总结:微软爸爸厉害,vs code做得又轻又nb。 

    3.5.2 安装OpenSSH

    该服务的作用是让你可以在终端使用ssh指令,Windows10通常自带OpenSSH不需要安装。

    • 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
      安装完成后会出现以下输出:
    • OpenSSH安装成功后,Win+R输入cmd进入终端,输入ssh命令应该得到如下结果:

    3.5.3 vs code安装Remote-SSH插件

    • 安装Remote-SSH 

    Remote-SSH是VScode的插件,安装完VScode以后,直接在插件中搜索ssh,即可找到Remote-SSH,点击install安装。

    • 配置Remote-SSH

    安装完Remote-SSH以后左侧会出现一个远程资源管理的图标,选择SSH Targets,进入config配置文件。

    在配置文件中设置服务器信息,输入HostName和User,保存以后左侧会出现对应机器名称。

    更改设置,File->Preferences->Settings->Extension->Remote-SSH,找到Show Login Terminal并勾选

    3.5.4 连接服务器

    点击SSH TARGETS下的服务器旁边的按钮纽行连接,弹出让你输入密码:

    在这里可能会弹出让你选择服务器的平台linux(linux、windows、macOS),需要选择以后才会出现输入密码的步骤

    成功连上服务器,点击有右侧的+号创建服务器的终端窗口,可以正常使用了!

    Note that on the top right of terminal window,need to choose the bash shell

    3.5.5 VS code打开服务器文件夹

    打开以后可以看到服务器文件目录,直接在文件目录中选择文件进行编辑,实时同步到服务器上,这时候已经可以开始愉快的进行开发了,开发体验媲美本地开发!

    3.5.6 The VS Code could not connect to the remote server解决

    参考:报错“The VS Code Server failed to start”如何解决?_AI开发平台ModelArts_常见问题_Notebook(新版)_VS Code连接开发环境失败常见问题_华为云

    打开命令面板(Windows: Ctrl+Shift+P,macOS:Cmd+Shift+P),搜索“Kill VS Code Server on Host”,选择出问题的实例进行自动清除,然后重新进行连接

    4. Server Error 

    4.2 -bash: bad interpreter: No such file or path 

    参考:bad interpreter: No such file or directory解决办法 

    一般是linux直接用了windows的文件,编码不识别导致的,所以只需要把dos格式换成unix的即可。 

    1. 编辑文件

    vim filename

    2. 查看文件格式

    set ff

    3. 修改文件格式

    set ff=unix

    4. 保存退出

    wq

    4.2 ModuleNotFoundError: No module named 'torch._C'

    torch package出现故障,需要重装!

    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

    参考:python安装torch-geometric包出现的错误:OSError: torch_sparse/_version_cuda.so: undefined symbol:_长风破浪时的博客-CSDN博客

    原因:

    • 版本冲突
    • 安装了多个PyTorch或多个CUDA版本的原因一般是由虚拟环境env下,同时用pip和conda安装torch引起的!通过anaconda-navigator安装pytorch 时它将自动安装cpu和gpu两个版本,因此产生错误。--》删掉多余的相同packages
    • 参考:深入浅出PyTorch: pytorch教程_天狼啸月1990的博客-CSDN博客

    解决方案:

    查询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
    •  如果要用GPU的话,一定要用带cuda的torch版本,e.g. torch-1.11.0+cu102。验证方法:python; import torch; torch.cuda.is_available()
    • 如果只是普通cpu版本的torch-1.11.0,则无法调用GPU,即没有torch.cuda.is_available()属性。

    此处我安装的torch-1.11.0+cu102,也可以安装别的版本,但是一定要通过pip安装!!!
    https://data.pyg.org/whl/index.html

    安装torch-geometric相关依赖包
    (1)如果之前不确定安装的torch版本和对应的cuda,先通过如下语句查看:

    1. python -c "import torch; print(torch.__version__)"
    2. python -c "import torch; print(torch.version.cuda)"

    ERROR: No matching distribution found for cudatoolkit==10.2 

    注意需要安装的是torch1.11.0+cu102,这是一个单独的torch版本,不是单独安装cudatoolkit。

    (2)然后安装相关包:

    1. pip install torch-scatter==2.0.9 -f https://pytorch-geometric.com/whl/torch-1.11.0+cu102.html
    2. pip install torch-geometric

    此处的torch版本和cuda版本要与前面的对应!  参考:https://data.pyg.org/whl/index.html

    4.4 ImportError: cannot import name 'show_config' from 'numpy' (unknown location)

    这个报错是由于Scipy与Numpy版本不兼容导致的,一般是由于Scipy版本过高,而Numpy版本过低

    4.5 AttributeError: module 'torch' has no attribute 'sparse_csc'

    You need at least PyTorch 1.12 in order to run PyG 2.3 :( 

    4.6 TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

    原因: GPU CUDA 只支持tensor操作,不支持numpy操作

    将tensor从显卡传回本地 -》tensor.cpu()

    4.7 RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

    原因很简单就是tensors没有都转存到GPU上!

    Note 还很有可能是additional model没有转存到GPU上!

    使用GUDA的简便理解,把参与running的tensors和model都存到GPU上! 

    4.8 Linux无法导入自定义的python文件,ModuleNotFoundError: No module named 'data_process'

    原因:windows和Linux上python package path解析不同。

    创建一下临时文件路径

    1. import sys
    2. sys.path.append('/home/HAN_Model/')

    4.9 服务器安装en_core_web_lg package

    参考:en_core_web_md安装与使用_Jean_Wu的博客-CSDN博客

    1. # 安装 spacy
    2. pip install spacy
    3. # 安装 en_core_web_lg
    4. python -m spacy download en_core_web_md

    4.10 PBS Server -Job exceeded resource walltime -》pytorch checkpoint断点保存

    参考:https://www.cnblogs.com/hypnus-ly/p/13044312.html 

    原因:文件太大,运行时间太长!

    1. # step16: early stop
    2. if validation_nmi > best_vali_nmi:
    3. best_vali_nmi = validation_nmi
    4. best_epoch = epoch
    5. wait = 0
    6. # save model
    7. model_path = save_path_i + '/models'
    8. if (epoch == 0) and (not os.path.isdir(model_path)):
    9. os.mkdir(model_path)
    10. p = model_path + '/best.pt'
    11. torch.save({'epoch': epoch,
    12. 'model': model.state_dict(),
    13. 'optimizer': optimizer.state_dict(),
    14. }, p)
    15. print('Best model was at epoch ', str(best_epoch))
    1. "-----------------loading best model---------------"
    2. # step18: load the best model of the current block
    3. best_model_path = save_path_i + '/models/best.pt'
    4. checkpoint = torch.load(best_model_path)
    5. start_epoch = checkpoint['epoch']
    6. model.load_state_dict(checkpoint['model'])
    7. optimizer.load_state_dict(checkpoint['optimizer'])
    8. print('Best model loaded.')

     4.11 RuntimeError: CUDA out of memory. Tried to allocate 6.84GiB (GPU 0; 31 GiB total capacity, 20.79 GiB already allocated, 3.19 free, 27GiB reserved in total by Pytorch)

    • 移除不重要的数据。不要啥都往GPU上放,及时删除无用变量,释放缓存。gc.collect()
    • 减少batch_size。

    5. 优化GPU:提升running speed

    5.1 nvidia-smi 查看显卡使用情况时,NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

    5.1.1 使用qsub -I model.qsub交互式方式运行程序,提升1/3速度 

    参考: PBS 作业管理系统 - 简书

    ubuntu服务器查看GPU和CPU实时使用情况  

    原因:不要直接qsub提交,要加上-I参数,用交互式作业方式

    1. qsub -I model.qsub # 相当于根据model.qsub里的参数分配了一个虚拟的GPU主机,如果没有model.qsub设置参数,只有qsub -I缺少参数情况下就只能分配个cpu主机
    2. python model.py

    problem: python running results will output to terminal, and can't check the GPU status with nvidia-smi instruction.

    nohup Linux后台运行命令

     参考:Linux nohup 命令 | 菜鸟教程

    https://wsgzao.github.io/post/nohup/

    nohup python model.py &

    停止nohup后台命令

    • 查找后台运行程序的PID。ps -aux | grep "model.py"
    • 强制停止程序。kill -9 <进程号pid>

    ps 输出的PID字段意思,ps命令输出字段的含义

    5.2 显存占用高,但GPU利用率却为0%

    5.2.1 numpy array-> tensor matrix。model和数据计算存在numpy,CUDA不支持numpy data format;numpy影响gradient和optimizer计算

    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博客

    5.2.2 tensor matrix没有传到GPU-CUDA上去,仍然在cpu上运算

    5.3 提升GPU运算速度

    5.3.1 大型tensor matrix 处理和运算没有放到GPU上去

    因为存在 large tensor matrices process and calculation are performed on CPU rather than GPU. 

    5.3.2 torch SparseTensor 稀疏矩阵 

    1. # 将二维矩阵list 转换成adj matrix list
    2. def relations_to_adj(filtered_multi_r_data, nb_nodes=None):
    3. relations_mx_list = []
    4. for r_data in filtered_multi_r_data:
    5. data = torch.ones(r_data.shape[1])
    6. relation_mx = torch.sparse_coo_tensor(indices=r_data, values=data, size=[nb_nodes, nb_nodes], dtype=torch.int32)
    7. relations_mx_list.append(relation_mx.to_dense())
    8. return relations_mx_list

    5.4 减少不必要的操作

    • 较少print()和file save操作

    • 删除掉model内用不到的def、变量和packages

    5.5 误区:pytorch如何将model之外自己定义的def functions 用CUDA上传到GPU上,对data进行预处理

    5.5.1 实际情况是不用,只需要将large tensor data用CUDA上传到GPU上去就行,因为CUDA会自动调用自己定义的def functions在GPU上进行tensor计算。因此,不用把自己定义的def function上传到GPU上!

    1. def preprocess_data(data):
    2. # 在这里进行你的数据预处理操作
    3. processed_data = data * 2 # 这只是一个示例,你可以根据需要进行更复杂的操作
    4. return processed_data
    5. data = torch.randn(10, 3) # 假设有一个示例数据
    6. data = data.to('cuda') # 将数据移到CUDA设备上
    7. processed_data = preprocess_data(data) # 处理tensor数据

    参考

    https://www.cnblogs.com/overmore/archive/2012/05/29/2524824.html

    PBS 作业管理系统 - 简书

  • 相关阅读:
    软件设计模式
    CentOS 8 通过YUM方式升级最新内核
    第一百三十回 Flutter与原生平台通信
    Java方法调用动态绑定(多态性)详解
    Uniapp 生命周期
    信息检索度量指标(MAP@N, P@N)
    软件工程与计算总结(二十)软件交付
    Jenkins实战:docker compose 搭建Jenkins
    股市资讯天宇优配|政策利好叠加竞争格局向好 机构做多建材板块
    QT 之QStringList
  • 原文地址:https://blog.csdn.net/qq_33419476/article/details/127133874