深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
为解决这些难点,我们基于网易云音乐机器学习平台落地了以下具体的技术方案:
- GraphService提供类似于图数据库,基于海量的弱终端资源,提供巨图存储与采样的服务、通过巨图数据加载优化策略,满足不同规模模型以及不同采样方法;
- 通过k8s MPI-Operator实现了超大规模图存储与采样,是实现通用构图方案可用易用必要的基础组件;
- 整合k8s TF-Operator 与MPI-Operator解决模型分布式训练中的图存储、采样与分布式模型计算的问题;
- 通过k8s VK资源与cephfs实现计算存储资源弹性扩容 训练过程会消耗大量计算存储资源,训练结束,这些资源就会闲置,通过cephfs实现存储资源动态扩缩容;通过virtual-kubelet等闲置计算资源引入机器学习平台,实现弹性扩容,按需计费,大大减少大规模分布式任务的训练成本;
功能层:化零为整与化整为零的艺术
功能层主要是机器学习平台做为一处机器学习基础设施,去支持整个机器学习过程的全生命周期,在云音乐,一个标准的机器学习流,主要包括四个部分:
- 数据样本服务;
- 特征算子开发与配置开发;
- 模型训练与离线评估;
- 模型服务开发与部署、持续更新;
而通过整合机器学习流中覆盖的各个部分的不同系统,端到端机器学习平台目的是为了更高效、方便的为算法开发以及相关的用户提供各种能力的支持。而在核心任务之外,机器学习平台也会抽离部分阶段的能力,为包括通过模型服务、模型共享等相关工作提供部分组件的支持;接下来会分别从端到端机器学习平台与ModelZoo两个项目来分享我们在这块的工作:
端到端机器学习平台:化零为整
端对端机器学习平台是通过机器学习平台,抽象出一套能够打通样本处理、特征存取、线上服务开发、代码/数据版本控制系统、线上服务系统推送、abtest系统标准化流程,抽象出相应地接口,为各个机器学习子系统集成至机器学习平台,复用包括容器化、系统互联、弹性资源、监控等核心能力。端对端机器学习平台目的的愿景是提供一种以模型为中心的机器学习开发范式,通过元数据中心,将整个生命周期的相关元数据关联至模型任务,以模型的视角去串联整个机器学习生命周期的各个阶段。为了达到这个目的,我们在以下几个方面完成相应的工作:
样本服务
数据样本收集与预处理,主要涉及大数据系统的对接,早期而言, 数据样本的开发并没有相关的系统支持, 业务同学自己写Spark、Flink任务,进行样本收集、清洗、预处理等过程。因而,联通系统,仅需要机器学习平台本身支持用户开发样本任务的联通,音乐内部业务上游主要使用两部分的数据开发平台:猛犸与自研的Pandora与Magina,在机器学习平台上,支持任务级别的依赖,同时考虑到其他任务的多样性,我们在每一个容器中,提供大数据框架的接入能力,支持Spark、Flink、Hadoop等基础框架。 而通过一段时间的迭代之后,我们通过约束标准的特征使用方式,基于网易云音乐基础的存储套件Datahub,提供一套标准的FeatureStore。在此基础上,标准化业务的样本生成逻辑,用户仅需修改少部分的样本生成模板中的逻辑,即可完成一个标准化的业务样本服务,为用户提供实时、离线的样本生成能力。
特征算子开发与配置开发
特征算子开发与配置开发,是一个标准的机器学习流程必须的过程,也是比较复杂的过程,是样本服务的前置逻辑。在云音乐, 线上推理框架,简称RTRS,抽象出专门的特征处理模块,提供给用户开发特征算子、使用特征算子生成的逻辑。
用户在原始数据处理时通过特征计算DSL语音配置已有算子或者自定义特征处理逻辑,编译成相应地feature_extractor包,在线上服务或者样本服务里使用,提供给模型引擎与训练任务使用,具体详情可关注云音乐预估系统建设与实践这篇文章
模型服务开发与部署
目前网易云音乐线上的核心业务,主要使用模型服务框架是RTRS,RTRS底层基于C++开发的,而C++的相关应用开发,存在两个比较麻烦的地方:
- 开发环境: 总所周知,机器学习相关离线与线上操作系统不匹配,如何以一种比较优雅的方式提供用户模型开发同时也支持服务开发的能力? 网易云音乐机器学习平台底层基于K8S+docker,提供定制化的操作系统;
- 依赖库、框架的共享:在进行rtrs服务的开发时, 环境中需要集成一些公共的依赖,比如框架代码、第三方依赖库等等,通过机器学习提供的统一的分布式存储,只需要挂载指定的公共pvc,即可满足相关需求;
模型的部署可简单区分为两个过程:
- 首次模型的部署:首次模型的部分比较复杂,涉及到线上资源申请、环境安装配置等流程,并且在首次模型部署时,需要统一拉取RTRS服务框架,通过载入业务自定义逻辑so包以及模型、配置、数据文件,提供基础的模型服务能力;
- 模型、配置、数据的更新:在首次模型部署之后,由于时间漂移、特征漂移以及种种其他原因,我们会收集足够多的训练样本重新训练模型或者更新我们的配置、词典等数据文件,这个时候,我们通常不是重新发布模型推理服务,而且去动态更新模型、配置、包括词典在内的数据文件等等;
而机器学习平台通过标准化的模型推送组件,适配RTRS的模型部署以及线上服务的更新。
端对端机器学习平台的收益
减少用户参与,提升效率 端对端机器学习平台将核心业务的主要流程通过模型关联在一起,以模型为中心视角,能够有效地利用上下游的基本信息,比如在样本特征,可以通过复用样本服务中生成的特征schema的信息,减少在模型训练、模型推理时的特征输入部分的开发,能大大减少相关的开发工作,通过我们在某些业务的实验,能够将业务从0开发的过程花费的时间从周级别到天级别。
机器学习流程可视化与生命周期数据跟踪 端对端机器学习平台通过统一的元数据中心,将各个阶段的元数据统一管理,提供机器学习流程可视化能力:
并且通过各个阶段标准化的元数据接入, 能够有效踪机器学习过程各个阶段的生命周期数据以及资源使用情况,如样本使用特征、样本拼接任务的资源使用情况、模型最终上线的各个特征处理方式、模型训练的超参等等:
ModelZoo: 化整为零
业务背景
下图是对各个公司的机器学习业务模型上线占用时间的一个调查数据的说明,大部分的数据科学家、算法工程师在模型上线上花费过多的时间:
ModelZoo功能分层
符合我们在云音乐内部业务落地的认知,而除了前面我们讨论的端到端的标准化的核心业务的解决方案, 云音乐内部一些算法团队也会对其中的某些功能组件,有很强的需求,比如我们的通用模型服务,用户希望通过易用、高效地部署方式去构建可在实际场景中使用的通用模型,这个就是ModelZoo的由来,在这个之上,我们希望后续通用模型能在流程上打通再训练、微调,将能公开的已部署的模型,直接提供给有需求的业务方,Model的基础功能分层如下:
- 资源层:资源层覆盖机器学习平台所有任务资源,包括GPU、VK资源、阿里云ECI资源;
- 算法层:覆盖包括CV、NLP、以及其他有通用能力需要的能力模块如faiss分布式能力;
- 交付层:主要包括SDK、接口两种交付方式,其中SDK模块用于提供给算法集成开发过程的场景使用,接口用于无算法集成的场景下使用,提供用户自定义模型接口构建、接口提供服务等核心功能;
- 任务层:提供包括推理、微调、重训等核心功能,通过SDK功能、接口功能提供;
ModelZoo进展
ModelZoo到目前为止,我们的工作大概在这几方面:
- 通过K8S支持Serveless的能力,使用合适的镜像如TF Serving、TorchServe,即可对模型做通用的模型服务;
- 基于机器学习平台开,集成在模型部署组件中,提供组件部署通用模型推理的服务;
- 通过我们交付的组件,用户仅需要通过指定模型包(包括部署的一些基础元信息),来部署相应的服务。如果需要额外的前后处理,也支持在torchserve中自定义前后处理的逻辑;
- 在镜像层通过引入mkl编译的镜像、调整session线程数等核心参数,在高qps场景上,rt减少30%;
- 调研openvino、triton,目前由于业务已满足需求以及人力需求,暂无进一步投入,有相关经验的欢迎分享;
总结
以上就是网易云音乐机器学习平台的过去的一些工作,回顾一下,我们分别从“资源层”、“底层框架层”、“应用框架层”、“功能层”来分享相关的部分工作以及进展,机器学习平台因为覆盖的面很广泛,工作看起来比较杂乱,覆盖各种不同的技术栈,并且各项工作的挑战与目标都不一样,还是很有意思的。
本文发布自网易云音乐技术团队,文章未经授权禁止任何形式的转载。我们常年招收各类技术岗位,如果你准备换工作,又恰好喜欢云音乐,那就加入我们 staff.musicrecruit@service.netease.com 。
作者:网易云音乐技术团队
链接:https://juejin.cn/post/7117078725685936135
最后
如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。
如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。
一、架构师筑基必备技能
1、深入理解Java泛型
2、注解深入浅出
3、并发编程
4、数据传输与序列化
5、Java虚拟机原理
6、高效IO
……
二、Android百大框架源码解析
1.Retrofit 2.0源码解析
2.Okhttp3源码解析
3.ButterKnife源码解析
4.MPAndroidChart 源码解析
5.Glide源码解析
6.Leakcanary 源码解析
7.Universal-lmage-Loader源码解析
8.EventBus 3.0源码解析
9.zxing源码分析
10.Picasso源码解析
11.LottieAndroid使用详解及源码解析
12.Fresco 源码分析——图片加载流程
三、Android性能优化实战解析
- 腾讯Bugly:对字符串匹配算法的一点理解
- 爱奇艺:安卓APP崩溃捕获方案——xCrash
- 字节跳动:深入理解Gradle框架之一:Plugin, Extension, buildSrc
- 百度APP技术:Android H5首屏优化实践
- 支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」
- 携程:从智行 Android 项目看组件化架构实践
- 网易新闻构建优化:如何让你的构建速度“势如闪电”?
- …
四、高级kotlin强化实战
1、Kotlin入门教程
2、Kotlin 实战避坑指南
3、项目实战《Kotlin Jetpack 实战》
- 从一个膜拜大神的 Demo 开始
- Kotlin 写 Gradle 脚本是一种什么体验?
- Kotlin 编程的三重境界
- Kotlin 高阶函数
- Kotlin 泛型
- Kotlin 扩展
- Kotlin 委托
- 协程“不为人知”的调试技巧
- 图解协程:suspend
五、Android高级UI开源框架进阶解密
1.SmartRefreshLayout的使用
2.Android之PullToRefresh控件源码解析
3.Android-PullToRefresh下拉刷新库基本用法
4.LoadSir-高效易用的加载反馈页管理框架
5.Android通用LoadingView加载框架详解
6.MPAndroidChart实现LineChart(折线图)
7.hellocharts-android使用指南
8.SmartTable使用指南
9.开源项目android-uitableview介绍
10.ExcelPanel 使用指南
11.Android开源项目SlidingMenu深切解析
12.MaterialDrawer使用指南
六、NDK模块开发
1、NDK 模块开发
2、JNI 模块
3、Native 开发工具
4、Linux 编程
5、底层图片处理
6、音视频开发
7、机器学习
七、Flutter技术进阶
1、Flutter跨平台开发概述
2、Windows中Flutter开发环境搭建
3、编写你的第一个Flutter APP
4、Flutter开发环境搭建和调试
5、Dart语法篇之基础语法(一)
6、Dart语法篇之集合的使用与源码解析(二)
7、Dart语法篇之集合操作符函数与源码分析(三)
…
八、微信小程序开发
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
6)]
[外链图片转存中…(img-veAjiode-1715523313827)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!