slurm docker
最后发布时间 : 2023-11-24 22:30:26
浏览量 :
学习资料
- https://medium.com/analytics-vidhya/slurm-cluster-with-docker-9f242deee601
- https://github.com/rancavil/slurm-cluster
- https://github.com/hokiegeek2/slurm-cloud-integration
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
提交任务到slurm
#!/bin/bash
sleep 200
hostname
提交任务
监控任务