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

网友投稿 587 2022-05-30

本次MindSpore实战营就5个Part:

MindSpore21天实战营Part1实战笔记——使用MindSpore Lite实现移动端图像分类 https://bbs.huaweicloud.com/blogs/205515

MindSpore21天实战营Part2实战笔记——使用MindSpore和ModelArts实现Bert中文新闻分类 https://bbs.huaweicloud.com/forum/thread-86316-1-1.html

MindSpore21天实战营Part3实战笔记——使用MindSpore实现Resnet50毒蘑菇识别 https://bbs.huaweicloud.com/forum/thread-86319-1-1.html

MindSpore21天实战营Part4实战笔记——使用ModelArts实现YoloV3-DarkNet50篮球检测模型 https://bbs.huaweicloud.com/blogs/207008

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

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

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

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

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

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

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

推荐算法的流程:

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

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

Log:然后不停的微调。

Wide&Deep模型组成

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

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

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

有时候配图就会挂了。。

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

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

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

将https的地址复制下来:

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

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

好了,下面的文档都在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

作业给了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

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

可以看到以下内容:

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

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

下一步:

确认后进入Notebook。

点击New-Teminal进入终端。。

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

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

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

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

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

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

这就好办了。。

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

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

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

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

一、体验作业

下载 预训练模型 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克隆号,并且下到了本地。

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

其中:

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

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

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

log目录。空。

output目录。空。

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

最后如下所示:

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

其中:

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

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

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

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

居然运行失败了。

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

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

再重新提交作业。

终于运行成功了。

查看日志:

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

二、进阶作业

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

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

新建训练+验证作业。

其中:

代码目录:/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/

其他都默认。

下一步,确认后

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

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

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

三、PyCharm Kit的登场

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

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

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

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

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

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

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

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

我们点击 Edit Credential

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

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

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

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

其中:

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)

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

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

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

不一会儿,训练结束了。

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

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

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

日志:

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

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

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开始记录作业:

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

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

貌似完成了,可是。。。

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

到ModelArts里面去看下日志呢?

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

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

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

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

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

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

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

PyCharm重新打开工程:

配置训练作业:

具体配置如下:

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/

查看的日志:

好像是一样的问题。。

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

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

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

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

改吧。。

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

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

终于如老师所愿。。。

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

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

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

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

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

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

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

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

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

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

(全文完,谢谢阅读)

AI开发平台ModelArts EI企业智能 MindSpore Python 昇腾

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:PyPy:以最少的努力更快的 Python
下一篇:Spark 操作 Elasticsearch 性能优化
相关文章