跳转至

Working with Jupyter

Abstract

本文档总结在 Notebook 中使用 Ray 的关键最佳实践。

  • 确保磁盘余量,避免满盘导致 Notebook 频繁失败
  • 控制 IPython 缓存,减少 Ray 对无用对象的 pin
  • EC2 上明确 Notebook 角色,并做好端口转发

配置与注意事项

磁盘空间

如果你计划在 Amazon EC2 实例上运行 Notebook,请确保实例具有足够的 EBS 存储空间。 Deep Learning AMI 及其预装的库和环境默认会占用约 76% 的磁盘空间,在运行 Ray 之前就已经如此。 随着更多应用运行,Notebook 可能会因为磁盘空间耗尽而频繁失败。

Warning

Kernel 重启会丢失当前单元格的输出,尤其是在依赖这些输出跟踪实验进度时。

内存与输出

IPython 会把每个单元格的输出存到本地 Python 变量中(默认会无限期缓存)。 当这些输出包含由 Ray 产生的对象时,Ray 可能会把它们视为仍被引用,从而被“固定(pin)”在内存中,即便你的业务逻辑已经不再需要它们。

降低缓存放大效应

建议你在 Notebook 里优先采用以下做法:

  • 显式调用 printrepr,尽量不要依赖 Notebook 的自动显示输出
  • 或彻底禁用 IPython 缓存(仍可打印输出,但会停止缓存变量)
    echo 'c = get_config()
    c.InteractiveShell.cache_size = 0 # disable cache
    ' >> ~/.ipython/profile_default/ipython_config.py
    

Warning

即使禁用了缓存,仍建议及时删除不再需要的引用,以尽快释放 Object Store 中的空间。

角色划分

如果 Notebook 运行在 EC2 实例上,先明确它在流程里扮演的角色。

  • 运行器(推荐):在该实例上本地运行 Ray runtime(Notebook 更适合交互式开发与调试)。
  • 启动器(不推荐):作为集群启动器(cluster launcher)去触发任务。该场景建议改用 CLI 工具,例如 ray execray submit

端口转发

如果 Notebook 运行在 EC2 上,你通常需要把以下端口转发到本地。若默认端口不可用,会自动递增。

  • Notebook:8888
  • Ray Dashboard:8265

你可以按需执行如下命令进行端口转发。替换为你的实例信息:

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