亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在pytorch中部署半精度模型

發布時間:2021-05-24 15:35:52 來源:億速云 閱讀:315 作者:Leah 欄目:開發技術

如何在pytorch中部署半精度模型?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

具體方法

在pytorch中,一般模型定義都繼承torch.nn.Moudle,torch.nn.Module基類的half()方法會把所有參數轉為16位浮點,所以在模型加載后,調用一下該方法即可達到模型切換的目的.接下來只需要在推斷時把input的tensor切換為16位浮點即可

另外還有一個小的trick,在推理過程中模型輸出的tensor自然會成為16位浮點,如果需要新創建tensor,最好調用已有tensor的new_zeros,new_full等方法而不是torch.zeros和torch.full,前者可以自動繼承已有tensor的類型,這樣就不需要到處增加代碼判斷是使用16位還是32位了,只需要針對input tensor切換.

補充:pytorch 使用amp.autocast半精度加速訓練

準備工作

pytorch 1.6+

如何使用autocast?

根據官方提供的方法,

答案就是autocast + GradScaler。

1,autocast

正如前文所說,需要使用torch.cuda.amp模塊中的autocast 類。使用也是非常簡單的:

如何在PyTorch中使用自動混合精度?

答案:autocast + GradScaler。

1.autocast

正如前文所說,需要使用torch.cuda.amp模塊中的autocast 類。使用也是非常簡單的

from torch.cuda.amp import autocast as autocast

# 創建model,默認是torch.FloatTensor
model = Net().cuda()
optimizer = optim.SGD(model.parameters(), ...)

for input, target in data:
    optimizer.zero_grad()

    # 前向過程(model + loss)開啟 autocast
    with autocast():
        output = model(input)
        loss = loss_fn(output, target)

    # 反向傳播在autocast上下文之外
    loss.backward()
    optimizer.step()

2.GradScaler

GradScaler就是梯度scaler模塊,需要在訓練最開始之前實例化一個GradScaler對象。

因此PyTorch中經典的AMP使用方式如下:

from torch.cuda.amp import autocast as autocast

# 創建model,默認是torch.FloatTensor
model = Net().cuda()
optimizer = optim.SGD(model.parameters(), ...)
# 在訓練最開始之前實例化一個GradScaler對象
scaler = GradScaler()

for epoch in epochs:
    for input, target in data:
        optimizer.zero_grad()

        # 前向過程(model + loss)開啟 autocast
        with autocast():
            output = model(input)
            loss = loss_fn(output, target)

        scaler.scale(loss).backward()
        scaler.step(optimizer)
        scaler.update()

3.nn.DataParallel

單卡訓練的話上面的代碼已經夠了,親測在2080ti上能減少至少1/3的顯存,至于速度。。。

要是想多卡跑的話僅僅這樣還不夠,會發現在forward里面的每個結果都還是float32的,怎么辦?

class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()

    def forward(self, input_data_c1):
     with autocast():
      # code
     return

pytorch的優點

1.PyTorch是相當簡潔且高效快速的框架;2.設計追求最少的封裝;3.設計符合人類思維,它讓用戶盡可能地專注于實現自己的想法;4.與google的Tensorflow類似,FAIR的支持足以確保PyTorch獲得持續的開發更新;5.PyTorch作者親自維護的論壇 供用戶交流和求教問題6.入門簡單

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉兴市| 武胜县| 安宁市| 宁波市| 仙桃市| 信阳市| 安平县| 蒲城县| 七台河市| 陕西省| 方城县| 吴桥县| 焦作市| 天水市| 岳池县| 金昌市| 天津市| 宁安市| 吉安市| 仁化县| 宁陵县| 菏泽市| 大田县| 金乡县| 安陆市| 淮北市| 平阳县| 海淀区| 沙湾县| 三穗县| 绵竹市| 嘉荫县| 美姑县| 泗洪县| 巨鹿县| 潼南县| 乐亭县| 布拖县| 伽师县| 亳州市| 开江县|