OpenChatKit提供了一个强大的开源基础,可以为各种应用程序创建专用和通用的聊天机器人。该工具包包括一个指令调优的语言模型、一个审核模型和一个可扩展的检索系统,用于包含来自自定义存储库的最新响应。OpenChatKit模型在OIG-43M训练数据集上进行训练,该数据集是Together,LAION和 Ontocord.ai 之间的合作。
在此存储库中,你将找到以下代码:
在本教程中,您将下载 Pythia-Chat-Base-7B,一个指令调优的语言模型,并使用命令行工具针对它运行一些推理请求。
Pythia-Chat-Base-7B是来自Eleuther AI的Pythia-7.6B-deduped的9B参数微调变体。该模型的预训练权重可在Huggingface上作为Apache 7.2许可证下的togethercomputer/Pythia-Chat-Base-0B获得。
更多细节可以在Huggingface上的Pythia-Chat-Base-7B模型卡上找到。
[hidecontent type="logged" desc="隐藏内容:登录后可查看"]
在开始之前,您需要安装 PyTorch 和其他依赖项。
git lfs install
base
conda install mamba -n base -c conda-forge
environment.yml
注意用于创建环境。它比使用 .
mamba
conda
mamba env create -f environment.yml
conda activate OpenChatKit
为了帮助你试用模型,推理/机器人.py
是一个简单的命令行测试工具,它提供了一个 shell 推理,使你能够与模型聊天。只需在提示符下输入文本,模型就会回复。测试工具还维护对话历史记录,为模型提供上下文。
通过从存储库的根目录调用来启动机器人。bot.py
python inference/bot.py --model togethercomputer/Pythia-Chat-Base-7B
加载模型可能需要一些时间,但加载后,您会看到提示。打招呼。
$ python inference/bot.py
Loading /home/csris/src/github.com/togethercomputer/OpenChatKit/inference/../huggingface_models/GPT-NeoXT-Chat-Base-20B to cuda:1...
Welcome to OpenChatKit shell. Type /help or /? to list commands.
>>> Hello.
Hello human.
>>>
在提示符下输入其他查询,模型将回复。在幕后,shell 正在形成一个包含所有先前查询的提示,并将其传递给模型以生成更多文本。
该 shell 还支持其他命令来检查超参数、完整提示符等。命令以 ./
注意该命令将退出外壳程序。
/quit
有关参数、在多个/特定 GPU 上运行以及在消费者硬件上运行的更多详细信息,请参阅推理自述文件。
本教程通过使用OIG数据集微调Eleuther AI的Pythia-7.6B重复模型来重现Pythia-Chat-Base-9B模型。
聊天模型是在LAION,Together和 Ontocord.ai 构建的OIG数据集上进行训练的。要从Huggingface下载数据集,请从存储库的根目录运行以下命令。
python data/OIG/prepare.py
注意您可以通过贡献数据来帮助改善此聊天模型!有关更多详细信息,请参阅 OpenDataHub 存储库。
命令完成后,数据将位于目录中。data/OIG/files
Pythia-Chat-Base-7B是Eleuther AI的Pythia-6.9B-deduped的微调变体。若要下载模型并准备进行微调,请从存储库的根目录运行此命令。
python pretrained/Pythia-6.9B-deduped/prepare.py
此模型的权重将位于目录中。pretrained/Pythia-6.9B-deduped/EleutherAI_pythia-6.9b-deduped
要在训练期间使用 8bit-adam,请安装软件包。bitsandbytes
pip install bitsandbytes # optional, to use 8bit-adam
该脚本配置并运行训练循环。下载数据集和基础模型后,运行:training/finetune_Pythia-Chat-Base-7B.sh
bash training/finetune_Pythia-Chat-Base-7B.sh
训练循环运行时,检查点将保存到存储库根目录下的目录中。model_ckpts
有关自定义训练运行的更多详细信息,请参阅培训自述文件。
在使用此模型执行推理之前,必须将其转换为Huggingface格式。从存储库的根目录运行此命令以执行此操作。
mkdir huggingface_models \
&& python tools/convert_to_hf_gptneox.py \
--config-name EleutherAI/pythia-6.9b-deduped \
--ckpt-path model_ckpts/Pythia-Chat-Base-7B/checkpoint_100 \
--save-path huggingface_models/Pythia-Chat-Base-7B \
--n-stages 4 \
--n-layer-per-stage 8 \
--fp16
标志将在 FP16 中加载和存储模型的位置。--fp16
确保替换为目录中的最新检查点。model_ckpts/Pythia-Chat-Base-7B/checkpoint_100
model_ckpts/Pythia-Chat-Base-7B
您可以使用 OpenChatKit Shell 测试工具与新模型聊天。从存储库的根目录运行
python inference/bot.py
默认情况下,脚本将在目录下加载名为 Pythia-Chat-Base-7B 的模型,但您可以通过指定 huggingface_models
--model
python inference/bot.py --model ./huggingface_models/GPT-NeoXT-Chat-Base-20B
加载模型后,在提示符下输入文本,模型将回复。
$ python inference/bot.py
Loading /home/csris/src/github.com/togethercomputer/OpenChatKit/inference/../huggingface_models/GPT-NeoXT-Chat-Base-20B to cuda:1...
Welcome to OpenChatKit shell. Type /help or /? to list commands.
>>> Hello.
Hello human.
>>>
该 shell 还支持其他命令来检查超参数、完整提示符等。命令以 ./
有关参数、在多个/特定 GPU 上运行以及在消费者硬件上运行的更多详细信息,请参阅推理自述文件。
默认情况下,训练脚本只是在训练进行时打印损失,但它也可以使用 loguru 将指标输出到文件中,或将它们报告给权重和偏差。
将标志添加到要记录到的训练脚本--train-log-backend loguru
./logs/file_{time}.log
要使用权重和偏差,请先使用您的权重和偏差令牌登录。
wandb login
并在训练脚本中设置以启用对权重和偏差的日志记录。--train-log-backend wandb
警告检索支持是实验性的。
中的代码实现了一个python包,用于查询维基百科的Faiss索引。以下步骤说明如何使用此索引通过检索器中的上下文扩充测试工具中的查询。/retrieval
python data/wikipedia-3sentence-level-retrieval-index/prepare.py
--retrieval
python inference/bot.py --retrieval
启动后,机器人将同时加载聊天模型和检索索引,这需要很长时间。加载模型和索引后,所有查询都将使用额外的上下文进行扩充。
$ python inference/bot.py --retrieval
Loading /OpenChatKit/inference/../huggingface_models/GPT-NeoXT-Chat-Base-20B to cuda:0...
Loading retrieval index...
Welcome to OpenChatKit shell. Type /help or /? to list commands.
>>> Where is Zurich?
Where is Zurich?
Zurich is located in Switzerland.
>>>
[/hidecontent]