在k8s上部署pytorch分布式程序的完整步骤记录

 更新时间:2024年08月23日 11:17:42   作者:道阻&且长  
Kubernetes的核心优势在于其能够提供一个可扩展、灵活且高度可配置的平台,使得应用程序的部署、扩展和管理变得前所未有的简单下面这篇文章主要给大家介绍了关于在k8s上部署pytorch分布式程序的完整步骤,需要的朋友可以参考下

集群配置

在k8s集群安装stable版training-operator:

kubectl apply -k "github.com/kubeflow/training-operator/manifests/overlays/standalone?ref=v1.7.0"

下载Kubeflow training-operator对应的Python SDK:

pip3 install kubeflow-training

简单的pytorch CPU分布式测试

demo.py文件内容如下:

import datetime
import torch
torch.distributed.init_process_group(init_method="env://",timeout=datetime.timedelta(minutes=1))
rank = torch.distributed.get_rank()
world_size = torch.distributed.get_world_size()
print(f"rank {rank} world_size {world_size}")
a = torch.tensor([1])
torch.distributed.all_reduce(a)
print(f"rank {rank} world_size {world_size} result {a}")
torch.distributed.barrier()
print(f"rank {rank} world_size {world_size}")

Dockerfile文件如下:

FROM python:3.8
RUN pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
WORKDIR /
COPY demo.py demo.py

打包好镜像上传后,便可以在集群中跑pytorchjob,pytorch.yaml部署文件如下:

apiVersion: "kubeflow.org/v1"
kind: PyTorchJob
metadata:
  name: torchrun-cpu
spec:
  pytorchReplicaSpecs:
    Master:
      replicas: 1
      restartPolicy: OnFailure
      template:
        spec:
          containers:
            - name: pytorch
              image: pytorch-demo
              command:
                - "python3"
                - "demo.py"
    Worker:
      replicas: 1
      restartPolicy: OnFailure
      template:
        spec:
          containers:
            - name: pytorch
              image: pytorch-demo
              command:
                - "python3"
                - "demo.py"

执行命令开始部署:

kubectl apply -f pytorch.yaml -n namespace

正常运行结束后可以看到两个pod均为complete状态,查看log输出:

training-operator的一些设计

当我们通过training-operator创建对应的pod资源时,describe worker可以看到如下的env信息:

可以看到master默认端口为23456,world_size即总共的运行节点为2,该worker对应的rank为1,master的地址为master的pod的name,这其实是training-operator为它创建了对应的svc,查看svc可以看到与pod同名的svc:

通过svc配置worker到master pod的tcp连接,以便在distributed.init_process_group以及接下来参数同步等需要网络传输的操作能够正常进行。

而training-operator通过解析yaml文件来为部署的pod配置环境变量以便init_process_group时不用自己配置分布式训练的参数,而是直接读取env配置好的参数,可以简化开发者的开发难度。不过这也能看出来,training-operator对pytorch分布式的支持实际上也是基于pytorch原有的pytorch分布式框架进行开发,在operator上添加相关代码给予支持。

总结

到此这篇关于在k8s上部署pytorch分布式程序的文章就介绍到这了,更多相关k8s部署pytorch分布式程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python基于OpenCV模块实现视频流数据切割为图像帧数据(流程分析)

    python基于OpenCV模块实现视频流数据切割为图像帧数据(流程分析)

    这篇文章主要介绍了python基于OpenCV模块实现视频流数据切割为图像帧数据,这里今天主要是实践一下视频流数据的预处理工作,需要的朋友可以参考下
    2022-05-05
  • Django如何批量创建Model

    Django如何批量创建Model

    将测试数据全部敲入数据库非常繁琐,这篇文章主要介绍了Django如何批量创建Model,帮助大家快速录入数据,感兴趣的朋友可以了解下
    2020-09-09
  • python数据清洗系列之字符串处理详解

    python数据清洗系列之字符串处理详解

    这篇文章主要介绍了python数据清洗之字符串处理的相关资料,需要的朋友可以参考下
    2017-02-02
  • Python做智能家居温湿度报警系统

    Python做智能家居温湿度报警系统

    本文为大家带来了Python通过HTTP协议做一个廉价的温湿度报警系统。感兴趣的朋友跟随小编一起看看吧
    2018-09-09
  • 通过Python的speech_recognition库将音频文件转为文字

    通过Python的speech_recognition库将音频文件转为文字

    recognize_google() 是Google提供的一种语音识别API,可以识别音频文件或麦克风录制的语音,并将其转换为文本,这篇文章主要介绍了通过Python的speech_recognition库将音频文件转为文字,需要的朋友可以参考下
    2023-05-05
  • python实现跨进程(跨py文件)通信示例

    python实现跨进程(跨py文件)通信示例

    本文主要介绍了python实现跨进程(跨py文件)通信示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Python报错TypeError: unhashable type: ‘numpy.ndarray‘的解决办法

    Python报错TypeError: unhashable type: ‘numpy.nd

    在Python编程中,尤其是在处理数据时,我们经常使用numpy数组,然而,当我们尝试将numpy数组用作字典的键或集合的元素时,就会遇到TypeError: unhashable type: 'numpy.ndarray',本文将探讨这个错误的原因,并给出几种可能的解决方案,需要的朋友可以参考下
    2024-09-09
  • pytho多张图片的无损拼接的实现示例

    pytho多张图片的无损拼接的实现示例

    很多人都会是用PS进行拼接,本文主要介绍了pytho多张图片的无损拼接的实现示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • python机器学习之神经网络(三)

    python机器学习之神经网络(三)

    这篇文章主要为大家详细介绍了python机器学习之神经网络第三篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • 教你用Python3+mysql8.0搭建Django框架

    教你用Python3+mysql8.0搭建Django框架

    发现有很多小伙伴还不知道如何搭建Django框架,今天特地整理了本篇文章,基于Python3和mysql8.0,文中有非常详细的步骤教程,对小伙伴很有帮助,需要的朋友可以参考下
    2021-05-05

最新评论