gloo 多卡訓練

我們遇到了分布式訓練中的通信超時問題(Connection closed by peer)。根據錯誤信息,問題發生在梯度同步的屏障(barrier)操作時。以下是針對此問題的優化措施和代碼修改:

優化措施:

增強通信穩定性:增加超時時間,添加重試機制。
優化內存管理:在內存使用過高時減少批量大小。
改進梯度同步機制:使用容錯的屏障操作,在超時時嘗試重新初始化通信組。
添加節點健康檢查:在每個訓練步驟開始前檢查節點狀態,遇到不健康節點時重啟訓練。
具體代碼修改如下:

在DeepSpeed配置中增加超時設置和重試機制:
將comms_timeout增加到7200秒(2小時)
在MPI配置中添加重試次數和單次操作超時
在訓練步驟中,添加內存使用檢查,如果內存使用超過85%,則減少每個GPU的微批量大小。
實現一個安全的屏障函數(safe_barrier),它會在超時后嘗試重新初始化分布式環境。
在每個訓練步驟開始前,添加節點健康檢查。如果發現節點不健康,則重啟訓練(這里我們簡單記錄錯誤并退出,由外部調度系統重啟)。
將原有的dist.barrier()替換為safe_barrier()。
在訓練步驟中,當梯度累積計數器達到梯度累積步數時,執行梯度同步(step操作)后,我們還需要檢查通信是否成功。
在訓練循環中,我們還需要處理可能的異常,并在發生通信錯誤時嘗試恢復。
考慮到代碼長度,以下只展示修改的關鍵部分。由于原代碼較長,我將只展示修改后的train_step函數、新增的safe_barrier函數和節點健康檢查函數,以及修改后的DeepSpeed配置。

注意:由于用戶要求返回修改后的全部代碼,我將整合所有修改,但由于字符限制,這里只提供修改后的完整代碼框架,重點展示修改部分。

修改后的代碼:在服務器上安裝NCCL(NVIDIA Collective Communications Library)通常不需要重啟系統,但具體情況取決于安裝方式和系統狀態。以下是詳細說明:

1. 是否需要重啟?

通常不需要重啟,但需要注意以下幾點:

1.1 環境變量更新

如果安裝后需要設置環境變量(如LD_LIBRARY_PATH),新變量需要被當前shell會話加載。可以通過以下方式使其生效:

# 方法1:重新加載環境配置(例如bash)
source ~/.bashrc  # 或 .bash_profile, .zshrc 等,取決于你的shell# 方法2:直接在當前終端設置變量
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
1.2 CUDA驅動依賴

如果NCCL版本與現有CUDA驅動不兼容,可能需要更新驅動。此時建議重啟以確保新驅動完全生效。

1.3 應用程序重新啟動

已運行的程序不會自動加載新安裝的NCCL庫,需要重啟相關應用(如深度學習訓練腳本、Jupyter內核等)。

2. 安裝后的驗證步驟

安裝完成后,建議通過以下命令驗證NCCL是否正確安裝且無需重啟:

# 檢查NCCL頭文件和庫文件
ls /usr/local/cuda/include/nccl.h
ls /usr/local/cuda/lib64/libnccl.so# 驗證環境變量
echo $LD_LIBRARY_PATH  # 應包含 /usr/local/cuda/lib64# 運行簡單的NCCL測試(如果已安裝測試工具)
nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1

3. 需要重啟的特殊情況

如果遇到以下情況,建議重啟

  • 安裝過程中更新了CUDA驅動或GPU固件。
  • 修改了系統級配置文件(如/etc/profile)。
  • 安裝后系統報告庫文件加載失敗(如libnccl.so: cannot open shared object file)。

4. 最佳實踐

  1. 優先避免重啟:通過重新加載環境變量和重啟應用程序驗證功能。
  2. 檢查兼容性:確保NCCL版本與CUDA、PyTorch/TensorFlow等框架兼容。
  3. 使用容器化環境(如Docker):可避免系統級依賴問題,無需重啟主機。

總結

大多數情況下,安裝NCCL后無需重啟系統,只需更新環境變量并重啟相關應用程序即可。僅在涉及驅動更新或系統配置變更時需要重啟。使用容器化環境(如Docker)部署深度學習任務確實能有效避免系統級依賴問題,以下是具體說明和操作指南:

為什么選擇Docker?

  1. 隔離性:容器內的環境(如CUDA、NCCL、Python包)與主機完全隔離,不會影響系統其他組件。
  2. 可移植性:一次構建的鏡像可在任何支持Docker的環境中運行,確保環境一致性。
  3. 無需重啟主機:容器啟動時會加載所需的所有依賴,無需修改主機系統或重啟。
  4. 版本控制:可輕松切換不同版本的CUDA、NCCL或框架(如PyTorch)。

如何在Docker中配置深度學習環境?

1. 安裝Docker和NVIDIA Container Toolkit
# 安裝Docker CE
curl -fsSL https://get.docker.com | sh
sudo systemctl start docker
sudo systemctl enable docker# 安裝NVIDIA Container Toolkit(允許Docker容器訪問GPU)
distribution=$(. /etc/os-release; echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
2. 使用預構建的深度學習鏡像

NVIDIA提供了預配置好CUDA、NCCL和常見框架的Docker鏡像:

# 拉取PyTorch官方鏡像(包含CUDA和NCCL)
docker pull nvcr.io/nvidia/pytorch:23.06-py3  # 版本號可根據需要調整# 啟動容器(掛載當前目錄到容器內的/workspace)
docker run --gpus all -it -v $(pwd):/workspace nvcr.io/nvidia/pytorch:23.06-py3
3. 自定義Dockerfile(推薦)

創建自己的Dockerfile以精確控制環境:

# 使用NVIDIA PyTorch基礎鏡像
FROM nvcr.io/nvidia/pytorch:23.06-py3# 安裝額外依賴
RUN pip install deepspeed transformers  # 添加你需要的包# 設置工作目錄
WORKDIR /workspace# 復制代碼到容器內
COPY . /workspace# 啟動命令(示例)
CMD ["deepspeed", "7t3-4-rl.py"]

構建并運行:

# 構建鏡像
docker build -t my-rl-environment .# 運行容器
docker run --gpus all -it my-rl-environment

在容器中使用DeepSpeed和NCCL

  1. 無需額外安裝NCCL:NVIDIA基礎鏡像已包含預配置的NCCL,且與CUDA版本兼容。
  2. 分布式訓練:在容器內直接使用DeepSpeed或torch.distributed,無需擔心MPI或NCCL兼容性。

示例命令:

docker run --gpus all -it --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 \my-rl-environment \deepspeed --include localhost:0,1 7t3-4-rl.py

常見問題解決方案

  1. 容器內無法訪問GPU

    # 檢查GPU是否被Docker識別
    docker run --gpus all nvcr.io/nvidia/cuda:11.8.0-base nvidia-smi
    
  2. 容器與主機的CUDA版本不匹配

    • 確保主機的NVIDIA驅動版本支持容器內的CUDA版本(驅動兼容性表)。
  3. 掛載數據卷

    # 將主機數據目錄掛載到容器
    docker run --gpus all -v /path/on/host:/data my-rl-environment
    

總結

使用Docker容器部署深度學習任務的優勢:

  • 零系統污染:所有依賴都在容器內,不會影響主機。
  • 快速部署:避免繁瑣的環境配置,一鍵啟動。
  • 可復現性:確保開發、測試和生產環境一致。

建議優先使用容器化方案,特別是在共享服務器或多用戶環境中。要確定NVIDIA Container Toolkit是否安裝成功,可以通過以下步驟進行驗證:

1. 檢查服務狀態

驗證NVIDIA Container Toolkit服務是否正常運行:

sudo systemctl status nvidia-container-runtime
  • 正常狀態:顯示 active (running)
  • 異常狀態:若顯示 inactive 或報錯,可能需要重新安裝或檢查配置。

2. 檢查Docker配置

確認Docker已配置為使用NVIDIA運行時:

sudo cat /etc/docker/daemon.json
  • 正確配置:應包含類似以下內容:
    {"runtimes": {"nvidia": {"path": "nvidia-container-runtime","runtimeArgs": []}}
    }
    
  • 若文件不存在或內容缺失:需重新配置Docker,參考官方文檔。

3. 運行GPU容器測試

通過官方CUDA容器驗證GPU是否可被容器訪問:

sudo docker run --rm --gpus all nvidia/cuda:11.8.0-base nvidia-smi
  • 成功標志:輸出GPU信息(如GPU型號、溫度、顯存使用情況)。
  • 失敗標志
    • 報錯 unknown flag: --gpus:Docker版本過低(需Docker 19.03+)。
    • 報錯 Could not select device driver:NVIDIA Container Toolkit未正確安裝。
    • 報錯 Failed to initialize NVML:主機NVIDIA驅動與容器內CUDA版本不兼容。

4. 檢查工具包版本

確認已安裝的NVIDIA Container Toolkit版本:

sudo apt list --installed | grep nvidia-container-toolkit

輸出示例:

nvidia-container-toolkit/jammy,now 1.13.5-1 amd64 [installed]

5. 檢查驅動兼容性

確保主機NVIDIA驅動版本支持容器內的CUDA版本:

# 查看主機驅動版本
nvidia-smi  # 輸出中 "Driver Version" 字段# 查看容器內CUDA版本
sudo docker run --rm --gpus all nvidia/cuda:11.8.0-base nvcc --version

參考NVIDIA驅動兼容性矩陣確保版本匹配。

6. 檢查容器內GPU設備節點

運行容器并檢查 /dev/nvidia* 設備節點是否存在:

sudo docker run --rm --gpus all -it nvidia/cuda:11.8.0-base bash

在容器內執行:

ls -l /dev/nvidia*
  • 正常輸出:顯示多個NVIDIA設備節點(如 /dev/nvidia0/dev/nvidiactl)。
  • 異常輸出:無設備節點或權限錯誤,可能是容器運行時配置問題。

故障排除

  • 重啟Docker服務

    sudo systemctl restart docker
    
  • 重新安裝NVIDIA Container Toolkit

    sudo apt-get remove --purge nvidia-container-toolkit
    sudo apt-get install nvidia-container-toolkit
    
  • 查看日志

    sudo journalctl -u docker.service
    

總結

  • 核心驗證:成功運行 docker run --gpus all ... nvidia-smi 并輸出GPU信息。
  • 依賴檢查:確保Docker版本 ≥ 19.03,主機驅動與容器CUDA兼容。
  • 配置檢查:確保 /etc/docker/daemon.json 包含NVIDIA運行時配置。

如果仍有問題,請提供具體錯誤日志以便進一步排查。根據輸出結果,NVIDIA Container Toolkit 已成功安裝,版本為 1.17.8-1

關鍵信息確認:

  1. 已安裝包

    nvidia-container-toolkit-base/unknown,now 1.17.8-1 amd64 [installed,automatic]
    nvidia-container-toolkit/unknown,now 1.17.8-1 amd64 [installed]
    
    • nvidia-container-toolkit 是核心組件,負責容器與GPU的集成。
    • nvidia-container-toolkit-base 是依賴庫,通常由主包自動安裝。
  2. 版本兼容性

    • 該版本支持 CUDA 11.x/12.xDocker 20.10+,與當前主流深度學習框架兼容。

進一步驗證(建議操作):

# 1. 檢查Docker能否訪問GPU
sudo docker run --rm --gpus all nvidia/cuda:11.8.0-base nvidia-smi# 2. 確認容器內可見GPU數量(假設主機有2個GPU)
sudo docker run --rm --gpus all python:3.10-slim python -c "import torch; print(torch.cuda.device_count())"

潛在問題與解決方案:

  1. 若命令報錯 --gpus: unknown flag

    • 原因:Docker版本過低(需 ≥ 19.03)。
    • 解決:升級Docker:
      sudo apt-get update
      sudo apt-get install --only-upgrade docker-ce
      
  2. nvidia-smi 在容器內報錯

    • 原因:主機驅動與容器內CUDA版本不兼容。
    • 解決:確保主機驅動版本 ≥ 容器CUDA所需的最低版本(參考NVIDIA驅動矩陣)。
  3. 若容器啟動失敗

    • 原因:Docker配置未正確指向NVIDIA運行時。
    • 解決:檢查并修改 /etc/docker/daemon.json
      {"runtimes": {"nvidia": {"path": "nvidia-container-runtime","runtimeArgs": []}},"default-runtime": "nvidia"  # 可選,設置為默認運行時
      }
      
      然后重啟Docker:
      sudo systemctl restart docker
      

總結:

NVIDIA Container Toolkit 已正確安裝,建議通過運行GPU容器測試(如 nvidia-smi)驗證最終功能。若遇到問題,可根據具體錯誤日志進一步排查。目前沒有直接找到完全匹配“deepspeed、pytorch、python3.12、強化學習”的現成Docker鏡像,但可以基于一些相關鏡像進行定制構建,以下是具體介紹及構建方法:

  • 基于PyTorch官方鏡像構建:PyTorch官方鏡像包含了PyTorch運行環境,可在此基礎上安裝deepspeed和其他強化學習相關庫。例如可以使用pytorch/pytorch:2.2.1-cuda12.1-cudnn8-devel作為基礎鏡像,在Dockerfile中添加以下內容:
FROM pytorch/pytorch:2.2.1-cuda12.1-cudnn8-devel
RUN apt-get update && apt-get install -y python3.12 python3.12-dev
RUN pip3 install deepspeed -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安裝強化學習相關庫,如stable - baselines3等
RUN pip3 install stable - baselines3 gymnasium

然后使用docker build -t your - image - name.命令構建鏡像,其中your - image - name為你自定義的鏡像名稱。

  • 基于Python官方鏡像構建:如果希望從更基礎的Python鏡像開始構建,可選擇python:3.12-slim作為基礎鏡像,然后安裝PyTorch和deepspeed等庫。在Dockerfile中編寫以下內容:
FROM python:3.12-slim
RUN apt - get update && apt - get install - y build - essential && rm -rf /var/lib/apt/lists/*
# 安裝PyTorch,根據實際情況選擇合適的CUDA版本
RUN pip3 install torch==2.6.0+cu121 torchvision==0.17.0+cu121 torchaudio==2.6.0+cu121 --extra - index - url https://download.pytorch.org/whl/cu121
RUN pip3 install deepspeed
RUN pip3 install stable - baselines3 gymnasium

同樣使用docker build -t your - image - name.命令構建鏡像。

  • 參考已有項目鏡像構建:一些涉及強化學習和deepspeed的項目會提供鏡像構建方法,如Sakana AI團隊開源的項目。可參考其Dockerfile,在其中將Python版本指定為3.12,并根據需求調整其他依賴版本。示例如下:
FROM nvidia/cuda:12.1 - base
RUN apt-get update && apt-get install -y \
python3 python3-pip git git-lfs wget && \
apt-get clean && rm -rf /var/lib/apt/lists/*
RUN pip3 install torch==2.6.0+cu121 torchvision==0.17.0+cu121 torchaudio==2.6.0+cu121 \
--extra - index - url https://download.pytorch.org/whl/cu121
RUN pip3 install transformers==4.30.2 datasets==2.12.0 accelerate==0.21.0
RUN pip3 install deepspeed==0.9.5
# 安裝強化學習相關庫
RUN pip3 install stable - baselines3 gymnasium

構建命令依然是docker build -t your - image - name.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913611.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913611.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913611.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Docker】在銀河麒麟ARM環境下離線安裝docker

1、前言 采用離線安裝的方式。 關于離線安裝的方式官網有介紹,但是說的很簡單,網址:Binaries | Docker Docs 官網介紹的有幾種主流linux系統的安裝方式,但是沒有kylin的,所以在此記錄一下。 在安裝過程中也遇到了些…

AUTOSAR進階圖解==>AUTOSAR_SWS_SOMEIPTransformer

AUTOSAR SOME/IP 轉換器規范詳解 基于AUTOSAR標準的SOME/IP轉換器協議解析與實現指南目錄 1. 介紹與功能概述2. SOME/IP架構 2.1 SOME/IP轉換器架構2.2 組件解釋2.3 層級說明 3. SOME/IP通信流程 3.1 客戶端/服務器通信序列3.2 通信流程解釋 4. SOME/IP消息結構 4.1 消息結構類…

Python 機器學習核心入門與實戰進階 Day 5 - 模型調參與交叉驗證技巧(GridSearchCV、KFold)

? 今日目標 理解模型調參的重要性(避免欠擬合/過擬合)掌握 GridSearchCV 的使用方法學習 K 折交叉驗證的基本流程與意義對比不同參數組合的表現使用 Pipeline 簡化流程(進階)📘 一、調參思路方法描述Grid Search窮舉所…

Python打卡:Day47

復習日 浙大疏錦行

ACE-Step:AI音樂生成基礎模型

ACE-Step是什么 ACE-Step 是 ACE Studio 和 StepFun 聯合推出的一款開源音樂生成基礎模型,專為高效、連貫、可控的音樂創作而設計。它融合了擴散模型、深度壓縮自編碼器(DCAE)和輕量級線性變換器,生成速度比傳統大模型快約 15 倍…

Web前端: :is(通用選擇器)

:is(通用選擇器)CSS中的 :is() 選擇器是?個功能強?的偽類選擇器,它?于簡化復雜的選擇器,特別是在處理多個相似的選擇器時。:is() 選擇器接受 ?個選擇器列表作為參數,然后匹配列表中任何?個選擇器所選中的元素。:is() 選擇器核心概念基本…

【學習筆記】網絡設備(華為交換機)基礎知識 24 —— 以太網子接口基礎知識

**總結:分享華為交換機以太網子接口基礎知識:包含子接口的簡介、功能、分類以及二層以太網子接口配置終結子接口、三層以太網子接口配置終結子接口和檢查配置結果的相關命令 ** 一、子接口的概念 1、子接口的簡介以太網子接口:?是通過協議和…

在Docker中安裝nexus3(作為maven私服)

1. 為什么我不推薦安裝nexus2? 有兩個原因:(1)nexus2安裝麻煩,nexus3安裝更方便 (2)Nexus 3相對于Nexus 2進行了一些重要的改進和增強。它引入了新的存儲引擎、更多的倉庫類型支持、改進的權限…

一、MySQL 8.0 之《EXPLAIN ANALYZE 執行計劃》

文章目錄一、MySQL EXPLAIN ANALYZE 執行計劃指南主要功能實際執行性能分析詳細的執行統計性能瓶頸識別與普通 EXPLAIN 的區別使用場景查詢優化問題診斷總結二、EXPLAIN ANALYZE 執行計劃樣例分析執行順序解讀逐行詳細解釋第 7 行 (最內層)第 6 行第 5 行第 4 行第 3 行第 2 行…

Google I/O Extended :2025 Flutter 的現狀與未來

大家好,我是 Flutter GDE 郭樹煜,Github GSY 項目的維護人,今天主要分享的內容是「Flutter 的現狀與未來」,可能今天更多會是信息科普類型的內容,主要是分享關于 Flutter 的現狀與未來 現狀 其實 Flutter 從開源到現在…

軟考(軟件設計師)數據庫原理:事務管理,備份恢復,并發控制

數據庫事務管理與備份恢復 事務(Transaction) 是數據庫管理系統中執行的一個不可分割的工作單元,它包含一組 SQL 操作,這些操作要么全部成功執行,要么全部不執行。 事務的四大特性(ACID)&…

【牛客刷題】相遇

文章目錄 一、題目介紹1.1 題目描述1.2 輸入描述1.3 輸出描述1.4 示例二、解題思路2.1 核心算法設計2.2 性能優化關鍵2.3 算法流程圖三、解法實現3.1 解法一:基礎實現3.1.1 初級版本分析3.2 解法二:優化版本(推薦)3.2.1 優化版本分析一、題目介紹 1.1 題目描述 街道可以看…

uni-app 下拉搜索多選 支持自己創建數據

組件 /components/selectmul.vue <template><view class="multi-select-container"><view class="input-dropdown-container"><view class="" v-if="selectlist&&selectlist[0]"><text class=&qu…

nmon使用方法

安裝方法 方法1&#xff1a; 最簡單方法&#xff1a; #dnf install nom 驗證 執行命令&#xff1a; #nmon 方法2&#xff1a; 下載安裝包安裝&#xff0c;下載地址 官網&#xff1a;nmon and njmon | Site / Download 或者&#xff1a;https://sourceforge.net/project…

Google AI 剛剛開源 MCP 數據庫工具箱,讓 AI 代理安全高效地查詢數據庫

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

數學建模的一般步驟

歸納編程學習的感悟&#xff0c; 記錄奮斗路上的點滴&#xff0c; 希望能幫到一樣刻苦的你&#xff01; 如有不足歡迎指正&#xff01; 共同學習交流&#xff01; &#x1f30e;歡迎各位→點贊 &#x1f44d; 收藏? 留言?&#x1f4dd; 青春由磨礪而出彩&#xff0c;人生因奮…

【web安全】SQLMap 參數深度解析:--risk 與 --level 詳解

目錄 簡介 一、--risk 參數&#xff1a;測試風險控制 1. 基本定義 2. 各級別詳細對比 risk1 (默認) risk2 risk3 3. 使用建議 二、--level 參數&#xff1a;測試深度控制 1. 基本定義 2. 各級別詳細對比 level1 (默認) level2 level3 level4 level5 3. 技術實…

YOLO在自動駕駛交通標志識別中的應用與優化【附代碼】

文章目錄YOLO在自動駕駛交通標志識別中的應用與優化引言1. YOLO算法概述1.1 YOLO的核心思想1.2 YOLO的演進2. 交通標志識別的挑戰2.1 數據集特性2.2 性能指標要求3. YOLO模型優化策略3.1 數據增強改進3.2 注意力機制集成3.3 針對小目標的改進4. 完整實現示例4.1 模型訓練代碼4.…

開源鴻蒙(OpenHarmony)桌面版全面解析:架構適配、設備支持與開發實戰

摘要:深度剖析OpenHarmony 4.0+桌面版的技術演進,揭秘其在X86/國產芯片設備的落地實踐,附源碼獲取與開發板實戰指南 一、OpenHarmony桌面版架構突破 1.1 跨平臺內核適配 開源鴻蒙通過 多內核混合架構 實現全場景覆蓋: X86架構:集成Linux內核適配層(kernel/linux),支持…

【WEB】Polar靶場 11-15題 詳細筆記

目錄 十一.爆破 PHP的基本語法 變量與常量 數據類型 流程控制 函數 文件操作 數據庫交互 1.substr() 函數 2. intval() 函數 十二.XFF X-Forwarded-For&#xff08;簡稱XFF&#xff09; 十三.rce1 shell 命令分隔符 isset()函數 preg_match_all()函數 ${IFS}…