一、服务器上运行程序报错out of memory
1.使用命令nvidia-smi,看到GPU显存被占满:
nvidia-smi(NVIDIA System Management Interface)是一种命令行实用程序,用于监控和管理 NVIDIA GPU (英伟达图形处理器)的状态和性能。它提供了一种简单而强大的方式来获取有关 GPU 的实时信息,并且可以用于诊断、优化和管理 GPU 资源。
详细的信息可以去手册中查找:man nvidia-smi
在大多数情况下,nvidia-smi 是与 NVIDIA GPU 驱动程序一起安装的,当安装 NVIDIA GPU 驱动程序时,nvidia-smi 工具通常会自动包含在驱动程序软件包中,并在安装过程中将其放置在适当的位置。
原文链接:https://blog.csdn.net/daydayup858/article/details/131633445
2.尝试使用 ps aux|grep PID命令查看占用GPU内存的线程的使用情况。如下
解决办法:
1.根据以上操作即可确认同与你使用一台服务器的其他人是谁在占用GPU。与对方沟通后如果程序已经跑完但是仍在占用显存可KILL掉该进程。
***因服务器资源有限,大家在使用过程中及时互相沟通,保证机器利用效率。
2.多GPU的服务器在程序训练EPOCH 较多的时候应该指定GPU_DEVICE,不要占用全部资源。
3.使用jupyter的同学在程序结束后应当及时在RUNNING界面将程序shutdown,否则该程序还会一直占用资源。(如下)
nvidia-smi 面板解析
GPU:本机中的GPU编号,从0开始,上图为0,1,2,3四块GPU
Fan:风扇转速(0%-100%),N/A表示没有风扇
Name:GPU名字/类型,上图四块均为NVIDIA GeForce RTX 3080
Temp:GPU温度(GPU温度过高会导致GPU频率下降)
Perf:性能状态,从P0(最大性能)到P12(最小性能),上图均为P2
Pwr:Usager/Cap:GPU功耗,Usage表示用了多少,Cap表示总共多少
Persistence-M:持续模式状态,持续模式耗能大,但在新的GPU应用启动时花费时间更少,上图均为On
Bus-Id:GPU总线
Disp.A:Display Active,表示GPU是否初始化
Memory-Usage:显存使用率
Volatile GPU-UTil:GPU使用率,与显存使用率的区别可参考显存与GPU
Uncorr. ECC:是否开启错误检查和纠错技术,0/DISABLED,1/ENABLED,上图均为N/A
Compute M:计算模式,0/DEFAULT,1/EXCLUSIVE_PROCESS,2/PROHIBITED,上图均为Default
Processes:显示每个进程占用的显存使用率、进程号、占用的哪个GPU
Reference:Adenialzz
补充:ECC纠错
ECC(Error Correction Code)纠错码,是一种在数据传输或存储过程中用于检测和纠正错误的技术。在数据传输过程中,由于噪声、干扰或设备故障等原因,数据可能会发生错误。ECC纠错码被设计用来检测这些错误,并尽可能地纠正它们,以确保数据的完整性和准确性。
ECC纠错码使用一系列算法和技术,将原始数据编码为一组冗余数据,称为校验码。这些校验码根据数据的特定规则计算得出,并随着数据一起传输或存储。接收方在接收到数据后,会使用相同的算法和技术对接收到的数据进行校验码的计算。然后,接收方会比对原始数据和校验码,如果发现错误,则会尝试通过纠正算法自动修复错误,恢复原始数据的准确性。
ECC纠错码的使用可以提高数据传输和存储系统的可靠性。它常用于存储介质(如硬盘、闪存)和通信渠道(如网络传输)中,以确保数据的完整性和可靠性。ECC纠错码的应用领域包括计算机存储系统、无线通信、数字广播等。不同类型的ECC纠错码有不同的纠错能力,可以根据特定的需求选择适当的纠错码。
2. nvidia-smi 常用选项
注意⚠️:命令的可用选项和输出可能会因 NVIDIA 驱动程序版本和 GPU 型号而有所不同,可以通过 nvidia-smi --help 命令查看完整的选项列表和用法说明。
-h 查看帮助手册:nvidia-smi -h
动态地观察 GPU 的状态:watch -n 0.5 nvidia-smi
-i 查看指定GPU:nvidia-smi -i 0
-L 查看GPU列表及其UUID:nvidia-smi -L
-l 指定动态刷新时间,默认5秒刷新一次,通过Ctrl+C停止:nvidia-smi -l 5
-q 查询GPU详细信息:nvidia-smi -q
只列出某一GPU的详细信息,可使用 -i 选项指定:nvidia-smi -q -i 0
在所有 GPU 上启用持久性模式:nvidia-smi -pm 1
指定开启某个显卡的持久模式:nvidia-smi -pm 1 -i 0
以 1 秒的更新间隔监控整体 GPU 使用情况:nvidia-smi dmon
以 1 秒的更新间隔监控每个进程的 GPU 使用情况:nvidia-smi pmon
补充:UUID
GPU的UUID(Universally Unique Identifier)是一个用于唯一标识GPU设备的字符串。它是一个由一串字符和数字组成的标识符,用于区分不同的GPU设备。
每个GPU设备都有一个唯一的UUID,它通常由硬件制造商或驱动程序分配,并在系统中进行记录。UUID的生成方式可能因GPU设备的制造商和操作系统而有所不同。UUID在计算机系统中具有广泛应用。在GPU计算中,UUID可以用于标识和管理不同的GPU设备。它可以被用作系统中的设备索引,使软件能够明确地与特定的GPU设备进行交互和通信。
3. 显存与GPU的区别
显存(Video RAM,VRAM)和 GPU(Graphics Processing Unit)是计算机图形处理中的两个不同概念。
显存(VRAM):显存是一种特殊类型的内存,用于存储图形数据和纹理等与图像显示相关的数据。它通常位于独立的显卡(或显卡集成在主板上的集成图形处理器)中,也被称为图形存储器。显存具有高带宽和低延迟的特点,可用于快速读取和写入图像数据,以供 GPU 进行图形渲染和处理。显存的容量通常以兆字节(MB)或千兆字节(GB)为单位。
GPU(图形处理单元):GPU 是一种专门设计用于处理图形和图像数据的处理器。它是计算机图形渲染和加速的关键组件。GPU 负责执行图形渲染管线中的各个阶段,包括几何计算、光栅化、像素处理等,以生成最终的图像。GPU 还能执行通用计算任务,因此在许多领域,如科学计算、机器学习和密码破解等,GPU 也被广泛应用。显存是 GPU 的一部分,用于存储 GPU 处理所需的图形数据。
总结起来,显存是一种专门用于存储图形数据的内存,而 GPU 是一种专门用于处理图形和图像数据的处理器。显存和 GPU 是紧密相关的,GPU 使用显存来存储和处理图形数据,以实现高性能的图形渲染和处理能力。
二、云
云计算分为
- IaaS(基础设施即服务):提供商提供虚拟化计算资源,如虚拟机、存储、网络和操作系统。
- PaaS(平台即服务):通过互联网为开发人员提供构建应用程序和服务的平台。
- SaaS(软件即服务):通过互联网为用户提供按需软件付费应用程序。
- 开源云平台:AbiCloud、Hadoop、Eucalyptus、MongoDB、OpenStack
- 商业化云平台:Google、IBM、Oracle、Amazon、阿里云等
OpenStack,由一系列模块构成的开源软件平台,它允许组织和企业构建和管理基础设施即服务(IaaS)云环境。OpenStack最初由NASA和Rackspace公司合作开发,并于2010年首次发布,从那时起,它已经成为构建公共云、私有云、混合云的一种流行方式。
OpenStack也具有众多优势,包括灵活性、可扩展性、开源性等等。使用OpenStack,用户可以在任何地方快速部署和管理基础架构,而无需依赖云服务提供商。此外,用户可以根据自己的需求轻松地扩展OpenStack,以满足其不断变化的需求。由于OpenStack是开源软件,用户可以自由地查看、修改和共享OpenStack的代码和功能。
OpenStack是一个功能强大的、灵活的、可扩展的、开源的IaaS云计算平台,可以帮助组织和企业构建和管理云环境。它的可插拔模块、灵活性和可扩展性使得OpenStack在各种不同的云计算场景中都具有广泛的应用。
OpenStack在架构上一般分为三个层次:
1、用户层:用户可以通过各种方式来访问OpenStack云环境,如Web界面、API、CLI等。
2、应用层:应用层是OpenStack云环境中运行的应用程序和服务,例如虚拟机、存储、网络、数据库等。
3、控制层:控制层是OpenStack云环境中的核心组件,用于管理和协调应用层的资源。
OpenStack的控制层包括以下几个核心组件:
1、Nova:Nova是OpenStack计算服务的核心组件,管理OpenStack中的计算资源,包括虚拟机、实例、镜像等。它允许用户在OpenStack云环境中创建和管理虚拟机。Nova提供了许多功能,如实例调度、镜像管理、网络和安全组管理等。
2、Neutron:Neutron是OpenStack网络服务的核心组件,管理OpenStack中的网络资源,包括网络、子网、路由器、安全组等。它提供了一个灵活的、可扩展的网络框架,使用户可以在OpenStack云环境中创建和管理网络。Neutron支持虚拟化网络和物理网络,并提供了各种网络服务,如路由、负载均衡、防火墙等。