PEFT如何幫助我們在消費(fèi)級GPU上微調(diào)GR00T基礎(chǔ)
GR00T是英偉達(dá)最新的人類機(jī)器人基礎(chǔ)模型。自然,機(jī)器人專家對將這種模型應(yīng)用于各種機(jī)器人應(yīng)用有著極大的興趣。微調(diào)是一個(gè)我們教模型新技能的過程,例如,用新的機(jī)器人硬件操縱新的物體。然而,微調(diào)基礎(chǔ)模型對于我們中的許多GPU貧乏的人來說在計(jì)算上是令人望而卻步的——直到現(xiàn)在。在這里,我們將探討如何使用LoRa在個(gè)人計(jì)算機(jī)上實(shí)現(xiàn)參數(shù)有效微調(diào)(PEFT)。
背景
訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)通常需要比推理多幾倍的內(nèi)存。這是因?yàn)樵谟?xùn)練過程中,除了模型權(quán)重之外,現(xiàn)代優(yōu)化器還需要存儲(chǔ)中間激活、梯度值和其他狀態(tài),以幫助優(yōu)化器適應(yīng)復(fù)雜的訓(xùn)練動(dòng)態(tài)。
傳統(tǒng)的微調(diào)和任何訓(xùn)練過程一樣昂貴。它仍然使用相同數(shù)量的內(nèi)存。如果你沒有獲得h100,你就不走運(yùn)了。然而,像LoRA這樣的PEFT技術(shù)允許我們對模型的一小部分進(jìn)行微調(diào)。
LoRA
在我看來,低等級適配器(LoRA)是最優(yōu)雅的PEFT實(shí)現(xiàn)。它不是完整地訓(xùn)練模型,而是將一組非常小的權(quán)重覆蓋到模型的原始權(quán)重(稱為LoRA適配器)上。模型的原始權(quán)重是固定的,只有LoRA適配器是可訓(xùn)練的,與原始網(wǎng)絡(luò)相比,它們的大小通常在0.5%到5%之間。使用更小的可訓(xùn)練參數(shù)集和更少的優(yōu)化器狀態(tài)來存儲(chǔ),它使得使用PEFT進(jìn)行微調(diào)在計(jì)算上更加友好。一旦訓(xùn)練完成,這些小的權(quán)重集就會(huì)被加回到原來的權(quán)重中。
輸出=輸入* W
W:原權(quán)矩陣;[input_dim, output_dim]
ΔW: delta權(quán)重;與W相同的尺寸
W_ft:微調(diào)權(quán)重矩陣= W + ΔW
由于微調(diào)只對原始模型權(quán)重進(jìn)行很小的更改,因此與原始權(quán)重矩陣相比,delta權(quán)重ΔW應(yīng)該只包含一小部分信息。因此,我們可以將ΔW表示為兩個(gè)瘦矩陣的乘積,而不是將其作為與原始權(quán)重矩陣相同的大?。?
ΔW_lora = B x A ~= ΔW
[input_dim, r]
A: [r, output_dim]
ΔW_lora是ΔW的近似值,r表示我們想要使用的排名數(shù)。把r想象成你想用在音樂文件上的比特率,不同的是,這里我們處理的是矩陣重構(gòu)錯(cuò)誤而不是音頻丟失。
ΔW的最大rank是max(input_dim, output_dim)。但是,由于ΔW包含的信息并不豐富,我們可以使用很小的r,例如16到128,而仍然可以得到很好的結(jié)果。這也是LoRA名稱Low-Rank Adaption背后的根源。
ΔW_lora迭代地應(yīng)用于模型中的所有變壓器權(quán)重矩陣。因?yàn)槲覀冎挥?xùn)練ΔW_lora,與傳統(tǒng)的微調(diào)相比,它只需要一小部分內(nèi)存。這使我們可以自由地在微調(diào)性能和計(jì)算預(yù)算之間進(jìn)行交易。
如果您對實(shí)現(xiàn)細(xì)節(jié)感到好奇,請查看已上載到Nvidia Isaac-GR00T官方回購的PR。
搭建環(huán)境
讓我們從設(shè)置Pyenv和miniconda開始
根據(jù)這里的說明設(shè)置shell。例如,如果你使用zsh:
重新加載shell并測試Pyenv的安裝
安裝Miniconda
獲取模型
對模型進(jìn)行微調(diào)
要運(yùn)行微調(diào)示例:
本文編譯自hackster.io