GR00T是英伟达最新的人类机器人基础模型。自然,机器人专家对将这种模型应用于各种机器人应用有着极大的兴趣。微调是一个我们教模型新技能的过程,例如,用新的机器人硬件操纵新的物体。然而,微调基础模型对于我们中的许多GPU贫乏的人来说在计算上是令人望而却步的——直到现在。在这里,我们将探讨如何使用LoRa在个人计算机上实现参数有效微调(PEFT)。
背景
训练一个神经网络通常需要比推理多几倍的内存。这是因为在训练过程中,除了模型权重之外,现代优化器还需要存储中间激活、梯度值和其他状态,以帮助优化器适应复杂的训练动态。
传统的微调和任何训练过程一样昂贵。它仍然使用相同数量的内存。如果你没有获得h100,你就不走运了。然而,像LoRA这样的PEFT技术允许我们对模型的一小部分进行微调。
LoRA
在我看来,低等级适配器(LoRA)是最优雅的PEFT实现。它不是完整地训练模型,而是将一组非常小的权重覆盖到模型的原始权重(称为LoRA适配器)上。模型的原始权重是固定的,只有LoRA适配器是可训练的,与原始网络相比,它们的大小通常在0.5%到5%之间。使用更小的可训练参数集和更少的优化器状态来存储,它使得使用PEFT进行微调在计算上更加友好。一旦训练完成,这些小的权重集就会被加回到原来的权重中。
输出=输入* W
W:原权矩阵;[input_dim, output_dim]
ΔW: delta权重;与W相同的尺寸
W_ft:微调权重矩阵= W + ΔW
由于微调只对原始模型权重进行很小的更改,因此与原始权重矩阵相比,delta权重ΔW应该只包含一小部分信息。因此,我们可以将ΔW表示为两个瘦矩阵的乘积,而不是将其作为与原始权重矩阵相同的大小:
ΔW_lora = B x A ~= ΔW
[input_dim, r]
A: [r, output_dim]
ΔW_lora是ΔW的近似值,r表示我们想要使用的排名数。把r想象成你想用在音乐文件上的比特率,不同的是,这里我们处理的是矩阵重构错误而不是音频丢失。
ΔW的最大rank是max(input_dim, output_dim)。但是,由于ΔW包含的信息并不丰富,我们可以使用很小的r,例如16到128,而仍然可以得到很好的结果。这也是LoRA名称Low-Rank Adaption背后的根源。
ΔW_lora迭代地应用于模型中的所有变压器权重矩阵。因为我们只训练ΔW_lora,与传统的微调相比,它只需要一小部分内存。这使我们可以自由地在微调性能和计算预算之间进行交易。
如果您对实现细节感到好奇,请查看已上载到Nvidia Isaac-GR00T官方回购的PR。
搭建环境
让我们从设置Pyenv和miniconda开始
根据这里的说明设置shell。例如,如果你使用zsh:
重新加载shell并测试Pyenv的安装
安装Miniconda
获取模型
对模型进行微调
要运行微调示例:
本文编译自hackster.io