昇腾社区首页
中文
注册
开发者
下载

高性能内存分配器

jemalloc是一款内存分配器,与传统内存分配器(例如,glibc)相比,其最大优势在于减少内存碎片和提升多线程高并发场景下内存的分配效率,进而充分发挥多核多并发的优势

在内存分配过程中,锁会造成线程等待,对性能影响很大。jemalloc采用如下措施避免线程竞争锁的发生:使用线程变量,每个线程有对应的内存管理器,内存分配在该线程内完成,无需和其它线程竞争锁。

开启与关闭

通过配置环境变量,开启或关闭jemalloc内存分配器

开启:

1
export LD_PRELOAD=/usr/local/Ascend/ascend-toolkit/latest/lib64/libjemalloc.so

关闭:

unset LD_PRELOAD=/usr/local/Ascend/ascend-toolkit/latest/lib64/libjemalloc.so

请将示例中“/usr/local/Ascend/ascend-toolkit/latest”替换为CANN软件安装后实际路径。以Toolkit的默认安装路径为例,root用户:“/usr/local/Ascend/ascend-toolkit/latest”,非root用户:“${HOME}/Ascend/ascend-toolkit/latest”。

实际应用

经过开发人员的实际测试,jemalloc在基于MindIE框架的推理场景下,一定程度可以提升推理性能。以下模型性能基于MindIE Benchmark工具进行测试,因为使用硬件和软件存在差异,以下实验数据仅作为对照使用,并非性能标准。

表1 实验数据

模型

并发数

输入长度

实验次数

不开启jemalloc

(tokens/s)

开启jemalloc

(tokens/s)

性能收益(%)

qwen2_7b

1

128

实验1

151.123

155.3789

2.82

实验2

151.2461

155.362

2.72

实验3

151.5677

154.433

1.89

平均值

151.3122667

155.0579667

2.48