展开

slurm docker

最后发布时间 : 2023-11-24 22:30:26 浏览量 :

学习资料

SLURM(Simple Linux Utility for Resource Management)是一种开源的集群管理和作业调度系统,常用于高性能计算(HPC)环境中。SLURM 提供了对计算资源的管理和作业调度,以便有效地利用集群资源并执行作业。slurm的使用请看这里

本文介绍如何在单个Docker容器中安装slurm,具体的Dockerfile及配置文件请参考这里

在该容器中需要启动服务包括slurmctld、slurmd、slurmdbd、slurmrestd、jupyterlab_slurm

  • slurmctld: 是 SLURM 控制守护进程,也称为控制节点守护进程。它是 SLURM 系统的核心组件之一,负责集群管理和协调。slurmctld 接收用户提交的作业请求,进行作业调度和资源分配,并将作业分配给可用的计算节点(slurmd 守护进程)执行。它还负责监视和管理集群的状态、计算资源和作业运行情况。
  • slurmd:slurmd 是 SLURM 计算守护进程,也称为计算节点守护进程。每个计算节点上都运行着一个 slurmd 进程,它负责接收来自 slurmctld 的作业分配,并在本地执行计算任务。slurmd 守护进程会向 slurmctld 报告节点的状态和可用资源,并接收来自 slurmctld 的指令和控制命令。
  • slurmdbd
  • slurmrestd:slurmdbd 是 SLURM 数据库守护进程,用于支持 SLURM 的数据库功能。它负责将作业和集群状态信息写入数据库,以便后续查询和分析。slurmdbd 可以与各种数据库后端集成,如 MySQL、PostgreSQL 等。通过将数据持久化到数据库,可以实现作业历史记录、统计分析和资源利用情况的跟踪。
  • jupyterlab_slurm:slurmrestd 是 SLURM 的 RESTful API 服务守护进程。它提供了基于 RESTful 接口的编程接口,允许用户和开发人员通过 HTTP 请求进行与 SLURM 系统的交互。使用 slurmrestd,可以通过编程方式提交作业、查询作业状态、管理队列和节点,以及访问集群和作业统计信息等。

镜像构建

cd master
docker build -t wangyang1749/slurm-all:1.0 .

运行容器

docker run  --name slurm-all --privileged    --network=host --rm -it  wangyang1749/slurm-all:1.0

进入容器

 docker exec -it slurm-all  bash

Dockerfile文件

FROM ubuntu:22.04

RUN apt update -y && apt install munge -y && apt install vim -y && apt install build-essential -y && apt install git -y && apt-get install mariadb-server -y && apt install wget -y

ARG DEBIAN_FRONTEND=noninteractive
RUN apt install slurmd slurm-client slurmctld slurmdbd slurmrestd -y
RUN apt-get update && apt-get install mariadb-server  -y
RUN apt-get install sudo  -y
# RUN apt install sudo -y && apt install python3.9 python3-pip -y 
RUN useradd -m admin -s /usr/bin/bash -d /home/admin && echo "admin:admin" | chpasswd && adduser admin sudo && echo "admin     ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers 
RUN echo "root     ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers 
# RUN apt update -y && apt install libopenmpi-dev -y && pip3 install mpi4py

RUN wget https://deb.nodesource.com/setup_18.x
RUN bash ./setup_18.x
RUN apt-get install nodejs -y
RUN apt-get install python3-pip -y
RUN pip install jupyterlab
RUN pip install jupyterlab_slurm

COPY slurm.conf /etc/slurm/
COPY cgroup.conf /etc/slurm/
COPY slurmdbd.conf /etc/slurm/
COPY docker-entrypoint.sh /etc/slurm/

EXPOSE 6817 6818 6819 3306 
RUN chmod 600 /etc/slurm/slurmdbd.conf
WORKDIR /home/admin
COPY initialize-mariadb.sh .
COPY start-slurmrestd.sh .
ENV USER admin
ENTRYPOINT ["/etc/slurm/docker-entrypoint.sh"]

docker-entrypoint.sh

#!/bin/bash

# sudo sed -i "s/REPLACE_IT/CPUs=$(nproc)/g" /etc/slurm-llnl/slurm.conf
###################################################
# 授权服务
sudo service munge start
###################################################

###################################################
# 执行节点
sudo service slurmd start
###################################################

###################################################
# 数据库配置
sudo service mariadb start
sudo mysql -u root < initialize-mariadb.sh
sudo service slurmdbd start
###################################################

###################################################
# 控制节点
sleep 2
echo 'starting slurmctld'
sudo service slurmctld start
###################################################

###################################################
# slurmrestd 配置,要运行slurmrestd必须加上参数--privileged 
# docker run  --name slurm-all --privileged    --network=host --rm -it  wangyang1749/slurm-all:1.0
# echo 'starting slurmrestd'
# sudo -u admin sh start-slurmrestd.sh &
###################################################
sudo -u admin  jupyter lab --no-browser --allow-root --ip=0.0.0.0 --NotebookApp.token='' --NotebookApp.password='' &

echo "启动的服务..."
service  --status-all
# slurmctld -D
tail -f /dev/null
# docker build -t wangyang1749/slurm-all:1.0 .
# docker run  --name slurm-all-master     --network=host --rm   wangyang1749/slurm-all-master:1.0
# docker image push wangyang1749/slurm-all-master:1.0

使用

docker run  --name slurm-all-master    -p 8888:8888 --rm -it  wangyang1749/slurm-all-master:1.0

访问http://localhost:8888

生信小木屋

提交任务到slurm

#!/bin/bash
sleep 200
hostname

提交任务

生信小木屋

监控任务
生信小木屋