zoukankan      html  css  js  c++  java
  • 训练DQN,报错:OSError: [Errno 12] Cannot allocate memory

    训练DQN,报错:OSError: [Errno 12] Cannot allocate memory

    问题介绍:

    这两天在做强化学习的作业,使用 DQN 打 Atari 游戏,但在训练过程中,出现了题目中描述的错误。

    解决方案:

    参考链接( https://github.com/openai/gym/issues/110

    (1)涉及知识:linux 的 overcommit_memoryovercommit_ratio

    • overcommit_memory 是内核对内存分配的一种策略。

    • vm.overcommit_memory 共有三种取值,分别为 0, 1, 2

      • vm.overcommit_memory = 0: 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
      • vm.overcommit_memory = 1: 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
      • vm.overcommit_memory = 2: 拒绝等于或者大于总可用 swap 大小以及 overcommit_ratio 指定的物理 RAM 比例的内存请求。
    • overcommit_ratio 默认为 50,为物理内存分配时的比例。**只有当 vm.overcommit_memory = 2 的时候才会生效 **

    • 查看系统 overcommit 信息

      # cat /proc/meminfo |grep -i commit
      CommitLimit:    90971304 kB
      Committed_AS:   64872556 kB
      
      • CommitLimit: 最大能分配的内存(个人理解仅仅在vm.overcommit_memory=2时候生效),具体的值是
        SWAP内存大小 + 物理内存 * overcommit_ratio / 100
      • Committed_AS: 当前已经分配的内存大小

    (2)解决方法(两种)

    1. 将 overcommit_ratio 设置为 90

      # echo 90 > /proc/sys/vm/overcommit_ratio
      
    2. 将 vm.overcommit_memory 设置为 1

      sudo bash -c "echo vm.overcommit_memory=1 >> /etc/sysctl.conf"
      sudo sysctl -p
      
  • 相关阅读:
    [macOS] git忽略所有的.DS_Store文件
    [macOS] finder变慢提速
    [React Native] change port when running react native
    转载: 我如何使用 Django + Vue.js 快速构建项目
    MySQL Connector/NET 使用小结(踩坑之路)
    C# 控制台程序(Console Application )启动后隐藏
    解决 pycharm can not save setting
    ubuntu 16.04 LTS 安装 teamviewer 13

    Python 编程规范梳理
  • 原文地址:https://www.cnblogs.com/xxxxxxxxx/p/11994696.html
Copyright © 2011-2022 走看看