[Script request]: EXO #16804
Unanswered
Data-PhiIe
asked this question in
Request script
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Application Name
EXO
Official Website
https://exolabs.net/
Source Repository
https://github.com/exo-explore/exo
Repository Stars
47,1000
Minimum Adoption Requirement
Description
Run frontier AI locally.
Why should this be added?
It's a good way to distribute an LLM across multiple nodes. I currently have this set up manually, with both GPU and RDMA passthrough.
Installation Notes
I aplologize for this very long section I'm going to copy paste the notes from when I set mine up originally, hopefully it helps take the steps I took and automate them with a helper script! :)
Installation Steps for Exo Labs on Debian
Prerequisites
Before starting the installation, ensure you have the following:
Step-by-Step Installation
Follow these steps to install Exo Labs on your Debian system:
1. Update Package List
Open your terminal and run the following command to update your package list:
2. Install Node.js and npm
Install Node.js and npm using the following command:
3, Clone the Exo Repository
Clone the Exo repository from GitHub:
4. Install Required Dependencies
Navigate to the cloned directory and install the required Python dependencies:
Additional Notes
By following these steps, you will have Exo Labs installed and ready to use on your Debian system.
Generative Tool usage disclosure.
This solution was what worked in my configuration. MD formatting done myself with LLM assistance (not just a 1:1 copy paste) + generated with DuckDuckGo Search Assist, and/or DuckAI web sources referenced by LLM below:
Markdown formatting done by myself + LLM assisted sugestions to achieve the desired outcome, instructions generated with DuckDuckGo
Search Assist, sources the LLM referenced below:Github Sonit Medium
Enabling CUDA
To enable CUDA on ExoLabs, you need to install the NVIDIA CUDA toolkit and ensure your GPU drivers are up to date. After that, you can run the Exo application with the appropriate commands to utilize CUDA for distributed inference.
Steps to Enable CUDA on ExoLabs
To enable CUDA on ExoLabs, follow these steps:
1. Install NVIDIA CUDA Toolkit
Download the latest version of the NVIDIA CUDA toolkit from the official NVIDIA website.
Ensure that you select the correct version compatible with your operating system.
2. Update GPU Drivers
Make sure your NVIDIA GPU drivers are up to date. You can check your current driver version using the command:
If your drivers are outdated, download and install the latest drivers from the NVIDIA website.
3. Verify CUDA Installation
After installing the CUDA toolkit, verify the installation by running the following command in your terminal:
This command should display the version of the installed CUDA toolkit.
If
nvcc --versionreturns a value skip to step [] if not continue from hereinstall the CUDA toolkit and configure the environment so applications (and ExoLabs) can use CUDA.
Steps (assume Ubuntu/Debian; adapt if different):
4. Install CUDA toolkit
apt update && upgrade apt install -y cuda-toolkit-13-3Alternatively, use the runfile installer from NVIDIA if you prefer.
5. Verify nvcc and PATH
After install, ensure nvcc is on PATH:
Typical locations: /usr/local/cuda-13.3/bin
ctrl+Xfollowed byythenenter6. Verify driver & CUDA runtime compatibility
If you installed a mismatched toolkit, reinstall a compatible one.
Install cuDNN / NCCL if needed
If ExoLabs or your workloads need cuDNN or NCCL, download matching versions for CUDA 13.x from NVIDIA (or apt packages where available) and install.
ExoLabs-specific settings (common patterns)
Ensure ExoLabs process sees GPUs:
Troubleshooting
nvcc still missing after toolkit install:
Quick verification commands
(if using PyTorch) /usr/local/cuda-13.3/extras/demo_suite/deviceQuery (CUDA samples)
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"7. Set Up Exo Application
Create a virtual environment and activate it:
python3 -m venv exo/.venv/ source exo/.venv/bin/activateInstall the Exo application with the following command:
pip install -e .Upgrade tinygrad to the latest version to fix any CUDA issues:
8. Run Exo with CUDA
Start the Exo application using the CUDA backend with the following command:
9. Test CUDA Functionality
To confirm that CUDA is functioning correctly, run the minimal smoke test commands:
nvidia-smi python3 -c "from tinygrad import Device; print(Device.DEFAULT)"If everything is set up correctly, you should see "CUDA" as the output.
By following these steps, you will successfully enable CUDA on ExoLabs for distributed inference.
Generative Tool usage disclosure.
This solution was what worked in my configuration. Markdown formatting done by myself + LLM assisted sugestions to achieve the desired outcome (not just a 1:1 copy paste) + generated with DuckDuckGo
Search Assist, and/or DuckAI web sources referenced by LLM below:modal.com Medium
Service File
Enable RoCE on Mellanox 100GbE cards (Proxmox / Linux)
Assumptions: Mellanox cards support RoCE, firmware and drivers are up to date, host OS is Debian/Proxmox (based on Debian/Ubuntu), and your network switches support DCB/PFC or you will use RoCEv2 (UDP/IP) without lossless fabric.
1. Install/verify drivers and tools
2. Verify device and driver
lspci | grep -i mellanox3. Choose RoCE version
4. Configure firmware/driver for RoCE
(example; consult model-specific flags)
5. Configure IP and MTU
6. Ensure kernel modules and services
7. Switch/fabric configuration
8. Verify RDMA interface
Or for RoCE UDP tests use
rping/rping2or perftest with IPoIB/RoCE options.9. Troubleshooting
10. Enabling in VM and LXC containers
In Proxmox VM context
In Proxmox LXC context
Unprivileged LXCs cannot get PCI passthrough; you must keep the Mellanox driver on the host and expose the RDMA character devices and required sysfs paths to the container. Below are exact, minimal steps and the exact Proxmox LXC config lines.
Assumptions
Host: check devices and nodes
1. Confirm devices:
2. Note device majors/minors (example):
Bind-mount device nodes and sysfs into unprivileged LXC
1. Create a folder on host to expose devices (optional, clearer):
(use cp -a to preserve nodes)
2. Adjust permissions so container's unprivileged UID/GID mapping can access nodes:
3. Bind-mount into LXC config (/etc/pve/lxc/.conf):
Add these exact lines:
Exact device-major lookup command (run on host) and substitute results:
Expose sysfs and net device info (bind-mounts)
Add these mp entries to /etc/pve/lxc/101.conf:
Replace <host_iface> with your Mellanox interface name (ip link show to find it).
Allow needed capabilities (already limited for unprivileged; add only what’s necessary)
Add to /etc/pve/lxc/101.conf:
Inside the container (after starting it)
1. Install userspace RDMA libs:
apt update && apt install -y rdma-core ibverbs-utils2. Verify devices visible:
ls -l /dev/infiniband /dev/uverbs*Notes and troubleshooting
Prompts to run for AI assistance:
Run:
ls -l /dev/infiniband /dev/uverbs*If you want, tell me your NIC model (output of lspci -nn | grep -i mellanox) and whether you plan host-only or VM passthrough, give exact commands for your hardware and Proxmox version.
Run:
lspci -nn | grep -i mellanoxUse these exact lines in /etc/pve/lxc/101.conf (adjust mp0 path if your LXC id differs):
mp0: /var/lib/lxc-rdma-devs/101/dev-infiniband,mp=/dev/infiniband
lxc.cgroup2.devices.allow: c 10:263 rwm
lxc.cgroup2.devices.allow: c 231:0 rwm
lxc.cgroup2.devices.allow: c 231:192 rwm
Explanation of mapping (from your ls -l):
After updating the config:
If you get permission denied inside the container, paste the output of ls -l /var/lib/lxc-rdma-devs/101/dev-infiniband and cat /etc/subuid for adjustments.
Due Diligence
All reactions