AI服务器内存怎么配:容量估算与NUMA调优要点
AI服务器内存配置不是简单插满内存条,先算容量再调系统参数才不容易浪费或OOM。
下面按容量估算、系统参数调整、NUMA绑定和验证四步说明,适用于Linux环境下的本地模型推理或训练节点。
先估算内存容量,再决定买多少
内存容量主要看模型参数加载后的占用和并发请求的缓存。
用公式粗算:模型权重内存约等于参数量乘以每参数字节数。
FP16精度下每参数约2字节,INT8约1字节,FP32约4字节。
例如70亿参数模型FP16加载约14GB,加上推理框架缓存和操作系统占用,单卡节点建议至少32GB内存起。
如果并发请求多,KV Cache会额外占用显存和内存,需要留出余量。
实操时先确认模型文件大小和推理框架的内存占用报告。
以Hugging Face模型为例,查看pytorch_model.bin或safetensors文件总大小,再乘1.5到2倍作为内存规划下限。
训练场景还要考虑数据加载缓存,建议按数据集大小单独预留。
调整内核参数,避免内存被过度交换
Linux默认vm.swappiness=60,在内存压力下容易把AI进程换出到磁盘,导致推理延迟飙升。
建议在/etc/sysctl.conf中改为:
vm.swappiness = 10
vm.overcommit_memory = 1
执行sysctl -p生效。overcommit_memory=1允许内存超额分配,适合训练框架预分配大块内存的场景。
但要注意,如果物理内存不足,进程可能被OOM Killer终止,所以容量估算不能省。
另外检查透明大页(THP)设置。
部分推理框架建议关闭THP以减少延迟抖动,可执行echo never > /sys/kernel/mm/transparent_hugepage/enabled临时关闭,写入/etc/rc.local可持久化。
NUMA绑定:多路服务器必须做的检查
双路CPU服务器内存分属不同NUMA节点,跨节点访问内存延迟更高。
先运行numactl --hardware查看节点和内存分布。
如果模型推理进程跑在节点0的CPU上却访问节点1的内存,性能会下降。
启动推理服务时用numactl --cpunodebind=0 --membind=0绑定CPU和内存到同一节点。
Docker容器可通过--cpuset-cpus和--memory限制资源,但NUMA绑定需在宿主机层面配合。
修改后观察numastat中的numa_hit和numa_miss比例,numa_miss持续偏高说明绑定没生效或进程跨节点访问。
验证配置效果
用free -h确认总内存和可用内存符合预期。
用cat /proc/meminfo | grep -E 'MemAvailable|SwapCached'检查可用内存和交换缓存。
运行推理任务后,用pidstat -r -p 观察进程的缺页和换页情况,majflt/s持续大于0说明发生了磁盘交换,需要回头检查swappiness和容量。
避坑提醒:不要只看总内存数字,MemAvailable才是实际可用值;
调整overcommit_memory后要观察dmesg是否有OOM记录;
NUMA绑定前确认进程实际运行的CPU核,避免绑到空闲节点导致负载不均。
完成以上步骤后,再看推理延迟和吞吐是否稳定,比单纯插内存更有意义。