昇腾故障案例详情页

客户Atlas 200 RC产品运行推理模型系统卡死

更新时间: 2022/08/24

暂无评分

问题信息

问题来源产品大类产品子类关键字
昇腾伙伴安装部署驱动固件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 机制实现业务内存资源控制

  1. 获取业务应用程序的进程ID,使用sleep命令延迟执行推理命令,使用PS命令获取ID。
  2. 添加业务进程到 Cgroup:

    以root用户执行如下命令:

    echo业务应用程序的进程ID > /sys/fs/cgroup/memory/usermemory/cgroup.procs

  3. 设置内存限额

● 内存限额的计算方法如下:

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

本页内容

该页面对您有帮助吗?
我要评分