及时行乐|算法工程师福利:超实用技术路线图( 九 )


IT 系统总体的发展趋势在往云计算方向演进 , 即使是自建的基础设施 , 也会采用云计算的一套构建方式 , 让开发者不用过多的关注底层计算存储资源的部署运维 。 对于应用开发者来说 , 需要了解一些基础架构方面的知识 , 例如各类虚拟化及容器技术 , 配置管理 , 容器编排等 , 便于在日常工作中使用相关技术来管理和发布应用 。 从工具层面看 , Docker 与 k8s 等技术发展速度较快 , 主要还是根据官方文档来学习为主 。 浙大之前出版的《Docker - 容器与容器云》一书中有一些更深入的话题的探讨 , 另外《Kubernetes in Action》中也值得一读 。 从方法论层面看 , 《Infrastructure as Code》和《Site Reiliability Engineering》是两本非常不错的学习资料 。 与算法应用结合的虚拟化 , 运维 , 持续集成等都是比较新的领域 , 需要我们探索出一条可行路线 。

  • 自我考核:对于已有的算法项目 , 总结制定一套开发 , 测试 , 发布 , 运维的标准流程 , 且尽可能自动化执行 。
分布式存储
前些年最流行的分布式存储是脱胎于 Google 经典的 GFS 论文实现的 HDFS , 不过随着硬件技术的发展 , 计算存储分离思想的逐渐兴起 , 不但灵活性更高 , 成本更低 , 且各自架构的复杂度也大大降低了 。 因此目前更建议学习简单的 object store 形式的分布式存储 , 例如 s3 , minio 等 。 在此基础上的一些存储系统 , 例如 Delta Lake , 提供了事务 , 高效的 upsert , time travel 等功能 , 也值得关注与学习 。 原理方面 , 还是推荐《数据密集型应用设计》这本 。
  • 自我考核:在项目中实现不同机器能够访问同一个 s3 路径的文件 , 并进行正常的数据读写 , 模型文件读写等功能 。
分布式计算
大数据时代的分布式计算的鼻祖来自于 Google 经典的 MapReduce 论文 , 后续在 Hadoop 系统中做了开源实现 , 在前几年是非常火热的一项技术 。 目前业界的主流是 Spark 和 Flink , 前者在批处理计算中处于霸者地位 , 后者是流处理领域的领先者 。 目前我们的业务应用中 , Spark 是比较常用的分布式计算引擎 , 其基本操作相关内容比较简单 , 参考官方文档或者《Spark 快速大数据分析》即可 。 后续的主要难点会有大数据量下的问题排查与性能调优 , 执行复杂计算或与 Python 相关 UDF 的交互配合方式等 。 这方面需要对 Spark 的系统架构 , 内部原理有一定了解 , 例如 master , worker , driver , executor 等之间的关系 , lazy evaluation , DAG 的 lineage 与 stage 概念 , shuffle 优化 , wholestage codegen 等技术细节 。 这方面暂时没有找到比较好的资料 , 主要还是依赖实际问题解决的经验积累 。
  • 自我考核:用 Spark 来实现项目中的特征工程 , 并在一定数据量情况下取得比单机 Pandas 更好的性能效果 。
其它话题
其它云服务基础设施还包括分布式数据库 , 消息队列 , zk/raft 分布式协作系统 , 虚拟网络 , 负载均衡等 。 这些话题离算法应用方面会比较远一些 , 基本上达到遇到需求时会使用的能力即可 , 在这里不做展开 。
算法深入方向
AutoML
超参优化
【及时行乐|算法工程师福利:超实用技术路线图】自动化机器学习中比较传统的一块是超参数优化 , 进而可以推广到整个 pipeline 的超参优化 , 包括数据预处理 , 特征工程 , 特征选择 , 模型选择 , 模型调优 , 后处理等部分 。 目前业界应用比较广泛的技术手段主要是随机搜索 , 贝叶斯优化 , 进化算法 , Hyperband/BOHB 等 , 在特征工程方面有 Featuretools , tsfresh , AutoCrossing 等自动化特征工程工具 。 学术界有一些进一步的探索研究 , 包括 multi-fidelity 优化 , 多任务优化 , HPO 结合 ensemble learning , pipeline planning , data diff 自动数据分布探测等方面 。 可以参考上的各类参考资料与书籍进行学习了解 。 主要难点包括 automl 算法的泛化能力 , scalability , 整体 pipeline 组合的搜索与生成 , 针对不同学习算法的自动优化手段等 。


推荐阅读