当前位置:首页|资讯|微软|ChatGPT|Vicuna

手把手教你在微软云-Azure搭建私有chatGPT

作者:格物时间发布时间:2023-08-09

背景

开源模型大多是基于大厂预训练模型演变而来,即使是推理效果最好的Vicuna也是才能达到90分(以chatGPT答案作为100分),其他开源模型推理效果与chatGPT相比,更是相形见绌。同时开源模型的单机部署和维护也是一项非常繁重的工作,GPU服务器需要安装驱动和各种依赖包,解决包冲突会让人痛不欲生(经历过才会懂)。那么有没有办法既能享受chatGPT的推理效果,同时又不用自己手动去进行单机环境部署,还能进行模型fine-tuning,训练自己特定领域内的模型呢?答案是肯定的,微软云-Azure就提供了这样的服务(感觉天一下子就亮了有木有)。Azure提供了openAI服务,我们可以在Azure上完成一键部署GPT3.5(chatGPT模型底座)模型(GPT4模型也可以申请使用,但需要填写使用申请单,默认不开放),同时支持上传训练数据,对部署的模型进行fine-tuning,让模型获取特定领域的知识,这样我们就可以在Azure上得到了一个推理效果堪比chatGPT,同时又有特定领域知识的私有chatGPT模型了(是不是迫不及待了,那我们现在就开始部署私有chatGPT模型之旅吧)。

操作步骤

原生模型部署及使用

首先我们先访问Azure的域名: https://azure.microsoft.com/zh-cn/ ,有时候加载会有点慢,需要耐心等待一下,打开之后右上角有个“登录”按钮,如果没有Azure账号的话需要先注册一下(这里略过注册步骤)。


注册完之后,我们登录,默认弹出的订阅信息是我们账户的余额信息(时刻提醒我们需要充值了!!! Azure上所有服务都是收费的,有钱就是好!!!),默认显示的是日元,可能是服务器在日本的原因吧。


然后我们选择“更多服务”,就会显示所有提供的服务了,这里面我们选择“Azure openAI”。


我们就进入到openAI的实际操作页面了。


默认显示的“azure-openai-whq”是我之前创建资源名称,点击资源名称,可以进入到资源详情页面。


其中比较重要的两项是“资源组名称”和“终结点”,由于Azure提供很多机器学习的模型和服务,资源组相当于是一个命名空间,方便资源和服务的管理。“终结点”是我们后续模型部署成功后,通过api访问Azure接口时的域名,它的组成是https://{自定义域名}+openai.azure.com,如我的自定义域名是“azure-open-whq”,那么终结点就是“ https://azure-open-whq.openai.azure.com ”。

点击左侧导航树的“模型部署”,然后再点击加载页面的“管理部署”,就可以看到我们之前部署的模型了。


当然这里我们也可以新建部署,也就是新建一个模型,这里会列出所有我们能够创建的模型,gpt-35-turbo就是chatGPT的底座模型,它的功能是最全的。还有细分的其他模型,如text-ada-011模型,进行文本信息处理的ada模型,这里ada是代号,同理还有babbage,curie和davinci,他们都是进行文本处理的,这里模型推理效果从ada到davinci越来越好,即ada<babbage<curie<davinci ,大家发现规律了嘛,首字母分别是abcd,他们分别是4位科学家的名字,感兴趣的同学可以自google一下是哪四位科学家。当然喽,模型推理效果越好,那么模型收费肯定也是越贵的,费用主要包括使用模型的费用(按token收费),训练模型的费用(如果需要fine-tuning)和托管训练数据的费用,费用也是ada<babbage<curie<davinci逐渐升高的。如果没有特别复杂的运算和推理,只是简单的进行分类,为了节省成本,其实ada也是够用的,当然土豪是可以直接上davinci的。


然后点击“在操场中打开”或者左侧导航树的“聊天”,就可以进入到与GPT对话的页面了。


进入到聊天页面,可以对之前部署过的模型进行选择,但只有聊天功能效果好的模型才会显示在备选列表中,比如ada模型比较适合分类,聊天效果可能并不太好,就没有在备选列表中显示,而gpt3.5-turbo模型是显示在备选列表中的,在会话区我们就可以正常的GPT模型进行会话交流了,到目前位置我们所有操作都是基于web的(是不是很简单呐)。


现在是通过页面与机器人进行交流的,那么能不能通过代码以接口调用的方式,与机器人进行对话呢?答案是肯定的,Azure提供了资源的访问密钥,在资源页面,默认会生成两个密钥,任何一个都是可以使用的,提供两个密钥的原因是可以进行无感升级,同时也可以随时重新生成密钥。


我们现在利用生成的密钥,测试一下在本地通过接口调用的方式访问Azure的openAI服务。python的代码如下,这里选择的执行引擎是ada引擎,解决的是一个分类问题。


提示词如下:

#首先提示模型需要做什么,它需要做的是根据headline中的文字描述,将内容进行分类,分类的结果是商业、技术、整治、运动和娱乐

Classify the following news headline into 1 of the following categories: Business, Tech, Politics, Sport, Entertainment

#根据headline1的描述,输出的category是娱乐,这个是给模型的提示

#headline1的翻译:唐娜·史蒂芬森 (Donna Steffensen) 正在烹饪一种新的完美菜肴。互联网上最受欢迎的烹饪大师有一本热门新书和全新视角

Headline 1: Donna Steffensen Is Cooking Up a New Kind of Perfection. The Internet's most beloved cooking guru has a buzzy new book and a fresh new perspective

Category: Entertainment

#当我们给模型输入headline2的时候,让模型推理category是什么?

#headline2的翻译:大型零售商宣布计划关闭 100 多家商店

Headline 2: Major Retailer Announces Plans to Close Over 100 Stores

Category:

我们现在执行python代码,卡看headline2的category的输出是不是与实际内容相符。


显然headline2的描述是business相关的,模型输出的结果也是Business,符合预期,模型是能够根据提示,对描述信息进行正确的分类。

模型fine-tuning

我们在使用一个模型的时候,如果想使模型的推理效果好,有时候需要进行示例学习(也就是少样本学习,常说的few-shot),也就是让模型模仿我们的操作进行推理,这样做的好处是使模型的推理更加精准,但由于模型使用是按token进行收费的,如果每次使用模型推理都输入示例成本会更高。另外示例学习也不能让模型具有一个全局视角去学习特定领域知识,效果也不如fine-tuning好,示例学习和fine-tuning效果对比如下。


所以如果想长期使用模型进行推理,fine-tuning是个更好的选择。Azure也提供了对原生模型进行fine-tuning的功能,下面我们就来一步一步开始训练属于我们自己的模型。首先我们可以先看一下Azure给的报价单,模型fine-tuning,托管和使用都是需要收费的,同样推理效果越好的模型收费标准也就越高。


首先我们准备需要进行训练的数据,训练数据的格式必须是jsonl的,也就是每行是一个json串,openai提供了生成jsonl的工具,用法为:

openai tools fine_tunes.prepare_data -f <LOCAL_FILE>

其中 <LOCAL_FILE>,支持CSV、TSV、XLSX、JSON 和 JSONL格式,只要文件中的数据格式是包含 prompt 和 completion 列或关键字就行。

然后我们选择“Data files”将我们生成的文件上传到Azure云端。


选择“上传新的数据集”,直接拖动就可以传到云端,这里面我上传了两个数据集,一个是训练数据集traning.jsonl,一个是验证数据集validation.jsonl,上传后会生成两个文件的ID,这个ID后续会用到,我们在进行模型训练的时候,需要在脚本中指定文件的ID,这样就可以在Azure云端找到这个文件作为模型的输入。


由于我们的目标是跑通整个链路,所以这块训练数据集没有很大,就有3条数据。


编写进行模型训练的脚本(Azure上不提供模型训练的页面操作,这块需要自己写脚本),具体内容如下,这里需要提供我们的资源key,也就是访问的鉴权key,还有进行模型训练用到的file ID,还有一些模型训练的超参数(超参数的设定需要根据具体的数据集,模型以及经验进行设定,这里不赘述)。


如果能够生成具体的job id信息,就说明训练的job启动成功了。


模型训练的过程中,我们可以在页面上看到执行状态(“正在运行”,“异常”或者“已成功”等)。


训练如果顺利,正常结束的话,会生成训练报告,包含训练时长,账单等详细的信息。


自定义模型部署及使用

训练好模型后,我们就可以部署我们的自定义模型啦(迫不及待的想看看训练后的效果如何吧),训练完后显示的是“部署”按钮,点击后模型部署成功,会变成“转到部署”,再点击“转到部署”,就能看到我们的自定义模型了。


我们看到自定义模型已经是部署成功的状态了。


那么我们看看训练之后的模型效果如何吧。很遗憾,结果并不是我们想要的训练数据里的“coffee”,而是“Human,Tells”,很有职业范,哈哈。原因也很简单,我们的训练数据太少了,而且场景太通用,所以最终得到的答案比较随机了。


那么需要多少样本才能使模型的推理效果达到我们的预期呢,通常情况下至少需要几百到上千条的样本才能使模型具备特定领域的认知,当然样本越多训练的效果也就越好,在微软云Azure上训练模型收费也是不低的,如果模型更新频次不高,我们可以一劳永逸一次准备尽量多的样本,也可以少量多次不断对模型进行迭代训练,这个可根据实际情况进行选择,如下是训练样本多少与模型推理准确率之间的关系,可供参考(来源于网络)。


总结

至此,我们已经在微软云Azure上把整个大模型从创建,训练,部署再到验证整个链路都已经走了一遍,针对特定领域知识的获取是最关键的一步,如果想让大模型有比较理想的推理效果,需要针对特定领域的知识进行精确细致的总结,这可能需要特性领域的专家人员花时间对特性领域的知识进行结构化的整理,然后作为模型fine-tuning的输入,同时为了避免由于预训练样本稀释模型训练的样本,训练样本不能太少,理论上样本越多推理效果越好。

后续工作

1.训练特定领域的大模型:针对特定领域的知识进行整理,训练特定领域的大模型;

2.大模型在特定场景落地:寻找大模型与现有业务结合点,将简单重复的工作交给大模型进行处理,降本增效;

3.评估模型推理效果:寻找更多评估模型和提升模型效果的方法,不断优化模型的推理准确率;

4.择优选取模型:测试从ada到davinci模型的优劣势,针对特定场景择优选取模型进行使用;

5.prompt工程探索:提示词的好坏,也可能最终决定模型推理结果的好坏,针对如何进行提示词优化后续也需要进行不断探索和总结。


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1