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

这篇具有很好参考价值的文章主要介绍了分布式训练 最小化部署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登陆

前提条件:

目前已知问题:swarm无法支持InfiniBand

机器具备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-compose

mv 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

分布式训练 最小化部署docker swarm + docker-compose落地方案,运维软件技术,分布式训练,docker,swarm

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填写

类似下图的一条的命令 

分布式训练 最小化部署docker swarm + docker-compose落地方案,运维软件技术,分布式训练,docker,swarm

2. 加入工作节点

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

3. 查看集群节点

# 查看swarm节点信息
docker node ls

分布式训练 最小化部署docker swarm + docker-compose落地方案,运维软件技术,分布式训练,docker,swarm

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

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 swarm + docker-compose落地方案,运维软件技术,分布式训练,docker,swarm

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

分布式训练 最小化部署docker swarm + docker-compose落地方案,运维软件技术,分布式训练,docker,swarm

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/文章来源地址https://www.toymoban.com/news/detail-685669.html

到了这里,关于分布式训练 最小化部署docker swarm + docker-compose落地方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode——最小化字符串长度

    目录 一、题目 二、题目解读  三、代码  1、set去重 2、用一个二进制数记录每个字母是否出现过 6462. 最小化字符串长度 - 力扣(Leetcode) 给你一个下标从  0  开始的字符串  s  ,重复执行下述操作  任意  次: 在字符串中选出一个下标  i  ,并使  c  为字符串下标  i

    2024年02月08日
    浏览(32)
  • Qt实现最小化窗口到托盘图标

    目录 前言: 1.先看效果图 2.大致思路以及实现流程 3.具体代码以及解释 4.总结 使用QT开发桌面软件,将软件最小化至托盘这样的功能的是比较常见的,今天自己实现一下这个功能,并进行记录总结。  主要功能就是当软件开始运行, 在系统托盘会自动出现一个关于本软件的

    2023年04月08日
    浏览(31)
  • LabVIEW开发最小化5G系统测试平台

    LabVIEW开发最小化5G系统测试平台 由于具有大量存储能力和数据的应用程序的智能手机的激增,当前一代产品被迫提高其吞吐效率。正交频分复用由于其卓越的品质,如单抽头均衡和具有成本效益的实施,现在被广泛用作物理层技术。这些好处是以严格的同步、正交性和高功耗

    2024年02月12日
    浏览(29)
  • unity发布设置(最小化、置顶、限制单开)

    1. 勾上下图标红处,发布后可防止按windows键缩小  2.发布后程序默认最小化 3.发布的程序只能开一个进程

    2024年02月12日
    浏览(33)
  • 最小化安装Linux系统初始化脚本

    目录 最小化安装Linux系统初始化脚本 注:此脚本适用于centos 7/8、Ubuntu1804,具体需要根据实际情况进行测试调整。 此脚本包含的功能: 允许 root 用户使用 ssh 登录 关闭 selinux 关闭防火墙 设置 ps1 设置默认编辑器为 vim 自定义 vim 自定义历史命令 修改内核参数 设置资源限制 修

    2024年02月12日
    浏览(31)
  • 在Kubernetes上部署分布式深度学习训练平台

    作者:禅与计算机程序设计艺术 1.1 什么是深度学习? 1.2 为什么需要深度学习? 1.3 深度学习平台架构图 # 2.基本概念术语说明 2.1 Kubernetes 2.2 GPU 2.3 MPI # 3.核心算法原理和具体操作步骤以及数学公式讲解 3.1 数据加载流程 3.2 网络结构设计 3.3 激活函数设计 3.4 损失函数设计 3

    2024年02月07日
    浏览(30)
  • leetcode 2616. 最小化数对的最大差值

    在数组nums中找到p个数对,使差值绝对值的和最小。 思路: 最小差值应该是数值相近的一对数之间产生,让数值相近的数字尽量靠在一起方便计算,所以需要排序。 这里不去直接考虑一对对的数字,而是直接考虑差值的取值。 用binary search搜索一个差值。 左边界是0,右边界

    2024年02月13日
    浏览(29)
  • 【深度优先搜索】【图论】【树】2646. 最小化旅行的价格总和

    【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字 深度优先搜索 图论 树 现有一棵无向、无根的树,树中有 n 个节点,按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n - 1 的二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 之间存在

    2024年02月19日
    浏览(28)
  • mac 最小化全部程序回到桌面(基于alfred workflow)

    换到 mac 系统之后,很多快捷键根本就不好用,组合太多了,除了 cmd + Q/W/A/S/X/R/Z/C/V ,个人认为其它的真的一坨屎。像我的需求就是,开的窗口太多了,我需要全部最小化,再重新打开我需要那个窗口。而 Windows 上的 win + D 就是很符合我的需求,于是我研究一下 mac 怎么实现

    2024年04月17日
    浏览(32)
  • Win32窗体属性设置,取消最大最小化按钮,禁止调整大小

    使用GetWindowLong()获取窗体风格属性 取消风格WS_SIZEBOX 设置风格WS_SIZEBOX 使用SetWindowLong设置窗体风格属性 取消WS_SIZEBOX属性或WS_THICKFRAME属性都可以使窗体不可调整大小 例子 其它的属性设置 也可以在窗体创建时设置窗体属性,与属性异或操作是取消属性,与属性或操作是添加属

    2024年02月12日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包