内存设置
神经网络需要内存,而更雄心勃勃的SKIL项目将需要更多的内存分配给SKIL和笔记本。通常,内存不足是作为java.lang.OutOfMemoryError
出现的,并且知道如何更改内存设置可以在将来防止这种情况发生。
环境变量
要解决Zeppelin(笔记本后面的系统)中的内存问题,请增加可用的JVM RAM数量。Zeppelin的默认配置在JVM上提供8GB的RAM和4GB的堆外空间。你可以通过更改默认DEFAULT_ZEPPELIN_JVM_ARGS
环境变量并删除“进程”选项卡中的Zeppelin解释器进程来扩展这些参数。
设置此变量有两种方法:
启动SKIL Docker容器时指定-e
- 把它添加到
/etc/skil/skil-env.sh
(或 /etc/profile.d/skil-env.sh 如果 /etc/skil-env.sh 不存在)
如果你有一个GPU(如K80),那么以下几行足以使你的系统最大化:
Shell
DEFAULT_ZEPPELIN_JVM_ARGS=-Xmx16g -Dorg.bytedeco.javacpp.maxbytes=16G -Dorg.bytedeco.javacpp.maxphysicalbytes=16G -Dorg.nd4j.versioncheck=false -Dorg.deeplearning4j.config.custom.enabled=false
image.gif
更新设置后,需要重新启动SKIL。如果你安装了bare-metal SKIL:
Shell
sudo systemctl stop skil
sudo systemctl start skil
image.gif
否则,你需要docker exec进入SKIL docker实例并从bash实例重新启动它。
Docker 内存
在某些情况下,除了其他调整之外,你可能还需要确保Docker在运行时有足够的内存。Windows和OSX上的Docker在用户界面中内置了这些功能。如果在Linux或服务器上运行并使用Docker CLI,则可以将值传递给--memory
标记。请注意,这通常用于限制内存。
你可以在Docker网站上阅读更多内容。
常见错误
通常,当一个SKIL工作间或实验受到内存限制时,它会显示为类似于:
Scala
java.lang.OutOfMemoryError: Cannot allocate new DoublePointer(100000000): totalBytes = 588M, physicalBytes = 4G
at org.bytedeco.javacpp.DoublePointer.<init>(DoublePointer.java:76)
at org.nd4j.linalg.api.buffer.BaseDataBuffer.<init>(BaseDataBuffer.java:549)
...
image.gif
取决于你的代码中使用的NDArray的数据类型,这也可能与FloatPointers
一起出现,或者在内存释放期间出现。
网友评论