当前位置: 首页 > news >正文

exo - 使用日常设备运行AI集群

文章目录

    • 一、关于 exo
      • 特点
        • 1、广泛的模型支持
        • 2、动态模型分区
        • 3、自动设备发现
        • 4、ChatGPT兼容API
        • 5、设备平等
    • 二、安装
      • 先决条件
      • 从源码安装
      • 故障排除
      • 性能
    • 三、使用
      • 1、在多个macOS设备上的示例使用
        • 设备1:
        • 设备2:
      • 2、多个异构设备(MacOS+Linux)上的示例用法
        • 设备1(MacOS):
        • 设备2(Linux):
    • 四、调试
      • 已知问题
      • 推理引擎
      • 网络模块
    • 五、其它


一、关于 exo


在家中使用日常设备运行自己的AI集群📱💻🖥️⌚

exo:在家中使用日常设备运行您自己的AI集群。由 exolabs维护。

忘掉昂贵的NVIDIA GPU,将您现有的设备统一到一个强大的GPU中:iPhone、iPad、Android、Mac、Linux,几乎任何设备!

  • github : https://github.com/exo-explore/exo
  • discord | telegram| X
  • Tests : https://dl.circleci.com/status-badge/redirect/circleci/TrkofJDoGzdQAeL6yVHKsg/4i5hJuafuwZYZQxbRAWS71/tree/main
  • License: GPL v3

特点


1、广泛的模型支持

exo支持不同的模型,包括LLaMA(MLX和tinygrad)、Mistral、LlaVA、Qwen和Deepsearch。


2、动态模型分区

exo根据当前的网络拓扑和可用的设备资源优化地分割模型。这使您能够运行比在任何单个设备上都能运行的更大的模型。


3、自动设备发现

exo将使用可用的最佳方法自动发现 其他设备。零手动配置。


4、ChatGPT兼容API

exo为运行模型提供了一个ChatGPT兼容的API。使用exo在您自己的硬件上运行模型只是应用程序中的一行更改。


5、设备平等

与其他分布式推理框架不同,exo不使用主工架构,相反,exo设备连接p2p,只要一个设备连接到网络的某个地方,就可以用来运行模型。

exo支持不同的分区策略来跨设备拆分模型。默认分区策略是环形内存加权分区。这在一个环中运行推理,其中每个设备运行与设备内存成比例的模型层数量。


二、安装

当前推荐使用远吗 安装exo方法


先决条件

  • Python>=3.12.0是必需的,因为在以前的版本中有asyncio的问题。
    • NVIDIA驱动程序(测试与nvidia-smi
    • CUDA(https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#cuda-cross-platform-installation)(使用nvcc --version
    • cuDNN(https://developer.nvidia.com/cudnn-downloads)(用[链接](https://docs.nvidia.com/deeplearning/cudnn/latest/installation/linux.html#verifying-the-install-on-linux:~:text=at a time.-,Verifying the Install on Linux,Test passed!,-Upgrading From Older)测试)

从源码安装

git clone https://github.com/exo-explore/exo.git
cd exo
pip install .
# alternatively, with venv
source install.sh

故障排除

  • 如果在Mac上运行,MLX 有一个带有故障排除步骤的安装指南。

性能

用户根据经验发现,可以提高Apple Silicon Mac的性能:

  1. 升级到最新版本的MacOS 15。
  2. 运行./configure_mlx.sh。这会运行命令来优化苹果硅Mac上的GPU内存分配。


三、使用

1、在多个macOS设备上的示例使用


设备1:
python3 main.py

设备2:
python3 main.py

就是这样!无需配置-exo将自动发现其他设备。

exo启动一个类似ChatGPT的 WebUI(由tinygrad tinychat提供支持)http://localhost:8000

对于开发人员,exo还会在 http://localhost:8000/v1/chat/completions 上启动一个ChatGPT兼容的API端点。

curl http://localhost:8000/v1/chat/completions \-H "Content-Type: application/json" \-d '{"model": "llama-3.1-8b","messages": [{"role": "user", "content": "What is the meaning of exo?"}],"temperature": 0.7}'

curl http://localhost:8000/v1/chat/completions \-H "Content-Type: application/json" \-d '{"model": "llava-1.5-7b-hf","messages": [{"role": "user","content": [{"type": "text","text": "What are these?"},{"type": "image_url","image_url": {"url": "http://images.cocodataset.org/val2017/000000039769.jpg"}}]}],"temperature": 0.0}'

2、多个异构设备(MacOS+Linux)上的示例用法


设备1(MacOS):
python3 main.py --inference-engine tinygrad

这里我们明确告诉exo使用tinygrad推理引擎。


设备2(Linux):
python3 main.py

Linux设备将自动默认使用tinygrad推理引擎。

您可以在此处阅读有关tinygrad特定环境变量的信息。例如,您可以通过指定CLANG=1来配置tinygrad以使用cpu。


四、调试

使用DEBUG环境变量(0-9)启用调试日志。

DEBUG=9 python3 main.py

对于tinygrad推理引擎,有一个单独的DEBUG标志TINYGRAD_DEBUG可用于启用调试日志(1-6)。

TINYGRAD_DEBUG=2 python3 main.py

已知问题

在某些版本的MacOS/Python上,证书未正确安装,这可能会导致SSL错误(例如huggingface.co的SSL错误)。

要解决此问题,请运行安装证书命令,通常:

/Applications/Python 3.x/Install Certificates.command

🚧由于库的发展如此之快,iOS的实现已经落后于Python。

我们现在决定不发布有缺陷的iOS版本,也不会收到一堆过时代码的GitHub问题。

我们正在努力解决这个问题,并将在准备好后发布公告。

如果您现在想访问iOS实现,请发送电子邮件alex@exolabs.net使用您的GitHub用户名解释您的用例,您将被授予在GitHub上的访问权限。


推理引擎

exo支持以下推理引擎:

  • ✅ MLX
  • ✅ tinygrad
  • 🚧 PyTorch
  • 🚧 llama.cpp

网络模块

  • ✅ GRPC
  • 🚧 Radio
  • 🚧 Bluetooth

五、其它

  • exo正在招聘
    更多详情见: https://exolabs.net/
  • 参与
    exo是实验性软件。尽早发现错误。创建问题以便修复。exo实验室团队将努力快速解决问题。
  • 贡献
    我们也欢迎社区的贡献。我们在这张表上有一份赏金清单。

2024-11-14(四)


http://www.mrgr.cn/news/75253.html

相关文章:

  • 解锁微前端的优秀库
  • Vue开发风格
  • Hbase Shell
  • 如何在vscode 中打开新文件不覆盖上一个窗口
  • 网络物理隔离技术
  • python共享全局变量的方案
  • 2024年09月CCF-GESP编程能力等级认证Python编程一级真题解析
  • 微信小程序-prettier 格式化
  • Diffusion Policy——斯坦福机器人UMI所用的扩散策略:从原理到其编码实现(含Diff-Control、ControlNet详解)
  • leetcode hot100【LeetCode 105.从前序与中序遍历序列构造二叉树】java实现
  • Web性能优化:从基础到高级
  • 二叉树的遍历(手动)
  • 一文了解Android的核心系统服务
  • 不宽的宽字符
  • 面试中如何回答“怎样实现 RPC 框架”的问题?
  • 高效的 JSON 处理库 json.cpp
  • ubuntu里面的gcc编译方法
  • 三维测量与建模笔记 - 特征提取与匹配 - 4.2 梯度算子、Canny边缘检测、霍夫变换直线检测
  • 使用SimpleDateFormat的踩坑指南
  • 如何让 ChatGPT 像人类一样书写:4个步骤让你的内容栩栩如生!
  • 探索Google Earth Engine:利用MODIS数据和R语言进行2000-2021年遥感生态指数(RSEI)的时空趋势分析
  • otter 自由门使用方法
  • OpenGL 进阶系列08 - 天空盒实现
  • python习题练习
  • 【STM32外设系列】NRF24L01无线收发模块
  • 代码随想录算法训练营第45天 | 115.不同的子序列、583. 两个字符串的删除操作、72. 编辑距离