此存储库的目的是简单地实现可用于生产应用程序的GPT模型。该代码当前支持以下用例:
请随意分配此存储库,并将其用作开发自己的GPT应用程序的模板。
我们最终希望包括基于RL的Chatgpt微调。通常,这不会改变潜在的知识模型,而是会使与模型的相互作用更像人类。
设置代码相当最小,可以在本地或云VM环境中轻松复制。
conda create -n python38 python=3.8
conda activate python38
conda install --file requirements.txt
*将来我们将尝试提供此设置的Docker版本。
我们提供示例代码,以下载和预处理小型数据集进行培训和微调。使用此代码作为模板,为您自己的数据创建数据预处理。
python src/data_io/fetch_shakespeare.py
在上一步中创建的小型shakespeare数据集中训练很小的GPT模型。最终的模型不会非常概括,因为它很小,并且在一个很小的数据集上训练有素,但可以生成类似莎士比亚的报价。
更改配置文件,并为了在您自己的数据上从头开始训练模型。在这一点上,您可以根据您的数据大小和资源从技术上扩展到非常大的模型大小。
python src/training/train_main.py --config_file config/train_shakespeare_small.yml
*对于此步骤,您可能需要一个或多个GPU。
在您自己的数据上微调开源GPT2模型。可以使用任何开源GPT样模型(GPT2-MEDIUM,GPT2-XL等)。这是更常见的选择,因为它需要更少的数据和资源(甚至可以在CPU上运行),并且比从头开始训练的速度快。
python src/training/train_main.py --config_file config/finetune_shakespeare.yml
给定输入提示,从训练有素的模型中采样了许多输出。这可以用于批处理。
python src/inference/sample_main.py --config_file config/sample_shakespeare.yml
在REST API中为训练有素的型号提供的LightWeigth服务器。
uvicorn src.inference.service_main:app --reload --reload-include config/sample_gpt2.yml
服务器运行后,您可以使用提示(作为POST请求)查询端点。有关查询细节的更多详细信息,请查看以下测试脚本。
服务器运行后,您可以使用以下脚本测试端点。
python src/inference/test_query.py
该存储库已被牢记生产应用程序部署,其中包括单元和集成测试。
* TESIN并不是广泛的ATM,但我们将来会尝试增加覆盖范围。
已经包括单位测试以涵盖主要功能。您可以使用以下命令运行完整的单元测试套件:
pytest test/unit/
除单位测试外,我们还包括一些用于培训,微调和采样工作流程的集成测试。
pytest test/integration/
*集成测试当前需要数据工作(请参见上文)。
通常建议在与仓库一起工作时启用预要挂钩。当前,运行一些基本格式检查并运行单元测试套件(而不是集成测试)。
conda install -c conda-forge pre-commit
pre-commit install
本仓库中的GPT实施是受Andrej Karpathy的Nanogpt Repo的启发。我们的目标是重新实施,重新结构并使用模块扩展并将其扩展,从而使其易于在其上构建不同类型的生产应用程序。