分布式训练 最小化部署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/
相关文章:
分布式训练 最小化部署docker swarm + docker-compose落地方案
目录 背景: 前提条件: 一、docker环境初始化配置 1. 安装nvidia-docker2 2. 安装docker-compose工具 3. 获取GPU UUID 4. 修改docker runtime为nvidia,指定机器的UUID 二、docker-swarm 环境安装 1. 初始化swarm管理节点 2. 加入工…...
QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动
QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动 0、背景1、基本环境2、开发环境编译Qt MySql数据库驱动2.1 依赖说明2.2 MySQL驱动编译过程 3、交叉编译Qt MySql数据库驱动3.1 依赖说明3.3.1 如何在交叉编译服务器上找到mysql.h及相关头文件3.3.2 如果…...
QT使用QXlsx实现数据验证与Excel公式操作 QT基础入门【Excel的操作】
准备环境:QT中使用QtXlsx库的三种方法 1、公式操作写单行公式 //右值初始化Format rAlign;rAlign.setHorizontalAlignment(Format::AlignRight);//左值初始化Format lAlign;lAlign.setHorizontalAlignment(Format::AlignLeft);xlsx.write("B3", 40, lAlign);xlsx.wr…...
renrenfast Vue2 打包发布
1、修改 static/config/index-prod.js 文件 // api接口请求地址 window.SITE_CONFIG[baseUrl] http://192.168.1.86:8080/renren-fast; /*** 生产环境*/ ;(function () {window.SITE_CONFIG {};// api接口请求地址window.SITE_CONFIG[baseUrl] http://192.16…...
NoSQL数据库介绍+Redis部署
目录 一、NoSQL概述 1、数据的高并发读写 2、海量数据的高效率存储和访问 3、数据库的高扩展和高可用 二、NoSQL的类别 1、键值存储数据库 2、列存储数据库 3、文档型数据库 4、图形化数据库 三、分布式数据库中的CAP原理 1、传统的ACID 1)、A--原子性 …...
【mindspore学习】环境配置
本次实验搭配的环境是 CUDA 11.6 CUDNN v8.9.4 TensorRT-8.4.1.5 mindspore 2.1.0。 1、配置 Nvidia 显卡驱动 如果原来的主机已经安装了 nvidia 驱动,为避免版本的冲突,建议先清除掉旧的 nvidia驱动 sudo apt-get --purge remove nvidia* sudo apt…...
基于shell脚本对aliyun npm仓库(https://packages.aliyun.com)登录认证
文章目录 基于shell脚本对阿里云npm仓库(https://packages.aliyun.com)登录认证食用人群食用方式 基于shell脚本对阿里云npm仓库(https://packages.aliyun.com)登录认证 食用人群 由于一些安全的原因,某些企业可能会…...
K8s Pod 安全认知:从openshift SCC 到 PSP 弃用以及现在的 PSA
写在前面 简单整理,博文内容涉及: PSP 的由来PSA 的发展PSA 使用认知不涉及使用,用于了解 Pod 安全 API 资源理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是…...
提高企业会计效率,选择Manager for Mac(企业会计软件)
作为一家企业,良好的财务管理是保持业务运转的关键。而选择一款适合自己企业的会计软件,能够帮助提高会计效率、减少错误和节约时间。在众多的选择中,Manager for Mac(企业会计软件)是一款值得考虑的优秀软件。 首先,Manager for…...
软考:中级软件设计师:信息系统的安全属性,对称加密和非对称加密,信息摘要,数字签名技术,数字信封与PGP
软考:中级软件设计师:信息系统的安全属性 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准…...
Vue3中reactive响应式失效的问题
情景阐述 弹窗内部有一个挑选框,要通过请求接口获取挑选框下面可供选择的数据。 这是一个很简单的情境,我立刻有了自己的思路。如果实现搜索,数据较少可以直接用elementplus自带的filter。如果数据较多,就需要传val,…...
lamp
LAMP 环境 指的是在 Linux 操作系统中分别安装 Apache 网页服务器、MySQL 数据库服务器和 PHP 开发服务器,以及一些对应的扩展软件。AMP也支持win操作系统 (sccm 域升级版) LAMP架构是目前成熟的企业网站应用模式之一,指的是协同…...
LeetCode 周赛上分之旅 #42 当 LeetCode 考树上倍增,出题的趋势在变化吗
⭐️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度…...
Qt 自定义菜单 托盘菜单
托盘菜单实现:通过QSystemTrayIconQMenuQAction即可完美实现! 实现方式:createActions用于创建菜单、菜单项,translateActions用于设置文本、实现多语化,translateAccount用于设置用户空间配额。 void TrayMenu::createActions(…...
channel并发编程
不要通过共享内存通信,要通过通信共享内存。 channel是golang并发编程中一种重要的数据结构,用于多个goroutine之间进行通信。 我们通常可以把channel想象成一个传送带,将goroutine想象成传送带周边的人,一个传送带的上游放上物品…...
苹果新健康专利:利用 iPhone、Apple Watch 来分析佩戴者的呼吸情况
根据美国商标和专利局(USPTO)公示的清单,苹果获得了一项健康相关的技术专利,可以利用 iPhone、Apple Watch 来分析佩戴者的呼吸系统。 苹果在专利中概述了一种测量用户呼吸功能的系统,通过 iPhone 上的光学感测单元&am…...
数据分析基础-数据可视化02-不同数据类型的可视化概念及原则
将数据空间映射到颜色空间。 数据空间:连续或分类 数据可以被划分为两个主要的数据空间:连续数据和分类数据。这两种数据空间有不同的特点和适用的分析方法。 连续数据(Continuous Data): 连续数据是指可以在某个范…...
QT项目使用Qss的总结
什么是QSS QSS称为Qt Style Sheets也就是Qt样式表,它是Qt提供的一种用来自定义控件外观的机制。QSS大量参考了CSS的内容,只不过QSS的功能比CSS要弱很多,体现在选择器要少,可以使用的QSS属性也要少很多,并且并不是所有…...
suricata初体验+wireshark流量分析
目录 一、suricata介绍 1.下载安装 2.如何使用-攻击模拟 二、wireshark流量分析 1.wireshark过滤器使用 2.wireshark其他使用 一、suricata介绍 1.下载安装 通过官网下载suricata,根据官网步骤进行安装。 官网地址: https://documentation.wazuh.…...
机器学习:异常检测实战
文章目录 Anomaly Detection目录任务介绍数据集方法评估Baseline报告报告评价标准 Anomaly Detection 目录 任务介绍 无监督的异常检测 数据集 方法 autoencode 是否能够还原出原始类型图片,基于重构loss来判断是否正常 重构误差当作异常分数 评估 采用ROC和AUC…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

