写点什么

苹果公司开源机器学习框架 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:007957

评论

发布
暂无评论

网络安全入门5天速成教程: WEB安全渗透攻防技术

网络安全学海

网络安全 安全 信息安全 渗透测试 WEB安全

Python 的排序方法 sort 和 sorted 的区别

AlwaysBeta

Python

windows下C与C++执行cmd命令并实时获取输出

DS小龙哥

3月月更

微服务架构下消息服务多通道设计思路

全象云低代码

微服务 低代码 后端开发 消息中间件 后端技术

数仓如何设置大小写不敏感函数

华为云开发者联盟

MySQL DWS GaussDB(DWS) 大小写不敏感函数 GUC参数

客户画像赋能百度推广生态实践

百度Geek说

前端 后端

【直播回顾】OpenHarmony知识赋能第四期第三课——I2C驱动开发

OpenHarmony开发者

OpenHarmony 驱动开发

速度和质量不可兼得,为什么DevOps落地如此困难?

SoFlu软件机器人

从0到1落地电商小程序之微服务设计

晨亮

「架构实战营」

手把手教你从Apk中取出算法

奋飞安全

android 安全 java

项目管理标准化的武林秘籍

大智若愚

团队管理 项目管理 标准化 软技能 标准框架

云原生时代已来,计算机教育如何因「云」而变?

阿里云弹性计算

云原生 ECS 计算机教育

从多快好省到好快省多,您的项目管理走对了吗?

禅道项目管理

项目管理

Meetup预告|云原生时代热门监控利器解析与应用

云智慧AIOps社区

运维 云原生 安全 监控工具

产品升级|1-2月合刊:多款重磅产品来袭

百度大脑

Nginx限速模块初探

喀拉峻

nginx

无监控不运维—浅述各种监控方案使用场景

穿过生命散发芬芳

3月月更

你的“数学潜意识”原来可以被唤醒!

博文视点Broadview

从HDFS的写入和读取中,我发现了点东西

华为云开发者联盟

hdfs HDFS写入 HDFS读取 文件读取

ABAP excel数据上传函数改造

Jasen Ye

Excel upload abap

地狱开局的2022,穿好你的安全铠甲

脑极体

Go 中的空白标识符(下划线)

宇宙之一粟

Go 语言 3月月更

详细的网站定制步骤有哪些?

源字节1号

网站开发 软件定制

Kubernetes中API的不同版本, Alpha, Beta, Stable 都是什么?

工程师薛昭君

Kubernetes API

加快云原生技术转型, 智能调度登陆华为云DevOps: 增速,节源

华为云开发者联盟

软件 DevOps 代码托管 智能调度 华为云DevOps

ABAP 文件上/下载

Jasen Ye

upload abap download template GRAPHICS

java培训如何用反射做简易 Spring IOC 容器

@零度

Java springloc

实践丨SpringBoot整合Mybatis-Plus项目存在Mapper时报错

华为云开发者联盟

spring 容器 Spring Boot 测试 Mybatis-Plus

web前端培训如何用CSS来实现透明方格

@零度

CSS web前端

【愚公系列】2022年03月 Docker容器 Kafka集群的搭建

愚公搬代码

3月月更

如何升级到 React 18

CRMEB

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