这是一个用于发布“Vicuna:一款令人印象深刻的GPT-4开放式聊天机器人”的代码仓库。
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/lm-sys/FastChat
FastChat
FastChat是一个开放的平台,用于训练、服务和评估基于大型语言模型的聊天机器人。
发布:
加入我们的Discord服务器并关注我们的Twitter以获取最新更新。
**公告:**感谢您查看我们的项目并表现出兴趣!一旦我们解决了所有法律问题并准备好推出低资源版本的推理代码,我们计划发布模型权重。根据我们当前的时间表,它将在下周初发布。敬请期待! 🦙
包含内容:
安装
git clone https://github.com/lm-sys/FastChat.git
cd FastChat
pip3 install -e .
# Install the latest main branch of huggingface/transformers
pip3 install git+https://github.com/huggingface/transformers
服务
我们计划通过提供基于原始LLaMA权重构建的增量权重版本来发布模型权重,但我们仍在找到一个合适的方式来实现。在此示例中,我们演示了使用OPT模型的分布式服务系统的用法。稍后,您可以应用类似的命令为Vicuna提供服务,就像在我们的演示中所示。
命令行界面
python3 -m fastchat.serve.cli --model-name facebook/opt-1.3b
Web UI
# Launch a controller
python3 -m fastchat.serve.controller
# Launch a model worker
python3 -m fastchat.serve.model_worker --model-path facebook/opt-1.3b
# Send a test message
python3 -m fastchat.serve.test_message
# Launch a gradio web server.
python3 -m fastchat.serve.gradio_web_server
# You can open your brower and chat with a model now.
评估
我们的AI增强评估流程是基于GPT-4的。以下是使用该流程的高级说明:
首先,从不同的模型生成答案。对于ChatGPT,请使用qa_baseline_gpt35.py,对于Vicuna和其他模型,请指定模型检查点并运行model_qa.py。
然后,使用GPT-4自动生成评论(如果GPT-4 API不可用,则可以手动完成)。一旦您有了评估数据,通过运行generate_webpage_data_from_table.py来可视化结果,它将为一个静态网站生成数据。
最后,在“webpage”目录下提供静态网站。您可以简单地使用python3 -m http.server在本地提供网站。
除了评估工作流程外,我们还记录了用于评估的数据格式,其中使用JSON Lines进行编码,并包括有关模型、提示、审核人员、问题、答案和评论的信息。您可以通过访问相关数据来自定义评估过程或为我们的项目做出贡献。
详细说明请查看evaluation。
微调
数据
Vicuna是通过使用从ShareGPT.com收集的约70K个用户共享的对话,使用公共API从LLaMA基础模型中微调而来的。为确保数据质量,我们将HTML转换回Markdown并过滤掉一些不适当或低质量的样本。此外,我们将长对话分成适合模型最大上下文长度的较小片段。
由于存在某些问题,我们暂时可能无法发布数据。如果您想尝试微调代码,请尝试使用我们的预处理alpaca数据集(原始数据集来自这里)。
代码和超参数
我们使用Stanford Alpaca的代码进行微调,对其进行了一些修改以支持渐进式检查点和Flash Attention。我们使用与Stanford Alpaca类似的超参数。
| 超参数 | 全局批次大小 | 学习率 | Epochs | 最大长度 | 权重衰减 |
|---|---|---|---|---|---|
| Vicuna-13B | 128 | 2e-5 | 3 | 2048 | 0 |
使用SkyPilot在任何云上进行微调:
Skypilot是由加州大学伯克利分校开发的框架,可轻松且成本有效地在任何云上运行ML工作负载(AWS、GCP、Azure、Lambda等)。要使用SkyPilot,请使用以下命令安装它,并按照此处的说明设置本地云凭据。
# Install skypilot from the master branch
pip install git+https://github.com/skypilot-org/skypilot.git
Vicuna
Vicuna可以在8个A100 GPU上进行训练,内存为80GB。下面的命令将自动启动一个满足要求的节点,在其上设置并运行训练作业。
sky launch -c vicuna -s scripts/train-vicuna.yaml --env WANDB_API_KEY
其他选项也是有效的:
# Launch it on managed spot to save 3x cost
sky spot launch -n vicuna scripts/train-vicuna.yaml --env WANDB_API_KEY
# Train a 7B model
sky launch -c vicuna -s scripts/train-vicuna.yaml --env WANDB_API_KEY --env MODEL_SIZE=7
注意:请确保在您的本地机器上设置了WANDB_API_KEY。 您可以在您的wandb个人资料页面上找到API密钥。 如果您想在不使用wandb的情况下训练模型,可以将--env WANDB_API_KEY标志替换为--env WANDB_MODE = offline。
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中的设置部分。
torchrun --nnodes=1 --nproc_per_node=8 --master_port=<your_random_port> \
fastchat/train/train_mem.py \
--model_name_or_path <path-to-llama-model-weight> \
--data_path <path-to-data> \
--bf16 True \
--output_dir ./checkpoints \
--num_train_epochs 3 \
--per_device_train_batch_size 4 \
--per_device_eval_batch_size 4 \
--gradient_accumulation_steps 1 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 1200 \
--save_total_limit 100 \
--learning_rate 2e-5 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--fsdp "full_shard auto_wrap" \
--fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \
--tf32 True \
--model_max_length 2048 \
--gradient_checkpointing True \
--lazy_preprocess True
