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
      
  • 相关阅读:
    CSS3单选动画
    CSS3不一样的下拉选择框
    CSS3实现3d菜单翻转
    CSS3实现加载数据动画2
    CSS3实现加载数据动画1
    MySQL事务隔离级别和Spring事务关系介绍(转载)
    Elasticsearch7.5&Kibana7.5安装
    用nginx实现https请求转http请求(转)
    elasticsearch中多个字段聚合两种方法介绍
    window 同时安装python2和python3
  • 原文地址:https://www.cnblogs.com/xxxxxxxxx/p/11994696.html
Copyright © 2011-2022 走看看