在k8s上部署pytorch分布式程序的完整步驟記錄
集群配置
在k8s集群安裝stable版training-operator:
kubectl apply -k "github.com/kubeflow/training-operator/manifests/overlays/standalone?ref=v1.7.0"
下載Kubeflow training-operator對(duì)應(yīng)的Python SDK:
pip3 install kubeflow-training
簡單的pytorch CPU分布式測試
demo.py文件內(nèi)容如下:
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"
執(zhí)行命令開始部署:
kubectl apply -f pytorch.yaml -n namespace
正常運(yùn)行結(jié)束后可以看到兩個(gè)pod均為complete狀態(tài),查看log輸出:

training-operator的一些設(shè)計(jì)
當(dāng)我們通過training-operator創(chuàng)建對(duì)應(yīng)的pod資源時(shí),describe worker可以看到如下的env信息:

可以看到master默認(rèn)端口為23456,world_size即總共的運(yùn)行節(jié)點(diǎn)為2,該worker對(duì)應(yīng)的rank為1,master的地址為master的pod的name,這其實(shí)是training-operator為它創(chuàng)建了對(duì)應(yīng)的svc,查看svc可以看到與pod同名的svc:

通過svc配置worker到master pod的tcp連接,以便在distributed.init_process_group以及接下來參數(shù)同步等需要網(wǎng)絡(luò)傳輸?shù)牟僮髂軌蛘_M(jìn)行。
而training-operator通過解析yaml文件來為部署的pod配置環(huán)境變量以便init_process_group時(shí)不用自己配置分布式訓(xùn)練的參數(shù),而是直接讀取env配置好的參數(shù),可以簡化開發(fā)者的開發(fā)難度。不過這也能看出來,training-operator對(duì)pytorch分布式的支持實(shí)際上也是基于pytorch原有的pytorch分布式框架進(jìn)行開發(fā),在operator上添加相關(guān)代碼給予支持。
總結(jié)
到此這篇關(guān)于在k8s上部署pytorch分布式程序的文章就介紹到這了,更多相關(guān)k8s部署pytorch分布式程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
對(duì)pyqt5中QTabWidget的相關(guān)操作詳解
今天小編就為大家分享一篇對(duì)pyqt5中QTabWidget的相關(guān)操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Python+騰訊云服務(wù)器實(shí)現(xiàn)每日自動(dòng)健康打卡
本文主要介紹了通過Python+騰訊云服務(wù)器實(shí)現(xiàn)每日自動(dòng)健康打卡,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
修復(fù) Django migration 時(shí)遇到的問題解決
本篇文章主要介紹了修復(fù) Django migration 時(shí)遇到的問題解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06
Python學(xué)習(xí)之列表常用方法總結(jié)
這篇文章主要為大家介紹了Python中列表的幾個(gè)常用方法總結(jié),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python列表有一定幫助,需要的可以參考一下2022-03-03
Python小紅書旋轉(zhuǎn)驗(yàn)證碼識(shí)別實(shí)戰(zhàn)教程
這篇文章主要介紹了Python小紅書旋轉(zhuǎn)驗(yàn)證碼識(shí)別實(shí)戰(zhàn)教程,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-08-08
Django執(zhí)行python?manage.py?makemigrations報(bào)錯(cuò)的解決方案分享
相信用過很多Django makemigrations的人都會(huì)遇到過makemigrations時(shí)會(huì)發(fā)生報(bào)錯(cuò),下面這篇文章主要給大家介紹了關(guān)于Django執(zhí)行python?manage.py?makemigrations報(bào)錯(cuò)的解決方案,需要的朋友可以參考下2022-09-09
python 牛頓法實(shí)現(xiàn)邏輯回歸(Logistic Regression)
這篇文章主要介紹了python 牛頓法實(shí)現(xiàn)邏輯回歸(Logistic Regression),幫助大家更好的進(jìn)行機(jī)器學(xué)習(xí),感興趣的朋友可以了解下2020-10-10
Django零基礎(chǔ)入門之運(yùn)行Django版的hello world
這篇文章主要介紹了Django零基礎(chǔ)入門之運(yùn)行Django版的hello world,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09

