启用 Ubuntu 22.04 的 HugePages

保存时间:2026/4/2 19:37:55


启用 Ubuntu 22.04 的 HugePages
内容由豆包 AI 生成
- 确保操作系统支持大内存(如Linux内核需启用 hugepages )。 我使用的是ubuntU 22.04操作系统。1024g的内存在使用命令行工具free是能看到有那么大的内存。这是否说明他已经使用了hugepage这个选项呢?
已完成思考
我现在需要回答用户关于 Ubuntu 22.04 是否启用了 HugePages 的问题。用户提到他有 1024GB 内存,并且通过 free 命令看到了正确的内存大小,但不确定是否已经启用了 HugePages。
首先,我要回忆一下 HugePages 的作用。HugePages 是 Linux 内核的一个功能,它允许使用比普通页面更大的内存页(通常是 2MB 或 1GB),这可以减少页表条目,提高内存访问效率,特别是对于大型应用程序,比如运行大模型的推理任务。但默认情况下,HugePages 可能没有启用,或者配置的数量不足。
用户的问题核心是:free 命令显示内存正确是否意味着 HugePages 已经启用?我的回答应该是否定的。因为 free 命令显示的是系统的总内存,包括普通页和 HugePages,但 HugePages 的启用需要额外的配置步骤,比如设置 vm.nr_hugepages 参数,并且可能需要重启系统。
接下来,我需要提供具体的步骤来检查 HugePages 的状态。首先,用户可以通过命令查看当前的 HugePages 配置,比如 cat /proc/meminfo 中的 HugePages_Total 和 HugePages_Free。如果这两个值都为 0,说明未启用。然后,用户需要编辑 /etc/sysctl.conf 文件,添加 vm.nr_hugepages=xxx,其中 xxx 是所需的 HugePages 数量,通常根据模型的大小来调整。例如,对于 4 位量化的 671B 模型,可能需要设置较大的数值,比如 200000 个 2MB 的 HugePages,这相当于约 400GB 内存。但用户需要根据实际情况调整,避免超过物理内存。
另外,用户可能需要了解如何计算所需的 HugePages 数量。例如,每个 HugePage 的大小是 2MB,总内存需求是模型大小加上其他开销。比如,如果模型量化后占用 335GB,那么需要大约 167500 个 HugePages(335GB / 2MB)。但实际配置时可能需要更大的数值,因为系统可能需要预留一些空间。
用户还可能遇到的问题是,启用 HugePages 后,内存可能会被锁定,无法被其他进程使用,所以需要确保预留足够的内存。此外,某些应用程序可能需要特定的配置才能利用 HugePages,比如 llama.cpp 可能需要在启动时指定 --mlock 选项来锁定内存到 HugePages。
最后,我需要提醒用户,修改 sysctl.conf 后需要执行 sysctl -p 来生效,并且可能需要重启系统才能完全应用。同时,如果用户遇到内存不足的问题,可能需要调整 HugePages 的数量或检查其他资源占用情况。
总结一下,用户的问题需要分步骤回答:解释 free 命令不显示 HugePages 状态,指导如何检查当前配置,如何配置 HugePages,以及注意事项。确保用户能够正确启用 HugePages 以优化大模型的运行效率。
根据您的描述,free命令显示内存总量正确仅说明系统识别了物理内存,但HugePages 是否启用需单独验证。以下是详细分析和操作指南:

一、HugePages 状态检查

1. 查看当前 HugePages 配置

bash
运行
cat /proc/meminfo | grep -i huge
  • 关键指标
    • HugePages_Total:已分配的 HugePages 数量
    • HugePages_Free:可用的 HugePages 数量
  • 示例输出(未启用时):
    plaintext
    AnonHugePages:         0 kB
    HugePages_Total:       0
    HugePages_Free:        0
    

2. 结论

  • HugePages_Total为 0,说明未启用 HugePages。
  • free命令无法直接反映 HugePages 状态。

二、启用 HugePages 的步骤

1. 计算所需 HugePages 数量

  • 公式总HugePages数量 = 模型内存占用 / HugePage大小
  • 示例(4 位量化的 671B 模型):
    • 模型内存:335.5 GB(= 671B × 0.5 bytes)
    • 单个 HugePage 大小:2 MB(默认值)
    • 需分配约 167,500 个 HugePages(335.5 GB / 2 MB ≈ 167,500)

2. 临时启用(无需重启)

bash
运行
sudo sysctl -w vm.nr_hugepages=167500
  • 验证:再次运行cat /proc/meminfo | grep -i huge,检查HugePages_Total是否变为 167500。

3. 永久生效(重启后保持)

编辑配置文件:
bash
运行
sudo nano /etc/sysctl.conf
添加以下行(根据计算结果调整数值):
plaintext
vm.nr_hugepages = 167500
保存后执行:
bash
运行
sudo sysctl -p

三、注意事项

1. 内存预留

  • HugePages 会锁定物理内存,需确保预留足够空间:
    bash
    运行
    # 总HugePages占用 = 167500 × 2 MB = 335 GB
    # 剩余内存需 >= 系统其他进程需求(建议预留至少200 GB)
    

2. 与推理框架的配合

  • llama.cpp:需在启动时添加--mlock参数强制使用 HugePages:
    bash
    运行
    ./main -m model.gguf --mlock ...
    
  • 其他框架:如 DeepSeek 官方推理库,需参考其文档配置内存锁定。

3. 潜在问题

  • 内存不足:若分配 HugePages 后系统内存不足,可能导致内核 OOM killer 终止进程。
  • 性能瓶颈:HugePages 对内存带宽要求较高,需确保 CPU 支持高速内存(如 DDR5)。

四、总结

  • 现状free命令无法验证 HugePages 是否启用,需通过/proc/meminfo检查。
  • 操作建议
    1. 临时启用:sudo sysctl -w vm.nr_hugepages=XXX
    2. 永久生效:修改/etc/sysctl.conf并执行sudo sysctl -p
    3. 配合推理框架使用--mlock参数。
通过以上步骤,可确保系统为大模型推理优化内存使用效率。
我如何修改 Ubuntu 系统内核参数让操作系统使用 huge pages?意思就是说使用两兆的 page 这个 size 这个参数要怎么设呢?
在 Ubuntu 22.04 系统中,要使用 2M 的 Huge Pages,可参考以下方法:

临时设置

  1. 查看当前 Huge Pages 配置:执行cat /proc/meminfo | grep -i huge命令,查看当前 Huge Pages 的相关信息,确认HugePages_Total等参数的值。
  2. 设置 Huge Pages 数量:使用echo命令设置/proc/sys/vm/nr_hugepages文件来指定要使用的 Huge Pages 数量,如sudo echo 100 > /proc/sys/vm/nr_hugepages,此例中设置了 100 个 2M 的 Huge Pages。不过,使用echo命令向/proc文件系统写入可能会遇到权限问题,也可使用sysctl命令替代,如sudo sysctl -w vm.nr_hugepages=100

永久设置

  1. 编辑配置文件:打开终端,以管理员权限编辑/etc/sysctl.conf文件,命令为sudo nano /etc/sysctl.conf
  2. 添加配置项:在/etc/sysctl.conf文件末尾添加vm.nr_hugepages = [数量],如vm.nr_hugepages = 100,根据实际需求修改数量。
  3. 使配置生效:保存/etc/sysctl.conf文件后,执行sudo sysctl -p命令,让新的配置立即生效。
配置完成后,可再次执行cat /proc/meminfo | grep -i huge命令,检查HugePages_Total的值是否与设置相符,以确认 Huge Pages 是否配置成功。
首先我的系统里面 huge page size 是 2048,这个要首先要改掉才行啊。
在 Ubuntu 22.04 系统中,一般情况下huge page size显示为 2048,单位是 KB,即 2M,通常不需要修改。如果你确实想修改,以下操作可能涉及到内核参数等底层设置,需要谨慎操作:

查看系统支持的 Huge Pages 大小

执行cat /proc/meminfo | grep Hugepagesize命令,确认当前系统的 Huge Pages 大小。执行getconf PAGE_SIZE可以查看系统默认的页面大小。

检查内核配置支持

检查系统内核是否支持你想要设置的 Huge Pages 大小。可以查看/boot/config-$(uname -r)文件中是否有相关配置选项,如CONFIG_HUGETLB_PAGE等。例如,如果想设置 1GB 的 Huge Pages,需要内核支持CONFIG_HUGETLB_PAGE_1GB等相关配置。

临时修改

若内核支持,可通过sysctl命令临时修改,如要设置为 1GB(1073741824 字节)的 Huge Pages,命令为sudo sysctl -w vm.nr_hugepages=10(假设需要 10 个 1GB 的 Huge Pages),同时可能需要设置sudo sysctl -w vm.hugetlb_shm_group=your_group_id,将your_group_id替换为实际的组 ID,用于指定共享内存的访问权限。

永久修改

如果想永久生效,编辑/etc/sysctl.conf文件,添加或修改vm.nr_hugepages=10vm.hugetlb_shm_group=your_group_id,保存后执行sudo sysctl -p使配置生效。
修改 Huge Pages 大小可能会影响系统性能和稳定性,在生产环境中操作前,建议充分测试并备份重要数据。
参考 4 篇资料
如何验证HugePages是否生效?
怎样永久设置HugePages参数?