LISA: Layerwise Importance Sampling for Memory-Efficient Large Language Model Fine-Tuning

本文是LLM系列文章,针对《LISA: Layerwise Importance Sampling for Memory-Efficient Large Language Model Fine-Tuning》的翻译。

LISA:用于内存高效的大型语言模型微调的分层重要性采样

摘要

自大型语言模型(LLM)首次出现以来,机器学习社区已经取得了令人印象深刻的进步。然而,他们的大量内存消耗已经成为大规模训练的一个重要障碍。例如,7B模型通常需要至少60GB的GPU内存和全参数训练,这给无法访问高资源环境的研究人员带来了挑战。已经提出了诸如低秩自适应(LoRA)之类的参数有效微调技术来缓解这个问题。然而,在大多数大规模微调设置中,它们的性能没有达到全参数训练的水平,因为它们将参数搜索限制在低秩子空间。为了弥补这一不足,我们研究了LoRA在微调任务中的分层性质,并观察到不同层之间权重规范的意外但一致的偏斜度。利用这一关键观察结果,发现了一种令人惊讶的简单训练策略,它在各种设置中都优于LoRA和全参数训练,内存成本低至LoRA。我们将其命名为分层重要性采样AdamW(LISA),这是LoRA的一个很有前途的替代方案,它将重要性采样的思想应用于LLM中的不同层,并在优化过程中随机冻结大多数中间层。实验结果表明,在GPU内存消耗相似或更少的情况下,LISA在下游微调任务中超过了LoRA,甚至超过了全参数调优,其中LISA在MT Bench得分方面始终优于LoRA超过10%-35%,同时在MMLU、AGIEval和WinoGrande中实现了同等或更好的性能。在大型模型上,特别是LLaMA-2-70B,LISA在MT Bench、GSM8K和PubMedQA上超过了LoRA,证明了其在不同领域的有效性。

1 引言

2 相关工作

3 方法

4 实验结果

`PersistentDataStore:` 是 Android 系统中用于 **持久化存储通知相关设置和状态** 的模块,通常在执行 `adb dumpsys notification` 命令时会看到它的输出。它主要保存了 **通知渠道(Notification Channels)**、**应用通知优先级(importance)**、**用户对通知的自定义设置** 等信息,确保设备重启后这些配置仍然有效。 --- ### **PersistentDataStore 的作用** `PersistentDataStore` 是 `NotificationManagerService` 的一部分,用于: - **持久化保存通知渠道配置(channel)** - **记录每个应用的通知优先级(importance)** - **存储用户对通知的屏蔽/允许设置** - **保存通知的分组策略(group)** - **确保系统重启后通知设置不丢失** --- ### **PersistentDataStore 输出示例** 执行以下命令查看通知系统状态: ```bash adb dumpsys notification ``` 你可能会看到类似如下输出: ``` -------------------- PersistentDataStore -------------------- Users: User 0: Packages: com.example.app: uid=10130 channelCount=2 importance=2 sound=content://settings/system/notification_sound vibrateEnabled=true channels: [0] channel_id="default" name="Default" importance=2 lockedImportance=false bypassDnd=false lightColor=#FF00FF00 showLights=true vibrate=true soundUri=content://settings/system/notification_sound userLocked=false [1] channel_id="urgent" name="Urgent Alerts" importance=4 lockedImportance=true bypassDnd=true lightColor=#FF0000FF showLights=true vibrate=false soundUri=content://media/internal/audio/media/143 userLocked=true ``` --- ### **字段解析** | 字段 | 含义 | |------|------| | `User 0` | 用户 ID,0 表示主用户 | | `com.example.app` | 应用包名 | | `uid=10130` | 应用的 UID | | `channelCount=2` | 该应用定义的通知渠道数量 | | `importance=2` | 应用整体的通知优先级等级(0-5) | | `sound`, `vibrateEnabled` | 是否启用声音、震动 | | `channel_id="default"` | 通知渠道 ID | | `name="Default"` | 通知渠道名称 | | `importance=4` | 该渠道的通知优先级 | | `lockedImportance=true` | 用户是否锁定该渠道的重要性等级 | | `bypassDnd=true` | 是否允许绕过“请勿打扰”模式 | | `lightColor`, `showLights` | 是否启用通知灯及颜色 | | `soundUri` | 通知声音的 URI | | `userLocked=true` | 用户是否手动设置了该渠道参数 | --- ### **PersistentDataStore 的关键功能** - **保存用户对通知的个性化设置(如屏蔽某应用的通知)** - **记录通知渠道的优先级、声音、震动等配置** - **支持“请勿打扰”模式下的通知绕过规则** - **在系统重启后恢复所有通知设置** - **为通知排序(ranking)提供依据** --- ### **调试与排查用途** - **用户设置的通知优先级不生效?** → 检查 `importance` 和 `lockedImportance` - **通知声音或震动未生效?** → 查看 `soundUri` 和 `vibrate` - **锁屏通知显示异常?** → 检查 `visibility` 和 `bypassDnd` - **通知渠道未正确创建?** → 查看 `channelCount` 和 `channel_id` - **通知设置在重启后失效?** → 确认 `PersistentDataStore` 是否保存成功 --- ### **常用调试命令** ```bash adb dumpsys notification adb shell cmd notification list-channels --uid <uid> adb shell cmd notification set-importance <package> <uid> <importance_level> adb shell cmd notification add-channel <package> <channel_id> --importance <level> ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UnknownBody

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值