exo
exo日常设备在家中运行您自己的 AI 集群
exo-explore/exo:使用日常设备📱💻 🖥️⌚在家中运行您自己的 AI 集群
EXO 根据当前的网络拓扑和可用设备资源对模型进行最佳拆分。这使您能够运行比在任何单个设备上运行更大的模型。
先决条件
- Python>=3.12.0 是必需的,因为以前版本中的 asyncio 存在问题。
- 对于支持 NVIDIA GPU 的 Linux(仅限 Linux,如果不使用 Linux 或 NVIDIA,请跳过):
- NVIDIA 驱动程序 - 使用
nvidia-smi
- CUDA 工具包 - 从 NVIDIA CUDA 指南安装,使用
nvcc --version
- cuDNN 库 - 从 NVIDIA cuDNN 页面下载,按照以下步骤验证安装
- NVIDIA 驱动程序 - 使用
确保nvidia-smi,nvcc,cuDNN配置正确,缺一不可。
- 运行 exo 的唯一要求是所有设备上都有足够的内存,以便将整个模型放入内存中。例如,如果您运行的是 llama 3.1 8B (fp16),则所有设备都需要 16GB 内存。以下任何配置都可以工作,因为它们的内存总数超过 16GB:
- 2 个 8GB M3 MacBook Air
- 1 x 16GB NVIDIA RTX 4070 Ti 笔记本电脑
- 2 个 Raspberry Pi 400,每个 4GB RAM(在 CPU 上运行)+ 1 个 8GB Mac Mini
- EXO 旨在在具有异构功能的设备上运行。例如,您可以让一些设备配备强大的 GPU,而其他设备则配备集成 GPU 甚至 CPU。添加功能较差的设备会减慢单个推理延迟,但会增加集群的整体吞吐量。
从docker开始
从最简基础镜像nanozoo/python3.12开始
docker pull nanozoo/python3.12:3.12--d46ab4d
启动临时容器
1 | docker run -it --name exo_builder_temp \ |
-it
: 启动一个交互式(i
)终端(t
)。--name exo_builder_temp
: 给这个临时容器一个易于识别的名称。python:3.12
: 使用我们指定的基础镜像。bash
: 启动容器后直接进入 Bash shell。
配置exo
进入容器,安装必要的系统工具
1 | apt-get update |
清理 apt 缓存,减小最终镜像大小
1 | rm -rf /var/lib/apt/lists/* |
创建工作目录
1 | mkdir -p /exo |
克隆 EXO 仓库
1 | git clone https://github.com/exo-explore/exo.git |
安装 EXO 及其 Python 依赖,--no-cache-dir
用于避免在容器内部创建不必要的pip缓存
1 | pip install -e . --no-cache-dir |
退出容器
exit
提交容器状态为镜像
1 | docker commit \ |
1 | HF_ENDPOINT=https://hf-mirror.com exo |
可以在启动命令前添加环境变量访问hf镜像站
创建macvlan网络
1 | docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 macnet |
docker network create
命令创建了一个新的 Docker 网络,使用了 macvlan
驱动。macvlan
网络允许您将容器连接到物理网络,就像它们是网络上的独立主机一样。您为这个网络指定了以下参数:
-d macvlan
:指定网络驱动为macvlan
。--subnet=192.168.1.0/24
:指定网络的子网掩码为192.168.1.0/24
。--gateway=192.168.1.1
:指定网络的网关地址为192.168.1.1
。-o parent=eth0
:指定父接口为eth0
,这是混杂模式下配置的物理网络接口。macnet
:是新创建的 Docker 网络的名称。- 确保您选择的子网地址没有被路由器、交换机或其他网络设备使用。如果网关地址已被占用,容器将无法正常通信。
使用ifconfig
查看网络设备
查看子网下设备避免冲突,sudo arp-scan -I enp4s0 --localnet
启动容器
1 | # 运行带有 macvlan 网络、GPU 支持和 tinygrad CUDA 环境变量的 EXO 容器 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 polar-bear~Blog!
评论