写点什么

苹果公司开源机器学习框架 MLX,针对 Silicon 芯片进行了优化

作者:Sergio De Simone

  • 2024-01-10
    北京
  • 本文字数:1139 字

    阅读完需:约 4 分钟

大小:571.58K时长:03:15
苹果公司开源机器学习框架MLX,针对Silicon芯片进行了优化

苹果公司的机器学习框架MLX结合了开发者熟悉的 API、可组合的函数转换和惰性计算,部分灵感源于 NumPy 和 PyTorch,并针对苹果的 Silicon 进行了优化。该框架使用 Python 和 C++实现,旨在为在苹果 Silicon 上训练和部署机器学习模型提供用户友好且高效的解决方案。


根据苹果公司的说法,MLX 是由机器学习研究人员为机器学习研究人员设计的,并基于 MIT 发布许可,可以很容易地被扩展和改进。它支持转换语言模型训练、使用 Mistral 进行大规模文本生成、使用 Stable Diffusion 进行图像生成以及使用 Whisper 进行语音识别。


MLX 提供了受 NumPy 启发的底层 Python API 和一个完整的与之密切对应的 C++ API。此外,它还提供了一个高级 API,可用于根据 PyTorch API 创建更复杂的模型。


该框架支持自动微分、自动向量化和计算图优化,可组合的函数使得构建复杂数组转换变得更加容易。MLX 还支持惰性计算,这意味着它可以只在必要时才计算数组,以提高计算效率。同样,计算图是动态构建的,因此修改函数参数并不会触发缓慢的编译过程。


MLX 的一个独有的特性是使用了苹果 Silicon 的统一内存,这让它有别于其他的 ML 框架。这意味着数组位于共享内存中,可以在 CPU 或 GPU 上执行数组操作,无需在内存之间传输数据。例如,在创建一个数组时,你不需要指定位置,因为它位于统一内存中,而在执行操作时可以选择在 CPU 或 GPU 上执行转换:

a = mx.random.normal((100,))
b = mx.random.normal((100,))
mx.add(a, b, stream=mx.cpu)
mx.add(a, b, stream=mx.gpu)
复制代码


MLX 可在任意的苹果 Silicon CPU 上运行,包括 M1,并可以利用集成的 GPU,因此研究人员可以选择最适合其需求的硬件。


MLX 的代码库中包含了一些针对不同模型的示例,包括 BERT、Llama、Mistral、Stable Diffusion 等。每个示例都在requirements.txt文件中列出所需的依赖项,并提供了现成的 CLI 工具。例如,要使用 Stable Diffusion 生成图像,首先安装所有必需的依赖项,然后运行txt2image.py命令:

pip install -r requirements.txt

python txt2image.py "A photo of an astronaut riding a horse on Mars." --n_images 4 --n_rows 2


苹果尚未公开发布基准测试,因此我们目前不知道它与PyTorch/MPS或 Georgi Gerganov 的Llama.cpp相比表现如何。


不过,Stable Diffusion 示例中包含了使用 PyTorch 和 MLX 运行 UNet 的性能比较。MLX 在批次大小为 16 时的吞吐量比 PyTorch 高约 40%,最佳批次大小大 15%左右。


然而,PyTorch 在较小的批次大小时表现更好,批次大小为 1 时吞吐量高约 50%,批次大小为 4 时高约 10%。根据苹果公司的说法,PyTorch 在这些情况下的优势要归因于在模型还没有被加载到内存中且 PyTorch 的 MPS 图内核未被缓存时的编译速度。


如果你有兴趣体验 MLX,请参阅其快速入门指南完整文档


原文链接

https://www.infoq.com/news/2023/12/apple-silicon-machine-learning/

2024-01-10 08:008961

评论

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

双指针算法和位运算&离散化和区间合并

落曦

Appium上下文和H5测试(一)

清菡软件测试

App

申通快递 双11 云原生应用实践

阿里巴巴云原生

阿里云 Kubernetes 运维 云原生 监控

基于DAYU的实时作业开发,分分钟搭建企业个性化推荐平台

华为云开发者联盟

华为 算法 数据 dayu

面试专题-Java基础面试技术

码界西柚

甲方日常 56

句子

工作 随笔杂谈 日常

彻底搞懂 IO 底层原理

vivo互联网技术

Java Netty 服务器 语法

About Me

翎君

android

moon不讲武德!!!一个类加载机制给面试官说蒙了!!

moon聊技术

Java JVM 类加载 类加载器

视频作品播放量低:自媒体作者如何走出新手村

石头IT视角

云原生应用Go语言:你还在考虑的时候,别人已经应用实践

华为云开发者联盟

微服务 云技术 Go 语言

如何用CSS实现图像替换链接文本显示并保证链接可点击

陈北

CSS小技巧

架构师训练营第 1 期 - 第 9 周 - 学习总结

wgl

极客大学架构师训练营

区块链应用场景有哪些?区块链应用开发

t13823115967

区块链应用场景有哪些 区块链应用开发

大厂经验:埋点数据质量之埋点验证

阿亮

埋点 数据验证

Web前端如何实现断点续传

QiLab

Web 断点续传 upload pl

马士兵最新2020涵盖P5—P8Java全栈架构师学习路线,跟着老师学我已拿P7Offer!

Java架构追梦

Java 学习 架构 面试 马士兵

市值管理机器人、自动跑k线机器人开发

t13823115967

市值管理机器人 自动跑k线机器人开发

面试JVM一问三不知??来看看这个

程序员的时光

JVM Java虚拟机

在线K歌的发展和优势

anyRTC开发者

音视频 WebRTC RTC sdk

MySQL如何实现万亿级数据存储?

冰河

MySQL 分布式 微服务 高可用 mycat

30分钟开发一款抓取网站图片资源的浏览器插件

徐小夕

Java chrome 大前端 chrome扩展

我是面试官,我来分享一波面经!看看我的内心OS

比伯

Java 编程 架构 面试 技术宅

Python进阶——什么是元类?

Kaito

Python

如何基于App SDK快速地开发一个IoT App?

IoT云工坊

App 物联网 sdk 智能家居

【JAVA】List转换为array

笑春风

LeetCode题解:169. 多数元素,分治,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

英特尔与南京溧水经济技术开发区共同成立智能交通研究院

E科讯

有奖话题 | 如果程序员和产品经理都会凡尔赛文学,将如何对话?

YourBatman

话题讨论 凡尔赛文学

第一周 架构方法 作业一 「架构师训练营 3 期」

胡云飞

极客大学架构师训练营 架构方法

【薪火计划】05 - 坦诚是领导力的根基

码上生长

管理

苹果公司开源机器学习框架MLX,针对Silicon芯片进行了优化_芯片&算力_InfoQ精选文章