前端也能玩 AI,基于 tfjs-node 的高阶前端机器学习平台

简介: 前端智能化战役,我们在路上。

作者 | 缺月

image.png

随着深度学习的发展,智能化已经开始赋能各行各业,前端作为互联网中离用户最近的一环,也希望借助 AI 的能力大幅提高效率,减少人力成本,给用户创建更好的体验。因此,前端智能化也被看作是前端的未来的重要发展方向。

然而,在这条道路上,有几个问题一直阻碍着智能化的发展:1. 熟悉机器学习的算法工程师对前端的业务没有体感,对前端所积累的数据和这些数据可能产生的价值也并不了解,很难参与到这个过程中来。2. 传统的前端工程师对机器学习常用的语言,诸如 python, c++ 等并不了解,学习和转换的成本很高。3. 传统的前端工程师对深度学习本身的算法和原理不了解,导致很难直接使用一些现有的机器学习框架 (tensorflow, pytorch 等)来进行训练。

为了解决这些问题,推动前端智能化发展,我们开发了 pipcook。pipcook 使用对前端友好的 JS 环境,基于 Tensorflow.js 框架作为底层算法能力并且针对前端业务场景包装了相应算法,从而让前端工程师可以快速简单的运用起机器学习的能力。

此篇文章将主要讨论 pipcook 是如何和 Tensorflow.js 结合的,重点探讨一下如何利用 tfjs-node 的底层模型和计算能力搭建一个高阶机器学习流水线。

为什么采用 TensorFlow.js 作为底层算法框架

Tensorflow.js 是 google 在 2018 年发布的基于 js 的机器学习框架,google 也开源了相关代码。pipcook 在数据处理和模型训练中使用 tfjs-node 作为底层依赖的框架,在 Tensorflow.js 之上开发 pipcook 插件并组装成流水线。我们使用 Tensorflow.js 主要有以下几个原因:

  • pipcook 定位于服务前端工程师,所以主要采用 JS 语言开发,所以我们更倾向于采用 JS 的运算框架,避免桥接其他语言等方式带来的性能损失和出错风险
  • 相对于一些其他的 JS 的机器学习框架,Tensorflow 本身在 C++ 和 Python 上非常流行,js 版本也复用了 C++ 的底层能力和很多算子, 支持大量的网络层,激活函数,优化器和其他组件,并且具有良好的性能并提供 GPU 支持。
  • 官方提供了 tfjs-converter 等工具,可以将 SavedModel 或者 Keras 等模型转化为 JS 模型,从而可以复用很多 Python 成熟的模型
  • JS 在对数学运算这一方面的生态并不成熟,没有一个如同 numpy 这样的科学计算库,一些类似的库也很难和其他的运算框架无缝结合。而 tfjs 本身提供了 tensor 的封装,相当于 numpy arary 的能力,并且可以直接传入到 tfjs 模型中进行训练,同时性能非常高效
  • tfjs 提供了 Dataset API, 可以对数据进行抽象,为数据封装了简单高效的接口,同时可以进行批数据处理。Dataset API 的数据流的方式也可以和 pipcook 管道的方式高效结合。

使用 TensorFlow.js 处理数据

对于机器学习,访问和处理大量数据是一个关键问题。对于一些传统数据量不大的场景,我们可以把数据一次性读入内存进行操作,但是对于深度学习来说,很多时候数据远远超出了内存大小,因此,我们需要按需从数据源逐段访问数据的能力。而 tfjs 提供的 Dataset API 对这种场景的处理进行了包装。

image.png

在一个标准的 pipcook pipeline 中,我们会使用 Dataset API 对数据进行包装和处理。如图所示是一个典型的数据流通的过程。

  • 一开始,原始的训练数据会通过 data collect 插件进入到管道中,这种原始数据可能是一些本地文件或者存储在云上的数据,插件会把这些数据读进管道
  • data collect 插件在读入这些数据之后,会对数据的格式进行判断,并且封装成相应的 tensor
  • data access 插件负责对这些数据进行接入,将 tensor 包装成 tf.Dataset,方便后面进行批量数据处理和训练
  • 在 data process 插件中,我们将会对数据做具体的某种处理,包括 shuffle, augment 等操作,这些操作会用到 Dataset 封装的一些诸如 map 等操作符,从而在数据流中实时的进行批量处理
  • 随后,在 model load 中,数据会以 batch 的形式读入模型进行训练

至此,我们可以将数据集想象为一组训练数据的可迭代集合,如同 Node.js 中的 Stream。每当从数据集中请求下一个元素时,内部实现都会根据需要进行访问,并且执行预先设置好的数据处理操作函数。这种抽象使得模型可以轻松训练大量的数据。当我们有多个数据集时,Dataset 还便于将数据集共享和组织为同一组抽象。

训练模型

image.png

TensorFlow.js 分成低阶与高阶两组 API。低阶的 API 是由 deeplearn.js 衍生,包含搭建模型所需要的 operator (OP), 负责处理一些低阶如线性代数的数据运算等等,来协助我们处理机器学习中的数学运算部分。而高阶的 Layers API 则是用来包装一些常用的机器学习的算法,同时允许我们载入训练好的模型,像是由 Keras 学习的模型等等。

pipcook 通过插件的方式开发和运行模型,每个 model load 插件会负责加载某一具体的模型,大部分模型基于 tfjs 实现。同时 tfjs-node 还提供了 gpu 加速等功能,可以提高模型训练的速度。当然,现阶段由于生态等原因,对于一些特定的模型在 tfjs 里面实现的成本比较高,对于这一部分问题,pipcook 同时还提供了 python 桥接等方式,可以直接在 js 的运行环境里调用 python 进行训练,对于这一部分桥接的细节,我们将会在后续的篇章里详细介绍。

部署

对于一条工业级的机器学习流水线,在训练模型完成之后,还需要有一种方式部署您的模型,从而让模型可以为真实的业务服务,目前 pipcook 部署的方案主要有以下几种,这些方案都是通过 model deploy 插件完成的:

  • 快速验证方案:很多时候您可能想要对您的数据和模型进行快速的实验,例如使用小批量的数据和数量较少的 epoch,对于这种场景,我们不需要将模型部署到远程再进行验证。对此,pipcook 内置了本地部署的插件,在机器上训练完成之后,pipcook 将会在本地启动一个预测服务器,进行预测服务
  • 服务器 docker 镜像:pipcook 提供了官方镜像,此官方镜像包含了 pipcook 训练和预测的必要环境, 您可以直接将此镜像部署到您的部署主机上,也可以使用 k8s 等集群解决方案管理 docker 镜像
  • 云服务打通:pipcook 将会在后续开发中逐渐打通各云服务厂商的机器学习部署服务,现阶段实际上 Gcloud 已经提供了 tfjs 和 automl 的结合,后续 pipcook 将会逐渐支持阿里云, AWS 等服务

和TFX(TensorFlow Extended)的对比

我们最终的目标是一个成熟的工业级的机器学习 pipeline,这个 pipeline 可以将出色的模型运用于生产环境,实际上为了解决这种需求,google 官方基于长期的实践发布了 TFX,并且开源了此项目。那么外界可能会有一些疑问,我们所做的事情和 TFX 的区别是什么,实际上,pipcook 的核心并不是取代任何其他的框架,尤其是基于 python 生态的产品,因为 pipcook 的使命是推动前端的智能化发展,因此,pipcook 所采用的技术栈以及产品化方式都是面向前端的,像是:

  • TFX 采用的是 DAG 的方式,因为其涉及到数据生成,对数据进行统计分析,对数据进行验证,转化数据等多种操作,而这些操作可以自由组合,实际上,对于很多前端域的场景,我们并不需要很多复杂的组合操作,因此,pipcook 采用了 pipeline 的方式,对于数据的操作抽象为简单的管道中的插件,可以减少前端工程师的使用成本
  • TFX 采用 Apache Airfow 等进行调度,而 pipcook 采用的是前端技术栈进行这类操作,例如,我们使用 Rxjs 等响应式框架对不同的 plugin 进行响应和串联,方便前端理解和贡献代码
  • 同时,我们设计的 API 也是基于 JS 习惯的,对前端来说学习和上手的成本较低

基于以上这些设计,我们尽量尝试去构建一个对前端友好的机器学习环境,从而达到我们的预期和目标。

未来展望

pipcook 自开源以来已经有一段的时间,期间,也收到了一些用户的反馈,同时,根据我们的规划,我们还有很多需要做的事情,我们也期望可以借助开源社区的力量,不断完善 pipcook,使其可以真正助力前端智能化。

  • 与各云服务厂商 (阿里云,AWS, Gcloud 等)合作,打通 pipcook 到各个云服务机器学习部署链路
  • 生态完善,建立起 pipcook 的试玩广场等从而降低用户的上手成本
  • 更好的支持分布式训练
  • 插件丰富,模型完善,支持更多的 pipeline

未来我们希望通过阿里内部前端智能化小组和整个开源社区的力量结合在一起,不断完善 pipcook 和 pipcook 背后所代表的前端智能化战役,让前端智能化技术方案普惠化,沉淀更具竞争力的样本和模型,提供准确度更高、可用度更高的代码智能生成服务;切实提高前端研发效率,减少简单的重复性工作,不加班少加班,一起专注更有挑战性的工作内容!

如何贡献?

如果您对我们的项目有兴趣并且想要为前端智能化贡献一份力量,欢迎您前往我们的 github 开源仓库


image.png
关注「Alibaba F2E」
把握阿里巴巴前端新动向

相关文章
|
1月前
|
存储 人工智能 大数据
AI开发新范式,PAI模型构建平台升级发布
本次分享由阿里云智能集团产品专家高慧玲主讲,聚焦AI开发新范式及PAI模型构建平台的升级。分享分为四个部分,围绕“人人可用”和“面向生产”两大核心理念展开。通过降低AI工程化门槛、提供一站式全链路服务,PAI平台致力于帮助企业和开发者更高效地实现AI应用。案例展示中,介绍了多模态模型微调在文旅场景的应用,展示了如何快速复现并利用AI解决实际问题。最终目标是让AI技术更普及,赋能各行业,推动社会进步。
|
11天前
|
人工智能 搜索推荐 API
node-DeepResearch:开源复现版OpenAI Deep Research,支持多步推理和复杂查询的AI智能体
node-DeepResearch 是一个开源 AI 智能体项目,支持多步推理和复杂查询,帮助用户逐步解决问题。
147 27
node-DeepResearch:开源复现版OpenAI Deep Research,支持多步推理和复杂查询的AI智能体
|
2月前
|
人工智能 移动开发 前端开发
WeaveFox:蚂蚁集团推出 AI 前端智能研发平台,能够根据设计图直接生成源代码,支持多种客户端和技术栈
蚂蚁团队推出的AI前端研发平台WeaveFox,能够根据设计图直接生成前端源代码,支持多种应用类型和技术栈,提升开发效率和质量。本文将详细介绍WeaveFox的功能、技术原理及应用场景。
1433 66
WeaveFox:蚂蚁集团推出 AI 前端智能研发平台,能够根据设计图直接生成源代码,支持多种客户端和技术栈
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
Java+机器学习基础:打造AI学习基础
随着人工智能(AI)技术的飞速发展,越来越多的开发者开始探索如何将AI技术应用到实际业务场景中。Java作为一种强大的编程语言,不仅在企业级应用开发中占据重要地位,在AI领域也展现出了巨大的潜力。本文将通过模拟一个AI应用,从背景历史、业务场景、优缺点、底层原理等方面,介绍如何使用Java结合机器学习技术来打造一个AI学习的基础Demo。
42 18
|
2月前
|
人工智能 前端开发 小程序
2024年12月30日蜻蜓蜻蜓AI工具系统v1.0.0发布-优雅草科技本产品前端源代码已对外开源可免费商用-优雅草老八
2024年12月30日蜻蜓蜻蜓AI工具系统v1.0.0发布-优雅草科技本产品前端源代码已对外开源可免费商用-优雅草老八
106 31
2024年12月30日蜻蜓蜻蜓AI工具系统v1.0.0发布-优雅草科技本产品前端源代码已对外开源可免费商用-优雅草老八
|
28天前
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
54 10
|
1月前
|
SQL 人工智能 关系型数据库
PolarDB-PG AI最佳实践 2 :PolarDB AI X EAS实现自定义库内模型推理最佳实践
PolarDB通过POLAR_AI插件支持使用SQL调用AI/ML模型,无需专业AI知识或额外部署环境。结合阿里云EAS在线模型服务,可轻松部署自定义模型,在SQL中实现如文本翻译等功能。
|
1月前
|
人工智能 安全 大数据
PAI年度发布:GenAI时代AI基础设施的演进
本文介绍了AI平台在大语言模型时代的新能力和发展趋势。面对推理请求异构化、持续训练需求及安全可信挑战,平台推出了一系列优化措施,包括LLM智能路由、多模态内容生成服务、serverless部署模式等,以提高资源利用效率和降低使用门槛。同时,发布了训推一体调度引擎、竞价任务等功能,助力企业更灵活地进行训练与推理任务管理。此外,PAI开发平台提供了丰富的工具链和最佳实践,支持从数据处理到模型部署的全流程开发,确保企业和开发者能高效、安全地构建AI应用,享受AI带来的红利。
|
2月前
|
人工智能 安全 算法
PAI负责任的AI解决方案: 安全、可信、隐私增强的企业级AI
在《PAI可信AI解决方案》会议中,分享了安全、可信、隐私增强的企业级AI。会议围绕三方面展开:首先通过三个案例介绍生活和技术层面的挑战;其次阐述构建AI的关键要素;最后介绍阿里云PAI的安全功能及未来展望,确保数据、算法和模型的安全与合规,提供全方位的可信AI解决方案。
|
1月前
|
人工智能 容灾 Serverless
AI推理新纪元,PAI全球化模型推理服务的创新与实践
本次分享主题为“AI推理新纪元,PAI全球化模型推理服务的创新与实践”,由阿里云高级产品经理李林杨主讲。内容涵盖生成式AI时代推理服务的变化与挑战、play IM核心引擎的优势及ES专属网关的应用。通过LM智能路由、多模态异步生成等技术,PAI平台实现了30%以上的成本降低和显著性能提升,确保全球客户的业务稳定运行并支持异地容灾,目前已覆盖16个地域,拥有10万张显卡的推理集群。

热门文章

最新文章

  • 1
    【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
  • 2
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 4
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 5
    详解智能编码在前端研发的创新应用
  • 6
    巧用通义灵码,提升前端研发效率
  • 7
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 8
    智能编码在前端研发的创新应用
  • 9
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 10
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡