分布式训练 最小化部署docker swarm + docker-compose落地方案

目录

背景:

前提条件:

一、docker环境初始化配置

1. 安装nvidia-docker2

2. 安装docker-compose工具 

3. 获取GPU UUID

4. 修改docker runtime为nvidia,指定机器的UUID

二、docker-swarm 环境安装

1. 初始化swarm管理节点

2. 加入工作节点

3. 查看集群节点

三、拷贝基础镜像及部署文件 

1. Docker 镜像

2. docker-compose.yml

四、部署应用 

1. 部署服务

2. ssh免密验证


背景:

实现不同宿主机上的容器可以互通,并且可以免密ssh登陆

前提条件:

机器具备docker、NVIDIA显卡、NVIDIA驱动等相关安装包和硬件设施,nvidia-smi 可以正常显示出机器的GPU显卡

Docker 版本必须 > 1.12

一、docker环境初始化配置

1. 安装nvidia-docker2

# 执行如下命令
apt install nvidia-docker2 -y

2. 安装docker-compose工具 

将安装包拷贝到环境,只需要在docker swarm leader节点安装

# 下载docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composemv docker-compose-linux-x86_64 docker-compose 
chmod +x docker-compose 
mv docker-compose /usr/bin/docker-compose

3. 获取GPU UUID

nvidia-smi -a  | grep UUID

4. 修改docker runtime为nvidia,指定机器的UUID

修改文件成如下内容,注意其中的GPU UUID需要根据实际的uuid来填写,同时注意格式。

(base) root@nm-zhipu-a100-develop01:~# cat /etc/docker/daemon.json                                                                                                                      
{                                                                                                                                                                                       "runtimes": {                                                                                                                                                                       "nvidia": {                                                                                                                                                                     "path": "nvidia-container-runtime",                                                                                                                                         "runtimeArgs": []                                                                                                                                                           }                                                                                                                                                                               },                                                                                                                                                                                  "default-runtime": "nvidia",                                                                                                                                                        "node-generic-resources": [                                                                                                                                                         "NVIDIA-GPU=GPU-528afedf-02cf-7380-e22b-e2c05c1be4ec",                                                                                                                              "NVIDIA-GPU=GPU-5c46d5eb-0996-a5ac-cb7a-29f274d046a4",                                                                                                                              "NVIDIA-GPU=GPU-f57f6d1b-ea13-1480-6321-7a26181b838d",                                                                                                                              "NVIDIA-GPU=GPU-75acc759-bb26-da0b-21c5-a31dca12e93f",                                                                                                                              "NVIDIA-GPU=GPU-7e4da326-2d9e-3530-9f46-673474746e0b",                                                                                                                              "NVIDIA-GPU=GPU-76f183b8-b750-73bc-b438-404a16ae7b78",                                                                                                                              "NVIDIA-GPU=GPU-34823444-9a29-0776-f483-c802c6057039",                                                                                                                              "NVIDIA-GPU=GPU-a474810c-7356-b242-d0d8-5e83714655de"                                                                                                                               ],                                                                                                                                                                                  "default-shm-size": "10G"                                                                                                                                                                                    
}       
# 将如下文件中的swarm-resource 这行注释打开
/etc/nvidia-container-runtime/config.toml 
swarm-resource = "DOCKER_RESOURCE_GPU"
# 重启docker
systemctl  restart docker 

二、docker-swarm 环境安装

1. 初始化swarm管理节点

# docker swarm leader角色执行 
# 初始化一个新的swarm,并且当前的机器变为swarm manager,执行命令后会返回join相关的指令
docker swarm init --advertise-addr 192.168.249.11   #根据实际机器IP填写

类似下图的一条的命令 

2. 加入工作节点

# worker节点执行,如果有多个worker节点则都需要执行
docker swarm join --token SWMTKN-1-51nvltfqyxlfo0m5f5unzufhs03gmtcs8uoues6zgln0vzhy2c-5agl9x8f9nwrwagy7ud8k6oti 192.168.249.11:2377                                                 

3. 查看集群节点

# 查看swarm节点信息
docker node ls

三、拷贝基础镜像及部署文件 

1. Docker 镜像

如果要在客户方build,需要拷贝Dockerfile文件,并且保证客户环境可以下载依赖的基础镜像和相关的依赖包

Dockerfile

FROM nvcr.io/nvidia/pytorch:23.07-py3                                                                                                                                                   # ADD /data0/nfs/share/pangguoqing/glm66b/data/ /workspace/data                                                                                                                         
COPY . /workspace                                                                                                                                                                       
COPY ssh /root/.ssh/                                                                                                                                                                    RUN apt-get update && apt-get install -y --no-install-recommends ssh && \                                                                                                               apt-get install -y net-tools && \                                                                                                                                                   wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/pdsh/pdsh-2.29.tar.bz2 && \                                                                    tar jxvf pdsh-2.29.tar.bz2 && \                                                                                                                                                     cd pdsh-2.29 && \                                                                                                                                                                   ./configure --with-ssh --with-rsh --with-mrsh--with-mqshell --with-qshell --with-dshgroups--with-machines=/etc/pdsh/machines --without-pam && \                                     make && \                                                                                                                                                                           make install                                                                                                                                                                        RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && \                                                                                                       pip install deepspeed && \                                                                                                                                                          pip install sentencepiece                                                                                                                                                           EXPOSE 22                                                                                                                                                                               
ENV CUDA_DEVICE_MAX_CONNECTIONS="1"                                                                                                                                                     
WORKDIR /workspace                                                                                                                                                                      
ENTRYPOINT service ssh restart && bash   

2. docker-compose.yml

  • 如果有多个worker节点,则需要在文件中增加对应的配置,从0开始往下顺延

  • 挂载点修改

version: '3.7'                                                                                                                                                                          services:                                                                                                                                                                               main:                                                                                                                                                                                 image: wind/glm66b-train:base-v2                                                                                                                                                    hostname: main                                                                                                                                                                      init: true                                                                                                                                                                          tty: true                                                                                                                                                                           deploy:                                                                                                                                                                             replicas: 1 # 定 义 在  Swarm 中 运 行 的 副 本 数                                                                                                                                          restart_policy:                                                                                                                                                                   condition: on-failure                                                                                                                                                           environment:                                                                                                                                                                        - NVIDIA_VISIBLE_DEVICES=all                                                                                                                                                      volumes:                                                                                                                                                                            - /data0/nfs/share/pangguoqing/glm66b/data/:/workspace/data/                                                                                                                      networks:                                                                                                                                                                           - my_overlay_network                                                                                                                                                              worker01:                                                                                                                                                                             image: wind/glm66b-train:base-v2                                                                                                                                                    hostname: worker-0                                                                                                                                                                  init: true                                                                                                                                                                          tty: true                                                                                                                                                                           deploy:                                                                                                                                                                             replicas: 1                                                                                                                                                                       restart_policy:                                                                                                                                                                   condition: on-failure                                                                                                                                                           environment:                                                                                                                                                                        - NVIDIA_VISIBLE_DEVICES=all                                                                                                                                                      volumes:                                                                                                                                                                            - /data0/nfs/share/pangguoqing/glm66b/data/:/workspace/data/                                                                                                                      networks:                                                                                                                                                                           - my_overlay_network                                                                                                                                                              networks:                                                                                                                                                                               my_overlay_network:                                                                                                                                                                   driver: overlay               

四、部署应用 

1. 部署服务

# 部署
docker stack deploy -c docker-compose.yml wande。#根据实际名称修改
# 显示部署的服务
docker stack services wande

# 查看服务容器状态
docker stack ps wande 

2. ssh免密验证

登陆任意一个容器,通过ssh root@主机名即可登陆

ssh root@worker01

参考文档:

docker service create | Docker Docs

https://www.reddit.com/r/docker/comments/mh36w1/using_nvidia_gpu_with_docker_swarm_started_by/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/113048.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux的Man Page知识记录

Man(short for manual) Page是Unix和Linux操作系统中的一个重要文档,提供命令、函数、系统调用等的详细介绍和使用说明。它是以纯文本的形式出现,通常在终端(terminal)中使用man命令访问。Man Page按照章节…

Java seven 解读正则表达式、java方法的使用

目录 Java 正则表达式1. java.util.regex 包2. 捕获组3. 正则表达式语法4. Matcher 类的方法 Java 方法1. 定义:2. 优点3. 命名规则4. 方法调用5. 方法的重载6. 构造方法7. 可变参数8. finalize() 方法 Java 正则表达式 1. java.util.regex 包 Pattern 类&#xff…

FireFox禁用HTTP2

问题 最近需要调试接口,但是,Chrome都是强制使用h2协议,即HTTP/2协议。为了排除h2协议排除对接口调用的影响,需要强制浏览器使用HTTP1协议。 解决 FireFox 设置firefox的network.http.http2.enabled为禁用,这样就禁…

docker与phpstudy两种方式部署wordpress 并 开启伪静态

实际测试,可能是docker内存限制的缘故,docker部署的会比较卡 下载 wordpress phpstudy phpstudy中伪静态配置 伪静态 正常访问 WordPress 文章页的 URL 地址为 http://asa/index.php?p123。变成伪静态就是http://asa/123.html 。 伪静态是相对真实静…

第2章 Linux多进程开发 2.19-2.23 与信号相关的函数

软件中断&#xff1a; 信号名称&#xff08;宏不会变&#xff09;&#xff0c;编号在不同的版本可能会变&#xff1a; core保存进程异常退出的信息&#xff1a; core.c: #include <stdio.h> #include <string.h>int main() {char * buf; // 指针 没有指…

Vector<T> 动态数组(模板语法)

C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 动态数组 Vector&#xff08;难度1&#xff09; 其中&#xff0c;2 是 1 中的一个作业。2 中详细讲解了动态数组实现的基本原理。 本文目标 1 学会写基本的C类模板语法&#xff1b; 2 为以后熟练使用 S…

图像分割模型GUI应用:基于Tkinter和MMseg实现

简介 本篇博客介绍了一个使用Python的Tkinter库和MMseg图像分割库创建的图像分割模型GUI应用。该应用允许用户加载图像文件夹&#xff0c;浏览加载的图像&#xff0c;并对选定的图像执行分割推断&#xff0c;展示分割结果。这个应用演示了如何使用图形界面与深度学习模型结合&…

堆,堆排序和TOP—K问题(C语言版)

前言 堆是一种重要的数据结构&#xff0c;堆分为大根堆和小根堆&#xff0c;大根堆堆顶的数据是最大的&#xff0c;小根堆堆顶的数据是最小的&#xff0c;堆在逻辑结构上是一颗完全二叉树&#xff0c;这棵树中如果满足根节点大于左右子树&#xff0c;每个节点都满足这个条件就是…

MybatisPlus插件篇—逻辑删除+p6spy

文章目录 一、前言二、插件1、逻辑删除1.1、官方说明&#xff1a;1.2、配置依赖1.3、配置全局配置1.4、实体类字段上添加TableLogic注解1.5、验证是否成功 2、执行SQL分析打印2.1、配置依赖2.2、数据库驱动配置2.3、spy配置文件配置2.4、注意事项 三、总结提升 一、前言 本文将…

LLM本地知识库问答系统(一):使用LangChain和LlamaIndex从零构建PDF聊天机器人指南

随着大型语言模型&#xff08;LLM&#xff09;&#xff08;如ChatGPT和GPT-4&#xff09;的兴起&#xff0c;现在比以往任何时候都更容易构建比普通熊更智能的智能聊天机器人&#xff0c;并且可以浏览堆积如山的文档&#xff0c;为您的输入提供准确的响应。 在本系列中&#xf…

java八股文面试[数据库]——数据库三范式

什么是范式&#xff1f; 范式是数据库设计时遵循的一种规范&#xff0c;不同的规范要求遵循不同的范式。 最常用的三大范式 第一范式(1NF)&#xff1a;属性不可分割&#xff0c;即每个属性都是不可分割的原子项。(实体的属性即表中的列) 理解&#xff1a;一个列不能包含两个数…

【GO】LGTM_Grafana_Tempo(2)_官方用例改后实操

最近在尝试用 LGTM 来实现 Go 微服务的可观测性&#xff0c;就顺便整理一下文档。 Tempo 会分为 4 篇文章&#xff1a; Tempo 的架构官网测试实操跑通gin 框架发送 trace 数据到 tempogo-zero 微服务框架使用发送数据到 tempo 根据官方文档实操跑起来 tempo&#xff0c;中间根…

网络编程 day 4

1、多进程并发服务器根据流程图重新编写 #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr, "__%d__:", __LINE__); \perror(msg);\ }while(0)#define PORT 8888 //端口号&#xff0c;范围1024~49151 #define IP "192.168.11…

渲染如何做到超强渲染?MAX插件CG MAGIC中的渲染功能!

渲染工作应该算是设计师的日常工作流程中最重要的环节之一了。如果渲染速度加快&#xff0c;可能是要看渲染技巧掌握的有多少了。 大家熟悉的3d Max本地渲染通道&#xff0c;对于CG MAGIC渲染功能你也一定不能错过&#xff0c;要知道操作简单易使用&#xff0c;就完全拿捏了效率…

微信小程序echart导出图片

echarts版本5.1.0 用到的echarts组件是uni插件市场的echart组件 <div style"overflow: hidden;"><dCanvas class"uni-ec-canvass" id"uni-ec-canvas" ref"canvas" canvas-id"mychart-gauge" :ec"ec"&g…

基于Thinkphp6框架全新UI的AI网址导航系统源码

2023全新UI的AI网址导航系统源码&#xff0c;基于thinkphp6框架开发的 AI 网址导航是一个非常实用的工具&#xff0c;它能够帮助用户方便地浏览和管理自己喜欢的网站。 相比于其他的 AI 网址导航&#xff0c;这个项目使用了更加友好和易用的 ThinkPHP 框架进行搭建&#xff0c;…

1. Spatial Intelligence of a Self-driving Car and Rule-Based Decision Making

主要内容 本文主要介绍了一些基于规则的方法&#xff0c;以实现自动驾驶规划技术在复杂车流中取得人类驾驶效果。因此此类场景更适合城市NOA。 当然本文在城市道路&#xff0c;封闭区域道路以及城际高速都适宜。主要技术点 &#xff08;1&#xff09;本文把自车周围车辆的决策…

webpack loader和plugins的区别

在Webpack中&#xff0c;Loader和Plugin是两个不同的概念&#xff0c;用于不同的目的。 Loader是用于处理非JavaScript模块的文件的转换工具。它们将文件作为输入&#xff0c;并将其转换为Webpack可以处理的模块。例如&#xff0c;当您在Webpack配置中使用Babel Loader时&…

【STM32】学习笔记(OLED)-江科大

调试方式 OLED简介 硬件电路 驱动函数 OLED.H #ifndef __OLED_H #define __OLED_Hvoid OLED_Init(void); void OLED_Clear(void); void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char); void OLED_ShowString(uint8_t Line, uint8_t Column, char *String); void OL…

qt设计界面

widget.h #ifndef WIDGET_H #define WIDGET_H //防止文件重复包含#include <QWidget> //QWidget类所在的头文件&#xff0c;父类头文件 #include<QIcon> #include<QPushButton> …