在GPU集群上运行代码,会面临一些问题:
(1)跑着跑着GPU memory分配失败 – 因为有其他人在使用
(2)运行时显示端口号已被占用,需要你换一个端口。
这个时候一般采取的方法有:
(1)找到是哪个用户占用GPU memory
(2)查看目前哪些端口号没被占用。
因此,这篇blog主要记录出现这两种情况的解决方案。
运行nvidia-smi
,查看集群使用情况
上图展示了GPU memory的总体和各个进程的占用情况。
进程由哪个用户创建?
以PID=3050为例。
$ ps -o user= -p 3050
运行结果:
查询端口号占用情况
执行以下命令:
$ ss -tuln | grep [port]
运行结果示例:
返回信息解读:
tcp: 表示这是 TCP 协议的连接。
LISTEN: 状态为 LISTEN 表示端口正在监听或等待接收传入的连接。
0: 这是“接收队列”的大小。在这里,它表示没有正在等待处理的连接。
128: 这是“最大队列长度”,即可以排队等待接受的连接数。在这里,它被设置为 128,这是 TCP 连接请求的标准最大队列长度。
0.0.0.0:8888 和 [::]:8888: 这表示端口 8888 在所有 IPv4 地址(0.0.0.0)和所有 IPv6 地址([::])上都处于监听状态。换句话说,该端口正在接受来自任何 IP 地址的连接。
运行时指定某一张显卡
# codes to copy
# 1st
import torch
torch.cuda.set_device(1)
#2nd
CUDA_VISIBLE_DEVICES=1 python your_script.py
后记
bash和shell的区别: