在k8s上部署pytorch分布式程序的完整步驟記錄
集群配置
在k8s集群安裝stable版training-operator:
kubectl apply -k "github.com/kubeflow/training-operator/manifests/overlays/standalone?ref=v1.7.0"
下載Kubeflow training-operator對應(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é)束后可以看到兩個pod均為complete狀態(tài),查看log輸出:

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

可以看到master默認(rèn)端口為23456,world_size即總共的運(yùn)行節(jié)點為2,該worker對應(yīng)的rank為1,master的地址為master的pod的name,這其實是training-operator為它創(chuàng)建了對應(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時不用自己配置分布式訓(xùn)練的參數(shù),而是直接讀取env配置好的參數(shù),可以簡化開發(fā)者的開發(fā)難度。不過這也能看出來,training-operator對pytorch分布式的支持實際上也是基于pytorch原有的pytorch分布式框架進(jìn)行開發(fā),在operator上添加相關(guān)代碼給予支持。
總結(jié)
到此這篇關(guān)于在k8s上部署pytorch分布式程序的文章就介紹到這了,更多相關(guān)k8s部署pytorch分布式程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python基于OpenCV模塊實現(xiàn)視頻流數(shù)據(jù)切割為圖像幀數(shù)據(jù)(流程分析)
這篇文章主要介紹了python基于OpenCV模塊實現(xiàn)視頻流數(shù)據(jù)切割為圖像幀數(shù)據(jù),這里今天主要是實踐一下視頻流數(shù)據(jù)的預(yù)處理工作,需要的朋友可以參考下2022-05-05
通過Python的speech_recognition庫將音頻文件轉(zhuǎn)為文字
recognize_google()?是Google提供的一種語音識別API,可以識別音頻文件或麥克風(fēng)錄制的語音,并將其轉(zhuǎn)換為文本,這篇文章主要介紹了通過Python的speech_recognition庫將音頻文件轉(zhuǎn)為文字,需要的朋友可以參考下2023-05-05
python實現(xiàn)跨進(jìn)程(跨py文件)通信示例
本文主要介紹了python實現(xiàn)跨進(jìn)程(跨py文件)通信示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Python報錯TypeError: unhashable type: ‘numpy.nd
在Python編程中,尤其是在處理數(shù)據(jù)時,我們經(jīng)常使用numpy數(shù)組,然而,當(dāng)我們嘗試將numpy數(shù)組用作字典的鍵或集合的元素時,就會遇到TypeError: unhashable type: 'numpy.ndarray',本文將探討這個錯誤的原因,并給出幾種可能的解決方案,需要的朋友可以參考下2024-09-09
python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)(三)
這篇文章主要為大家詳細(xì)介紹了python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)第三篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12

