用于在 Jupyter Notebooks 中使用的工具集合
项目描述
NB工具
用于监控正在运行的 Jupyter Notebook 并与之交互的工具集合。
安装应该很简单:
pip install py-nbtools
NBstat
这个包的主要工具是nbstat / nbwatch命令行实用程序。它在安装时添加,并显示每个正在运行的 Jupyter Notebook 的每个进程的详细资源利用率。一张gif胜过一千个字:
在该watch
模式下,您可以点击按钮来修改显示的视图:
tab
—来回交换视图nbwatch
。devicewatch
b
— 切换某些资源的条形表示:除了其值之外,还显示彩色条。m
— 切换某些资源的移动平均列:值是最新迭代的平均值。s
— 切换表格分隔符。
我们还添加了显示具有相同信息和参数的转置视图的devicestat和devicewatch命令。
有关更多信息,请查看完整的用户文档:不同表格视图、命令行选项和即用型片段的说明。
故障排除:PID 命名空间、用户权限和僵尸进程
NVIDIA 驱动程序的一个已知问题是nvidia-smi在全局命名空间中报告设备上的进程 PID,而不是在容器命名空间中,这不允许将容器进程的 PID 与其设备 PID 匹配。有一些解决方法:
- 将
--pid=host
标志传递给docker run
. - 修补 NVIDIA 驱动程序以正确处理 PID 命名空间。
- [仅限 Linux] 手动检查/proc/PID/文件以识别容器内每个进程的主机 PID 的回退。
虽然nbstat
为容器提供了几个后备方案(并打算随着时间的推移为更多环境提供Linux
支持),但防弹的方法是使用. 添加它可以立即解决大部分问题。--pid=host
docker run
有时会在 NVIDIA 设备上发生的另一件事是僵尸进程:通过错误地终止使用 GPU 的进程,您最终可能会陷入设备内存被不存在的进程占用的情况。据我所知,不重启是没有办法杀死它们的,nbstat
只是用红色标记这些过程。
为了检查进程的某些属性,我们依赖于在命令运行时已经提供了所有必要的权限。nbstat
对某些属性有一些后备,我目前致力于在拒绝访问文件的情况下改进错误处理。
贡献
如果您有兴趣贡献,请查看开发者/贡献者页面。它包含关于图书馆内部运作的详细描述、我的设计选择和背后的动机,以及对沿途复杂性的讨论。
pylint_notebook
无耻地取自pylint 页面:
使用 Python 代码检查 Jupyter Notebooks 中的错误、尝试执行编码标准并查找代码异味的函数。它还可以查找某些类型错误,可以推荐有关如何重构特定块的建议,并可以为您提供有关代码复杂性的详细信息。
使用它很简单:
from nbtools import pylint_notebook
pylint_notebook(path_to_ipynb, # If not provided, use path to the current notebook
disable='invalid-name', # Disable specified Pylint checks. Can be a list.
enable='import-error') # Enable specified Pylint checks. Can be a list.
在后台,它将.ipynb
笔记本转换为.py
脚本,创建自定义.pylintrc
配置,运行pylint
并删除所有临时文件。在教程中了解有关其用法的更多信息。
run_notebook
eval
为以编程方式运行 Jupyter Notebooks提供类似的接口。我们使用它来运行易于使用的交互式测试:如果出现任何故障,可以直接使用已经设置好的环境进行修复。
from nbtools import run_notebook
run_notebook(path_to_ipynb, # Which notebook to run
out_path_ipynb, # Where to save result
inputs={'learning_rate': 0.05,}, # Pass variables to notebook
outputs=['accuracy']) # Extract variables from notebook
set_gpus
选择空闲设备并设置CUDA_VISIBLE_DEVICES
环境变量,以便当前进程只能看到它们。
消除了大量与 GPU 使用相关的错误和意外行为。
from nbtools import set_gpus
set_gpus(n=2, # Number of devices to set.
min_free_memory=0.7, # Minimum amount of free memory on device to consider it free.
max_processes=3) # Maximum amount of processes on device to consider it free.
其他功能
from nbtools import (in_notebook, # Return True if executed inside of Jupyter Notebook
get_notebook_path, # If executed in Jupyter Notebook, return its absolute path
get_notebook_name, # If executed in Jupyter Notebook, return its name
notebook_to_script) # Convert Jupyter Notebook to an executable Python script.
# Works well with magics and command line executions.
目标
这个库最初是一个工具容器,是我作为 ML 研究员时遇到/开发的。由于一些函数在多次重构迭代中幸存下来,我决定共享该库,以便更容易完善它们并在不同环境中进行测试。
该项目的另一个目标是展示如何在真实世界的示例中与 Jupyter API 进行通信:您可以在一个地方找到收集的相同信息,而不是阅读大量的 stackoverflow 线程,并粗略了解它的可能性什么不是。
致谢
nbstat模块基于gpustat包构建。多年来使用gpustat让我对可能的改进有了一个想法,这些改进是在这个库中实现的。虽然实现方式不同,但通读gpustat的代码对于开发来说是必不可少的。
动画 GIF 是使用Terminalizer创建的:除了安装的常见问题外,该工具本身也很棒。