Go机器学习框架之火重燃,Google前研究员开源期望媲美Jax的GoMLX

news2024/9/20 10:34:50

Go作为一门兼具高性能与简洁性的编程语言,近年来在各种领域得到广泛应用。然而,在机器学习领域,Go相比Python、C++、Julia等语言,生态仍然较为薄弱。目前的Go机器学习框架无论在功能全面性上,还是在社区生态支持上都难以与TensorFlow、PyTorch、Jax等重量级框架抗衡。究其原因,笔者觉得还是Go社区缺少熟悉和精通机器学习方面的人才

不过,随着时间的推移,总会有一些开发者会尝试探索在Go语言中实现高效机器学习的可能性。近期,笔者就发现一个由Google前研究员Jan Pfeifer[1]开源的Go机器学习框架项目GoMLX[2],虽然我不是很了解机器学习这个领域,但也能看出一些该项目与以往Go机器学习项目的不同。

下面我就来简单介绍一下gomlx项目。

注:该项目开源时间不长,正处于初期开发阶段,还是一个实验性项目,也基本是由Jan Pfeifer一人完成。

一. GoMLX简介

GoMLX是一个主要由Go实现的、快速且易用的机器学习和通用数学库与工具集,你可以将其视为Go语言版本的PyTorch/Jax/TensorFlow(也许现在还不是,但其目标定位是这样的)。它力求成为Go语言中的标准化机器学习框架,让开发者在使用Go进行机器学习时,无需依赖其他语言或工具链。

结合该项目的README和作者提供的GoMLX教程[3],我们可以总结一下目前GoMLX目前已具备的主要功能特性,以及其设计上的优点。

GoMLX已具备的主要功能特性包括:

  • 计算图构建:支持创建和操作计算图。

  • JIT编译:能够即时编译计算图以提高执行速度。

  • 多后端支持:可以使用不同的后端执行操作,默认使用XLA。

  • 张量操作:提供了基本的张量操作和管理功能。

  • 自动微分:支持静态梯度计算。

  • 变量管理:通过Context对象管理变量和模型参数。

  • 机器学习层:提供了多种常用的机器学习层,如Dense、Dropout、BatchNorm等。

  • 训练工具:包括Trainer和Loop等用于模型训练的工具。

  • 数据集接口:定义了Dataset接口用于数据输入。

  • 优化器、损失函数和指标:提供了常用的优化器、损失函数和评估指标。

  • 可视化支持:能够绘制训练过程中的指标图表。

  • 调试工具:提供了多种调试方法,如形状断言、错误处理等。

  • 预训练模型支持:提供了诸如InceptionV3等预训练模型。

GoMLX在设计上相对于其他Go机器学习框架的优点有以下几点:

  • 模块化设计:将不同功能封装在独立的包中,便于理解和使用。

  • 性能:通过使用JIT编译和XLA后端,实现了高性能计算。

  • 错误处理:采用异常机制处理错误,提供了详细的堆栈跟踪,有助于调试。

  • 文档完善:强调了文档的重要性,提供了详细的API文档和教程。

  • 上下文管理:通过Context对象统一管理变量、参数和作用域,简化了模型开发。

  • 硬件适配:支持CPU和GPU,并可能扩展到其他硬件(如TPU)。

  • 开发体验:提供了交互式开发环境(如Jupyter notebook支持,通过GoNB项目[4],作者的另外一个开源项目),方便实验和学习。

  • 可视化集成:内置了训练过程的可视化工具,方便监控和分析。

二. GoMLX的长期目标

作者为GoMLX项目设定了明确的长期目标,包括:

  • 在Go中构建和训练模型,注重简单易读、API清晰、可组合性强。

  • 成为高效的研究和教育平台,方便实验新的ML想法

  • 成为可靠的生产平台,支持:

    • 现代加速硬件如TPU和GPU

    • 与TensorFlow Serving等工业工具集成

    • 从Hugging Face Hub等导入预训练模型

    • 将模型编译为二进制库或WebAssembly

三. GoMLX的TODO list

前面说过,该项目处于初期开发阶段,还有很多待开发的功能,作者在项目中放置了一个todo list,我们也可以看一下作者对GoMLX的功能规划:

  1. 模型相关

  • 增加CNN相关功能,如SeparableConv2D,以支持完整的ResNet50实现

  • 添加GNN(图神经网络)层

  • 支持从TensorFlow/Jax/PyTorch/Hugging Face导入模型:

    • 支持黑盒推理和进一步微调

    • 提供一些标准模型如ResNet50、ViT、BERT、Chinchilla等

    • 重点支持从Hugging Face导入模型

  • 扩展计算图操作和操作工具

  • 实现NaN和Inf值的首次出现检测,并提供堆栈跟踪

基础设施

  • 模型保存/加载:

    • 支持导出为TensorFlow的"SavedModel"格式

  • 开发仅用于推理的轻量版本

  • 支持将计算图预先编译(AOT)为不依赖XLA的库

分布式训练

  • 实现同步镜像策略(数据并行)

  • 支持多设备(GPU)设置

  • 支持多租户(多主机)设置

底层支持

  • 完善多设备(如多GPU)支持

  • 实现自动分布在多设备上的DistributedTrainer

  • 新后端支持:

    • 开发兼容WebAssembly的后端(如WebGL),以支持浏览器中运行和训练

    • 开发更快/更轻的CPU后端(可能使用ggml)

API改进

  • 虽然没有具体列出,但文档提到API仍有改进空间,预计在早期阶段会有一些变化

这些计划涵盖了从模型功能扩展到基础设施改进,以及分布式和新平台支持等多个方面,旨在使gomlx成为一个更全面、强大的机器学习框架。

四. 小结

通过上面的介绍,我们看到:GoMLX站在了TensorFlow/PyTorch/Jax等机器学习框架巨头的肩膀之上,借鉴了他们的设计与优势,并充分复用已有的工具和库,结合Go语言的特点,但又不局限在Go之中。

GoMLX的作者就是机器学习研究员,十分清楚机器学习框架用户的诉求,提供了GoNB(A Modern Go Kernel for Jupyter Notebooks),让用户可以在熟悉的Jupyter Notebooks中完成相关实验,并内置了图形化展示工具。GoMLX的教程和示例非常细致,并且也都以ipynb格式提供,大幅降低GoMLX上手门槛。

不过,尽管GoMLX展示了强大的潜力,但目前它仍处于初始阶段,许多核心功能尚未完全实现。但总体而言,GoMLX代表了Go语言在机器学习领域的一次重要尝试,其设计理念和目标值得关注。尽管目前还存在诸多挑战和未完成的工作,但我们可以对其未来的发展保持谨慎乐观的态度。

如果你有机器学习开发经验,不妨参与到GoMLX的开发中,为这一项目贡献力量,共同推动Go在机器学习领域的进步。


Gopher部落知识星球[5]在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时,我们也会加强代码质量和最佳实践的分享,包括如何编写简洁、可读、可测试的Go代码。此外,我们还会加强星友之间的交流和互动。欢迎大家踊跃提问,分享心得,讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落,享受coding的快乐! 欢迎大家踊跃加入!

c2addce6f99658a267ddbe40f05f0630.jpegb886763e3a71210df209835777472342.png

7bfe6b16803bfbb2bb6545c600dd4d17.pnga7dae14b29aca26313b1a96a7f117520.jpeg

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址[6]:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻) - https://gopherdaily.tonybai.com

我的联系方式:

  • 微博(暂不可用):https://weibo.com/bigwhite20xx

  • 微博2:https://weibo.com/u/6484441286

  • 博客:tonybai.com

  • github: https://github.com/bigwhite

  • Gopher Daily归档 - https://github.com/bigwhite/gopherdaily

  • Gopher Daily Feed订阅 - https://gopherdaily.tonybai.com/feed

c1d217959767eeed939125fc0be521c3.jpeg

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

参考资料

[1] 

Google前研究员Jan Pfeifer: https://github.com/janpfeifer

[2] 

Go机器学习框架项目GoMLX: https://github.com/gomlx/gomlx

[3] 

GoMLX教程: https://gomlx.github.io/gomlx/notebooks/tutorial.html

[4] 

GoNB项目: https://github.com/janpfeifer/gonb

[5] 

Gopher部落知识星球: https://public.zsxq.com/groups/51284458844544

[6] 

链接地址: https://m.do.co/c/bff6eed92687

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2069561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024升级zblog小程序开源源码/基于uniapp开发的(支持微信小程序、百度小程序、安卓APP)

源码简介: 2024最新zblog多端小程序开源源码,它是基于uniapp开发的,它是针对和支持微信小程序、百度小程序和安卓APP哦!百度百科小程序源码下载。 这个基于uniapp开发的zblog多端小程序开源源码,听说对收录和SEO都有…

Android 添加系统服务的实现

和你一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 一、前言二、编写AIDL文件三、编写Manager类四、 编写系统服务五、 注册系统服务六、注册Manager七、App调用八、添…

设计模式 -- 七大原则(五)-- 开闭原则

1 基本介绍 开闭原则(Open Closed Principle,简称OCP)是编程中最基础、最重要的设计原则 一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。 …

伯努利朴素贝叶斯解析:面向初学者的带代码示例的视觉指南

通过二进制简单性释放预测能力,欢迎来到雲闪世界。 添加图片注释,不超过 140 字(可选) 与虚拟分类器的基线方法或基于相似性的 KNN 推理不同,朴素贝叶斯利用了概率论。它结合了每个“线索”(或特征&#xf…

宿舍管理系统设计与分析

第一章 管理信息系统概述 在人类进入21世纪之际,随着社会的组织化程度以及企业生产的社会化程度越来越高,信息作为一种资源已经和材料、能源并称为现代社会化发展的三大支柱之一。管理信息系统是融科学、信息科学、系统工程以及现代通讯技术、计算机技术…

阿里HPN-大型语言模型训练的数据中心网络架构

阿里巴巴HPN:用于大型语言模型训练的数据中心网络 摘要 本文介绍了阿里云用于大型语言模型(LLM)训练的数据中心网络HPN。由于LLM和一般云计算之间的差异(例如,在流量模式和容错性方面),传统的数据中心网络不太适合LLM训练。这就要求我们专门为LLM培训设…

【NetTopologySuite类库】多边形的五种包围盒(AABB、OBB、包围圆、八边形、凸包)

示例 用的是NetTopologySuite1.5.3版本。 var r new WKTReader(); var wkt "polygon((0 0,0 0.5,1 2,5 0,4 -2,3 -1, 0 0))"; var rawGeo r.Read(wkt); var b1 rawGeo.Envelope;//AABB var b2 new MinimumBoundingCircle(rawGeo).GetCircle();//包围圆 var b3…

基于GeoToolKit实现三维断面的绘制研究

GeoToolkit默认自带PillarSurfaceData的三维断面绘制要求断棱(有时叫断柱)必须是单调的,否则组件底层就会自动优化,导致断面出现回弯,相当于出现重叠,无法实现最终的效果。因此,本文主要在之前文章的基础上,拓展了GeoToolKit的三维断面显示功能。本文主要基于GeoToolKi…

计算机毕业设计hadoop+spark+hive漫画推荐系统 动漫视频推荐系统 漫画分析可视化大屏 漫画爬虫 漫画推荐系统 漫画爬虫 知识图谱 大数据

流程:1.DrissionPageSelenium自动爬虫工具采集漫画视频、详情、标签等约200万条漫画数据存入mysql数据库; 2.Mapreduce对采集的动漫数据进行数据清洗、拆分数据项等,转为.csv文件上传hadoop的hdfs集群; 3.hive建库建表导入.csv动漫…

能精准捕捉股价波峰波谷的 Findpeaks

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 在AI对金融产品进行价值分析中,检测波峰波谷具有至关重要的应用意义。投资者可以直接观察股票价格走势图,通过肉眼识别波峰和波谷的位置。这种方法简单易行,但主观性较强,可能受到投资者个人经验…

【最长公共上升子序列】

题目 解决 for (int i 1; i < n; i)for (int j 1; j < n; j){ f[i][j] f[i - 1][j];if (a[i] b[j]){ f[i][j] max(f[i][j], 1);for (int k 1; k < j; k)if (b[j] > b[k])f[i][j] max(f[i][j], f[i - 1][k] 1);} } 先假设不影响结果&#xff0c;纳入 &…

大语言模型的“智能飞轮”!阿里最新综述全面解析大模型的自进化之路

©PaperWeekly 原创 作者 | 林廷恩 单位 | 阿里通义实验室算法研究员 研究方向 | 自然语言处理 想象一下&#xff0c;一个 AI 不仅能学习&#xff0c;还能自我改进&#xff0c;变得越来越聪明。这不是科幻小说&#xff0c;而是我们正在见证的现实。大语言模型&#xff08;…

pdf有密码,如何实现pdf转换word?

PDF想要转换成其他格式&#xff0c;但是当我们将文件拖到PDF转换器进行转换的时候发现PDF文件带有密码怎么办&#xff1f;今天分享PDF有密码如何转换成word方法。 方法一、 PDF文件有两种密码&#xff0c;打开密码和限制编辑&#xff0c;如果是因为打开密码&#xff0c;建议使…

全套安全帽佩戴检测算法源码与实战应用分享

在许多工业环境中&#xff0c;安全帽是确保工人安全的重要防护装备。为了降低工人受伤的风险&#xff0c;尤其是在建筑工地、矿山、工厂等高危环境下&#xff0c;确保工人正确佩戴安全帽是至关重要的。然而&#xff0c;由于现场管理的复杂性和人员流动性&#xff0c;单靠人工监…

Chrome H265 WebRTC 支持

Chrome从127版本开始支持RTC H265解码&#xff0c;这样服务器就不需要对H265转码了&#xff0c; H5S和USC会自动检测浏览器支持的解码类型并自动判断是否启动转码&#xff0c;这样客户端不用关心摄像机具体是H264还是H265&#xff0c;尽量使用带GPU的客户端&#xff0c;这样服务…

什么是红黑树-面试中常问的数据结构

你有没有想过,为什么你的 Java HashMap 能够如此高效地处理数百万个键值对?或者你的 Linux 系统是如何在眨眼间就能管理成千上万的进程的?这些看似神奇的性能背后,隐藏着一个优雅而强大的数据结构 - 红黑树。 目录 什么是红黑树?红黑树的特性为什么需要红黑树?红黑树的结…

java基础 之 抽象类

文章目录 前言抽象类浅浅的理解下抽象类关键字&#xff1a;abstract抽象类 VS 普通类特点 前言 1、类是一个模板&#xff0c;类被继承后成为父类&#xff0c;继承父类的类称为子类。 2、子类可以对父类的方法进行重写&#xff0c;也可以直接使用父类的方法。 3、类称为继承&…

鸿蒙笔记--WorkerTaskPool

这一节了解一下鸿蒙中的Worker和TaskPool,Worker和TaskPool的作用是为应用程序提供一个多线程的运行环境&#xff0c;用于处理耗时的计算任务或其他密集型任务。可以有效地避免这些任务阻塞主线程&#xff0c;从而最大化系统的利用率&#xff0c;降低整体资源消耗&#xff0c;并…

python动画:manim中的颜色【ManimColor】的使用方法

一&#xff0c;什么是彩色(颜色) Color是视觉艺术不可或缺的一部分&#xff0c;但我们怎么知道它如此重要呢&#xff1f;嗯&#xff0c;一种方法是通过色彩理论的应用。什么是色彩理论&#xff1f;我们将定义色彩理论&#xff0c;然后分解来自绘画、照片和电影的各种色彩理论示…

活动预告 | Global RAG Hack Together Ⅲ-用VS Code AI Tools结合SLM构建RAG应用

点击蓝字 关注我们 编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun 九月&#xff0c;Global RAG Hack Together 即将在全球开启&#xff0c;在这场全球 RAG 黑客松中&#xff0c;我们不仅可以学习到生成式 AI 下的 RAG 技术&#xff0c;还可以用我们掌握的 RAG 技术提交参…