MindSpore21天实战营(5)使用PyCharm Kit进行基于Wide&Deep实现CTR预估实战

张辉 发表于 2020/11/09 13:06:24 2020/11/09
【摘要】 本文介绍了如何使用PyCharm的ModelArts ToolsKit完成Wide&Deep的CTR预估的模型训练和推理任务。

本次MindSpore实战营就5个Part:

今天终于迎来了张小白的最后1Part 。

实验的内容是跑完CTR的体验和进阶任务。

这里先唠嗑两句CTR。(这些话应该是听了集美貌与智慧于一身的何芦微老师的直播 https://www.bilibili.com/video/BV1CV411y7oj/  )

  1. 深度学习的应用包含:自动驾驶、物体识别、人脸识别、语音识别、拍照翻译和智能推荐

  2. CTR——Click-Trough-Rate:点击通过率。点击某网站的次数/搜索出所有网站的总次数。也就是,给你做推荐时,你有多大的概率进入这个网站。

  3. CTR预估:通过深度学习实现CTR。

  4. CTR预估应用:微博的信息流排序;豆瓣的基于看过影视剧类型的推荐;淘宝京东基于点击和历史购物的推荐;广告点击率的预估。

  5. 推荐算法的流程:

    image.png

    粗排:Retrieval,选择前100个应用,可能有经验和人工的因素

    精排:Ranking,使用Wide&Deep模型做精度更高的排序

    Log:然后不停的微调。

  6. Wide&Deep模型组成

    image.png

好了,其他的技术环节暂时不多说了,有兴趣的人可以去听回放。。

这次的实验要求是需要到 https://github.com/mindspore-ai/mindspore-21-days-tutorials/tree/main/chapter5 代码仓去取。不过因为众所周知的原因,github不是你想连就能连的:

虽然你也能慢速地将其下载下来:(每秒30K的速度)

image.png

有时候配图就会挂了。。

image.png

但是总要有解决方案的吧。。

目前一个好的办法是:你在gitee.com上导入github的代码仓。

image.png

你需要到github找到相关的代码仓的位置:

image.png

将https的地址复制下来:

https://github.com/mindspore-ai/mindspore-21-days-tutorials.git

然后在gitee导入仓库的界面导入就可以了。

image.png


好了,下面的文档都在gitee上看,也不会有速度慢,或者图挂掉的问题了。。

下面就来瞧瞧最后一课到底要干嘛:

具体应该是打开 https://github.com/mindspore-ai/mindspore-21-days-tutorials/blob/main/chapter5/wide_deep_ascend/operation.md 这个链接,不过既然我已经fork到gitee了,就打开对应的gitee链接:

https://gitee.com/zhanghui_china/mindspore-21-days-tutorials/tree/main/chapter5 

image.png

作业给了2种实验环境,一个是基于ascend的,一个是基于GPU的。

显然,ascend环境应该可以从 ModelArts建Notebook就可以了。GPU的环境也能也可以。但是ModelArts昇腾上肯定有强势的地方。

所以张小白果断选择了 wide_deep_ascend 这种方式,链接如下:https://gitee.com/zhanghui_china/mindspore-21-days-tutorials/blob/main/chapter5/wide_deep_ascend/operation.md

image.png 

我们打开 目录下的 operation.md文件

可以看到以下内容:

image.png

image.png

当然,以上先抛去了 进阶作业部分。先看看能不能搞定体验作业。

张小白按照上述方式,新建了个Notebook:

image.png

下一步:

image.png

确认后进入Notebook。

image.png

点击New-Teminal进入终端。。

按operation.md的要求操作了一番,

image.png

image.png

。。。(以上省略一万字。。)


结果发现根本不对头,怎么还有docker run gpu环境的内容?

张小白就问了下群里的 芦苇老师,得到的答复是:需要看最新的pdf。

image.png

image.png

赶紧去下了最新的pdf(亲爱的老师,我get到了。。。)

原来这些作业是:先把 相关资料全下到本地,然后放上obs,建立作业去run 体验和进阶作业,其实跟前几天是一样的方式。

这就好办了。。

OBS这里还有个小插曲,早上收到了一条短信:

image.png

原来我的OBS套餐的使用量额度已经用完了。再用就要按量收费了。。。张小白想想这怎么可以?多AZ的OBS服务用完了,那么我这次实验用单AZ的贝。。。


张小白花了27元买了 单az 3年的套餐。(9元包年,虽然没有代金券可用,但是也算是对华为的死忠粉了吧。。)

image.png

然后使用obs browser+ 新建 mindspore-21day-singaz桶。

image.png

一、体验作业


下载 预训练模型 https://wide-deep-21.obs.cn-north-4.myhuaweicloud.com/wide_deep.ckpt 

下载体验作业的数据集(10%全量,mindrecord格式) https://wide-deep-21.obs.cn-north-4.myhuaweicloud.com/train_demo.tar.gz 

本地代码仓已经从github->gitee克隆号,并且下到了本地。

image.png


在 mindspore-21day-singaz 桶下新建 wind_deep目录,用以存放体验的相关文件。

其中:

ckpt目录,存前面的 wide_deep.ckpt预训练模型

image.png

data目录,下再建tran_demo,存放 tran_demo.tar.gz文件。

image.png

log目录。空。

output目录。空。

wide_deep_ascend目录,存放gitee clone的chapter5目录下的所有代码。

最后如下所示:

image.png

下面在ModelArts的训练管理-》训练作业中新建体验作业:

image.png



image.png

其中:

启动文件:/mindspore-21day-singleaz/wide-deep/wide_deep_ascend/eval.py

ckpt_url: s3://mindspore-21day-singleaz/wide-deep/ckpt/wide_deep.ckpt (这里错了。。。)

其他都按照上图所示输入。


点下一步确认后再点提交,开始推理训练。

居然运行失败了。

image.png

其实提示非常清楚:ckpt_path不是一个目录。说明我录入的参数ckpt_url写错了。仔细看了下 @Helloway 老师的手把手教的文档,ckpt_url应该是obs桶的一个路径。。

所以,将 ckpt_url改为 s3://mindspore-21day-singleaz/wide-deep/ckpt

再重新提交作业。

终于运行成功了。

查看日志:

image.png

这个就是老师想要的结果。赶紧上传吧。。

二、进阶作业

需要准备这个1%的数据 https://wide-deep-21.obs.cn-north-4.myhuaweicloud.com/mini_demo.txt 

将其传到obs 相应data的mini_demo目录下。

image.png

新建训练+验证作业。

image.png


image.png

其中:

代码目录:/mindspore-21day-singleaz/wide-deep/wide_deep_ascend/

启动文件:/mindspore-21day-singleaz/wide-deep/wide_deep_ascend/precess_train_eval.py

数据存储位置:/mindspore-21day-singleaz/wide-deep/data/mini_demo/

训练输出位置:/mindspore-21day-singleaz/wide-deep/output/

作业日志路径:/mindspore-21day-singleaz/wide-deep/log/

其他都默认。

下一步,确认后

image.png

提交,运行训练作业。2分35秒后训练成功。。。

image.png

OBS output生成了 widedeep_train-1_26.ckpt.

image.png

这次的进阶作业其实不难(当然是在老师写好了指南的情况下。。。)

三、PyCharm Kit的登场

有人说,张小白,你写了那么多是在耍我们是吧?请问你标题中的 ModelArts的PyCharm Kit 在哪里?

看官别急,如果张小白仅仅写了上面那一部分,那么张小白跟咸鱼也就没啥区别,因为昨天关于篮球比赛的YoloV3-DarkNet50 检测模型实践中写的也是类似的内容,而张小白总不能老是吃老本,得玩些新的东西。

打开ModelArts,屏幕往下拉,会发现有两个开发工具,PyCharm ToolKit和ModelArts SDK.

image.png

刚学了一点Python皮毛的 张小白,自然对PyCharm ToolKit有点感兴趣,先点击立即下载:

image.png

然后按照 了解详情页的指示,在PyCharm里面安装这个插件。

进入File-Settings-Plugins-小齿轮-Install Plugins from Disk

image.png

选择 下载的 Pycharm-ToolKit-2.1.zip ,PyCharm就会自动将 Huawei EI ModelArts的插件给你安装好了。

安装完之后,PyCharm的菜单下会出现 ModelArts的一系列菜单。

image.png

我们点击 Edit Credential

image.png

可以录入我们的AK、SK,实现PyCharm跟服务器端华为云ModeArts的绑定。

然后通过 Edit Traning job Configuration实现对训练作业的配置。

此时,其实只有一个好处,就是代码可以不上传到OBS运行了。而是可以选择本地的python脚本执行。但是训练数据集这些,还是放到OBS上面去,跟原来一样。

张小白就按照这样的想法去配置体验作业的 训练作业吧。。。

image.png

其中:

AI引擎,环境规格这些,跟在ModelArts里面的配置是一样的。

略有区别的是下面几个:

  • Boot File Path,就是“启动文件”,设置为 F:\learn\courses\mindspore-21-days-tutorials\chapter5\wide_deep_ascend\eval.py

  • Code Directory,就是“代码目录”,设置为 F:\learn\courses\mindspore-21-days-tutorials\chapter5\wide_deep_ascend

以上两个是张小白git clone的教程的代码仓下第五章的相关代码的目录和地址。

  • OBS Path:/mindspore-21day-singleaz/wide-deep/ckpt/  这个感觉填的不对,但是可能也没啥影响。(事实证明这个字段没啥用)

  • Data Path in OBS,训练集的地址:体验作业设置为 /mindspore-21day-singleaz/wide-deep/data/tran_demo/

  • Running Parameter,运行参数,将原来体验作业配置的三项拷贝过来,中间用分号做分割:

  • tran_url=/mindspore-21day-singleaz/wide-deep/output1;data_url=/mindspore-21day-singleaz/wide-deep/data/tran_demo/;ckpt_url=s3://mindspore-21day-singleaz/wide-deep/ckpt1

(其实只写最后一个也能成功:ckpt_url=s3://mindspore-21day-singleaz/wide-deep/ckpt)

image.png

配置完毕后,点击 Apply and Run可以直接运行,也可以点击Apply,然后在ModelArts菜单再点击 Run Traning Job运行这个训练作业。

点击运行后,PyCharm的下面两个跟踪狂(框)会显示以下内容:

image.png

等着作业启动,右边的job日志会刷刷的刷(这个看起来比在ModelArts里面需要反复的做页面刷新看日志好多了。。)

image.png

不一会儿,训练结束了。

我们看右边的作业日志,往上翻一点:

image.png

这也是老师要的结果。。你Get到了吗?


补充几句,这个训练作业,在ModelArts控制台一样是能看到的。。

image.png

日志:

image.png

那我们再进一步做进阶作业吧。。。

打开Edit Traning Job Configurations菜单,点击Job Name右边的 加号新建一个训练作业,如下所示:

image.png


  • Boot File Path选为:F:\learn\courses\mindspore-21-days-tutorials\chapter5\wide_deep_ascend\train_and_eval.py

其实Code Directory会自动弹出为:F:\learn\courses\mindspore-21-days-tutorials\chapter5\wide_deep_ascend

  • OBS Path:/mindspore-21day-singleaz/wide-deep/

  • Data Path in OBS:选择训练作业的数据集位置:/mindspore-21day-singleaz/wide-deep/data/mini_demo/

  • Running Parameters:tran_url=/mindspore-21day-singleaz/wide-deep/output1;data_url=/mindspore-21day-singleaz/wide-deep/data/mini_demo/

Event Log开始记录作业:

image.png

Job-pycharm-wide-deep-fu.0开始记录本作业的日志:

image.png

耐心等待日志记录完毕。。。

image.png

貌似完成了,可是。。。

image.png

好像出错了啊。。啥结果也没出来。

到ModelArts里面去看下日志呢?

image.png

真的不行。。看来这个真的问老师了。。

@Helloway 老师说,我的代码仓的代码好像有点旧,比如requirement.txt已经删除了,我这里还有。。。

确实,不听老师的话,是要踩坑的。

赶紧先把gitee的代码跟 github做个强制同步。

image.png

这回目录下好像只有几个文件了。。

image.png

换个目录重新拉文件吧(其实也可以做git update的吧,还是新下载吧,省得烦了。。。)

image.png

然后重新配置PyCharm的训练作业:这回把目录都换成新的吧。。

PyCharm重新打开工程:

image.png

配置训练作业:

image.png

具体配置如下:

Boot File Path:F:\learn\mindspore-21-days-tutorials\chapter5\wide_deep_ascend\train_and_eval.py (这个经过证明是错的

Code Directory:F:\learn\mindspore-21-days-tutorials\chapter5\wide_deep_ascend

OBS Path:/mindspore-21day-singleaz/wide-deep/

Data Path in OBS:/mindspore-21day-singleaz/wide-deep/data/mini_demo/

查看的日志:

image.png

好像是一样的问题。。

再把日志发上去问 芦苇老师。。。

老师明确告诉张小白:运行的脚本写错了。

应该用 process_train_eval.py , 小白不愧为小白,选了 tran_and_eval.py..... 

image.png

唉。就记得自己要做 训练和推理作业。有train训练和eval评估两个词就以为是对的。。哪里知道这还有组合关系。。。看来在AI不是那么智能的帮张小白选择python脚本之前,做对的事情还是要靠张小白自己。。。

改吧。。

image.png

Boot File Path F:\learn\mindspore-21-days-tutorials\chapter5\wide_deep_ascend\precess_train_eval.py

其他不动。重新Apply and Run。。

image.png

终于如老师所愿。。。


其中感谢 @Helloway 老师的多次耐心回答问题。找出BUG。其实通过PyCharm的ToolsKit插件本身体验是很简单的,但是由于张小白眼花,加上盲目的自信等因素,导致花了将近一上午才解决了这个问题(同时发了这个博文),教训是深刻的,老师的帮助是要感谢的。

最后还是看一下,PyCharm ToolKit和在ModelArts里面运行的区别吧。

首先,尽管在PyCharm 配置中没有配置具体的版本路径,但是其实 系统会将 本地的代码传到 OBS目录下 以 本地训练作业为名的目录下:

image.png

这个目录下的子目录由系统自动建立三个目录:code,log和output。

image.png

code下,系统会把本地的python代码传到这个目录下。

image.png

log下是训练作业的运行日志:

image.png

output下带版本号的目录 (如V0004),应该是多次执行训练作业后的输出,也就是训练好的ckpt文件。

image.png

其实这说明,PyCharm ToolKit,其实是在OBS上建了一个对应的目录,将运行作业所需的文件同步过去,然后执行。(只是目录名有些纠结。。)

所以,并不是张小白想象的,在本地执行Python。。。(甚至本地的Python环境包不全,估计也能跑,张小白就这样想着。。。。想着想着,就觉得可以把这篇博文发表了。)


再次感谢  美丽智慧的何卢微 老师的大力支持。没有您,就没有这篇踩坑出坑的文字。(看看这次能不能把老师的名字写对不。。)

(全文完,谢谢阅读)


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。