MindSpore21天实战营手记(五):基于MindSpore Wide & Deep实现CTR预估实战

两年前学华为大数据,听过塔吉特向一位高中女生推荐促销婴儿用品,引起女生父亲的投诉,后来证实女生怀了小BB的故事。女生当然不会把这件事告诉别塔吉特,那塔吉特是怎么知道的呢?原来塔吉特的Apiroi算法挖掘了顾客的购物清单,推测这个女生怀了小BB,进而无脑向她推送跟小BB有关的商品信息。当时我还能听得懂Apriori是怎么干活的。Wide&Deep也是推荐算法,可是有深度,我理解不了。不过咱上的是实战课,想那么多理论的东西干嘛。撸起袖子把代码跑起来就好了。

课程回看:https://www.bilibili.com/video/BV1CV411y7oj

作业过程

作业要求在本地(需要GPU)完成体验作业和进阶作业:

  • 体验作业:利用老师提供的已转换好的数据集(criteo10%抽样数据,分离成训练和校验集)和训练模型,完成Wide&Deep的评估过程

  • 进阶作业:利用老师提供的数据集(criteo1%抽样数据)1%的抽样数据,完成Wide&Deep的数据处理(从mini_domo.txt到train\*.mindrecord\*和test\*.mindrecord*文件;mindrecord文件会有多个)、训练、评估完整过程

作业.png

战坑记

终于有作业要求在本地完成,而且还要用GPU,我千辛万苦拼凑出来的“金字塔”和那个闲得就快长毛的GTX1050Ti可算是有机会用一下了,感觉Helloway老师才真是我的知己。启动Docker,按作业指南下载脚本、数据,安装了Pandas,Scikit-Learn,庄严地在中Terminal中粘贴了体验作业的命令,然后……就没有然后了。

报错.png

GTX1050Ti 傲娇地拒绝了我分配给它的作业,还抱怨一个需要computing capacity >=7才能干的活,凭什么让它一个computing capacity=6的设备做?我找Helloway老师评理,不过看似老师也对这种不干活但又挑不出什么毛病的小伙伴也没办法。老师告诉我说不带它玩了,让我等一下会发出基于ModelArts的作业指南。

确认问题.png

这个课叫什么来的?对,叫21天实战课。这不就是实战的机会吗?我理论不行,我可以说跟实战无关;我连代码都跑不起来,我还好意思说上过实战课吗?我决定先自己试一试,从GPU的坑里爬出来,跳到ModelArts的坑里试一试。

我先想了一下脚本运行过程。无论是在Terminal还是ModelArts控制台中,本质上都是python XXX.py --a --b这种命令格式,那我把脚本、数据上传到OBS,然后再到ModelArts控制台指定脚本、数据位置,应该就OK了。于是一番倒腾猛如虎,一看结果把血吐。敢情ModelArts脾气不比GPU小啊。

sklearn出错.png

第一条异常跟Scikit-Learn有关,imp这个模块要被开除。这是人家的事,我估计ModelArts也管不着。而且不是Error,重点应该不是它。继续看日志。

文件无权访问.png

第二条是ValueError: The file /wide_deep/data/ten_percent/mindrecord/test_input_part.mindrecord0 does not exist or permission denied!

这一条错误就有意思了。训练数据找不到!可我明明指定位置了嘛。我要不要找老师去?大半夜的不好意思。要不要就此放弃呢?放弃了对不起课程的副标题——从“小白”到“大牛”。一点小困难就止步,有什么资格说“牛”?为了天边的“牛”,硬着头皮接茬干。

问题出在哪呢?再往回翻翻日志,看到控制台启动脚本的命令。

控制台脚本.png

对比作业指南中的Terminal和ModelArts控制台的命令形式,感觉到了某种神秘的气氛有木有?

datapath.png

那么我是不是可以这样理解:

  • ModelArts控制台收集用户配置参数后,传到后台

  • 后台运行的监控进程接收参数,启动OBS中的在线脚本;脚本会接收控制台“训练集数据”、“运行参数”,先转换“--a --b”的形式,再运行脚本

  • 老师提供的是离线脚本,是基于本地环境运行的,所以脚本中不包括参数转换的代码。

那我就有两个选择了:

  1. 找到后台运行参数的形式,写到离线代码里去,并且在ModelArts上面运行离线脚本。

  2. 照猫画虎,把离线脚本改成在线脚本

回想一下,有哪个课程讲了在线环境中运行效果评估?没错,就是BERT!兴致勃勃翻开代码,感觉全身像被电击——此中转换难度不是心怀大牛的小白可以想象的。

那么现在我只有一个选择了,把后台参数硬编码到离线脚本里去。问题是:去哪里设置参数呢?找老师吗?大半夜的不好意思,而且我不一定能说清楚我的问题,而且老师看不到我的环境也不一定能知道我的文件被我搞到哪里去了,而且后台的东西老师也不一定愿意告诉我,而且……。算了,想“炼丹”靠自研吧。话说,有问题,找代码。只能从代码开始了。

  • 打开eval.py,翻到最后。main()函数逻辑好像不太难理解——先配置环境,再运行test_()函数。

main.png

  • test_eval应该是执行评估过程的代码了,参数应该是在widedeep_config这个实例里头了。Ctrl+左键,打开的是src/config.py中的WideDeepConfig()类。

WideDeepConfig.png

  • 看到device_target = “GPU”,熟悉的感觉真好,哈哈。往下面看,data_path,outout_path,ckpt_path,应该就是那几个参数。改它!改它!改它!问题是:我怎么知道我怎么知道后台数据和模型的存储位置?离线脚本里没有线索,还得回去在日志里找。

_location.png

  •  /usr/bin/python:这个应该是Linux系统指定调用python解释器的命令了。

  • /home/w/home/work/user-job-dir/wide_deep/eval.py:这是eval.py脚本的位置

那么,我是不是顺着/home/w/home/work/user-job-dir/wide_deep目录结构,把data_path,ckpt_path,output_path像这样改写就OK了呢?

setpaths.png

事实证明,结果是适量舒适的,因为日志换了一个错:ValueError: Please input the correct checkpoint file name.

这就神奇了。我都按照统一的格式修改的目录,为什么data_path行,ckpt_path就不行呢?在控制台上一顿折腾:

  • checkpoint_path=s3://mlfan-wd/wide_deep/wide_deep.ckpt,失败。

  • 提升一下wide_deep.ckpt的待遇,给它建个单独的目录:checkpoint_path=s3://mlfan-wd/wide_deep/checkpoints/wide_deep.ckpt,失败

  • data_url前面都不写S3,ckpt_path为什么要写,改:checkpoint_path=/mlfan-wd/wide_deep/checkpoints/wide_deep.ckpt,失败

  • 等一下,脚本里有checkpoint_path参数吗?好像没有。改:ckpt_path=/mlfan-wd/wide_deep/checkpoints/wide_deep.ckpt,依然失败。

到这里我已经黔驴技穷了,这么乱改一气看不到前途,因为我不知道华神们是怎么在后台转换这些字符串的。靠猜吗?要在一个多大的空间里猜呢?决定再努力一次,不成功就放弃,甘心当小白。小白也有小白的幸福。

把前几次失败的日志对比,好像品出来一点味:

日志对比.png

可以看出,ckpt_path这个参数上没有做任何转换!!!后台的脚本把这个参数生猛地吞下去了。要是这样的话,那我在ModelArts控制台把ckpt文件的路径写死总可以了吧?

path-hardcode.png

事实证明,结果极度舒适!

success.png

写在最后

虽然写着好像挺有条理似的,其实前前后后在ModelArts上提交了13个版本,每次都差不多同样的过程:删ModelArts上的config.py文件件,本地修改config.py文件,上传,修改控制台参数,提交,等待,查日志。不过看到结果了,心里有一种叫甜的感觉。但是想到还有进阶作业等着我,头就大三圈。

好在Helloway老师及时地发出了ModelArts版本的作业指南,一切都变得轻松了。先做体验作业,验证一下自己的结果还能不能舒适。结果证明,还是可以接着极度舒适的。要说心里的感觉,就在甜上加个平方好了。

前课笔记:

MindSpore21天实战营手记(一):基于MindSpore Lite开发端侧AI图像分类应用

MindSpore21天实战营手记(二) :基于Bert进行中文新闻分类

MindSpore21天实战营手记(三) :基于ResNet50的毒蘑菇识别模型

MindSpore21天实战营手记(四):基于YOLOV3-DarkNet50的篮球检测模型

转自文章链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=86431

感谢作者的努力与分享,侵权立删!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值