远程Ubuntu服务器后台运行Jupyter Notebook并利用多核CPU
嘿,我来帮你把nohup、nbconvert这些工具串起来,完美适配你的需求——后台跑多个Jupyter Notebook、退出终端不中断,还能把36核CPU用得满满当当!
核心思路
你之前手动启动Notebook再跑单元格的操作有点繁琐,其实nbconvert自带--execute参数可以直接批量执行Notebook,不用手动操作;再结合nohup实现后台运行,最后用并行工具把36核的算力拉满,不管是多Notebook并行还是单Notebook内多核计算都能搞定。
方案一:多Notebook并行跑(填满36核)
如果你的任务分散在多个独立的Notebook里,这个方案最适合:
批量转换/执行Notebook
先把所有要运行的Notebook放到同一个目录(比如~/notebooks_to_run/),然后用nbconvert批量处理:- 要是想先转成Python脚本方便后续调试,跑这个bash命令:
for nb in ~/notebooks_to_run/*.ipynb; do jupyter nbconvert --to script "$nb" done - 要是想直接执行Notebook并把运行结果保存回原文件(比如保留单元格输出),用
--execute --inplace:jupyter nbconvert --execute --inplace your_notebook.ipynb
- 要是想先转成Python脚本方便后续调试,跑这个bash命令:
并行启动+后台运行
用GNU Parallel工具控制同时运行36个任务(刚好匹配你的CPU核数),再套上nohup让进程在后台持续跑:- 如果是跑Python脚本:
nohup parallel -j 36 python {} ::: ~/notebooks_to_run/*.py & - 如果是直接执行Notebook:
nohup parallel -j 36 jupyter nbconvert --execute --inplace {} ::: ~/notebooks_to_run/*.ipynb &
解释下:
-j 36就是限制同时运行36个进程,:::后面是要处理的文件列表,nohup会把输出默认写到nohup.out里。- 如果是跑Python脚本:
方案二:单Notebook内多核计算
如果你的任务集中在几个大Notebook里,每个Notebook的计算可以拆分并行,那直接在Notebook里用Python并行库,再后台执行:
在Notebook里写并行代码
比如用joblib(简单易上手):from joblib import Parallel, delayed import numpy as np def your_task(i): # 这里写你的计算逻辑,比如数据处理、模型训练 return np.sum(np.random.rand(1000000)) # 用36个进程并行执行任务 results = Parallel(n_jobs=36)(delayed(your_task)(i) for i in range(100))后台执行这个Notebook
用nohup直接执行,退出终端也不会中断:nohup jupyter nbconvert --execute --inplace your_big_notebook.ipynb &
小技巧与注意事项
- 日志拆分:nohup默认把所有输出写到
nohup.out,多任务并行时日志会很乱,你可以指定每个任务单独生成日志:
这样每个脚本的日志会存在nohup parallel -j 36 python {} > ~/notebook_logs/{/.}.log 2>&1 ::: ~/notebooks_to_run/*.py &~/notebook_logs/目录下,文件名和脚本名对应,排查问题更方便。 - 资源监控:用
htop命令可以实时查看CPU使用情况,确认是不是真的用到了36核。 - 替代nohup的工具:如果想更灵活地管理后台任务(比如随时重新连接查看输出),可以用
screen或tmux:
比如用screen:
在这个会话里运行并行命令,按screen -S notebook_runnerCtrl+A+D断开会话,下次登录用screen -r notebook_runner就能重新连接。 - 避免资源冲突:如果多个Notebook要读写同一个文件,记得加锁或者确保任务之间没有依赖,不然会出现数据错乱。
内容的提问来源于stack exchange,提问作者eternity1
相关产品推荐
相关产品推荐

