在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
簡(jiǎn)單的pytorch CPU分布式測(cè)試
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í)行命令開(kāi)始部署:
kubectl apply -f pytorch.yaml -n namespace
正常運(yùn)行結(jié)束后可以看到兩個(gè)pod均為complete狀態(tài),查看log輸出:
training-operator的一些設(shè)計(jì)
當(dāng)我們通過(guò)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:
通過(guò)svc配置worker到master pod的tcp連接,以便在distributed.init_process_group以及接下來(lái)參數(shù)同步等需要網(wǎng)絡(luò)傳輸?shù)牟僮髂軌蛘_M(jìn)行。
而training-operator通過(guò)解析yaml文件來(lái)為部署的pod配置環(huán)境變量以便init_process_group時(shí)不用自己配置分布式訓(xùn)練的參數(shù),而是直接讀取env配置好的參數(shù),可以簡(jiǎn)化開(kāi)發(fā)者的開(kāi)發(fā)難度。不過(guò)這也能看出來(lái),training-operator對(duì)pytorch分布式的支持實(shí)際上也是基于pytorch原有的pytorch分布式框架進(jìn)行開(kāi)發(fā),在operator上添加相關(guān)代碼給予支持。
總結(jié)
到此這篇關(guān)于在k8s上部署pytorch分布式程序的文章就介紹到這了,更多相關(guān)k8s部署pytorch分布式程序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python基于OpenCV模塊實(shí)現(xiàn)視頻流數(shù)據(jù)切割為圖像幀數(shù)據(jù)(流程分析)
這篇文章主要介紹了python基于OpenCV模塊實(shí)現(xiàn)視頻流數(shù)據(jù)切割為圖像幀數(shù)據(jù),這里今天主要是實(shí)踐一下視頻流數(shù)據(jù)的預(yù)處理工作,需要的朋友可以參考下2022-05-05通過(guò)Python的speech_recognition庫(kù)將音頻文件轉(zhuǎn)為文字
recognize_google()?是Google提供的一種語(yǔ)音識(shí)別API,可以識(shí)別音頻文件或麥克風(fēng)錄制的語(yǔ)音,并將其轉(zhuǎn)換為文本,這篇文章主要介紹了通過(guò)Python的speech_recognition庫(kù)將音頻文件轉(zhuǎn)為文字,需要的朋友可以參考下2023-05-05python實(shí)現(xiàn)跨進(jìn)程(跨py文件)通信示例
本文主要介紹了python實(shí)現(xiàn)跨進(jìn)程(跨py文件)通信示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Python報(bào)錯(cuò)TypeError: unhashable type: ‘numpy.nd
在Python編程中,尤其是在處理數(shù)據(jù)時(shí),我們經(jīng)常使用numpy數(shù)組,然而,當(dāng)我們嘗試將numpy數(shù)組用作字典的鍵或集合的元素時(shí),就會(huì)遇到TypeError: unhashable type: 'numpy.ndarray',本文將探討這個(gè)錯(cuò)誤的原因,并給出幾種可能的解決方案,需要的朋友可以參考下2024-09-09pytho多張圖片的無(wú)損拼接的實(shí)現(xiàn)示例
很多人都會(huì)是用PS進(jìn)行拼接,本文主要介紹了pytho多張圖片的無(wú)損拼接的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)(三)
這篇文章主要為大家詳細(xì)介紹了python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)第三篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12