PyTorch 浮點數精度全景:從 float16/bfloat16 到 float64 及混合精度實戰

PyTorch 在深度學習中提供了多種 IEEE 754 二進制浮點格式的支持,包括半精度(float16)、Brain?float(bfloat16)、單精度(float32)和雙精度(float64),并通過統一的 torch.dtype 接口進行管理citeturn0search0turn0search3。用戶可利用 torch.finfo 查詢各類型的數值極限(如最大值、最小值、機器 ε 等),通過 torch.set_default_dtype/torch.get_default_dtype 設置或獲取全局默認浮點精度,并使用 torch.promote_types 控制運算中的類型提升規則citeturn0search2turn0search4。在現代 GPU 上,PyTorch 提供了 torch.amp.autocasttorch.amp.GradScaler 等自動混合精度(AMP)工具,能夠在保證數值穩定性的前提下,大幅提升訓練速度和降低顯存占用citeturn0search6turn0search11。

PyTorch 浮點類型對比

類型 (torch.dtype)別名位寬符號位指數位尾數位 (顯式)有效精度 (含隱含位)典型用途
torch.float16torch.half16151011 位 (~3.3 十進制位)推理加速,對精度要求不高的場景
torch.bfloat16161878 位 (~2.4 十進制位)大規模訓練(TPU、支持 BF16 的 GPU)
torch.float32torch.float32182324 位 (~7.2 十進制位)深度學習訓練/推理的標準精度
torch.float64torch.double641115253 位 (~15.9 十進制位)科學計算、高精度數值分析

上表位寬、指數位、尾數位數據遵循 IEEE 754 標準:二進制16(binary16)格式指數 5 位、尾數 10 位citeturn1search0;二進制32(binary32)格式指數 8 位、尾數 23 位citeturn1search8;二進制64(binary64)格式指數 11 位、尾數 52 位citeturn1search8。

數值屬性查詢

  • torch.finfo(dtype):返回指定浮點類型的數值極限信息,包括:
    • bits:總位寬
    • eps:機器 ε,即最小增量
    • min/max:可表示的最小/最大值
    • tiny/smallest_normal:最小非規范/規范化值 citeturn0search2。
import torch
print(torch.finfo(torch.float32))
# finfo(resolution=1e-06, min=-3.40282e+38, max=3.40282e+38, eps=1.19209e-07, smallest_normal=1.17549e-38, tiny=1.17549e-38, dtype=float32)

默認精度與類型提升

  • 全局默認浮點精度

    • torch.get_default_dtype():獲取當前默認浮點類型,初始值為 torch.float32citeturn0search9。
    • torch.set_default_dtype(d):設置默認浮點類型,僅支持浮點類型輸入;后續通過 Python float 構造的張量將采用該類型citeturn0search4。
  • 類型提升 (Type Promotion)

    • torch.promote_types(type1, type2):返回在保證不降低精度與范圍的前提下,最小的可兼容浮點類型,用于混合類型運算時的結果類型推斷citeturn0search5。

自動混合精度(AMP)

PyTorch 的 AMP 機制在 前向/反向傳播 中自動選擇低精度(float16bfloat16)計算,而在 權重更新 等關鍵環節保留 float32,以兼顧性能與數值穩定性。

  • torch.amp.autocast:上下文管理器,針對支持的設備(如 CUDA GPU 或 CPU)自動切換運算精度;在 CUDA 上默認使用 float16,在 CPU 上可指定 dtype=torch.bfloat16citeturn0search6。
  • torch.amp.GradScaler:動態縮放梯度,避免低精度下的梯度下溢,實現穩定訓練;與 autocast 搭配使用可獲顯著加速(1.5–2×)和顯存節省citeturn0search11。

示例(CUDA 上的混合精度訓練):

from torch.amp import autocast, GradScaler
scaler = GradScaler()
for data, target in loader:optimizer.zero_grad()with autocast():output = model(data)loss = loss_fn(output, target)scaler.scale(loss).backward()scaler.step(optimizer)scaler.update()

實踐建議

  1. 開發與調試階段:優先使用 float32,確保數值穩定。
  2. 大規模訓練:若硬件支持 BF16,可嘗試 bfloat16 訓練;否則在 GPU 上結合 AMP 使用 float16。 3. 部署推理:在對精度容忍度高的場景下采用 float16,監控精度變化。
  3. 默認設置優化:根據項目需求使用 torch.set_default_dtype 控制全局默認精度,并結合 torch.promote_types 處理跨類型運算。

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

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

相關文章

在conda環境下使用pip安裝庫無法import

安裝seleniumwire包,conda環境沒有,pip之后安裝不到當前conda環境 網上的方法都試過了,包括強制安裝等 python -m pip install --upgrade --force-reinstall selenium-wire 最后定位應該是沒有安裝到當前conda的環境下,使用list…

【k8s系列4】工具介紹

1、虛擬機軟件 vmware workstation 2、shell 軟件 MobaXterm 3、centos7.9 下載地址 (https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.374bf5adOaiFPW) 4、上網軟件

ApiHug 前端解決方案 - M1 內側

背景 ApiHug UI 解決方案 - ApiHug前后端語義化設計,節約80%以上時間https://apihug.github.io/zhCN-docs/ui 現代前端框架日趨SPA(Single Page Application)化,給前后協同都帶來了挑戰,ApiHug試圖減少多人在前后協同帶來的理解難度&#x…

【人工智能】DeepSeek 與 RAG 技術:構建知識增強型問答系統的實戰

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 本文深入探討了如何利用 DeepSeek R1 模型結合檢索增強生成(RAG)技術,構建一個高效的知識增強型問答系統。RAG 技術通過結合信息檢索與生…

強大的AI網站推薦(第五集)—— Suno

網站:Suno 號稱:被許多用戶稱為“最強音樂類AI” 博主評價:早在去年1月,我就已經開始使用過了,從小就有一個音樂夢,奈何五音不全,現在用這個來進行創作音樂,有想AI創造音樂的可以試試…

Sigma-Delta ADC(ΣΔ-ADC)中的量化器簡介

Sigma-Delta ADC(ΣΔ-ADC)是一種高精度的模數轉換器,其中的量化器是其核心組件之一。量化器負責將模擬信號轉換為數字信號,并通過獨特的噪聲整形技術實現高分辨率。接下來,我們將深入了解量化器的各個方面&#xff1a…

Oracle日志系統之附加日志

Oracle日志系統之附加日志 在 Oracle 數據庫中,附加日志(Supplemental Log)是一種增強日志記錄的機制,用于在數據庫的 redo log 中記錄更多的變更信息,尤其是在進行數據遷移、復制和同步等任務時,能夠確保…

使用源碼編譯安裝golang的docker版

編譯規則 1.4之前用C寫的&#xff0c;1.4可編譯后續一直到1.9版本&#xff0c;后續版本實現了自舉&#xff0c;后續版本是go寫的&#xff0c;基本上相互低2個版本能編譯出新版本。 Go < 1.4&#xff1a;C 工具鏈。 1.5 < Go < 1.19&#xff1a;Go 1.4 編譯器。 1.20…

Android平臺 Hal AIDL 系列文章目錄

目錄 1. Android Hal AIDL 簡介2. AIDL 語言簡介3. Android 接口定義語言 (AIDL)4. 定義AIDL 接口5. AIDL 中如何傳遞 Parcelable 對象6. 如何使用AIDL 定義的遠程接口進行跨進程通信7. 適用于 HAL 的 AIDL8. Android Hal AIDL 編譯調試9. 高版本Android (AIDL HAL) 沿用HIDL方…

【失敗】Gnome將默認終端設置為 Kitty

起因 一會兒gnome-terminal一會兒kitty終端&#xff0c;實在是受不了&#xff0c;決定取締默認的gnome-terminal。 過程 在 Ubuntu 或 Debian 系統上&#xff1a; 確保 Kitty 已經安裝。如果未安裝&#xff0c;可以在終端中運行命令sudo apt install kitty -y進行安裝。 使用系…

Linux工具學習之【gcc/g++】

&#x1f4d8;前言 書接上文&#xff0c;我們已經學習了 Linux 中的編輯器 vim 的相關使用方法&#xff0c;現在已經能直接在 Linux 中編寫C/C代碼&#xff0c;有了代碼之后就要嘗試去編譯并運行它&#xff0c;此時就可以學習一下 Linux 中的編譯器 gcc/g 了&#xff0c;我們一…

微信小程序文字混合、填充動畫有效果圖

效果圖 .wxml <view class"text" style"--deg:{{deg}}deg;"><view>混合父級顏色</view> </view> <view class"fill {{status?action:}}">文字顏色填充</view> <button bind:tap"setStatus"…

C++:PTA L1-006 連續因子

一個正整數 N 的因子中可能存在若干連續的數字。例如 630 可以分解為 3567&#xff0c;其中 5、6、7 就是 3 個連續的數字。給定任一正整數 N&#xff0c;要求編寫程序求出最長連續因子的個數&#xff0c;并輸出最小的連續因子序列。 輸入格式&#xff1a; 輸入在一行中給出一…

分享:批量提取圖片文字并自動命名文件,ocr識別圖片指定區域并重命名文件名工具,基于WPF和騰訊OCR識別的接口的視線方案

一、項目背景 在處理大量圖片時,常常需要從圖片中提取特定區域的文字信息,并依據這些信息對圖片進行重命名。例如,在檔案管理領域,大量紙質文件被掃描成圖片后,需要從圖片中提取關鍵信息(如文件編號、日期等)來重命名圖片,以便后續的檢索和管理;在電商領域,商家可能…

匯編語言中的數據

在匯編語言中&#xff0c;程序都是由指令流構成的&#xff0c;而指令一般是由操作符和操作數組成的&#xff0c;操作符是CPU用來完成某項功能的操作&#xff0c;而操作數是操作符所處理加工的對象。比如&#xff1a;add eax, 42&#xff0c;add是執行一個加法運算的操作符&…

C++17 信號量模擬實現

C17 信號量模擬實現 一、實現原理 C17 標準庫沒有原生信號量(C20才有)&#xff0c;但可以通過 std::mutex std::condition_variable 模擬實現。以下是核心邏輯&#xff1a; #include <mutex> #include <condition_variable>class CountingSemaphore { private:…

C++ 網絡層接口設計與實現:基于 Socket 編程

在網絡編程中&#xff0c;網絡層是 OSI 七層模型中負責將數據從源節點傳輸到目的節點的關鍵層次。在 C 中&#xff0c;網絡層的功能通常通過 Socket 編程接口來實現。Socket 提供了一種抽象機制&#xff0c;允許應用程序通過網絡發送和接收數據。本文將詳細介紹如何在 C 中使用…

uniapp中uni-easyinput 使用@input 不改變綁定的值

只允許輸入數字和字母 使用input 正則replace后賦值給A 遇到問題: 當輸入任意連續的非法字符時, 輸入框不變. 直到輸入一個合法字符非法字符才成功被過濾. <uni-forms-item label"納稅人識別號" name"number"><uni-easyinput v-model"numb…

Docker安裝hoppscotch

Docker安裝hoppscotch 1 簡介 1.1 Hoppscotch?系統 ?Hoppscotch?是一個輕量、高效的[API開發生態系統&#xff0c;開源于2020年&#xff0c;原名Postwoman&#xff0c;后更名為Hoppscotch。它基于Node.js構建&#xff0c;支持多種HTTP請求方法&#xff0c;包括GET、POST、…

1.Axum 與 Tokio:異步編程的完美結合

摘要 深入解析 Axum 核心架構與 Tokio 異步運行時的集成&#xff0c;掌握關鍵原理與實踐技巧。 一、引言 在當今的軟件開發領域&#xff0c;高并發和高性能是衡量一個系統優劣的重要指標。對于 Web 服務器而言&#xff0c;能夠高效地處理大量并發請求是至關重要的。Rust 語言…