mars
Mars 是一个基于张量的统一计算框架,旨在让大规模数据处理变得像使用单机库一样简单。它完美兼容并扩展了用户熟悉的 NumPy、pandas 和 scikit-learn 等主流 Python 库,无需重写大量代码即可将原本只能在单台机器上运行的任务,轻松扩展到多核本地环境或分布式集群中执行。
对于经常受限于内存不足或计算速度慢的数据科学家、研究人员及 Python 开发者而言,Mars 解决了处理海量数据时的性能瓶颈问题。当数据量大到无法放入内存,或者单机计算耗时过长时,Mars 能通过自动并行化和分布式调度显著提升效率。例如,在估算圆周率的示例中,Mars 利用多核加速,将原本需要 20 多秒的计算缩短至数秒内完成。
Mars 的核心亮点在于其“无感升级”的体验:用户只需将导入语句从 import numpy 改为 import mars.tensor,或将 pandas.DataFrame 替换为 mars.DataFrame,并在最后调用 .execute(),底层系统便会自动接管复杂的分布式计算逻辑。无论是希望在笔记本电脑上充分利用多核性能,还是需要在服务器集群上处理 TB 级数据,Mars 都能提供流畅且高效的解决方案,让大规模计算触手可及。
使用场景
某金融数据团队需要在单台服务器上快速估算数亿条交易记录的风险指标,传统单机方案难以在有限时间内完成计算。
没有 mars 时
- 使用原生 Pandas 处理超过内存容量的数据集时,程序直接抛出内存溢出错误,导致任务频繁中断。
- 为了强行运行,开发人员不得不编写复杂的分块读取与合并逻辑,代码维护成本极高且容易出错。
- 即使勉强跑通,单核 CPU 串行处理 2 亿行数据耗时超过 20 秒,无法满足实时风控的时效要求。
- 想要利用服务器多核优势或扩展至集群,必须重构底层代码引入 Spark 等重型框架,迁移门槛过高。
使用 mars 后
- Mars DataFrame 自动将大表切分为多个分区并行计算,轻松突破单机内存限制,无需手动管理分块。
- 开发者只需将
import pandas替换为import mars.tensor或mars.dataframe,原有 NumPy/Pandas 代码几乎零修改即可运行。 - 借助多核并行加速,同样的大规模蒙特卡洛模拟任务耗时从 22.5 秒骤降至 3.77 秒,效率提升近 6 倍。
- 架构具备弹性伸缩能力,同一套代码既可本地调试,也能无缝连接现有集群进行分布式大规模运算。
Mars 让数据科学家无需学习复杂的分布式编程,即可用熟悉的 Python 语法轻松驾驭海量数据计算。
运行环境要求
未说明
未说明

快速开始
.. image:: https://raw.githubusercontent.com/mars-project/mars/master/docs/source/images/mars-logo-title.png
|PyPI版本| |文档| |构建| |覆盖率| |质量| |许可证|
Mars 是一个基于张量的大规模数据计算统一框架,能够扩展 NumPy、Pandas、scikit-learn 等多种库的功能。
文档, 中文文档
安装
Mars 的安装非常简单,只需执行以下命令:
.. code-block:: bash
pip install pymars
开发者安装
如果您希望为 Mars 贡献代码,可以按照以下步骤进行开发环境的安装:
.. code-block:: bash
git clone https://github.com/mars-project/mars.git
cd mars
pip install -e ".[dev]"
更多关于 Mars 安装的详细信息,请参阅 Mars 文档中的 `安装 <https://mars-project.readthedocs.io/en/latest/installation/index.html>`_ 部分。
架构概览
--------
.. image:: https://raw.githubusercontent.com/mars-project/mars/master/docs/source/images/architecture.png
快速入门
--------
在本地启动一个新的运行时:
.. code-block:: python
>>> import mars
>>> mars.new_session()
或者连接到已初始化的 Mars 集群:
.. code-block:: python
>>> import mars
>>> mars.new_session('http://<web_ip>:<ui_port>')
Mars 张量
----------
Mars 张量提供了与 NumPy 类似的熟悉接口。
+-----------------------------------------------+-----------------------------------------------+
| **NumPy** | **Mars 张量** |
+-----------------------------------------------+-----------------------------------------------+
|.. code-block:: python |.. code-block:: python |
| | |
| import numpy as np | import mars.tensor as mt |
| N = 200_000_000 | N = 200_000_000 |
| a = np.random.uniform(-1, 1, size=(N, 2)) | a = mt.random.uniform(-1, 1, size=(N, 2)) |
| print((np.linalg.norm(a, axis=1) < 1) | print(((mt.linalg.norm(a, axis=1) < 1) |
| .sum() * 4 / N) | .sum() * 4 / N).execute()) |
| | |
+-----------------------------------------------+-----------------------------------------------+
|.. code-block:: |.. code-block:: |
| | |
| 3.14174502 | 3.14161908 |
| CPU times: user 11.6 s, sys: 8.22 s, | CPU times: user 966 ms, sys: 544 ms, |
| total: 19.9 s | total: 1.51 s |
| Wall time: 22.5 s | Wall time: 3.77 s |
| | |
+-----------------------------------------------+-----------------------------------------------+
Mars 可以充分利用多核资源,即使在笔记本电脑上也能显著提升性能,并且在分布式环境中表现更优。
Mars DataFrame
--------------
Mars DataFrame 提供了与 Pandas 类似的熟悉接口。
+-----------------------------------------+-----------------------------------------+
| **Pandas** | **Mars DataFrame** |
+-----------------------------------------+-----------------------------------------+
|.. code-block:: python |.. code-block:: python |
| | |
| import numpy as np | import mars.tensor as mt |
| import pandas as pd | import mars.dataframe as md |
| df = pd.DataFrame( | df = md.DataFrame( |
| np.random.rand(100000000, 4), | mt.random.rand(100000000, 4), |
| columns=list('abcd')) | columns=list('abcd')) |
| print(df.sum()) | print(df.sum().execute()) |
| | |
+-----------------------------------------+-----------------------------------------+
|.. code-block:: |.. code-block:: |
| | |
| CPU times: user 10.9 s, sys: 2.69 s, | CPU times: user 1.21 s, sys: 212 ms, |
| total: 13.6 s | total: 1.42 s |
| Wall time: 11 s | Wall time: 2.75 s |
+-----------------------------------------+-----------------------------------------+
Mars Learn
----------
Mars Learn 提供了与 scikit-learn 类似的熟悉接口。
+---------------------------------------------+----------------------------------------------------+
| **Scikit-learn** | **Mars learn** |
+---------------------------------------------+----------------------------------------------------+
|.. code-block:: python |.. code-block:: python |
| | |
| from sklearn.datasets import make_blobs | from mars.learn.datasets import make_blobs |
| from sklearn.decomposition import PCA | from mars.learn.decomposition import PCA |
| X, y = make_blobs( | X, y = make_blobs( |
| n_samples=100000000, n_features=3, | n_samples=100000000, n_features=3, |
| centers=[[3, 3, 3], [0, 0, 0], | centers=[[3, 3, 3], [0, 0, 0], |
| [1, 1, 1], [2, 2, 2]], | [1, 1, 1], [2, 2, 2]], |
| cluster_std=[0.2, 0.1, 0.2, 0.2], | cluster_std=[0.2, 0.1, 0.2, 0.2], |
| random_state=9) | random_state=9) |
| pca = PCA(n_components=3) | pca = PCA(n_components=3) |
| pca.fit(X) | pca.fit(X) |
| print(pca.explained_variance_ratio_) | print(pca.explained_variance_ratio_) |
| print(pca.explained_variance_) | print(pca.explained_variance_) |
| | |
+---------------------------------------------+----------------------------------------------------+
Mars learn 还与许多库集成:
- `TensorFlow <https://mars-project.readthedocs.io//en/latest/user_guide/learn/tensorflow.html>`_
- `PyTorch <https://mars-project.readthedocs.io/en/latest/user_guide/learn/pytorch.html>`_
- `XGBoost <https://mars-project.readthedocs.io/en/latest/user_guide/learn/xgboost.html>`_
- `LightGBM <https://mars-project.readthedocs.io/en/latest/user_guide/learn/lightgbm.html>`_
- `Joblib <https://mars-project.readthedocs.io/en/latest/user_guide/learn/joblib.html>`_
- `Statsmodels <https://mars-project.readthedocs.io/en/latest/user_guide/learn/statsmodels.html>`_
Mars remote
-----------
Mars remote 允许用户并行执行函数。
+-------------------------------------------+--------------------------------------------+
| **普通函数调用** | **Mars remote** |
+-------------------------------------------+--------------------------------------------+
|.. code-block:: python |.. code-block:: python |
| | |
| import numpy as np | import numpy as np |
| | import mars.remote as mr |
| | |
| def calc_chunk(n, i): | def calc_chunk(n, i): |
| rs = np.random.RandomState(i) | rs = np.random.RandomState(i) |
| a = rs.uniform(-1, 1, size=(n, 2)) | a = rs.uniform(-1, 1, size=(n, 2)) |
| d = np.linalg.norm(a, axis=1) | d = np.linalg.norm(a, axis=1) |
| return (d < 1).sum() | return (d < 1).sum() |
| | |
| def calc_pi(fs, N): | def calc_pi(fs, N): |
| return sum(fs) * 4 / N | return sum(fs) * 4 / N |
| | |
| N = 200_000_000 | N = 200_000_000 |
| n = 10_000_000 | n = 10_000_000 |
| | |
| fs = [calc_chunk(n, i) | fs = [mr.spawn(calc_chunk, args=(n, i)) |
| for i in range(N // n)] | for i in range(N // n)] |
| pi = calc_pi(fs, N) | pi = mr.spawn(calc_pi, args=(fs, N)) |
| print(pi) | print(pi.execute().fetch()) |
| | |
+-------------------------------------------+--------------------------------------------+
|.. code-block:: |.. code-block:: |
| | |
| 3.1416312 | 3.1416312 |
| CPU times: user 32.2 s, sys: 4.86 s, | CPU times: user 616 ms, sys: 307 ms, |
| total: 37.1 s | total: 923 ms |
| Wall time: 12.4 s | Wall time: 3.99 s |
| | |
+-------------------------------------------+--------------------------------------------+
DASK on Mars
------------
更多信息请参阅 `DASK on Mars`_。
急切模式
Mars 支持急切模式,这使得开发更加友好且易于调试。
用户可以通过选项在程序或控制台会话的开始处启用急切模式。
.. code-block:: python
>>> from mars.config import options
>>> options.eager_mode = True
或者使用上下文管理器。
.. code-block:: python
>>> from mars.config import option_context
>>> with option_context() as options:
>>> options.eager_mode = True
>>> # 急切模式仅在 with 语句块内生效
>>> ...
如果启用了急切模式,张量、DataFrame 等将在创建后默认由当前会话立即执行。
.. code-block:: python
>>> import mars.tensor as mt
>>> import mars.dataframe as md
>>> from mars.config import options
>>> options.eager_mode = True
>>> t = mt.arange(6).reshape((2, 3))
>>> t
array([[0, 1, 2],
[3, 4, 5]])
>>> df = md.DataFrame(t)
>>> df.sum()
0 3
1 5
2 7
dtype: int64
Mars on Ray
Mars 也与 Ray 深度集成,可以高效地在 Ray <https://docs.ray.io/en/latest/>_ 上运行,并与基于 Ray 核心构建的庞大机器学习和分布式系统生态进行交互。
通过以下方式在本地启动一个新的 Mars on Ray 运行时:
.. code-block:: python
import mars
mars.new_session(backend='ray')
# 执行计算
与 Ray Dataset 交互:
.. code-block:: python
import mars.tensor as mt
import mars.dataframe as md
df = md.DataFrame(
mt.random.rand(1000_0000, 4),
columns=list('abcd'))
# 将 Mars DataFrame 转换为 Ray Dataset
ds = md.to_ray_dataset(df)
print(ds.schema(), ds.count())
ds.filter(lambda row: row["a"] > 0.5).show(5)
# 将 Ray Dataset 转换回 Mars DataFrame
df2 = md.read_ray_dataset(ds)
print(df2.head(5).execute())
更多信息请参阅 Mars on Ray_。
易于扩展和缩放
Mars 可以在单台机器上运行,也可以扩展到拥有数千台机器的集群中。从单机迁移到集群以处理更多数据或获得更好的性能,过程相当简单。
裸金属部署
通过在集群中的不同机器上启动 Mars 分布式运行时的不同组件,Mars 很容易扩展到集群环境中。
可以选择一台节点作为 Supervisor,该节点集成了 Web 服务,而其他节点则作为 Worker。Supervisor 可以使用以下命令启动:
.. code-block:: bash
mars-supervisor -h <host_name> -p <supervisor_port> -w <web_port>
Worker 则可以使用以下命令启动:
.. code-block:: bash
mars-worker -h <host_name> -p <worker_port> -s <supervisor_endpoint>
所有 Mars 进程启动完成后,用户可以执行:
.. code-block:: python
>>> sess = new_session('http://<web_ip>:<ui_port>')
>>> # 执行计算
Kubernetes 部署
更多信息请参阅 Run on Kubernetes_。
Yarn 部署
更多信息请参阅 `Run on Yarn`_。
参与贡献
----------------
- 阅读 `开发指南 <https://mars-project.readthedocs.io/en/latest/development/index.html>`_。
- 加入我们的 Slack 工作组:`Slack <https://join.slack.com/t/mars-computing/shared_invite/zt-17pw2cfua-NRb2H4vrg77pr9T4g3nQOQ>`_。
- 加入邮件列表:发送邮件至 `mars-dev@googlegroups.com`_。
- 请通过提交 `GitHub issue`_ 报告问题。
- 使用 `pull requests`_ 提交您的贡献。
感谢您提前做出的贡献!
.. |Build| image:: https://github.com/mars-project/mars/workflows/Mars%20CI%20Core/badge.svg
:target: https://github.com/mars-project/mars/actions
.. |Coverage| image:: https://codecov.io/gh/mars-project/mars/branch/master/graph/badge.svg
:target: https://codecov.io/gh/mars-project/mars
.. |Quality| image:: https://img.shields.io/codacy/grade/6a80bb4659ed410eb33795f580c8615e.svg
:target: https://app.codacy.com/project/mars-project/mars/dashboard
.. |PyPI version| image:: https://img.shields.io/pypi/v/pymars.svg
:target: https://pypi.python.org/pypi/pymars
.. |Docs| image:: https://img.shields.io/badge/docs-latest-brightgreen.svg
:target: `Documentation`_
.. |License| image:: https://img.shields.io/pypi/l/pymars.svg
:target: https://github.com/mars-project/mars/blob/master/LICENSE
.. _`mars-dev@googlegroups.com`: https://groups.google.com/forum/#!forum/mars-dev
.. _`GitHub issue`: https://github.com/mars-project/mars/issues
.. _`pull requests`: https://github.com/mars-project/mars/pulls
.. _`Documentation`: https://mars-project.readthedocs.io
.. _`中文文档`: https://mars-project.readthedocs.io/zh_CN/latest/
.. _`Mars on Ray`: https://mars-project.readthedocs.io/en/latest/installation/ray.html
.. _`Run on Kubernetes`: https://mars-project.readthedocs.io/en/latest/installation/kubernetes.html
.. _`Run on Yarn`: https://mars-project.readthedocs.io/en/latest/installation/yarn.html
.. _`DASK on Mars`: https://mars-project.readthedocs.io/en/latest/user_guide/contrib/dask.html
版本历史
v0.10.02023/01/10v0.9.02022/06/12v0.10.0a12022/06/12v0.8.72022/05/10v0.9.0rc32022/05/07v0.8.62022/05/07v0.8.52022/04/09v0.9.0rc22022/04/09v0.8.42022/03/23v0.9.0rc12022/03/23v0.8.32022/03/08v0.9.0b22022/03/08v0.8.22022/02/21v0.9.0b12022/02/21v0.8.12022/02/03v0.9.0a22022/02/03v0.8.02021/12/16v0.9.0a12021/12/16v0.7.52021/10/23v0.8.0rc12021/10/23常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
opencode
OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。