MindSpore21天实战营(5)使用PyCharm Kit进行基于Wide&Deep实现CTR预估实战
本次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昇腾上肯定有强势的地方。
这种方式,链接如下:
我们打开 目录下的 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预训练模型
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环境包不全,估计也能跑,张小白就这样想着。。。。想着想着,就觉得可以把这篇博文发表了。)
再次感谢 美丽智慧的何卢微 老师的大力支持。没有您,就没有这篇踩坑出坑的文字。(看看这次能不能把老师的名字写对不。。)
(全文完,谢谢阅读)
- 点赞
- 收藏
- 关注作者
评论(0)