庆云古诗词

庆云古诗词

来 Azure 学习 OpenAI 二 - 环境构建

互联资讯 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】


大家好,我是微软学生大使 Jambo 。如今,越来越多的人拥有多台开发设备,例如在家和办公室都有电脑。但是跨设备开发是件麻烦的事情,因为你不仅需要同步文件,还需要在不同的设备上安装相同的开发环境。而对于使用轻型设备,比如 Chromebook 和 iPad,复杂的开发环境也很难被支持。在这种情况下,云端开发将会是一个很好的选择。

把工作环境放在云端,无论你使用哪个设备,只要能上网,你就可以获得完全统一的开发环境,而且无需担心硬件算力的问题。例如,你可以在iPad上打开云端开发环境,然后在笔记本电脑上继续工作,这种灵活性是传统开发模式无法比拟的。

我在这篇文章中将会介绍两种在云上开发的方式,一种是使用 GitHub Codespaces,另一种是使用 Azure ML。

GitHub Codespaces 是一种托管在云端的开发环境,它可以让你利用云服务器资源进行开发和编译。Codespaces 运行在 Azure 虚拟机中的 Docker 容器中,默认情况下使用 Ubuntu Linux 映像。你可以根据自己的需求对 Codespaces 进行配置,同时其他人也可以使用你为项目配置的环境创建自己的 Codespaces 进行标准化的工作。

你可以从浏览器、【【微信】】、JetBrains Gateway 应用程序或使用 GitHub CLI 连接到 Codespaces。就像在本地开发一样,Codespaces 可以保存你所做的代码修改和文件更改,即使停止了 Codespaces,也可以在以后继续使用。除非你将 Codespaces 删除,否则它将一直占用云上的资源。

你可以从项目仓库或现有模板创建 Codespaces。如果你从项目仓库创建 Codespaces,它会自动将仓库克隆到开发环境中。如果仓库中包含 文件夹,则说明项目作者为该项目创建了标准的 Codespaces 配置。在创建 Codespaces 时,将自动使用此配置创建容器。

进入储存库,点击左上角的 “Code” ,在 “Codespaces” 标签中点击 “Create Codespaces on {fork-name}”

如果你要做关于服务器地区、核心数量的设置,也可以在 “New with options…” 中进行设定。

我们可以从 GitHub 页首的 进入此页面,其中包含了官方提供的一些模板,你也可以在其中管理你的 Codespaces。

在“See all” 中可以查看完整的模板列表,点击模板的黑体名字也可以查看模板 储存库。

点击“Use this template”就可以根据模板创建 Codespaces 。如果你在模板储存库也可以在 “Use this template” 中点击 “Open in a Codespaces” 创建。

Codespaces 是运行在 Docker 容器中的,因此你可以为储存库配置专门的开发环境。Codespaces 的配置文件是 ,通常位于 目录中。你可以创建多个配置文件,但是这种情况下它们需要储存在各自的子目录中,例如:

  • 当你进入 Codespaces 时,呼出 【【微信】】 的命令面板(++),键入 “add dev” ,并点选。

选择 “Create…” 以创建新的配置,如果你要编辑现有的配置文件就选择 “Modify…”。

选择 “Show All Definitions…”。

接下来根据自己的需要选择环境,这里我选择 “Python 3”,然后选择你想要的版本。

然后选择你想要添加的功能,比如环境管理工具 “Conda”。

你还可以将 【【微信】】 拓展添加进配置中。

为了让 conda 可以顺利初始化,我们需要修改 中的 参数,这个参数是第一次创建 Codespaces 时会执行的命令。关于其他参数可以参考 metadata reference。

我们呼出命令面板,输入 “rebuild” 让他重新构建。

等他构建完成后,可以看到他已经自动安装了 Python 相关的拓展。

并且 conda 也可以正常使用了,我们可以创建一个新的 python 环境。

这时我们就可以在 “openai” 这个环境中进行开发。我们首先安装一些需要的库。

我们开一个 Jupyter 来做个示例。首先需要选择正确的内核,点击左上角的 “Select Kernel”,“Select Another Kernel”,“Python Env…”,选择 “openai”,如果你先前创建的 conda 环境不在此列表中,可以点击左上角的刷新键来刷新。

我在 Azure 上开了一个 OpenAI 服务,将 Key 等相关数据储存在 中,然后通过 库调用 API。

如果你更习惯 Jupyter 的界面,而不是 【【微信】】,Codespaces 也支持端口转发。

你可以在 Terminal 的 PORTS 页面中查看转发的端口。只要 CodeSpaces 是开启状态,你就可以通过对应的网址访问端口。 如果你想让其他人也能够访问端口,你还可以将端口设为公开,此时即使是没有登录 GitHub 的情况下也可以进入网页。

在使用 Codespaces 时,会产生计算费用和储存费用。为了避免不必要的损失,你需要记得停止或关闭 Codespaces。当停止 Codespaces 时将不会产生计算费用,但是仍会产生储存费用。

如果你的 Codespaces 是从模板创建的,你可以在管理页面中将其内容发布到储存库中。请注意,如果你要将 Codespaces 发布到储存库中,Codespaces 需要处于停止状态。

选择“公开”或者“私人”后点击创建即可。

除了发布和删除 Codespaces,管理页面还可以让你查看和修改 Codespaces 的配置信息,如 Docker 镜像、环境变量等。此外,你还可以查看与 Codespaces 相关的费用信息,以及访问控制等设置。即使停止 Codespaces,他也会将你的更改保存下来,除非你将其删除,才会彻底释放在云上的资源。

项目地址&#【【网址】】/JamboChen/codespases-Jambo

如果你需要进行深度学习或 CUDA 方面的开发,那么一定少不了要安装各种驱动和库,这是个十分繁琐的工作。而 Azure 机器学习可以帮助你快速搭建一个 GPU 加速的环境,可以让你直接进行相关的开发。

对于学生党,可以参考我上一篇教程 注册 Azure 和申请 OpenAI 来创建 Azure 账号,可以获得 【【微信】】 美金的免费额度。

进入 Azure 首页,上方搜索框中输入 “机器学习”,点击 “Azure 机器学习”。

点击 “创建”。

在 “创建 Azure 机器学习工作区” 页面中,你可以选择你的订阅,以及工作区的名称、位置、资源组等信息。要注意的是,如果你需要 GPU 资源, 那么地区一定要选择 “West US 2”

确认无误后点击 “审阅和创建”,再次确认后点击 “创建”。等待创建完成后,你就可以进入 Azure 机器学习的管理页面了。

在左侧菜单的 “计算” 页面中,点击 “新建”。

根据你的需要选择虚拟机类型,这里我选择 “GPU”,他默认使用 Tesla K80 GPU,如果你需要更高性能的 GPU,可以选择 “从所有选项中选择”。但你可能需要申请配额。点击创建后稍等片刻就创建成功了

我们可以转到 “Notebooks” 页面,点击 Terminal,进入终端。输入 来查看 cuda 的信息。

接下来我们新建一个 文件。

输入以下代码, + 退出, 保存, 确认。

运行编译命令。要注意的是由于 K80 架构较旧,所以我们需要指定架构,否则将无法正确执行 GPU 相关的代码。

架构相关的信息可以参考下图:

在这个页面上,还可以创建 ipynb 文文件。

当然如果你更习惯 Jupyter 的界面,也可以从 “计算” 页面中进入。

要注意的是 Azure ML 是计时收费的,所以如果你有段时间不使用,可以将其停止,以免产生不必要的费用。

最后这里整理一份给大学生们的免费资源:

Azure 免费资源:https://aka.ms/studentgetazure GitHub 教育包:https://aka.ms/GitHubStudentDe【【微信】】

系列往期文章:

  1. 学生党,快来 Azure 一起学习 OpenAI (一):注册 Azure 和申请 OpenAI


ai算法模型详解 ai 能力成熟度模型

AI算法模型有哪些,AI算法模型库,AI算法模型部署,AI算法模型测试

文 | 小轶

三个多月前,OpenAI的GPT-3在NLP界掀起轩然大波。就在上周,视金钱如粪土的OpenAI团队又在文本摘要方面推出了最新力作,全方位超越人类表现。其亮点在于:以人类偏好替代自动化评测方法(如ROUGE、BLUE)为训练目标用人类反馈作为奖励进行强化学习,性能表现十分惊艳。

对于较为复杂的NLP任务,如何进行评测、如何构造精准的损失函数已困扰了NLP researchers多年。以文本摘要为例,若采用自动化指标,模型的生成结果将逐渐逼近数据集内人工手写的摘要。但这种评价方式其实并不符合我们真正的训练目标。我们希望生成的并非“与数据集相近的摘要”,而是一篇“好的摘要”――它应该精简、准确、概括性强、语言连贯流畅。用BLUE和ROUGE显然评测不了这些维度。

此外,过度模仿数据集内容还存在很多更深层的隐患。大量数据集,比如本工作采用的TL;DR数据集,都是直接从网络上爬取下来的。其内容是由成千上万、形形色色的互联网用户上传。其质量良莠不齐是一方面,更严重的是其中不乏一些危险暴力、真实性存疑的言论。这些互联网的暗面是我们不希望AI学到的。

用人类反馈指导AI的学习过程,不仅仅是用更精准的评测方式提高性能、刷新SOTA,也是在AI safety方面的一点推进。

论文题目:《Learning to Summarize with Human Feedback》

论文链接:https://arxiv.org/pdf/2009.01325.pdf

开源代码:https://github.com/openai/summarize-from-feedback

Arxiv访问慢的小伙伴也可以在 【夕小瑶的卖萌屋】订阅号后台回复关键词 【0914】 下载论文PDF~

整体流程可归纳为以下4步,后文将依次展开:

  1. 训练初始摘要模型Supervised Baseline

  2. 构建人类反馈数据集,不断人工比较两篇摘要优劣

  3. 用上述“人类反馈数据集”训练一个Reward Model,模仿人类偏好对摘要打分

  4. 用强化学习的方法继续训练Supervised Baseline,每一步的奖励由上述Reward Model给出,从而学习符合人类偏好的摘要生成策略

下图展示了2-4步的实现细节:

模型采用GPT-3风格的Transformer decoder。作者总共训了两个不同size的baseline。当然参数规模还没有真的GPT-3那么丧心病狂――也就一个13亿,一个67亿吧:)(Bert-large的4倍和20倍)。

训练方法,pretrain+fine-tune两步走。先在大量语料上进行预训练得到Pretrained Model。然后再用摘要数据集TL;DR中质量较高的部分,对模型进行fine-tune,得到Supervised Baseline。为保证baseline足够强大,可堪一战,作者用baseline跑了一下CNN/DM――一个baseline在预训练和fine-tune时都没见过的另一个摘要数据集。其性能表现可超越2019年5月时的SOTA。

构建过程就是不断给标注者同一文章的2篇摘要,要求选出其较为偏好的的一篇。最终数据集总共包含6.48w次比较。

值得一提的是作者团队为保证标注质量做出的努力。大概翻译一下作者原话:

“在之前的工作中,我们发现标注者经常给我们觉得很一般的文章也打高分。所以这次,我们斥巨资保证标注质量。为提高与标注者的交流效率,我们拒绝采用第三方标注平台,直接雇佣80名标注者到身边......对标注者每小时的标注量不做要求(如果标得太快会在一开始就被辞掉)。我们也不按标注数目发工资,而是按工作时长,15刀/时。”

光靠人工标注的6.48w条比较数据,仍然还不足以调教一个规模庞大的摘要模型。于是,作者以人类标注数据为基础,训练了一个Reward Model,模仿人类喜好对摘要进行打分。

模型结构,就是第1步中Supervised Baseline上再叠一个线性层。训练的时候,给标注者已经比较过的摘要,摘要,让Reward Model分别打分,?。假设标注结果是好,则损失函数为:

万事俱备后,作者用强化学习的方法继续训练Supervised Baseline,以符合人类偏好为目标调整生成策略。仔细读paper细节的话,会发现每一步的奖励其实并不只Reward Model的打分,而是由两部分构成的:

(向右滑动查看完整公式)

即Reward Model的给分。后面又减去了一项,是初始Super【【微信】】与当前模型的相对熵。也就是说,既希望新的模型能够在Reward Model这里得高分,又不允许它离初始模型偏离得太远。因为相应实验表明(如下图所示),当模型与初始状态相对熵变大的时候,Reward Model可能会对模型打高分(图中虚线),但实际人类喜好程度(图中实线)反而会不断降低。

这样的差异说明Reward Model对于人类偏好的模仿能力仍然十分有限。论文附录部分也列举了一些模型overfit后的结果,如下图所示。可以看到,当模型overfit后,似乎可以学习到某种固定的pattern骗取Reward Model的高分。

论文实验部分持续弥漫金钱的味道。所有实验都采用人工评测的方式,以保证最大程度的准确性。

1. TL;DR实验结果: TL;DR是模型做fine-tune的数据集,作者在其测试集上进行评测,实验结果见下图。共比较了4种摘要生成结果:

  • 数据集中人工写的reference summaries

  • 用人类反馈强化学习过的最终模型

  • 未经强化学习的Supervised Baseline

  • 未在摘要任务上fine-tune过的预训练模型

左图是多维度的人工评测打分(co【【微信】】,coherence,accuracy)。右图中,纵轴是人类偏好比例,横轴为模型规模。结论:经人类反馈强化学习后,全方位超越人类表现。

2.迁移实验结果: 尽管模型从未学习过新闻领域的摘要生成,模型依然在新闻类数据集CNN/DM上取得了很好的表现。如下图所示,在模型规模相等的情况下,TL;DR上强化学习后的模型(Human feedback transfer)与直接在CNN/DM上fine-tune过的模型(Super【【微信】】/DM)相比,评测结果相差无几。

尽管提升效果显著,本工作还是存在很多局限性。一个是钱的问题。此外,直接用人类反馈指导模型学习的可操作性、可普适性仍然存疑。我们也看到,在进行强化学习时的奖励并非直接由reward model给出,还需要加一个相对熵限制项。并且从实验中的分析结果来看,模型训练似乎非常容易过拟合。可以想见整个调参过程应该是非常复杂的。

其实,用人类的行为模式指导AI的思想已不是首次出现。例如OpenAI去年就有用人类偏好精调GPT-2的工作。又如发表于今年ACL上的一篇工作,比较了人类与RNN的attention模式差异。在此之前,也有用人类偏好指导语*析和翻译任务的工作。当然,高质量、大规模地标注人类反馈需要雄厚的财力。也是因为这个原因,其他工作多不能做到OpenAI的规模。

无论如何,人肉炼丹所得到的提升效果肉眼可见。相关工作也已在今年工作中陆续涌现。是否会成为NLP界的下一个热点,也尚未可知。

文末福利后台回复关键词【入群 加入卖萌屋NLP/IR/Rec与求职讨论群有顶会审稿人、大厂研究员、知乎大V和妹纸等你来撩哦~