客户Atlas 200 RC产品运行推理模型系统卡死
2022/08/24
117
问题信息
问题来源 | 产品大类 | 产品子类 | 关键字 |
---|---|---|---|
昇腾伙伴 | 安装部署 | 驱动固件 | Atlas200、RC、OS卡死 |
问题现象描述
硬件配置:4G的Atlas200 AI加速模块(驱动版本:21.0.4)+ 客户自研底板
问题现象:Atlas 200 RC 跑推理系统卡死,重启可以恢复且问题必现
原因分析
关键过程:
由于跑推理模型OS会卡死,重启后日志会被清除,使用gdb打断点的方式运行推理模型,查看Cgroup中的内存使用情况(cat /sys/fs/cgroup/memory/usermemory/memory.usage_in_bytes),发现内存使用为0
根本原因分析:
未配置Memory Cgroup 机制实现业务内存资源控制导致内存耗尽系统卡死
解决措施
配置Memory Cgroup 机制实现业务内存资源控制
- 获取业务应用程序的进程ID,使用sleep命令延迟执行推理命令,使用PS命令获取ID。
- 添加业务进程到 Cgroup:
echo业务应用程序的进程ID > /sys/fs/cgroup/memory/usermemory/cgroup.procs
- 设置内存限额
● 内存限额的计算方法如下:
limit = FreeMem - FreeCma - 预留大小
FreeMem:空闲内存,可通过“cat /proc/meminfo”命令获取“MemFree”的值,并将其单位转换为字节,即:MemFree*1024。
FreeCma:空闲的连续内存,可通过“cat /proc/meminfo”命令获取“CmaFree”的值,并将其单位转换为字节,即:CmaFree * 1024。
预留大小:预留给不在user memory cgroup中的服务进程使用,若设置太小可能会导致内存限额(limit)起不到限制作用,推荐设置为: 200*1024*1024 Byte~300*1024*1024 Byte。
● 内存限额的设置方法如下:
echo limit > /sys/fs/cgroup/memory/usermemory/memory.limit_in_bytes
内存限额设置代码示例:
local free_mem=`cat /proc/meminfo | grep "MemFree" | awk '{print $2}'`
local free_cma=`cat /proc/meminfo | grep "CmaFree" | awk '{print $2}'`
echo $((free_mem * 1024 - free_cma * 1024 - 300 * 1024 * 1024)) > /sys/fs/cgroup/memory/usermemory/ memory.limit_in_bytes
4. 内存不足时应用退出设置。(当业务进程的cgroup达到特定的内存限额后,内核会尝试回收内存,如果内存回收失 败,业务进程会被挂起。若用户不想一直等待,可执行如下操作,实现内存不足时应 用程序自动退出。)
步骤1 开启操作系统OOM Killer机制。
登录Atlas 200,以root用户执行如下命令启用enable_oom_killer,1表示启用,0 表示禁用。
echo 1 > /proc/sys/vm/enable_oom_killer
步骤2 开启memory cgroup的OOM控制机制。
登录Atlas 200,以root用户执行如下命令启用memory cgroup的OOM机制,0表 示“oom kill enable”,1表示“oom kill disable”。
echo 0 > /sys/fs/cgroup/memory/usermemory/memory.oom_contro
本页内容