色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深度學習框架DeepSpeed使用指南

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-30 10:09 ? 次閱讀

最常見的深度學習框架應該是TensorFlow、Pytorch、Keras,但是這些框架在面向大規模模型的時候都不是很方便。

比如Pytorch的分布式并行計算框架(Distributed Data Parallel,簡稱DDP),它也僅僅是能將數據并行,放到各個GPU的模型上進行訓練。

圖片

也就是說,DDP的應用場景在你的模型大小大于顯卡顯存大小時,它就無法使用了,除非你自己再將模型參數拆散分散到各個GPU上。

今天要給大家介紹的DeepSpeed,它就能實現這個拆散功能,它通過將模型參數拆散分布到各個GPU上,以實現大型模型的計算,彌補了DDP的缺點,非常方便,這也就意味著我們能用更少的GPU訓練更大的模型,而且不受限于顯存。

圖片

DeepSpeed入門并不簡單,盡管是微軟開源的框架,文檔卻寫的一般,缺少條理性,也沒有從零到一的使用示例。下面我就簡單介紹一下怎么使用DeepSpeed這個框架。

1.準備

開始之前,你要確保Pythonpip已經成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。

**(可選1) **如果你用Python的目的是數據分析,可以直接安裝Anaconda:Python數據分析與挖掘好幫手—Anaconda,它內置了Python和pip.

**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優點:Python 編程的最好搭檔—VSCode 詳細指南

請選擇以下任一種方式輸入命令安裝依賴

  1. Windows 環境 打開 Cmd (開始-運行-CMD)。
  2. MacOS 環境 打開 Terminal (command+空格輸入Terminal)。
  3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install deepspeed

此外,你還需要下載 Pytorch,在官網選擇自己對應的系統版本和環境,按照指示安裝即可:

https://pytorch.org/get-started/locally/

圖片

2.使用 DeepSpeed

使用DeepSpeed其實和寫一個pytorch模型只有部分區別,一開始的流程是一樣的。

2.1 載入數據集:

import torch
import torchvision
import torchvision.transforms as transforms

trainset = torchvision.datasets.CIFAR10(root='./data',
                                        train=True,
                                        download=True,
                                        transform=transform)
trainloader = torch.utils.data.DataLoader(trainset,
                                          batch_size=16,
                                          shuffle=True,
                                          num_workers=2)
testset = torchvision.datasets.CIFAR10(root='./data',
                                       train=False,
                                       download=True,
                                       transform=transform)
testloader = torch.utils.data.DataLoader(testset,
                                         batch_size=4,
                                         shuffle=False,
                                         num_workers=2)

2.2 編寫模型:

import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

net = Net()
criterion = nn.CrossEntropyLoss()

這里我寫了一個非常簡單的模型作測試。

2.3 初始化Deepspeed

DeepSpeed 通過輸入參數來啟動訓練,因此需要使用argparse解析參數:

import argparse


def add_argument():
    parser = argparse.ArgumentParser(description='CIFAR')
    parser.add_argument('-b',
                        '--batch_size',
                        default=32,
                        type=int,
                        help='mini-batch size (default: 32)')
    parser.add_argument('-e',
                        '--epochs',
                        default=30,
                        type=int,
                        help='number of total epochs (default: 30)')
    parser.add_argument('--local_rank',
                        type=int,
                        default=-1,
                        help='local rank passed from distributed launcher')

    parser.add_argument('--log-interval',
                        type=int,
                        default=2000,
                        help="output logging information at a given interval")

    parser = deepspeed.add_config_arguments(parser)
    args = parser.parse_args()
    return args

此外,模型初始化的時候除了參數,還需要model及其parameters,還有訓練集:

args = add_argument()
net = Net()
parameters = filter(lambda p: p.requires_grad, net.parameters())
model_engine, optimizer, trainloader, __ = deepspeed.initialize(
    args=args, model=net, model_parameters=parameters, training_data=trainset)

2.4 訓練邏輯

下面的部分和我們平時訓練模型是幾乎一樣的代碼,請注意 local_rank 是你不需要管的參數,在后面啟動模型訓練的時候,DeepSpeed會自動給這個參數賦值。

for epoch in range(2):
    running_loss = 0.0
    for i, data in enumerate(trainloader):
        inputs, labels = data[0].to(model_engine.local_rank), data[1].to(
            model_engine.local_rank)
        outputs = model_engine(inputs)
        loss = criterion(outputs, labels)
        model_engine.backward(loss)
        model_engine.step()

        # print statistics
        running_loss += loss.item()
        if i % args.log_interval == (args.log_interval - 1):
            print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / args.log_interval))
            running_loss = 0.0

2.5 測試邏輯

模型測試和模型訓練的邏輯類似:

correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(images.to(model_engine.local_rank))
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels.to(
            model_engine.local_rank)).sum().item()

print('Accuracy of the network on the 10000 test images: %d %%' %
      (100 * correct / total))

2.6 編寫模型參數

在當前目錄下新建一個 config.json 里面寫好我們的調優器、訓練batch等參數:

{
   "train_batch_size": 4,
   "steps_per_print": 2000,
   "optimizer": {
     "type": "Adam",
     "params": {
       "lr": 0.001,
       "betas": [
         0.8,
         0.999
       ],
       "eps": 1e-8,
       "weight_decay": 3e-7
     }
   },
   "scheduler": {
     "type": "WarmupLR",
     "params": {
       "warmup_min_lr": 0,
       "warmup_max_lr": 0.001,
       "warmup_num_steps": 1000
     }
   },
   "wall_clock_breakdown": false
 }

完整的開發流程就結束了,可以看到其實和我們平時使用pytorch開發模型的區別不大,就是在初始化的時候使用 DeepSpeed,并以輸入參數的形式初始化。

完整代碼可以在Python實用寶典后臺回復 **Deepspeed **下載。

3. 測試代碼

現在就來測試我們上面的代碼能不能正常運行。

在這里,我們需要用環境變量控制使用的GPU,比如我的機器有10張GPU,我只使用6, 7, 8, 9號GPU,輸入命令:

export CUDA_VISIBLE_DEVICES="6,7,8,9"

然后開始運行代碼:

deepspeed test.py --deepspeed_config config.json

看到下面的輸出說明開始正常運行,在下載數據了:

圖片

開始訓練的時候 DeepSpeed 通常會打印更多的訓練細節供用戶監控,包括訓練設置、性能統計和損失趨勢,效果類似于:

worker-0: [INFO 2020-02-06 20:35:23] 0/24550, SamplesPerSec=1284.4954513975558
worker-0: [INFO 2020-02-06 20:35:23] 0/24600, SamplesPerSec=1284.384033658866
worker-0: [INFO 2020-02-06 20:35:23] 0/24650, SamplesPerSec=1284.4433482972925
worker-0: [INFO 2020-02-06 20:35:23] 0/24700, SamplesPerSec=1284.4664449792422
worker-0: [INFO 2020-02-06 20:35:23] 0/24750, SamplesPerSec=1284.4950124403447
worker-0: [INFO 2020-02-06 20:35:23] 0/24800, SamplesPerSec=1284.4756105952233
worker-0: [INFO 2020-02-06 20:35:24] 0/24850, SamplesPerSec=1284.5251526215386
worker-0: [INFO 2020-02-06 20:35:24] 0/24900, SamplesPerSec=1284.531217073863
worker-0: [INFO 2020-02-06 20:35:24] 0/24950, SamplesPerSec=1284.5125323220368
worker-0: [INFO 2020-02-06 20:35:24] 0/25000, SamplesPerSec=1284.5698818883018
worker-0: Finished Training
worker-0: GroundTruth: cat ship ship plane
worker-0: Predicted: cat car car plane
worker-0: Accuracy of the network on the 10000 test images: 57 %

當你運行到最后,出現了這樣的輸出,恭喜你,完成了你的第一個 DeepSpeed 模型,可以開始你的大規模訓練之路了。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4729

    瀏覽量

    128890
  • 顯存
    +關注

    關注

    0

    文章

    108

    瀏覽量

    13654
  • 模型
    +關注

    關注

    1

    文章

    3226

    瀏覽量

    48809
  • 深度學習
    +關注

    關注

    73

    文章

    5500

    瀏覽量

    121113
收藏 人收藏

    評論

    相關推薦

    Nanopi深度學習之路(1)深度學習框架分析

    就能實現!還請關注我后面的日記。實際上我也是剛剛有時間學習深度學習,我是個純初學者,但面對深度學習里的各種復雜理論和公式推導,自己實現個小功
    發表于 06-04 22:32

    主流深度學習框架比較

    DL:主流深度學習框架多個方向PK比較
    發表于 12-26 11:10

    深度學習框架只為GPU?

    CPU優化深度學習框架和函數庫機器學***器
    發表于 02-22 06:01

    深度學習算法和應用涌現的背后,是各種各樣的深度學習工具和框架

    回顧深度學習框架的演變,我們可以清楚地看到深度學習框架深度
    的頭像 發表于 01-21 13:46 ?2752次閱讀

    深度學習框架pytorch入門與實踐

    深度學習框架pytorch入門與實踐 深度學習是機器學習中的一個分支,它使用多層神經網絡對大量數
    的頭像 發表于 08-17 16:03 ?1593次閱讀

    深度學習框架是什么?深度學習框架有哪些?

    深度學習框架是什么?深度學習框架有哪些?? 深度
    的頭像 發表于 08-17 16:03 ?2733次閱讀

    深度學習框架區分訓練還是推理嗎

    深度學習框架區分訓練還是推理嗎 深度學習框架是一個非常重要的技術,它們能夠加速
    的頭像 發表于 08-17 16:03 ?1371次閱讀

    深度學習框架的作用是什么

    深度學習框架的作用是什么 深度學習是一種計算機技術,它利用人工神經網絡來模擬人類的學習過程。由于
    的頭像 發表于 08-17 16:10 ?1559次閱讀

    深度學習框架tensorflow介紹

    深度學習框架tensorflow介紹 深度學習框架TensorFlow簡介
    的頭像 發表于 08-17 16:11 ?2502次閱讀

    深度學習算法庫框架學習

    深度學習算法庫框架學習 深度學習是一種非常強大的機器學習
    的頭像 發表于 08-17 16:11 ?691次閱讀

    深度學習框架對照表

    深度學習框架對照表? 隨著人工智能技術的發展,深度學習正在成為當今最熱門的研究領域之一。而深度
    的頭像 發表于 08-17 16:11 ?793次閱讀

    深度學習框架連接技術

    深度學習框架連接技術 深度學習框架是一個能夠幫助機器學習
    的頭像 發表于 08-17 16:11 ?771次閱讀

    深度學習cntk框架介紹

    深度學習cntk框架介紹? 深度學習是最近幾年來非常熱門的話題,它正在徹底改變我們生活和工作的方式。隨著越來越多的創新和發展,人工智能和機器
    的頭像 發表于 08-17 16:11 ?1363次閱讀

    深度學習框架深度學習算法教程

    深度學習框架深度學習算法教程 深度學習是機器
    的頭像 發表于 08-17 16:11 ?1072次閱讀

    TensorFlow與PyTorch深度學習框架的比較與選擇

    深度學習作為人工智能領域的一個重要分支,在過去十年中取得了顯著的進展。在構建和訓練深度學習模型的過程中,深度
    的頭像 發表于 07-02 14:04 ?953次閱讀
    主站蜘蛛池模板: 久久亚洲伊人中字综合精品| 精品一区二区三区在线成人 | 瑜伽牲交AV| 97午夜理论片影院在线播放| 二级片免费看| 久久不卡免费视频| 日本午夜精品理论片A级APP发布| 男女做爽爽爽视频免费软件| 受喷汁红肿抽搐磨NP双性| 尹人综合网| gv肉片视频免费观看| 含羞草在线| 丫鬟粗大狠狠贯穿h| 24小时日本在线观看片| 国产精品免费观看视频播放| 明星三级电影| 亚洲免费片| 古月娜下面好紧好爽| 俄罗斯搜索引擎Yandex推广入口| 精品久久久久亚洲| 乱淫67194| 午夜熟女插插XX免费视频| 4399日本电影完整版在线观看免费 | 国产综合在线视频| 欧美一区二区视频在线观看| 三级黄色在线| 最近中文字幕完整版免费高清| 国产性夜夜春夜夜爽1A片| 青青热久精品国产亚洲AV无码| 伊人久久国产精品| 国产区精品综合在线| 人妻夜夜爽99麻豆AV| 亚洲1卡二卡3卡4卡新区在线| AV多人爱爱XXx| 久久国产精品人妻中文| 午夜性伦鲁啊鲁免费视频| java农村野外妇女hd| 巨黄的肉辣文np| 天天操天天干天天爽| vidosgratis tv少女| 美女拉开腿让男生桶到爽|