限制自己程序占用的硬件资源
0. 硬件资源
CPU:32核心
GPU:3个
Memory:128 GB
1. 限制(指定)程序CPU内核占用数量
运行前限制的方法
通过taskset -c
前缀,将进程绑定到指定的CPU核心上运行。例如:
taskset -c 0-7,9 python AAA.py
上例,使用第0到7与第9,共9个核心。
运行后限制的方法:
- 先正常运行,例如
python AAA.py
pid pgrep -fl AAA.py
找到进程pid(pgrep
是专门用于查找进程的命令,-f
表示使用完整的命令行进行匹配(包括参数),-l
选项表示同时显示进程 ID(PID)和进程名,输出格式通常是:PID process_name
。)- 将进程绑定到指定的核心
taskset -p -c 0-3 xxx(pid)
2. 限制(指定)程序GPU占用数量
使用CUDA_VISIBLE_DEVICIES=X
前缀。例如:
CUDA_VISIBLE_DEVICES=0,2-3 python AAA.py
(事实上并没有第4块显卡,仅供距离)
3. 同时限制CPU内核占用数量与GPU占用数量
结合1与2,由于环境变量(如CUDA_VISIBLE_DEVICES
)需要在命令的上下文中设置,你需要确保环境变量在命令执行时已被正确设置。可以使用env
命令来组合这些设置:
taskset -c 2-3 env CUDA_VISIBLE_DEVICES=1,2 python a.py
- 使用
taskset -c 2-3
将Python脚本a.py
的执行限制在CPU核心2和3上。 - 使用
env CUDA_VISIBLE_DEVICES=1,2
设置环境变量,使得Python程序仅能看到编号为1和2的CUDA设备。
4. 限制内存占用大小
限制当前shell最大使用52GB内存:
ulimit -v $((52*1024*1024))
然后在后面正常使用命令,此shell触发的进程不会超过52GB内存。Matlab等软件也可以通过先敲入上行命令,再输入matlab
命令,也可以达到这个效果。
5. 要将所有的加在一起,把4写在前面,回车,再使用3即可
好耶