来源:llm/vicuna

Vicuna:一个LLM聊天机器人,以90%的ChatGPT质量给GPT-4留下深刻印象#

Vicuna LLM

本 README 包含运行和训练 Vicuna 的说明,Vicuna 是一款开源 LLM 聊天机器人,其质量可与 ChatGPT 媲美。Vicuna 版本使用 SkyPilot 在云 Spot 实例上进行训练,成本约为 300 美元。

前提条件#

安装最新的 SkyPilot 并检查您的云凭据设置

pip install git+https://github.com/skypilot-org/skypilot.git
sky check

查看 Vicuna SkyPilot YAML 文件:用于训练服务

使用 SkyPilot 自行部署官方 Vicuna 模型#

  1. 在一块 A100 GPU 上开始部署 Vicuna-7B 模型

sky launch -c vicuna-serve -s serve.yaml
  1. 检查命令的输出。将有一个可共享的 gradio 链接(例如最后一行的链接)。在浏览器中打开它即可与 Vicuna 聊天。

(task, pid=20933) 2023-04-12 22:08:49 | INFO | gradio_web_server | Namespace(host='0.0.0.0', port=None, controller_url='http://localhost:21001', concurrency_count=10, model_list_mode='once', share=True, moderate=False)
(task, pid=20933) 2023-04-12 22:08:49 | INFO | stdout | Running on local URL:  http://0.0.0.0:7860
(task, pid=20933) 2023-04-12 22:08:51 | INFO | stdout | Running on public URL: https://<random-hash>.gradio.live
  1. [可选] 尝试其他 GPU

sky launch -c vicuna-serve-v100 -s serve.yaml --gpus V100
  1. [可选] 部署 13B 模型而不是默认的 7B 模型

sky launch -c vicuna-serve -s serve.yaml --env MODEL_SIZE=13
  1. [可选] 部署 OpenAI API 兼容的端点

sky launch -c vicuna-openai-api -s serve-openai-api-endpoint.yaml

使用 SkyPilot 训练 Vicuna#

目前,训练需要 80GB 显存的 GPU。查看 sky show-gpus --all 查看支持的 GPU。

只需一个命令,我们就可以开始在虚拟数据 dummy.json[1] 上训练 Vicuna 模型。它将自动查找任何云上最便宜的可用 VM。

要在您自己的数据上进行训练,请将文件替换为您自己的文件,或者在 train.yaml 中将 /data/mydata.json: ./dummy.json 这一行更改为您自己的数据路径。

在您的云上训练的步骤

  1. train.yaml 中的存储桶名称替换为唯一的名称,以便 SkyPilot 可以为您创建一个存储模型权重的存储桶。参见 YAML 文件中的 # Change to your own bucket

  2. 使用 Spot 实例在 8 块 A100 GPU(80GB 显存)上训练 Vicuna-7B 模型:

# Launch it on managed spot to save 3x cost
sky jobs launch -n vicuna train.yaml

注意:如果您想在 W&B 上查看训练曲线,可以在上述命令中添加 --env WANDB_API_KEY,这将把您本地环境变量中的 W&B API 密钥传递给作业。

[可选] 训练更大的 13B 模型

# Train a 13B model instead of the default 7B
sky jobs launch -n vicuna-7b train.yaml --env MODEL_SIZE=13

# Use *unmanaged* spot instances (i.e., preemptions won't get auto-recovered).
# Unmanaged spot provides a better interactive development experience but is vulnerable to spot preemptions.
# We recommend using managed spot as above.
sky launch -c vicuna train.yaml

目前,这类 A100-80GB:8 Spot 实例仅在 AWS 和 GCP 上可用。

[可选] 使用按需 A100-80GB:8 实例,目前在 Lambda Cloud、Azure 和 GCP 上可用

sky launch -c vicuna -s train.yaml --no-use-spot

问答#

问:运行上述命令时看到一些存储桶权限错误 sky.exceptions.StorageBucketGetError

...
sky.exceptions.StorageBucketGetError: Failed to connect to an existing bucket 'YOUR_OWN_BUCKET_NAME'.
Please check if:
  1. the bucket name is taken and/or
  2. the bucket permissions are not setup correctly. To debug, consider using gsutil ls gs://YOUR_OWN_BUCKET_NAME.

答:您需要将存储桶名称替换为您自己的全局唯一名称,然后重新运行命令。新的私有存储桶将自动在您的云账户下创建。

包含的文件#