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 里优先采用以下做法:
- 显式调用
print或repr,尽量不要依赖 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 exec、ray 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