「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

华为专家亲述:如何转型搞 AI?(上)

2020 年 6 月 12 日

华为专家亲述:如何转型搞 AI?(上)

前言

参考塞缪尔.约翰逊(18 世纪英国文学评论家、诗人,著有《英语大辞典》、《莎士比亚集》)的思路,“当一个人厌倦了学习技术,那他肯定也厌倦了 IT 行业;因为只有持续学习,才会有 IT 行业带给你的一切,包括金钱”。这是 IT 行业的实际情况,没有哪个人可以靠吃老本长期生存,AI 技术更是如此。最近我在读《伦敦人》,书中讲述了 200 多位新老伦敦人对于伦敦这座城市的切身感受和故事,感觉应该就 AI 技术人才的成长写一篇,因此,有了本文。


非 AI 专业技术人员转型 AI 技术,或是作为一名学生学习 AI 技术,对每个有这样诉求和经历的人来说,可能都希望能够看到类似经历的人,给出自己的真实经历分享。


今天,我找了几位我的同事,包括我在内一共五位,我们都很有代表性,逐一介绍一下:


  • 麦克周:2004 年毕业于浙江大学,计算机专业硕士,15 岁开始学习编程,使用的是 Basic 语言,读书期间主要写 C 语言,2004 年毕业时写的是 JSP 代码(一种将 Java 语言嵌入在 HTML 代码中的编写方式),工作几年后转入分布式软件技术,再后来进入大数据技术领域,最近的 4 年时间从事 AI 平台产品研发工作。

  • Mr Qiu:算法相关专业硕士,工作五年时间。2013 年进入杭州电子科技大学学习人工智能和电子信息技术,硕士方式主要以嵌入式和图像算法为主,毕业后进入安防行业的大华公司,再到华为,一直从事计算机视觉、算法移植优化、训练框架优化、机器学习等工作。

  • Hannah:曼彻斯特大学电子电气工程本科,伦敦大学学院数据科学硕士,毕业后加入华为公司,已经工作两年。华为公司作为国内私有云的先驱厂商之一,在数据科学这一领域有很多沉淀。因此,工作期间有机会参与多维度的工作,从算法研究落地,到平台开发,再到 POC 项目开发、现场建模 PK 等,在短时间内加深了对数据科学这一学科的认知。

  • Doctor Zeng:国内某重点大学博士,2018 年华为 Special Offer。本科毕业工作五年之后回到学校,继续自己的硕博攻读。硕士期间开始协助导师做项目,接触 IT 行业的十余年时间,具备丰富的信息系统项目开发与管理经验、人工智能领域的项目实战经验,并作为实验室技术骨干参与若干国家级、省部级项目。博士期间的主要研究领域是 NLP、知识图谱,现担任华为某算法建模团队首席专家。

  • 帆哥:20 年 ICT 工作经验,4 年信号处理机开发,5 年企业数通产品研发,3 年操作系统架构设计,3 年大数据分析研究,5 年 AI 产品规划,目前是华为云 ModelArts 首席产品管理专家。


正文

麦克周

知识不能单从经验中得出,而只能从理智的发明和观察到的事实两者比较中得出。

–爱因斯坦


作为一位喜欢彻底搞清楚原理的软件工程师,我的每一次转型都在大量阅读和实际操作中完成。我给的建议是根据自己的实际情况,从全局性的到具体技术的书,一本本读,不要急。


我看的第一本书是尼克的《人工智能简史》,这本书几乎全面讲述人工智能的发展史,几乎覆盖人工智能学科的所有领域,包括人工智能的起源、自动定理证明、专家系统、神经网络、自然语言处理、遗传算法、深度学习、强化学习、超级智能、哲学问题和未来趋势等,当然,他不是一本动手教你编程的书,而是给你一个宏观印象,适合 AI 产品经理、CTO 阅读。


如果你觉得还需要进一步拓展自己对技术的全局性理解,我建议你可以读 Stephen Lucci 和 Danny Kopec 一起编写的《人工智能(第二版)》,这本书有点像高校的人工智能相关专业教材,堪称“人工智能的百科全书”,全书涵盖了人工智能简史、搜索方法、知情搜索、博弈中的搜索、人工智能中的逻辑、知识表示、产生式系统、专家系统、机器学习和神经网络、遗传算法、自然语言处理、自动规划、机器人技术、高级计算机博弈、人工智能的历史和未来等主题。


看了全局化的知识后,建议你可以根据自己的实际情况选择书籍,周志华的《机器学习》、Ian 等人合著的《深度学习》、Aston Zhang 等人合著的《动手学深度学习》、郑泽宇等人合著的《TensorFlow:实战 Google 深度学习框架(第 2 版)》、Vishnu Subramanian 的《PyTorch 深度学习》,这些书都是不错的,当然还有其他很多优秀的著作,这里不展开介绍,更多取决于你当前的状态,你是想快速动手训练模型,还是想了解清楚原理,因人情况不同而异。


除了系统化看书学习以外,我最希望的是尽快上手编码、训练模型,动手必须有 IDE 工具的支撑,我不太适应公有云的 IDE,但是又希望使用公有云的强大的计算资源,所以我希望能有工具,帮助完成本地 IDE 能够与公有云平台联动,我讲一个已经实现的案例–如何使用 PyCharm 与 ModelArts 公有云服务联动开发,快速且充分地利用云端 GPU 计算资源。


这里我连接的是某花厂公有云 AI 平台。我们实际上使用一个 PyCharm ToolKit 工具来帮助建立从本地 PyCharm IDE 到 ModelArts 的连接通道,本案例我使用 MXNet 实现手写数字图像识别应用的示例,在本地快速完成代码编写,发布到 ModelArts 公有云完成模型的训练和模型生成,生成的模型可以进一步快速进行部署(本文没有覆盖该步骤)。安装 ToolKit 前需要先安装 2019.2 版本(目前 ToolKit 仅适配该版本)的 PyCharm,下载地址是:https://download.jetbrains.com/python/PyCharm-professional-2019.2.exe?_ga=2.11170941.815358500.1587189937-686177363.1586569505


需要注意,如果已经安装了高版本的 PyCharm,需要首先卸载(自动)已安装的 PyCharm:



下载一个工具 PyCharm-ToolKit-PC-2019.2-HEC-1.3.0.zip,连接本地 IDE 与云之间的链路:https://www.jetbrains.com/PyCharm/download/other.html


接着回到 PyCharm IDE,打开 Settings:



找到 Plugins,选择一个插件:



重启后看到如下界面:



然后我们需要去华为云申明 OBS 的秘钥:



短信验证码注册成功后,请务必把 csv 文件保存到本机。回到 PyCharm IDE:



注意,需要你重新点击 edit credential 按钮,退出后就能看到打钩了。



这样我们就完成了 PyCharm IDE 与 ModelArts 的对接工作,进入下一步,实际训练一个模型。首先,下载手写字的数据集,下载链接如下:https://modelarts-cnnorth1-market-dataset.obs.cn-north-1.myhuaweicloud.com/dataset-market/Mnist-Data-Set/archiver/Mnist-Data-Set.zip,登录华为云上传 OBS:



创建完毕文件夹后,接着在 PyCharm 打开工程,填写参数,可以参考 ModelArts 训练模型时填写的参数:



点击“Run Training Job”,右下角是从公有云传回到 PyCharm 的训练日志信息:



训练完成后,训练模型保存在公有云的 OBS 里,你可以自己选择下载或是在云上做推理。


如果有这样的一堆工具,是我们这些实际写代码的人的福音。


Mr Qiu

“某利郡后;颇与郡人相安;日知来四处无虞;早收中熟;觉风雨如期;晚稻亦可望;惟是力绵求牧;来日方长。”

–宋·文天祥《与洪度瑞明云岩书》


在介绍如何转型进入 AI 领域之前,先介绍下个人的经历。从接触 AI 到工作至今大概 7 年,我把它分为 3 段:(1)在校学习期;(2)实习转型期;(3)工作成长期。在校期间学的比较广,主要方向在人工智能、高频电子电路、传统图像算法、嵌入式系统等,这个阶段通过以赛促学方式,取得了一些不错的比赛成绩;实习期间有幸参与到某重点项目的“以图搜图”模块,积累了大量的图像、人工智能方面的实战经验;毕业参加工作后,主要围绕计算机视觉、算法移植优化,深度学习框架优化,机器学习等进入研究和实践,有了一定的全栈 AI 经验。偶有感慨,虽然资质平平,但好在目标明确,持续奋斗,也遇到很多值得感谢的人,才有机会在这里介绍下经验。


2012 年,一年一度的 ImageNet 图像识别比赛,CNN 网络 AlexNet 以碾压的分类性能超过第二名(SVM 方法),从此深度学习开始吸引研究者的注意。但真正吸引工业界去大规模投入深度学习,大概到了 2015 年到 2016 年,这个时候,贾扬清在博士期间开源了深度学习框架 Caffe,谷歌开源第一版的人工智能引擎 TensorFlow,Caffe 曾一度以其优秀的代码架构,便捷的开发接口等优点受到广大研究者和工程师的推崇。早期做 AI 开发,很多工具都不完善,需要造轮子,这里的轮子主要包括离线训练时需要开发图像标注工具、需要修改深度学习框架实现相关算子的前向和后向计算、实现卷积中间特征可视化来调优模型等,在线部署时需要自己实现算子的 FP16 和 int8 计算,需要自己写 CUDA 代码等。


现在,进入 AI 领域的开发者不再需要做这些轮子,真的很幸福。


图像标注工具 LabelImg 等已开源,可以直接拿过来使用;TensorFlow 迭代到更加利于开发者使用,提供了很多优秀的示例,可视化工具和推理部署工具等;随着 PyTorch 的逐渐崛起,已经可以与 TensorFlow 评分秋色,开发者有了更多的选择;英伟达推出了基于 GPU 的推理加速工具 TensorRT 可以免费使用,华为也推出了基于自研芯片达芬奇的推理加速和框架 MindSpore,以更高密度的算力丰富开发者的选择。


随着巨头公司全力投入 AI,AI 的工具也越来越完善,开发者可以将精力集中在模型开发以及业务的实现上,这是一个 AI 的好时代,也是 AI 开发者的好时代,我想现在开始转型 AI 正逢其时。


再回头看看这些年的 AI 发展历程和踩过的坑,以个人的角度提炼出传统软件开发转型到 AI 开发工程的方法,希望对大家有帮助。暂且把这些总结为 3 个部分,分别为(1)动手跑起来、(2)原理掌握起来、(3)推理部署起来。


  1. 动手跑起来

  2. 这个阶段就是通过现有开源的优秀项目进行学习,这里我推荐 darknet YOLOv3,项目地址https://github.com/pjreddie/darknet。该项目框架基于 C 语言实现,框架清晰易于调试。初学者在下载到项目代码后首先要将该项目跑起来,通过跟踪数据在整个框架的流动大致掌握 AI 是怎么工作的,可以解决什么样的问题。同时在跑通搭建环境的过程中,可以快速掌握 GPU 跟深度学习框架是怎么结合起来工作的、深度学习框架在运行过程中需要有什么依赖。

  3. 原理掌握起来

  4. 作为优秀和经典的端到端检测算法,首先推荐以 YOLO 进行学习,从推出至今已迭代到第四版本。可以从第一版本 YOLOv1 开始进入,再到第四版本 YOLOv4,掌握 YOLO 是如何演化的,分别作了哪些改进,改进为什么会起到性能提升的效果。网上已有大量优秀的博客,开发者可以自行去搜索阅读。结合动手跑起来阶段的代码调试,相信会进步的更快。研究完成 YOLO 演化过程后,有兴趣可以再去研究下 R-CNN 系列的检测算法,R-CNN 系列算法区别于 YOLO 是召回率高、准确率高,但是耗时,所以综合考虑工业界一般用的更多还是 YOLO。

  5. 推理部署起来

  6. 推理部署就是将深度学习框架训练好的模型部署到 PC 或者端测设备进行推理,解决实际的业务问题。这个过程主要包括模型性能调优,GPU 或者 D 芯片的适配,业务逻辑的实现。对于模型性能调优,主要是将模型推理原有的 FP32 量化成 FP16 或者 int8,从而实现推理加速,实现实时推理。这里推荐英伟达的 TensorRT 和华为的 D 芯片加速模块,它们会对模型做更高阶的优化,除了量化,还会有模型网络层之间的算子融合、kennel 优化等,具体资料可以到相应的官网去搜索。模型优化完成后,通过相应的推理引擎和业务逻辑实现去完成模型的在线推理,完成真正的工业化,解决实际问题,这也是 AI 真正为社会产生价值的部分。


通过这三个部分的学习,日积月累,相信你也会慢慢成为 AI 领域的资深算法工程师。


Hannah

既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。

——康德



大家好,在本文的五人组里,我是一个职场小白。作为一个没啥社会经历的小白,我的大部分人生是在学校度过的,我这边就主要介绍我上学的经历吧。


本科的时候,我选择了电子电气工程这个专业。当时对于专业和工作没有什么大的概念,只是觉得理科生就该选一个“带电”的专业,我就从长长的专业列表里选了这个最多“电”的专业,然后背着我的小书包,开开心心到了曼彻斯特开始我的大学生涯。


开学后,果然和我想象的不一样,这种工科类的专业对学生的动手实验能力要求很高,我在第一次上实验课,看到一堆的实验器材的时候就懵了。当时场景对我来说是挺可怕的,同组印度小哥听了实验老师给的要求后就咔咔一顿操作,我在旁边愣住了,连把他的操作录下来后面自己回去学习这么重要的事情都忘了。在他得出实验结果后,我才小心翼翼地求教这些操作是怎么一回事。小哥哥是热心肠,用快速的印度口音英语给我解释了一遍。但是我学的英语听力,只听过英音和美音,对于印式英语实在是陌生,我只能厚脸皮让小哥再说一次。他在第三次的时候,终于失去了耐心,指着教材的一段让我读。我这才意识到,他一直都在说这段话,只是我没听懂,包括他指着读的那一次。于是,第一节实验课我是在查各种仪器名称、和同组印度小哥的高速咖喱英语解释的过程中,度过的。感恩团队没有放弃我,让我顺利度过我的大一。


到本科选择毕设方向的时候,我灵机一动,选了 DSP(数字信号处理)相关的一个降噪耳机的项目。用下面的图来解释下原理:



一般主动降噪耳机内部会有一个小的麦克风用来采集外界的声音,通过计算,可以生成一个完全相反的音波,然后和外界的噪音叠加,使得噪音消减。


整个项目只是按照老师的教材和给的参考书上面的操作,实现了一个 FIR-LMS 算法的滤波器。算法虽然简单,但是实现效果还蛮好的。我额外做了一套麦克风的小硬件用来演示成果,在麦克风旁边用手机播放白噪,同时说话,最后从音响出来的声音是有部分降低噪音的效果的。


在做这个项目的时候最大的感触就是,这种算法不仅是可以在科研界获得一些成果,更多的是,在应用到生活中的时候,可以给我们这些普通人很多的便利。


当时很中二的我就会想,如何能接触到更多的这种科技,甚至于参与这种科技的落地。这个时候,一个动画片告诉了我答案。《超能陆战队》里的高级人工智能机器人大白,他是一个近乎全能的家庭医生。这个是 AI 的力量,在当时几个研究生的 offer 里,最终选择了数据科学作为我的研究生方向。


研究生阶段起步并不轻松,从电子电气的方向转到数据科学这个学科并不是非常的顺利。数据科学这个专业是统计系和计算机科学系合作办的,也就是说,这个专业对于统计学和计算机科学的要求是比较高的。当时老师也列出了长长的一串参考书目,印象深刻的是 PRML(《模式识别与机器学习》)和 BRML(《贝叶斯推理和机器学习》)。大家有兴趣也可以去看看,国内也有很好的书籍,推荐李航《统计学习方法》和周志华的《机器学习》。



这个专业依旧也是非常重视我们的实际建模的技能,几乎所有的课程都有 30%以上的分数是需要我们去建模。其中有一门是应用机器学习,这门课要求我们在 Kaggle 上参加比赛,并用我们的名次来给我们打实验分。一个月时间内,我们组参加了三个项目,其中有一个我们拿到了前 4%的成绩。Kaggle 上面的项目很适合初学者练手,在学习了一堆理论知识后,初学者很多时候会对这一堆数学公式很陌生,不知道他们的实际效果。在 Kaggle 上的比赛给了初学者一个接触真实数据并用来建模的机会,参加这些比赛,还能根据自己的结果了解当前学习的模型在解决真实问题的时候,能否在排名中靠前,是否是真的比较好的解决方案。这让我在短时间内,对我在课堂上学习到的理论有了更深一层的认识。即使我们对于数据的实际含义并不明晰,即使数据的含义是经过加密处理的,但是还是可以使用一些机器学习技巧建模,对结果进行预测。Kaggle 里的 Titanic 这个项目,也是很多老师选择给学生进行数据分析入门和机器学习入门首选项目,有兴趣的人可以去实际体验一下。



学术界和工业界对模型对要求和应用是不一样的,为了更加了解实际的建模过程,我在毕设的时候,选择了学校和公司合作的项目。毕设项目是我第一个数据科学方面的实习,为华纳音乐公司做一个简单的相似歌手推荐和一份歌手在英国巡演的最佳城市路线图。在这个项目中,我接触了真实的客户数据,并和公司合作,尝试在数据中挖掘更多的关联。同时我也在挖掘更多的可能,在 Kaggle 上参加了另一个 NLP 类的比赛,判断两个短文本的相似度。这些项目结束的时候,我的研究生生涯也结束了。


回国后,我休息了一段时间就加入了华为公司。在华为公司,我这边第一个大数据相关的项目是 PyTorch 大规模加速训练,类似于华为云上面的 MoXing,但这个是基于 PyTorch 的一个优化。在这个项目中,我有机会接触到深度学习计算中较为底层的一些概念,并对 GPU 之间对通信有了了解。随后,为了给平台上增添更多的模型,我有机会更深一层去了解模型的架构,复原了当时很流行的 MobileNet 的效果。接着学习并在我们的产品上成功嵌入了 R-CNN 系列的目标检测算法。


在这一段深度学习的经历后,我又投入了我们产品的机器学习的平台和基础算法实现部分。我在华为云嵌入了 LightGBM 算法,并对我们机器学习平台进行了一些优化的工作。


接着,我主导了某国家级单位的算法模型 POC 项目和国内某大行的信用卡中心算法联创项目。再次接触到真实到数据,并针对数据进行建模的工作。这两个项目都是风险控制类的项目,在真实的数据中建模真的十分有趣。每一次使用不同行业的数据进行建模,都像是对另一个行业有了全新的认知。在这期间,我还有机会站在国外的论坛上,用英文给 VIP 客户介绍一些机器学习的科普知识。


在我短短两年的工作中,我尝试了专业范围内所有的工作。我现在还是觉得我的专业很棒,他帮我打开了新的世界。


作者:周明耀,九三学社社员,2004 年毕业于浙江大学,工学硕士。现任华为云 AI 产品研发总监,著有《大话 Java 性能优化》、《深入理解 JVM&G1 GC》、《技术领导力-如何带领一支软件研发团队》、《程序员炼成记》等。职业生涯从软件工程师起步,后转为分布式技术工程师、大数据技术工程师,2016 年开始接触 AI 技术。


2020 年 6 月 12 日 20:28826

评论

发布
暂无评论
发现更多内容

软件测试功能/数据库/linux/接口/自动化/测试开发面试真题解析

程序员阿沐

程序员 面试 软件测试 经验分享 测试工程师

【架构设计模块六】:拆分电商系统为微服务

Ryoma

字节跳动三面拿offer:网络+IO+redis+JVM+GC+红黑树+数据结构

编程susu

Java 编程 程序员 计算机 技术宅

无意发现,某东买来的Redis核心实践PDF,竟在GitHub数据库榜第一

Java~~~

Java redis 架构 面试 架构师

爱了!阿里巴巴内部出品“SpringBoot+微服务指南”,理论与实战

Java~~~

Java spring 架构 面试 微服务

泪目!跳槽太不容易,蚂蚁金服三轮面试,四个小时灵魂拷问

Java~~~

Java spring 架构 面试 微服务

面试经历整理|持续四个月面试19家公司,收获8家offer,面试总结

编程susu

Java 编程 程序员 面试 计算机

业界良心啊!第五次更新的Spring Cloud Alibaba升级太多内容

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

华为18级工程师耗时三年才总结出这份Java亿级高并发核心编程手册

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

八位阿里大牛耗时三年总结出Java面试复盘手册!带你实现逆风翻盘

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Scrum Patterns:持续改进脉冲(Kaizen Pulse)(译)

Bruce Talk

敏捷开发 译文 Agile Scrum Patterns

GitHub程序调优「黑马」!阿里大牛的Java性能优化实战笔记已上线

Java~~~

Java 架构 面试 JVM 性能调优

架构实战营模块六作业-电商微服务架构

王晓宇

架构实战营

阿里内部疯传的(Java知识面试指南项目),成功面试9家大厂Offer

Java~~~

Java spring 架构 面试 微服务

刚从鹅厂面试回来,分享我的java后端面试经历(腾讯五面)!

Crud的程序员

Java 编程 架构 程序员面试

大数据0815作业

朱磊

PM2实用指南及容器Docker部署

devpoint

Docker Node 8 月日更

集字节大神面试经验诚意出品:微服务(耀世版),助你向大厂迈进

Java~~~

Java 架构 面试 分布式 微服务

秀出新天际的SpringBoot笔记,让开发像搭积木一样简单

Java~~~

Java spring 架构 面试 微服务

膜拜!首次公布Java10W字面经,Github访问量破百万

今晚早点睡

Java 程序员 计算机

架构实战营模块六作业

maybe

架构实战营模块6课后作业

hello

架构训练营

BAT面试Java岗经验汇总:面试重点+精选面试120题+6条面试经验!

Crud的程序员

Java 架构 编程语言 java面试

Go进阶指南,手摸手带你深入了解 range 实现原理

微客鸟窝

go Go 语言从入门到实践x 8 月日更

架构训练营模块六作业

Honey拯救世界

架构训练营

架构实战营 - 模块 6 - 电商系统的微服务拆分方案

雪中亮

架构实战营 #架构实战营

面试进阶双飞!Alibaba新产SpringBoot深度历险(嵩山版)开源

Java~~~

Java spring 架构 面试 JVM

我说想去京东面架构师,阿里表哥手甩我Java大厂技术题,让我滚蛋

Java~~~

Java spring 架构 面试 Spring Cloud

难以置信!网易首席架构师竟用了500页笔记,把网络协议给趣谈了

Java~~~

Java 架构 面试 TCP 网络

架构实战营模块一

WolvesLeader

架构实战营

政府与市场应该如何互动

石云升

8月日更 财经思维

华为专家亲述:如何转型搞 AI?(上)-InfoQ