去年年底,OpenAI发布了一个大语言模型。有人说,它的意义与当年互联网的出现一样重要。它势必在将来改变各行各业的运行模式,并对我们的生活带来影响。如今,大多数人访问ChatGPT主要是和他聊天,当然也有一些人用它来解决工作上的问题、甚至是写论文。大家使用的ChatGPT是使用互联网上超过百亿个词汇组成的语料库进行训练的,它对一些“通用”问题会做出很好的回答。这么好的工具,如果能部署在企业内部,帮助我们的员工提升工作效率,回答一些针对您自己企业的问题,那该多好?但很遗憾,您企业内部的数据一般都是保密的,ChatGPT在训练的时候,是无法得到您企业内部的保密资料和数据的,因此你对它提出关于您企业内部的问题,一般情况下只能得到“一本正经的胡说八道”。
那么如何搭建一个针对您企业信息的GPT机器人呢?会不会很复杂?这个问题的答案就和问题一样“复杂”。但也没有那么困难,今天就和大家一起在OCI上搭建一个企业GPT,您可以按照本文中的示例,并使用您企业内部的资料对模型进行训练,并通过OCI中提供的安全连接技术,让这个专业机器人只能被您企业内部的员工在安全的情况下进行访问。
基础环境搭建
使用大语言模型创建的聊天机器人在工作时,对计算资源有较高的要求,如果配置较少的计算资源,即便是在推理阶段,它的速度可能也会让人无法忍受。对于模型训练,需要等待的时间更是令人沮丧。建议大家使用GPU环境进行模型的训练,如果资金允许的话,推理阶段依旧使用GPU环境,但如果可以忍受这个机器人反应稍微迟钝一些,也可以选用CPU计算环境。Oracle在OCI中新推出的A10.1机型,带有15个OCPU,240GB内存,1块英伟达A10的计算卡,每小时只需要2美元。今天我们就使用这个环境搭建我们的企业GPT。
(上图信息来自:https://www.oracle.com/cloud/compute/pricing/)
首先,我们需要在OCI中创建带有GPU的虚拟机。为了简化我们的系统配置过程,可以选择OCI预配置的数据科学镜像,如下所示,您也可以选择任何你想使用的操作系统:
并根据您的预算和所需的性能,选择相应的GPU环境,今天我们使用A10.1这款虚拟机。
因为模型训练时,会生成许多中间数据,所以您可以根据需要,调整所需的磁盘空间。下面为了简便,直接将数据放入boot volume,您也可以在后期挂载其他的块存储,并调整存储的I/O速度。
只需几分钟,我们的基础设施就被创建好了。里面已经预制了数据科学环境,我们只要对jupyter notebook进行配置并启动服务即可。关于jupyter的配置,您可以参考文档(https://jupyter-notebook.readthedocs.io/en/stable/)
接下来我们可以检查一下GPU是否已经成功挂载,并且在jupyter notebook当中是否可以正常识别即可。下面是通过watch -n 1 nvidia-smi命令查看GPU的运行状态。
在jupyter notebook中测试是否可以识别GPU,如果结果为1(如果只有一块GPU卡的话),则表示成功识别。
使用预训练模型
在我们尝试训练自己的模型之前,我们先使用其他人训练好的模型,看看如何在自己的环境中运行聊天机器人。今天我们使用GPT4ALL(感谢我的同事Mac Huang提供的资讯)并从hugging face下载训练好的模型进行测试。
首先下载模型,我们使用来自hugging face的预训练模型。
git clone https://huggingface.co/decapoda-research/llama-7b-hf
复制
该模型的超参数及模型表现如下所示:
需要注意的是,该模型下载之后不能执行,会报配置错误,经过检查之后发现,模型的作者在编写配置文件时,出现了拼写错误。请将
{"bos_token": "", "eos_token": "", "model_max_length": 1000000000000000019884624838656, "tokenizer_class": "LlamaTokenizer", "unk_token": ""}
复制
然后我们使用如下代码,问聊天机器人,从洛杉矶国际机场到UCLA怎么走?看看它的回答。
它的回答基本正确,但还有一种我之前常用的交通方式,从96街与Sepulveda大路的路口搭乘快速公交6路到学校,CC6R的终点站就是UCLA。
训练自己的模型
之前使用预制模型,只是为了让大家了解如何在OCI上运行GPT聊天机器人,而真正为企业服务的是使用我们自己训练的模型。这里我们将使用另外一个模型nanoGPT,它是用于训练/微调中型GPT的比较简单、相对快速的软件库。它是以minGPT为基础的重新实现版本,该模型目前仍在积极开发中。
首先需要满足nanoGPT的运行条件。
pytorch <3
numpy <3
pip install transformers for huggingface transformers <3 (to load GPT-2 checkpoints)
pip install datasets for huggingface datasets <3 (if you want to download + preprocess OpenWebText)
pip install tiktoken for OpenAI's fast BPE code <3
pip install wandb for optional logging <3
pip install tqdm <3
复制
然后需要克隆nanoGPT的存储库。
git clone https://github.com/karpathy/nanoGPT.git
复制
1、准备训练数据
您可以将自己的文本作为训练集,并将他们放在data文件夹中。在今天的示例中,我们将使用莎士比亚的作品作为我们的训练集,所以我们首先从网络下载一个1MB左右的文本文件,并对它进行数字化转换。
(gpt) root@gpt:/u01/nanoGPT# python3 data/shakespeare_char/prepare.py
length of dataset in characters: 1,115,394
all the unique characters:
!$&',-.3:;?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
vocab size: 65
train has 1,003,854 tokens
val has 111,540 tokens
复制
2、模型训练
在训练数据准备完毕后,我们将启动模型的训练。
python3 train.py config/train_shakespeare_char.py
复制
通过对GPU状态的观察,我们可以看到GPU现在已经几乎满负荷运行。
我们的训练需要进行5000次迭代,运行时间大概为8分钟左右。之前在Intel IceLake系列16 cores的CPU,128GB内存环境中完成相同的训练需要12个小时,使用英伟达A10单卡GPU之后,效率提升90倍(注:不同模型,不同训练数据,情况不同。90倍只是本次实验所属情况),在验证集上得到的min loss为1.69,在没有对模型进行精细调整的情况下,目前的指标还令人满意。
3、模型验证
通过我们刚才生成的best模型,我们让它生成一些文字,看看是否满足我们的要求。
python3 sample.py --out_dir=out-shakespeare-char
复制
因为我们没有对模型进行调整,所以现在它的表现不是很理想,当对模型参数进行调整,调高某些参数值(有些参数值需要降低)之后,利用多块GPU同时训练,估计会得到更高的结果。一旦您的模型达到预期,就可以请前端工程师帮您制作精美的页面,然后调用您的模型进行工作了。比如下面这样的页面:
设定网络安全
为了只让这个您专有的GPT聊天机器人只为您或者您授权的人员服务,您只需要在OCI中进行简单的网络访问控制即可,或者您也可以通过VPN的形式访问OCI中的资源。
总结
在本文中,我们通过demo的形式为您展示了如何创建属于自己的GPT聊天机器人,如果想将它真正商用,您还需要对模型进行精细化调整,这需要人工智能专业人士的参与,并将花费大量的训练时间,在本文第三部分后面图像所展示的问答结果,是通过8块英伟达A100计算卡,连续工作4天得到的。除此之外,如果想得到更准确的回答,在准备训练数据上也是需要花一些心思的。
编辑:殷海英
评论





