使用 Jupyter Notebook 和 JupyterLab#
本文档介绍了将 Ray 与 Jupyter Notebook / JupyterLab 结合使用的最佳实践。我们以 AWS 为例进行说明,但这些论点也适用于其他云服务提供商。如果您认为本文档缺少任何内容,请随时贡献。
设置 Notebook#
1. 如果您计划在 EC2 实例上运行 Notebook,请确保您的 EC2 实例具有足够的 EBS 卷。深度学习 AMI、预装库和环境设置在进行任何 Ray 工作之前默认会占用大约 76% 的磁盘空间。随着额外应用的运行,Notebook 可能会因磁盘空间不足而频繁失败。内核重启会丢失正在进行的单元格输出,特别是当我们依赖它们来跟踪实验进度时。相关问题:自动扩缩器应允许配置磁盘空间并使用更大的默认值。。
2. 避免不必要的内存使用。IPython 会将每个单元格的输出无限期地存储在本地 Python 变量中。即使您的应用程序可能实际上并没有使用这些对象,这也会导致 Ray 固定这些对象。因此,显式调用 print
或 repr
比让 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 exec
和 ray 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