目标:

利用 jupyterhub 自定义 spawner batchspawner 在PBS批量集群上运行Notebook。

架构图

运行截图





软件版本

软件 版本 下载地址
pbs pbspro_19.1.3.centos_7 https://github.com/openpbs/openpbs/releases/
jupyterhub 1.2.2 pip install jupyterhub==1.2.2
batchspawner 1.1.0 pip install batchspawner==1.1.0
Miniconda3 conda 4.9.2
Python 3.8.13 miniconda创建生成:conda create -n jupyterhub_env python=3.8.13

batchspawner 1.1.0版本 只支持 jupyterhub的版本 在 0.9 - 1.2.2 之间,其余版本会报各种 404,503的错误。

安装PBS

前置

hostname、hosts、firewalld都需要进行设置

下载解压安装

unzip pbspro_19.1.3.centos_7.zip

server 服务器主节点需安装: pbspro-server-19.1.3-0.x86_64.rpm
execution 计算节点需安装:pbspro-execution-19.1.3-0.x86_64.rpm

最小化安装只需安装 配置 server和execution即可。

server 执行:

yum install pbspro-server-19.1.3-0.x86_64.rpm

yum自动安装依赖

execution 执行:

设置一个环境变量,PBS_SERVER,即在安装之前需要指明我们使用哪个节点作为pbs 的server node,

这里运行如下命令进行设置:export PBS_SERVER=cdh2

或者可以跳过设置环境变量先安装,之间修改计算节点的配置文件也可。配置文件路径:/var/spool/pbs/mom_priv/config

yum install pbspro-execution-19.1.3-0.x86_64.rpm

配置

可选项
vim /etc/pbs.conf
PBS_EXEC=/opt/pbs
PBS_SERVER=cdh2
PBS_START_SERVER=1
PBS_START_SCHED=1
PBS_START_COMM=1
# server端也可以运行MOM(执行任务的模块)
PBS_START_MOM=1
PBS_HOME=/var/spool/pbs
PBS_CORE_LIMIT=unlimited
PBS_SCP=/bin/scp

启动:

systemctl start pbs

状态:

/etc/init.d/pbs status

返回信息:

pbs_server is pid 21415
pbs_mom is pid 21121
pbs_sched is pid 21133
pbs_comm is 21100

常见问题

Q:qsub: Bad UID for job execution
A:
qmgr -c "set server flatuid=true"
qmgr -c "set server scheduling=true"
qmgr -c "s s job_history_enable=1"
qmgr -c "set server acl_roots+=root@*"
qmgr -c "set server operators+=root@*"Q:sudo: qsub: command not found
A:ln -s /opt/pbs/bin/qsub /usr/bin/qsubQ:sudo: qstat: command not found
A:ln -s /opt/pbs/bin/qstat /usr/bin/qstatQ:sudo: qdel: command not found
A:ln -s /opt/pbs/bin/qdel /usr/bin/qdel

常用命令

https://segmentfault.com/a/1190000040054812

节点详情:

# qmgr -c "list server"# pbsnodes -aSj

添加计算节点:

qmgr -c "create node cdh3"

删除节点:

qmgr -c "delete node cdh3"

用于提交作业脚本 命令行格式

echo "sleep 60" | qsub

即提交一个 sleep 60的任务,如果一切正常的话,

使用 qstat -a 检查所有任务状态:

(jupyterhub_env) [root@cdh2 ~]# qstat -a
cdh2:Req'd  Req'd   Elap
Job ID          Username Queue    Jobname    SessID NDS TSK Memory Time  S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
6.cdh2          root     workq    STDIN        4085   1   1    --    --  R 00:00

任务详细信息:

qstat -f 55主要会包括以下几个方面信息:
Job ID 任务ID号
Name 任务脚本名称
User 用户名
Time Use 任务运行时间
S State 任务状态
* B 只用于任务向量,表示任务向量已经开始执行
* E 任务在运行后退出
* H 任务被服务器或用户或者管理员阻塞
* Q 任务正在排队中,等待被调度运行
* R 任务正在运行
* S 任务被服务器挂起,由于一个更高优先级的任务需要当前任务的资源
* T 任务被转移到其它执行节点了
* U 由于服务器繁忙,任务被挂起
* W 任务在等待它所请求的执行时间的到来(qsub -a)
* X 只用于子任务,表示子任务完成
* C 表示程序正在被关闭,一般是程序运行错误,报错

安装Miniconda3

执行安装脚本即可,需要安装到NFS上,本示例没给出部署NFS过程

# sh Miniconda3-latest-Linux-x86_64.sh

安装配置 Jupyterhub、batchspawner

安装nodejs、configurable-http-proxy

nodejs 略

npm install -g configurable-http-proxy

安装

#生成py环境
conda create -n jupyterhub_env python=3.8.13
#切换到py环境
source /opt/miniconda3/bin/activate jupyterhub_env
#安装jupyterhub
pip install jupyterhub==1.2.2
pip install batchspawner==1.1.0
# 可选(建议安装)
pip install jupyterlab notebook

Jupyterhub配置(重要)

c.JupyterHub.allow_named_servers = True
c.JupyterHub.named_server_limit_per_user = 5# Same initial setup as the previous example
import batchspawner
c.JupyterHub.spawner_class = 'wrapspawner.ProfilesSpawner'
c.Spawner.http_timeout = 120
#------------------------------------------------------------------------------
# BatchSpawnerBase configuration
#   Providing default values that we may omit in the profiles
#------------------------------------------------------------------------------
c.BatchSpawnerBase.req_host = 'cdh2'
c.BatchSpawnerBase.req_runtime = '12:00:00'c.TorqueSpawner.batch_query_cmd = 'qstat -fx {job_id}'
c.TorqueSpawner.state_pending_re = r'job_state = [QH]'
c.TorqueSpawner.state_running_re = r'job_state = R'
c.TorqueSpawner.state_exechost_re = r'exec_host = ([\w_-]+)/'c.TorqueSpawner.batch_script = '''#!/bin/sh
#PBS -q {queue}@{host}
#PBS -l walltime={runtime}
#PBS -l nodes=1:ppn={nprocs}
#PBS -l mem={memory}
#PBS -N jupyterhub-singleuser
#PBS -v {keepvars}
set -eu
source /opt/miniconda3/bin/activate  jupyterhub_env
{cmd}
'''#------------------------------------------------------------------------------
# ProfilesSpawner configuration
#------------------------------------------------------------------------------
# List of profiles to offer for selection. Signature is:
#   List(Tuple( Unicode, Unicode, Type(Spawner), Dict ))
# corresponding to profile display name, unique key, Spawner class,
# dictionary of spawner config options.
#
# The first three values will be exposed in the input_template as {display},
# {key}, and {type}
#c.ProfilesSpawner.profiles = [( "Local server", 'local', 'jupyterhub.spawner.LocalProcessSpawner', {'ip':'0.0.0.0'} ),('常规 1 cores, 1 GB, 8 hours', '1c1g8h', 'batchspawner.TorqueSpawner',dict(req_nprocs='1', req_queue='workq', req_runtime='8:00:00', req_memory='1gb', req_host='cdh2')),('Interactive Cluster - 2 cores, 4 GB, 8 hours', 'lab', 'batchspawner.TorqueSpawner',dict(req_nprocs='2', req_host='cdh2', req_queue='workq',req_runtime='8:00:00', req_memory='4gb', state_exechost_exp='exec_host = ([\w_-]+)/')),]#c.CondorSpawner.exec_prefix = 'sudo -i -u root'
c.ProfilesSpawner.ip = '0.0.0.0'

不懂的配置可以从github检索

参考

https://www.altair.com/pbs-works-documentation/
https://github.com/openpbs/openpbs
http://thisis.yorven.site/blog/index.php/2020/12/06/openpbs-install-instructions/

https://github.com/jupyterhub/batchspawner

https://github.com/jupyterhub

https://jupyterhub.readthedocs.io/en/stable/quickstart.html#prerequisites

Jupyterhub batchspawner on PBS相关推荐

  1. pbs分解_UML使用产品分解结构(PBS)教程

    Visual Paradigm是包含设计共享.线框图和数据库设计新特性的企业项目设计工具.现在你只需要这样单独的一款模型软件 Visual Paradigm就可以完成用UML设计软件,用BPMN去执行 ...

  2. CIR,CBS,EBS,PIR,PBS傻傻分不清楚?看这里!—-揭秘令牌桶

    概述 春暖花开的时候,大家都开着汽车外出旅游欣赏美丽的风景,却被堵在高速公路上,你是否为此感到痛苦?但如果有一种机制可以评估高速公路上的车流量.控制车流情况,确保进入高速公路的汽车都能在路上安全畅行, ...

  3. Unity5 GI与PBS渲染从用法到着色代码

    本文主要介绍Untiy5以后的GI,PBS,以及光源探头,反射探头的用法以及在着色器代码中如何发挥作用,GI是如何影响渲染的,主要分成三个部分,最开始说明PBS需要的材质与相应概念,二是Unity 里 ...

  4. unity5, custom PBS shader

    unity5中引入了基于物理着色(PBS)的Standard shader.由于这种着色器通过调节参数和贴图可逼真模拟各种硬质表面,所以不必再像unity4时代那样需要对各种质感材质单独编写着色器,而 ...

  5. K8S+Helm 安装 Jupyterhub

    准备配置文件 生成随机数 openssl rand -hex 32 # 8fc2826e9ce6930ec26c9fd541c0620b448a947357edbdf9647516af16bbc798 ...

  6. JupyterHub on Kubernetes-Helm安装

    JupyterHub on Kubernetes-Helm安装 本文编译自 https://zero-to-jupyterhub.readthedocs.io/en/latest/setup-jupy ...

  7. pbs 写matlab作业,pbs提交作业

    如何如何使用使用pbs 提交作业 1 串行任务提交 用户通过qsub 命令来向系统提交任务,有两种方式提交:脚本方式和命令行方式.(一 般情况下,不允许root 用户使用qsub 命令提交作业) 1. ...

  8. pbs分解_产品分解结构

    (重定向自Pbs) 产品分解结构(Product Breakdown Structure,PBS) [编辑] 产品分解结构的概述 产品分解结构是通过树状结构反映产品的各类部件,每类部件在结构中仅出现一 ...

  9. python安装jupyter出现问题_有关jupyterhub安装的问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 有人用过jupyterhub吗,就是ipython的多用户 我安装完成后,启动的时候出现这个问题 File "/usr/local/lib/py ...

  10. PBS 作业调度应用

    PBS(Portable Batch System),最初由 NASA 的 Ames 研究中心开发,主要为了提供一个能满足异构计算网络需要的软件包,用于灵活的批处理(Portable Batch Pr ...

最新文章

  1. python基础 while循环练习
  2. MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法
  3. 氮化镓充电器哪家做得好_氮化镓充电头推荐、100元能买到那些大品牌氮化镓充电器?...
  4. sys接口linux编程,网络编程常用接口的内核实现----sys_listen()
  5. Android应用启动后自动创建桌面快捷方式
  6. rez注入器源码_CF-rez-Tool crossfire的REZ文件全套修改工具 - 下载 - 搜珍网
  7. python笔试编程题_编程笔试题(四)栈
  8. oracle表空间查询6,oracle表空间查询
  9. SMT32F767通过STM32CUBE HAL库配置QSPI和W25Q256驱动
  10. Windows/Linux/Mac OS下IntelliJ IDEA快捷键中文大全(本人翻译自官方ReferenceCard.pdf)(PDF典藏版)
  11. 自动批量删除全部微博(自动翻页加载)
  12. uipath sequence传递参数_湛江压铸模温机工作原理参数图
  13. 交换芯片CPSS-MARVELL 98DXX交换处理流程
  14. expect巡检服务器_linux 巡检报告
  15. python之“太空大战”小游戏实现
  16. 咸蛋超人的CxImage学习之路(一)
  17. c语言while(*p *q),C语言经典例题和答案
  18. Flutter系列(二)flutter项目打安装包
  19. java设计模式有哪些(java设计模式刘伟课后答案)
  20. JavaScript: 世界上最被误解的语言|Douglas Crockford

热门文章

  1. 浅谈对于机器学习的理解
  2. 金蝶云星空即时库存查询SQL语句SQLServer
  3. 【转帖】2004年最一针见血的279句话
  4. Access键盘快捷键大全(一)
  5. java后台通过http请求下载文件
  6. Excel-VBA 快速上手(四、Excel 程序事件、工作簿事件、工作表事件)
  7. Android自定义消息推送
  8. dos下查看shal值和Md5步骤
  9. ​LeetCode刷题实战507:完美数
  10. 新能源汽车厂四大派系