单个GPU就能跑!UC伯克利领头,130亿参数「小羊驼」权重公布

838 阅读5分钟


新智元报道

编辑:好困

**【新智元导读】**刚刚,UC 伯克利、CMU、斯坦福等,联手发布了最新开源模型骆马(Vicuna)的权重。

3 月 31 日,UC 伯克利联手 CMU、斯坦福、UCSD 和 MBZUAI,推出了 130 亿参数的 Vicuna,俗称「小羊驼」(骆马),仅需 300 美元就能实现 ChatGPT 90% 的性能。

今天,团队正式发布了 Vicuna 的权重——只需单个 GPU 就能跑!

项目地址:github.com/lm-sys/Fast…

130 亿参数,90% 匹敌 ChatGPT

Vicuna 是通过在 ShareGPT 收集的用户共享对话上对 LLaMA 进行微调训练而来,训练成本近 300 美元。

研究人员设计了 8 个问题类别,包括数学、写作、编码,对 Vicuna-13B 与其他四个模型进行了性能测试。

测试过程使用 GPT-4 作为评判标准,结果显示 Vicuna-13B 在超过 90% 的情况下实现了与 ChatGPT 和 Bard 相匹敌的能力。同时,在在超过 90% 的情况下胜过了其他模型,如 LLaMA 和斯坦福的 Alpaca。

训练

Vicuna-13B 的训练流程如下:

首先,研究人员从 ChatGPT 对话分享网站 ShareGPT 上,收集了大约 70K 对话。接下来,研究人员优化了 Alpaca 提供的训练脚本,使模型能够更好地处理多轮对话和长序列。之后利用 PyTorch FSDP 在 8 个 A100 GPU 上进行了一天的训练。

· 内存优化:

为了使 Vicuna 能够理解长上下文,将最大上下文长度从 Alpaca 的 512 扩展到 2048,这大大增加了 GPU 内存需求。在此,研究人员通过使用梯度检查点和闪存注意力来解决内存压力。

· 多轮对话:

通过调整训练损失以考虑多轮对话,并仅在聊天机器人的输出上计算微调损失。

· 通过 Spot 实例降低成本:

采用 SkyPilot 托管的 Spot 实例来降低成本,将 7B 模型的训练成本从 500 美元降低到约 140 美元,将 13B 模型的训练成本从约 1000 美元降低到 300 美元。

评估

在模型的质量评估方面,研究人员创建了 80 个不同的问题,并用 GPT-4 对模型输出进行了评价。

为了比较不同的模型,研究人员将每个模型的输出组合成一个单独的提示,然后让 GPT-4 评估哪个模型给出的回答更好。

其中,GPT-4 在超过 90% 的问题中更喜欢 Vicuna,而不是现有的 SOTA 开源模型(LLaMA、Alpaca)。

在 45% 的问题中,GPT-4 认为 Vicuna 的回答和 ChatGPT 差不多甚至更好。

综合来看,Vicuna 在总分上达到 ChatGPT 的 92%。

安装使用

安装

方法一:

# Install FastChat
pip3 install fschat
# Install a specific commit of huggingface/transformers
# Our released weights do not work with commits after this due to some upstream changes in the tokenizer.
pip3 install git+https://github.com/huggingface/transformers@c612628045822f909020f7eb6784c79700813eda

方法二:

  1. clone 版本库并变更目录到 FastChat 文件夹

  2. 安装 Package

权重

根据 LLaMA 模型的许可,权重将以 delta 的形式发布。只需将其加到原来的 LLaMA 权重上,就可以获得最终的 Vicuna 权重。

  1. 按照 huggingface 上的说明,获得原始的 LLaMA 权重

  2. 通过脚本,自动从团队的 Hugging Face 账户上下载 delta 权重

python3 -m fastchat.model.apply_delta \
    --base /path/to/llama-13b \
    --target /output/path/to/vicuna-13b \
    --delta lmsys/vicuna-13b-delta-v0

使用

· 单个 GPU

Vicuna-13B 需要大约 28GB 的 GPU 显存。

python3 -m fastchat.serve.cli --model-name /path/to/vicuna/weights

· 多个 GPU

如果没有足够的显存,则可以使用模型并行来聚合同一台机器上多个 GPU 的显存。

python3 -m fastchat.serve.cli --model-name /path/to/vicuna/weights --num-gpus 2

· 仅用 CPU

如果想在 CPU 上运行,则需要大约 60GB 的内存。

python3 -m fastchat.serve.cli --model-name /path/to/vicuna/weights --device cpu

Web UI

· 启动控制器

python3 -m fastchat.serve.controller

· 启动 model worker

python3 -m fastchat.serve.model_worker --model-path /path/to/vicuna/weights

当进程完成模型的加载后,会看到「Uvicorn running on ...」。

· 发送测试消息

python3 -m fastchat.serve.test_message --model-name vicuna-13b

· 启动 gradio 网络服务器

python3 -m fastchat.serve.gradio_web_server

现在,你就可以打开浏览器和模型聊天了。

微调

· 数据

Vicuna 是通过使用从 ShareGPT 收集到的大约 7 万个用户共享的对话与公共 API 来微调一个 LLaMA 基础模型而创建的。

为了确保数据质量,团队将 HTML 转换回 markdown,并过滤掉一些不合适或低质量的样本。此外,团队还将冗长的对话分成较小的片段,以符合模型的最大上下文长度。

· 代码和超参数

团队使用斯坦福大学 Alpaca 的代码对模型进行微调,并做了一些修改以支持梯度检查点和 Flash 注意力。此外,团队也使用与斯坦福 Alpaca 相似的超参数。

· 用 SkyPilot 在云服务上进行微调

SkyPilot 是由加州大学伯克利分校建立的一个框架,可以在任何与一个云服务(AWS、GCP、Azure、Lambda 等)上轻松、经济地运行 ML 工作负载。

安装说明:skypilot.readthedocs.io/en/latest/g…

# Install skypilot from the master branch
pip install git+https://github.com/skypilot-org/skypilot.git

Vicuna 可以在 8 个拥有 80GB 内存的 A100 GPU 上进行训练。下面的命令将自动启动一个满足要求的节点,在上面设置并运行训练作业。

sky launch -c vicuna -s scripts/train-vicuna.yaml --env WANDB_API_KEY

对于 Alpaca 来说,训练作业会在具有 4 个 A100-80GB GPU 的单一节点上启动。

sky launch -c alpaca -s scripts/train-alpaca.yaml --env WANDB_API_KEY

· 使用本地GPU进行微调

Vicuna 也可以用以下代码在 8 个 A100 GPU 上训练,显存为 80GB。

如果要在更少的 GPU 上训练,则可以减少 per_device_train_batch_size,并相应地增加 gradient_accumulation_steps,以保持全局批大小不变。要设置环境,可以参见 scripts/train-vicuna.yaml 中的设置部分。

参考资料:

github.com/lm-sys/Fast…