国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

AI模型部署基礎(chǔ)知識(shí)(一):模型權(quán)重與參數(shù)精度

這篇具有很好參考價(jià)值的文章主要介紹了AI模型部署基礎(chǔ)知識(shí)(一):模型權(quán)重與參數(shù)精度。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一般情況來說,我們通過收集數(shù)據(jù),訓(xùn)練深度學(xué)習(xí)模型,通過反向傳播求導(dǎo)更新模型的參數(shù),得到一個(gè)契合數(shù)據(jù)和任務(wù)的模型。這一階段,通常使用python&pytorch進(jìn)行模型的訓(xùn)練得到pth等類型文件。AI模型部署就是將在python環(huán)境中訓(xùn)練的模型參數(shù)放到需要部署的硬件環(huán)境中去跑,比如云平臺(tái)和其他cpu、gpu設(shè)備中。一般來說,權(quán)重信息以及權(quán)重分布基本不會(huì)變(可能會(huì)改變精度、也可能會(huì)合并一些權(quán)重)。
該部分筆記參考o(jì)ldpan內(nèi)容

模型權(quán)重

一般我們使用Pytorch模型進(jìn)行訓(xùn)練。訓(xùn)練得到的權(quán)重,我們一般都會(huì)使用torch.save()保存為.pth的格式。

pth文件內(nèi)容

pth是Pytorch使用python中內(nèi)置模塊pickle來保存和讀取,pth文件的中主要包含字符段{‘epoch’: 190, ‘state_dict’: OrderedDict([(‘conv1.weight’, tensor([[…,},其中epoch 為pth保存的輪次數(shù)、state_dict中包含主要的模型結(jié)構(gòu)名稱和對(duì)應(yīng)模型參數(shù)值,

state_dict的key:

AI模型部署基礎(chǔ)知識(shí)(一):模型權(quán)重與參數(shù)精度,AI部署,人工智能,算法

  • 主要權(quán)重結(jié)構(gòu)

在模型訓(xùn)練過程中,有很多需要通過反向傳播更新的權(quán)重,常見的有:
卷積層(conv.weight \conv.bias)
全連接層 (fc.weight)
批處理化層(BN層、或者各種其他LN、IN、GN)
transformer-encoder層
DCN層
這些層一般都是神經(jīng)網(wǎng)絡(luò)的核心部分,當(dāng)然都是有參數(shù)的,一定會(huì)參與模型的反向傳播更新,是我們?cè)谟?xùn)練模型時(shí)候需要注意的重要參數(shù)。

  • BN的反向傳播與參數(shù)更新
    BN層中的可學(xué)習(xí)參數(shù)(如果affine=True)會(huì)參與反向傳播并在訓(xùn)練過程中更新,而用于歸一化的統(tǒng)計(jì)量(running_mean和running_var)則通過不同的機(jī)制進(jìn)行更新。

# 截取了Pytorch中BN層的部分代碼
def __init__(
    self,
    num_features: int,
    eps: float = 1e-5,
    momentum: float = 0.1,
    affine: bool = True,
    track_running_stats: bool = True
) -> None:
    super(_NormBase, self).__init__()
    self.num_features = num_features
    self.eps = eps
    self.momentum = momentum
    self.affine = affine
    self.track_running_stats = track_running_stats
    if self.affine:
        self.weight = Parameter(torch.Tensor(num_features))
        self.bias = Parameter(torch.Tensor(num_features))
    else:
        self.register_parameter('weight', None)
        self.register_parameter('bias', None)
    if self.track_running_stats:
        # 可以看到在使用track_running_stats時(shí),BN層會(huì)更新這三個(gè)參數(shù)
        self.register_buffer('running_mean', torch.zeros(num_features))
        self.register_buffer('running_var', torch.ones(num_features))
        self.register_buffer('num_batches_tracked', torch.tensor(0, dtype=torch.long))
    else:
        self.register_parameter('running_mean', None)
        self.register_parameter('running_var', None)
        self.register_parameter('num_batches_tracked', None)
    self.reset_parameters()
  • 模型結(jié)構(gòu)無參數(shù)層
    網(wǎng)絡(luò)中其實(shí)有很多op,僅僅是做一些維度變換、索引取值或者上/下采樣的操作,例如:
    Reshape
    Squeeze
    Unsqueeze
    Split
    Transpose
    Gather
    這些操作沒有參數(shù)僅僅是對(duì)上一層傳遞過來的張量進(jìn)行維度變換。有時(shí)候在通過Pytorch轉(zhuǎn)換為ONNX的時(shí)候,偶爾會(huì)發(fā)生一些轉(zhuǎn)換詭異的情況。比如一個(gè)簡單的reshape會(huì)四分五裂為gather+slip+concat,這種操作相當(dāng)于復(fù)雜化了,不過一般來說這種情況可以使用ONNX-SIMPLIFY去優(yōu)化掉,當(dāng)然遇到較為復(fù)雜的就需要自行優(yōu)化了。此外,對(duì)于這些變形類的操作算子,其實(shí)有些是有參數(shù)的,例如下圖的reshap

AI模型部署基礎(chǔ)知識(shí)(一):模型權(quán)重與參數(shù)精度,AI部署,人工智能,算法
像這種的op,有時(shí)候會(huì)比較棘手。如果想要將這個(gè)ONNX模型轉(zhuǎn)換為TensorRT,那么100%會(huì)遇到問題,因?yàn)門ensorRT的解釋器在解析ONNX的時(shí)候,不支持reshape層的shape是輸入TensorRT,而是把這個(gè)shape當(dāng)成attribute來處理,而ONNX的推理框架Inference則是支持的。

state_dict的value:

AI模型部署基礎(chǔ)知識(shí)(一):模型權(quán)重與參數(shù)精度,AI部署,人工智能,算法
模型訓(xùn)練出的各層參數(shù),都是有固定精度的0-1數(shù)據(jù)。通常來說,pth文件的參數(shù)精度為FP32,然而對(duì)于模型參數(shù)的部署來說我們需要在硬件中進(jìn)行精度和推理速度之間的協(xié)調(diào)。

不過執(zhí)行模型操作(卷積、全連接、反卷積)的算子會(huì)變化,可能從Pytorch->TensorRT或者TensorFlow->TFLITE,也就是實(shí)現(xiàn)算子的方式變了,同一個(gè)卷積操作,在Pytorch框架中是一種實(shí)現(xiàn),在TensorRT又是另一種實(shí)踐,兩者的基本原理是一樣的,但是精度和速度不一樣,TensorRT可以借助Pytorch訓(xùn)練好的卷積的權(quán)重,實(shí)現(xiàn)與Pytorch中一樣的操作,不過可能更快些。

參數(shù)精度

浮點(diǎn)數(shù)精度:雙精度(FP64)、單精度(FP32、TF32)、半精度(FP16、BF16)、8位精度(FP8)、4位精度(FP4、NF4)
量化精度:INT8、INT4 (也有INT3/INT5/INT6的)
AI模型部署基礎(chǔ)知識(shí)(一):模型權(quán)重與參數(shù)精度,AI部署,人工智能,算法

為什么要有這么多精度

因?yàn)槌杀竞蜏?zhǔn)確度。
都知道精度高肯定更準(zhǔn)確,但是也會(huì)帶來更高的計(jì)算和存儲(chǔ)成本。**較低的精度會(huì)降低計(jì)算精度,但可以提高計(jì)算效率和性能。**所以多種不同精度,可以讓你在不同情況下選擇最適合的一種。
雙精度比單精度表達(dá)的更精確,但是存儲(chǔ)占用多一倍,計(jì)算耗時(shí)也更高,如果單精度足夠,就沒必要雙精度。
但如何評(píng)估是否要進(jìn)行精度降低?

不同的浮點(diǎn)數(shù)精度

在計(jì)算機(jī)中,浮點(diǎn)數(shù)存儲(chǔ)方式,由由**符號(hào)位(sign)、指數(shù)位(exponent)和小數(shù)位(fraction)**三部分組成。符號(hào)位都是1位,指數(shù)位影響浮點(diǎn)數(shù)范圍,小數(shù)位影響精度。

FP精度

AI模型部署基礎(chǔ)知識(shí)(一):模型權(quán)重與參數(shù)精度,AI部署,人工智能,算法

特殊精度

  • TF32(1,8,10)
    其實(shí)只有19位,Tensor Float 32,英偉達(dá)針對(duì)機(jī)器學(xué)習(xí)設(shè)計(jì)的一種特殊的數(shù)值類型,用于替代FP32。首次在A100 GPU中支持。
    AI模型部署基礎(chǔ)知識(shí)(一):模型權(quán)重與參數(shù)精度,AI部署,人工智能,算法
  • BF16(1,8,7)
    Brain Float 16,由Google Brain提出,也是為了機(jī)器學(xué)習(xí)而設(shè)計(jì)。由1個(gè)符號(hào)位,8位指數(shù)位(和FP32一致)和7位小數(shù)位(低于FP16)組成。所以精度低于FP16,但是表示范圍和FP32一致,和FP32之間很容易轉(zhuǎn)換。在 NVIDIA GPU 上,只有 Ampere 架構(gòu)以及之后的GPU 才支持。
    AI模型部署基礎(chǔ)知識(shí)(一):模型權(quán)重與參數(shù)精度,AI部署,人工智能,算法
  • NF4
    4-bit NormalFloat,一種用于量化的特殊格式,于23年5月由華盛頓大學(xué)在QLoRA量化論文中提出,論文地址:https://arxiv.org/abs/2305.14314

NF4是建立在分位數(shù)量化技術(shù)的基礎(chǔ)之上的一種信息理論上最優(yōu)的數(shù)據(jù)類型。把4位的數(shù)字歸一化到均值為 0,標(biāo)準(zhǔn)差為 [-1,1] 的正態(tài)分布的固定期望值上,知道量化原理的應(yīng)該就會(huì)理解。

一般情況下,精度越低,模型尺寸和推理內(nèi)存占用越少,為了盡可能的減少資源占用,量化算法被發(fā)明。FP32占用4個(gè)字節(jié),量化為8位,只需要1個(gè)字節(jié)。常用的是INT8和INT4,也有其他量化格式(6位、5位甚至3位)。雖然資源占用減少,但是推理結(jié)果差不了多少。那么接下來就是我們說到的量化問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-809426.html

到了這里,關(guān)于AI模型部署基礎(chǔ)知識(shí)(一):模型權(quán)重與參數(shù)精度的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語言基礎(chǔ)知識(shí):函數(shù)中的參數(shù)與返回值

    目錄 1.形式參數(shù)和實(shí)際參數(shù) 1.1形式參數(shù) 1.2實(shí)際參數(shù) 2.變量作為函數(shù)參數(shù) 3.數(shù)組作為函數(shù)參數(shù) 3.1數(shù)組元素作為函數(shù)參數(shù) 3.2一維數(shù)組名作為函數(shù)參數(shù) 3.3數(shù)組指針,即數(shù)組元素的地址作為函數(shù)參數(shù) 4.函數(shù)返回值 形參出現(xiàn)在被調(diào)函數(shù)當(dāng)中,在整個(gè)函數(shù)體內(nèi)都可以使用。形參在定義

    2024年02月04日
    瀏覽(22)
  • C++基礎(chǔ)知識(shí) (命名空間、輸入輸出、函數(shù)的缺省參數(shù)、函數(shù)重載)

    C++基礎(chǔ)知識(shí) (命名空間、輸入輸出、函數(shù)的缺省參數(shù)、函數(shù)重載)

    ?? 例1: #include iostream 標(biāo)準(zhǔn)輸入輸出 std 是 c++ 標(biāo)準(zhǔn)庫的命名空間,將標(biāo)準(zhǔn)庫的定義實(shí)現(xiàn)都放到這個(gè)命名空間中 using namespace std 展開 std 里的內(nèi)容 cout ? c 代表的是 console 控制臺(tái)的意思, out 有輸出的意思 流運(yùn)算符 流插入 endl 等價(jià)于 \\\'n\\\' 在 c++ 中,變量、函數(shù)和類的名稱存在于

    2024年02月15日
    瀏覽(48)
  • 系統(tǒng)學(xué)習(xí)Python——裝飾器:函數(shù)裝飾器-[添加裝飾器參數(shù):基礎(chǔ)知識(shí)]

    分類目錄:《系統(tǒng)學(xué)習(xí)Python》總目錄 前面文章介紹的計(jì)時(shí)器裝飾器有效運(yùn)行,但是如果它可配置性更強(qiáng)的話,就會(huì)更好一一一例如提供一個(gè)輸出標(biāo)簽并且可以打開或關(guān)閉跟蹤消息,這些在一個(gè)多用途工具中可能很有用。裝飾器參數(shù)在這里派上了用場(chǎng):對(duì)它們適當(dāng)編寫后,我們

    2024年02月22日
    瀏覽(25)
  • 【大模型】二 、大語言模型的基礎(chǔ)知識(shí)

    大型語言模型是近年來機(jī)器學(xué)習(xí)和自然語言處理領(lǐng)域的一個(gè)重要發(fā)展趨勢(shì)。以GPT模型為例,闡述其發(fā)展 GPT系列基于Transformer架構(gòu),進(jìn)行構(gòu)建,旨在理解和生成人類語言。它們通常通過在大量文本數(shù)據(jù)上進(jìn)行預(yù)訓(xùn)練,學(xué)習(xí)到語言的各種模式和結(jié)構(gòu),然后可以進(jìn)行微調(diào),以適應(yīng)各

    2024年02月12日
    瀏覽(17)
  • 【前端知識(shí)】React 基礎(chǔ)鞏固(四十一)——手動(dòng)路由跳轉(zhuǎn)、參數(shù)傳遞及路由配置

    【前端知識(shí)】React 基礎(chǔ)鞏固(四十一)——手動(dòng)路由跳轉(zhuǎn)、參數(shù)傳遞及路由配置

    利用 useNavigate 封裝一個(gè) withRouter(hoc/with_router.js) 添加到hoc/index.js文件中 利用withRouter,攔截Home組件,實(shí)現(xiàn)手動(dòng)跳轉(zhuǎn)路由 路由參數(shù)傳遞包括:1.動(dòng)態(tài)路由傳參;2.查詢字符串傳參 改造withRouter,通過 useParams() 和 useSearchParams() 來接收兩種參數(shù)傳遞: 在界面中,通過params來接收

    2024年02月14日
    瀏覽(25)
  • ChatGPT基礎(chǔ)知識(shí)系列之Embeddings模型

    OpenAI的Embeddings(文本嵌入)測(cè)量的是文本字符串的相關(guān)性。嵌入通常用于: 搜索(根據(jù)與查詢字符串的相關(guān)性對(duì)結(jié)果進(jìn)行排名) 聚類(其中文本字符串按相似性分組) 建議(推薦具有相關(guān)文本字符串的項(xiàng)目) 異常檢測(cè)(識(shí)別出相關(guān)性很小的異常值) 多樣性測(cè)量(分析相似性

    2024年02月06日
    瀏覽(22)
  • UE4的AI行為樹基礎(chǔ)知識(shí)

    UE4的AI行為樹基礎(chǔ)知識(shí)

    ? ? ? ? 在制作游戲時(shí),會(huì)制作敵人、怪物、NPC等不被玩家所操作的對(duì)象,那么制作這些對(duì)象,就需要通過使用AI行為樹來為他們編寫各自的一些行為邏輯,比如敵人會(huì)尋找主角并攻擊、怪物會(huì)在自己的領(lǐng)域巡邏等等。 NavMeshBoundsVolume:導(dǎo)航網(wǎng)格體邊界體積,用作導(dǎo)航尋路,會(huì)

    2024年02月11日
    瀏覽(33)
  • 計(jì)算機(jī)視覺基礎(chǔ)知識(shí)(八)--點(diǎn)云模型

    計(jì)算機(jī)視覺基礎(chǔ)知識(shí)(八)--點(diǎn)云模型

    三維圖像 一種特殊的信息表達(dá)形式; 特征是表達(dá)的空間中有三個(gè)維度的數(shù)據(jù); 是對(duì)一類信息的統(tǒng)稱; 信息的表現(xiàn)形式: 深度圖:以灰度表達(dá)物體與相機(jī)的距離 幾何模型:由cad軟件建立 點(diǎn)云模型:所有逆向工程設(shè)備都將物體采樣為點(diǎn)云 和二維圖像相比; 三維圖像借助第三

    2024年01月25日
    瀏覽(24)
  • 大型語言模型基礎(chǔ)知識(shí)的可視化指南

    大型語言模型基礎(chǔ)知識(shí)的可視化指南

    如今,LLM(大型語言模型的縮寫)在全世界都很流行。沒有一天不在宣布新的語言模型,這加劇了人們對(duì)錯(cuò)過人工智能領(lǐng)域的恐懼。然而,許多人仍在為 LLM 的基本概念而苦苦掙扎,這使他們難以跟上時(shí)代的進(jìn)步。本文的目標(biāo)讀者是那些希望深入了解此類人工智能模型的內(nèi)部

    2024年01月24日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包