glibc可以通过Tunables参数来设置malloc使用大页,注意该特性对glibc的版本有要求,可通过ldd --version命令确认当前glibc版本。
glibc版本
|
启用方式
|
2.28到2.34之间(不包括2.34)
|
- 首先需要额外安装libhugetlbfs库。
- 安装完成后通过命令find /usr -name "libhugetlbfs.so*"寻找对应动态库路径。一般在/usr/lib64/libhugetlbfs.so路径下,然后执行以下命令:
export HUGETLB_MORECORE=yes
export LD_PRELOAD=/usr/lib64/libhugetlbfs.so
glibc版本低于2.34(不包括2.34)只能通过libhugetlbfs库的能力使用标准大页。
|
大于等于2.34
|
- 导入环境变量export GLIBC_TUNABLES=glibc.malloc.hugetlb=1,其中1表示glibc的malloc函数会使用透明大页。
- export GLIBC_TUNABLES=glibc.malloc.hugetlb=2,2表示glibc的malloc函数会使用标准大页。
|
- 如果训练模型场景下,使用标准大页出现报错: Bus error. It is possible that dataloader's workers are out of shared memory. Please try to raise your shared memory limit. ,可以尝试使用透明大页规避这个问题。
- 若在容器中使用,请先确保容器环境有权限申请大页内存池;低版本glibc(glibc版本低于2.34)采用libhugetlbfs申请大页的方式。