使用Jupyter Notebook & JupyterLab#

本文档介绍了在Jupyter Notebook / JupyterLab中使用Ray的最佳实践。我们以AWS为例进行说明,但这些建议也适用于其他云服务提供商。如果您认为本文档遗漏了任何内容,请随时贡献。

设置Notebook#

1. 确保您的EC2实例有足够的EBS卷,如果您计划在该实例上运行Notebook。默认情况下,深度学习AMI、预装库和环境设置在任何Ray工作开始之前将占用约76%的磁盘空间。如果运行其他应用程序,Notebook可能会因为磁盘空间不足而频繁失败。内核重启会丢失正在进行的单元格输出,特别是如果我们依赖它们来跟踪实验进度。相关问题:Autoscaler应允许配置磁盘空间并应使用更大的默认值。

2. 避免不必要的内存使用。IPython将每个单元格的输出无限期地存储在本地Python变量中。这会导致Ray固定(pin)对象,即使您的应用程序实际上并未在 H使用它们。因此,显式调用printrepr比让Notebook自动生成输出更好。另一个选择是完全禁用IPython缓存,如下所示(从bash/zsh运行)

echo 'c = get_config()
c.InteractiveShell.cache_size = 0 # disable cache
' >>  ~/.ipython/profile_default/ipython_config.py

这仍然允许打印,但会完全停止IPython的缓存。

提示

虽然上述设置有助于减少内存占用,但从应用程序中删除不再需要的引用以释放对象存储空间始终是一个好习惯。

3. 理解节点的职责。假设Notebook在EC2实例上运行,您计划在该实例上本地启动一个Ray运行时,还是计划将该实例用作集群启动器?Jupyter Notebook更适合第一种场景。像ray execray submit这样的CLI更适合第二种用例。

4. 端口转发。假设Notebook在EC2实例上运行,您应该转发Notebook端口和Ray Dashboard端口。默认端口分别为8888和8265。如果默认端口不可用,它们会增加。您可以使用以下命令进行转发(从bash/zsh运行)

ssh -i /path/my-key-pair.pem -N -f -L localhost:8888:localhost:8888 my-instance-user-name@my-instance-IPv6-address
ssh -i /path/my-key-pair.pem -N -f -L localhost:8265:localhost:8265 my-instance-user-name@my-instance-IPv6-address