exo是一个实验性软件,它可以将多种设备统一成一个强大的GPU,支持广泛模型,并具有动态模型分区、自动设备发现等功能。
exo的主要特点包括:
- 广泛模型支持:exo支持不同的模型,如LLaMA(包括MLX和tinygrad)、Mistral、LlaVA、Qwen和Deepseek等。
- 动态模型分区:根据当前网络拓扑和可用设备资源,exo可以最优地拆分模型。这使得用户能够在任何单一设备上运行比原本能够运行的更大的模型。
- 自动设备发现:exo会自动使用最佳方法发现其他设备,无需手动配置1。
- ChatGPT兼容API:exo提供了一个与ChatGPT兼容的API,用于运行模型。只需在应用程序中进行一行更改,即可使用exo在自己的硬件上运行模型。
- 设备平等性:与其他分布式推理框架不同,exo不使用主从架构。相反,exo设备通过p2p连接。只要设备在网络中的某个位置连接,就可以用于运行模型。
这才是真正多机协同处理AI集群软件啊,我们也来实践一下吧!
源代码:https://github.com/exo-explore/exo
安装前准备工作
如果是非Intel的Mac,那么可以使用全系列模型,如果是Intel的Mac或普通X86 pc,那么只能使用Llama模型。 整个组网系统里,只要有一台Mac M芯片的机器,就能使用全系列模型,比如DeepSeek模型。
整个调试工作比较复杂,可以参考这里:尝试在exo集群下使用deepseek模型:第一步,调通llama-CSDN博客
下载源代码
使用git clone下载exo的源代码
git clone https://github.com/exo-explore/exo
安装python3.12版本
exo必须要求python3.12版本或以上,所以要安装python3.12版本。
安装python官方3.12版本
使用官方python安装,
下载地址:Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
找到符合自己操作系统的python3.12版本,下载安装
附加操作:
可以创建一个新环境并激活,使用命令:
python3.12 -m venv py312
source py312/bin/activate
激活环境并安装uv
source py312/bin/activate
pip install uv
uv并不是必须要安装的。之所以安装uv,是因为uv安装ptyhon包更快,
别忘记添加pip加速镜像并更新pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install pip -U
安装miniconda python3.12版本
从清华源找到自己需要的版本:Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
比如Linux下就使用这个:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py312_25.1.1-1-Linux-x86_64.sh
下载后安装:
sh download/Miniconda3-py312_25.1.1-1-Linux-x86_64.sh
一般我习惯把它安装py312目录。安装好后激活环境
source ~/py312/bin/activate
添加pip加速镜像并更新pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install pip -U
这样就算完成了。如果学有余力,还有安装uv
pip install uv
感觉uv安装的时候快,但是下载软件的时候慢,所以我用uv的时候都会加上pip的-i参数:
-i https://pypi.tuna.tsinghua.edu.cn/simple
以安装numpy为例,最终命令如下:
uv pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
安装llvmlite库和clang
在实践中发现这两个库需要手动安装。
pip安装llvmlite库
pip install llvmlite
ubuntu下apt安装clang
sudo apt install clang
如果有关于libfl的报错,安装这个库
sudo apt install libgl1-mesa-glx libglu1-mesa
安装exo
直接使用如下命令安装即可
git clone https://github.com/exo-explore/exo.git
cd exo
pip install -e .
# alternatively, with venv
source install.sh
注意,pip install -e . 和 source install.sh 执行其中一条即可,不用两个都执行。
也可以使用uv来安装:
uv pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成,直接执行exo即可启动服务!国内用户,启动前可以设置hugging face的镜像:
export HF_ENDPOINT=https://hf-mirror.com
启动服务
exo
启动后,提示:Web Chat URL (tinychat): http://192.168.0.16:52415
用web浏览器打开这个网址,就可以配置和使用exo啦!
比如下载模型:
以下是三种操作系统的实践记录。
Ubuntu下安装
安装好python3.12版本,然后就执行上面的安装命令即可。
中间碰到了这个问题:ubuntu22启动exo报错OSError: /home/skywalk/py312/lib/libgcc_s.so: invalid ELF header
解决方法见调试部分。
MAC下的安装
不明白为什么git clone的时候老报错,没有解决问题。只好采用其它方法解决。一种是直接在github下载源代码压缩文件,再pip install -e . 安装。但是mac下安装的时候,还是报git clone错误。后来发现是mac的github无法下载大文件,会报错:git-lfs: command not foundmac下git clone的时候报错:git-lfs: command not found-CSDN博客
后来是到github的repo页面,发现有mac版本exo的,下载,然后执行
./install.sh
再执行(这里重复了,其实这两句执行任何一句即可)
source install.sh
安装完成!显示:
Detected system: Intel Mac
Inference engine name after selection: tinygrad
Using inference engine: TinygradDynamicShardInferenceEngine with shard downloader: HFShardDownloader
[]
Chat interface started:
- http://127.0.0.1:52415
- http://192.168.0.101:52415
ChatGPT API endpoint served at:
- http://127.0.0.1:52415/v1/chat/completions
- http://192.168.0.101:52415/v1/chat/completions
has_read=True, has_write=True
竟然启动了呢!
最后mac可以安装运行,但是执行的时候还有问题,也许是这台机器太老的缘故,是2015版的air ,内存8G。
FreeBSD下的安装(失败)
FreeBSD下python库的安装可是非常复杂的,感觉比windows下和Linux下都坑!
先手工安装tinygrad
pip install tinygrad
好不容易装上了,后来是pip install -e .的时候,有个库(pydantic-core)死活装不上,只好放弃。这个库python3.11的时候勉强能装上,3.12的实在没装上。
使用的命令:
uv pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
总结
跌跌撞撞,终于安装完成,后面怎么应用还是一道坎!
反正现在怎么用deepseek,还需要研究研究!
最新发现,x86版本暂时还不支持DeepSeek,需要Mac M芯片的才行,关于怎么调试使用Llama型,也是颇废了一些功夫的,具体见:尝试在exo集群下使用deepseek模型:第一步,调通llama-CSDN博客
调试
mac下git clone 报错:git-lfs: command not found
接收对象中: 100% (9665/9665), 12.17 MiB | 5.15 MiB/s, 完成.
处理 delta 中: 100% (5876/5876), 完成.
git-lfs filter-process: git-lfs: command not found
fatal: 远端意外挂断了
warning: 克隆成功,但是检出失败。
您可以通过 'git status' 检查哪些已被检出,然后使用命令
'git checkout -f HEAD' 重试
用'git checkout -f HEAD' 没成功。
pip install git-lfs没成功
尝试用brew安装git-lfs
brew install git-lfs
也没成功。
最后是直接从github下载exo源码,没有用git clone命令,然后安装成功的。
pip install -e .
后来找到这个报错的解决方法,是从github下载了git-lfs安装文件,手工安装成功的,具体见:mac下git clone的时候报错:git-lfs: command not found-CSDN博客
pip install -e . 报错fatal: unable to access 'https://github.com/tinygrad/tinygrad.git/
这个github抽风啊
手工pip安装
~/py312/bin/pip3 install tinygrad
不行
最后总算过去了,也不知道是不是github抽风正好那段时间好了。
后来在ubuntu22版本下安装tinygrad是很顺利的。
最后看exo的setup.py文件里的包依赖关系,tinygrad用的是这句:
"uvloop==0.21.0",
"tinygrad @ git+https://github.com/tinygrad/tinygrad.git@ec120ce6b9ce8e4ff4b5692566a683ef240e8bc8",
不明白为什么别的包都是直接名字+版本号,只有tinygrad是使用了github安装。
FreeBSD下pip 安装exo报错numpy等安不上
无法安装xoe, numpy都安不上,报错
× Failed to download and build `numpy==2.2.3`
├─▶ Failed to install requirements from `build-system.requires`
├─▶ Failed to download and build `ninja==1.11.1.3`
├─▶ Failed to install requirements from `build-system.requires`
├─▶ Failed to build `cmake==3.31.4`
├─▶ The build backend returned an error
╰─▶ Call to `backend.build_wheel` failed (exit status: 1)
我这个系统里只有cmake 3.31.3 ,要重新编译cmake吗?
ninja倒是有1.11.1.4
numpy是pkg里只有1.x版本啊。 这回好么,FreeBSD反而拖了后腿啦。
pkg 安装cmake 和ninja
安装好后,pip 安装oxe不管用。不过numpy确实能装上了。
想办法,修改源代码setup.py文件,把tinygrad这句给注释掉了,因为已经用pip装好tinygrad了。
# "tinygrad @ git+https://github.com/tinygrad/tinygrad.git@ec120c
e6b9ce8e4ff4b5692566a683ef240e8bc8",
修改后,能往下跑了,但是cmake那块没过去
FreeBSD pip安装exo,cmake报错
*** CMake build failed
hint: This usually indicates a problem with the package or
the build environment.
help: `opencv-python` (v4.10.0.84) was included because `exo`
(v0.0.1) depends on `opencv-python`
缺opencv? 那我直接装上试试?
使用pkg 安装
sudo pkg install opencv
然后再pip安装opencv
uv pip install opencv-python -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
失败。
更新curl试试
sudo pkg install curl
最后好像opencv就是没装成,导致FreeBSD下exo无法使用。
另外还有个库:pydantic-core ,这个库也非常难装。如果是python3.11,还可以装上,python3.12,目前是没装成功!
exo运行后无法下载模型
点下载模型就卡住,原来是huggingface网站访问问题,运行oex前加入huggingface加速镜像即可
export HF_ENDPOINT=https://hf-mirror.com
ubuntu22启动exo报错OSError: /home/skywalk/py312/lib/libgcc_s.so: invalid ELF header
^^^^^^^^^^
File "/home/skywalk/py312/lib/python3.12/ctypes/__init__.py", line 379, in __init__
self._handle = _dlopen(self._name, mode)
^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: /home/skywalk/py312/lib/libgcc_s.so: invalid ELF header
安装libgcc试试
sudo apt install libgcc-12-dev
管用不?
还有ai说:sudo apt-get install --reinstall libgcc1
还是没解决。
最终,发现是python3.12自带的lib/libgcc_s.so库文件有问题,把它覆盖一下就行了
到目录/home/skywalk/py312/lib/执行:
cp libgcc_s.so.1 libgcc_s.so
问题解决!
具体见:https://blog.csdn.net/skywalk8163/article/details/145736598
ubuntu22启动exo报错None of PyTorch
None of PyTorch, TensorFlow >= 2.0, or Flax have been found. Models won't be available and only tokenizers, configuration and file/data utilities can be used.
安装torch
pip install torch
也可以用uv快一点
uv pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple
ubuntu22启动exo报错libGL.so.1: cannot open shared object file:
File "/home/skywalk/py312/lib/python3.12/importlib/__init__.py", line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
AI说:安装OpenGL库:sudo apt install libgl1-mesa-glx libglu1-mesa
于是安装库
sudo apt install libgl1-mesa-glx libglu1-mesa
果然搞定这个报错。
观察到每次启动地址不一样
好像如果大约同时启动,每个服务器都有公开ip
如果等一段时间再启动,那么后来启动的只有127.0.0.1地址。
Web Chat URL (tinychat): http://192.168.0.16:52415
Web Chat URL (tinychat): http://192.168.0.103:52415
有时候是192,有时候是127,这个到底也没明白怎么回事.....有明白的朋友请留言讲一下。
exo启动后报错No such file or directory: \'clang\'"}"
Failed to fetch completions: Error processing prompt (see logs with DEBUG>=2): <AioRpcError of RPC that terminated with: status = StatusCode.UNKNOWN details = "Unexpected <class 'FileNotFoundError'>: [Errno 2] No such file or directory: 'clang'" debug_error_string = "UNKNOWN:Error received from peer {created_time:"2025-02-19T12:29:26.877872737+00:00", grpc_status:2, grpc_message:"Unexpected <class \'FileNotFoundError\'>: [Errno 2] No such file or directory: \'clang\'"}"
刚不明白问题所在,走了弯路,
后来得知apt安装clang即可,具体见:尝试在exo下使用deepseek模型:第一步,调通llama-CSDN博客
sudo apt install clang