开源
OpenChatKit:可创建专用/通用聊天机器人的工具包
来源:元经纪     阅读:1084
网站管理员
发布于 2023-04-23 06:22
查看主页

概述

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 和其他依赖项。

  1. 从他们的网站安装Miniconda

  2. 从他们的网站安装 Git LFS

  3. 安装lfs。git lfs

git lfs install
  1. 在环境中安装 mamba,使其在所有环境中都可用。base
conda install mamba -n base -c conda-forge
  1. 使用此存储库根目录中的文件创建一个名为 OpenChatKit 的环境。environment.yml

注意用于创建环境。它比使用 .mambaconda

mamba env create -f environment.yml
  1. 激活新的 conda 环境。
conda activate OpenChatKit

与Pythia-Chat-Base-7B聊天

为了帮助你试用模型,推理/机器人.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 上运行以及在消费者硬件上运行的更多详细信息,请参阅推理自述文件

Pythia-Chat-Base-7B

本教程通过使用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

要在训练期间使用 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格式

在使用此模型执行推理之前,必须将其转换为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_100model_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 将指标输出到文件中,或将它们报告给权重和偏差。

Loguru

将标志添加到要记录到的训练脚本--train-log-backend loguru./logs/file_{time}.log

权重和偏差

要使用权重和偏差,请先使用您的权重和偏差令牌登录。

wandb login

并在训练脚本中设置以启用对权重和偏差的日志记录。--train-log-backend wandb

实验性:检索增强模型

警告检索支持是实验性的。

中的代码实现了一个python包,用于查询维基百科的Faiss索引。以下步骤说明如何使用此索引通过检索器中的上下文扩充测试工具中的查询。/retrieval

  1. 下载维基百科索引。
python data/wikipedia-3sentence-level-retrieval-index/prepare.py
  1. 使用标志运行机器人。--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]

 
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 开源
【2023年8月17日】第四届深圳国际人工智能展
以数字化助教育减负提质
每日一图|架桥铺路 串联幸福
富德生命人寿用“心”服务获客户认可
助推苏州重点产业发展 西交利物浦大学召开战略生态构建推进大会

首页

分类

定制方案

消息

我的