背景
注册完之后,我们登录,默认弹出的订阅信息是我们账户的余额信息(时刻提醒我们需要充值了!!! Azure上所有服务都是收费的,有钱就是好!!!),默认显示的是日元,可能是服务器在日本的原因吧。
![](http://dingyue.ws.126.net/2023/0809/52731dafj00rz4bfq001tc001v200ekm.jpg)
然后我们选择“更多服务”,就会显示所有提供的服务了,这里面我们选择“Azure openAI”。
![](http://dingyue.ws.126.net/2023/0809/66abd193j00rz4bfq004bc001v800zcm.jpg)
我们就进入到openAI的实际操作页面了。
![](http://dingyue.ws.126.net/2023/0809/79dad525j00rz4bfq003xc001uw00zom.jpg)
默认显示的“azure-openai-whq”是我之前创建资源名称,点击资源名称,可以进入到资源详情页面。
![](http://dingyue.ws.126.net/2023/0809/3b54e105j00rz4bfq007mc002r8015sm.jpg)
其中比较重要的两项是“资源组名称”和“终结点”,由于Azure提供很多机器学习的模型和服务,资源组相当于是一个命名空间,方便资源和服务的管理。“终结点”是我们后续模型部署成功后,通过api访问Azure接口时的域名,它的组成是https://{自定义域名}+openai.azure.com,如我的自定义域名是“azure-open-whq”,那么终结点就是“ https://azure-open-whq.openai.azure.com ”。
点击左侧导航树的“模型部署”,然后再点击加载页面的“管理部署”,就可以看到我们之前部署的模型了。
![](http://dingyue.ws.126.net/2023/0809/e909210fj00rz4bfq0044c0021m011em.jpg)
![](http://dingyue.ws.126.net/2023/0809/8107e4bcj00rz4bfq004pc002ra00t0m.jpg)
当然这里我们也可以新建部署,也就是新建一个模型,这里会列出所有我们能够创建的模型,gpt-35-turbo就是chatGPT的底座模型,它的功能是最全的。还有细分的其他模型,如text-ada-011模型,进行文本信息处理的ada模型,这里ada是代号,同理还有babbage,curie和davinci,他们都是进行文本处理的,这里模型推理效果从ada到davinci越来越好,即ada
![](http://dingyue.ws.126.net/2023/0809/58f47d9dj00rz4bfq0059c002e601aem.jpg)
然后点击“在操场中打开”或者左侧导航树的“聊天”,就可以进入到与GPT对话的页面了。
![](http://dingyue.ws.126.net/2023/0809/e87bd276j00rz4bfr006pc002ri01nym.jpg)
进入到聊天页面,可以对之前部署过的模型进行选择,但只有聊天功能效果好的模型才会显示在备选列表中,比如ada模型比较适合分类,聊天效果可能并不太好,就没有在备选列表中显示,而gpt3.5-turbo模型是显示在备选列表中的,在会话区我们就可以正常的GPT模型进行会话交流了,到目前位置我们所有操作都是基于web的(是不是很简单呐)。
![](http://dingyue.ws.126.net/2023/0809/3ccf5159j00rz4bfr00coc002re01nom.jpg)
现在是通过页面与机器人进行交流的,那么能不能通过代码以接口调用的方式,与机器人进行对话呢?答案是肯定的,Azure提供了资源的访问密钥,在资源页面,默认会生成两个密钥,任何一个都是可以使用的,提供两个密钥的原因是可以进行无感升级,同时也可以随时重新生成密钥。
![](http://dingyue.ws.126.net/2023/0809/c5cf8224j00rz4bfq005qc002ra018am.jpg)
我们现在利用生成的密钥,测试一下在本地通过接口调用的方式访问Azure的openAI服务。python的代码如下,这里选择的执行引擎是ada引擎,解决的是一个分类问题。
![](http://dingyue.ws.126.net/2023/0809/dcf21fa1j00rz4bfq0072c002ri00r4m.jpg)
提示词如下:
#首先提示模型需要做什么,它需要做的是根据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的输出是不是与实际内容相符。
![](http://dingyue.ws.126.net/2023/0809/8a653799j00rz4bfq003gc0015y00pmm.jpg)
显然headline2的描述是business相关的,模型输出的结果也是Business,符合预期,模型是能够根据提示,对描述信息进行正确的分类。
" Type="normal"SectionTitle="模型fine-tuning" Type="normal"@@我们在使用一个模型的时候,如果想使模型的推理效果好,有时候需要进行示例学习(也就是少样本学习,常说的few-shot),也就是让模型模仿我们的操作进行推理,这样做的好处是使模型的推理更加精准,但由于模型使用是按token进行收费的,如果每次使用模型推理都输入示例成本会更高。另外示例学习也不能让模型具有一个全局视角去学习特定领域知识,效果也不如fine-tuning好,示例学习和fine-tuning效果对比如下。
所以如果想长期使用模型进行推理,fine-tuning是个更好的选择。Azure也提供了对原生模型进行fine-tuning的功能,下面我们就来一步一步开始训练属于我们自己的模型。首先我们可以先看一下Azure给的报价单,模型fine-tuning,托管和使用都是需要收费的,同样推理效果越好的模型收费标准也就越高。
![](http://dingyue.ws.126.net/2023/0809/508111fdj00rz4bfq001cc0020400o4m.jpg)
![](http://dingyue.ws.126.net/2023/0809/74b2fe6aj00rz4bfq0014c001zy00l0m.jpg)
![](http://dingyue.ws.126.net/2023/0809/eb413248j00rz4bfq0016c001zy00kym.jpg)
首先我们准备需要进行训练的数据,训练数据的格式必须是jsonl的,也就是每行是一个json串,openai提供了生成jsonl的工具,用法为:
openai tools fine_tunes.prepare_data -f
其中 ,支持CSV、TSV、XLSX、JSON 和 JSONL格式,只要文件中的数据格式是包含 prompt 和 completion 列或关键字就行。
然后我们选择“Data files”将我们生成的文件上传到Azure云端。
![](http://dingyue.ws.126.net/2023/0809/8ca91299j00rz4bfq004qc002rc00tum.jpg)
选择“上传新的数据集”,直接拖动就可以传到云端,这里面我上传了两个数据集,一个是训练数据集traning.jsonl,一个是验证数据集validation.jsonl,上传后会生成两个文件的ID,这个ID后续会用到,我们在进行模型训练的时候,需要在脚本中指定文件的ID,这样就可以在Azure云端找到这个文件作为模型的输入。
![](http://dingyue.ws.126.net/2023/0809/32d6be12j00rz4bfq004tc002rc00qwm.jpg)
由于我们的目标是跑通整个链路,所以这块训练数据集没有很大,就有3条数据。
![](http://dingyue.ws.126.net/2023/0809/c7f60505j00rz4bfq001sc0017c0054m.jpg)
编写进行模型训练的脚本(Azure上不提供模型训练的页面操作,这块需要自己写脚本),具体内容如下,这里需要提供我们的资源key,也就是访问的鉴权key,还有进行模型训练用到的file ID,还有一些模型训练的超参数(超参数的设定需要根据具体的数据集,模型以及经验进行设定,这里不赘述)。
![](http://dingyue.ws.126.net/2023/0809/43deea78j00rz4bfq0072c001k000z4m.jpg)
如果能够生成具体的job id信息,就说明训练的job启动成功了。
![](http://dingyue.ws.126.net/2023/0809/28525963j00rz4bfq0050c0018k019am.jpg)
模型训练的过程中,我们可以在页面上看到执行状态(“正在运行”,“异常”或者“已成功”等)。
![](http://dingyue.ws.126.net/2023/0809/45306b20j00rz4bfq0048c0021w012qm.jpg)
训练如果顺利,正常结束的话,会生成训练报告,包含训练时长,账单等详细的信息。
![](http://dingyue.ws.126.net/2023/0809/b4e57a58j00rz4bfq001qc0027200iim.jpg)
![](http://dingyue.ws.126.net/2023/0809/b6b4e546j00rz4bfq002jc0025e00rum.jpg)
我们看到自定义模型已经是部署成功的状态了。
![](http://dingyue.ws.126.net/2023/0809/2644a721j00rz4bfq0032c002eg00hmm.jpg)
那么我们看看训练之后的模型效果如何吧。很遗憾,结果并不是我们想要的训练数据里的“coffee”,而是“Human,Tells”,很有职业范,哈哈。原因也很简单,我们的训练数据太少了,而且场景太通用,所以最终得到的答案比较随机了。
![](http://dingyue.ws.126.net/2023/0809/3d7cd97cj00rz4bfq002hc0020i01eem.jpg)
那么需要多少样本才能使模型的推理效果达到我们的预期呢,通常情况下至少需要几百到上千条的样本才能使模型具备特定领域的认知,当然样本越多训练的效果也就越好,在微软云Azure上训练模型收费也是不低的,如果模型更新频次不高,我们可以一劳永逸一次准备尽量多的样本,也可以少量多次不断对模型进行迭代训练,这个可根据实际情况进行选择,如下是训练样本多少与模型推理准确率之间的关系,可供参考(来源于网络)。
![](http://dingyue.ws.126.net/2023/0809/2ed2781cj00rz4bfq0015c0014w00ksm.jpg)
" Type="normal"SectionTitle="总结" Type="normal"-->
后续工作
2.大模型在特定场景落地:寻找大模型与现有业务结合点,将简单重复的工作交给大模型进行处理,降本增效;
3.评估模型推理效果:寻找更多评估模型和提升模型效果的方法,不断优化模型的推理准确率;
4.择优选取模型:测试从ada到davinci模型的优劣势,针对特定场景择优选取模型进行使用;
5.prompt工程探索:提示词的好坏,也可能最终决定模型推理结果的好坏,针对如何进行提示词优化后续也需要进行不断探索和总结。
" Type="normal"@@-->
热门跟贴