* fix(wheel): exclude libfabric/libefa from auditwheel bundle The wheel build runs `auditwheel repair`, which by default grafts every non-excluded shared library the extension links against into the wheel's `.libs/` directory and rewrites RPATH to prefer the bundled copy. The exclude list already carves out the system RDMA/EFA stack (libibverbs, libmlx5, libnuma, libcuda, ...) but missed libfabric and libefa. As a result a pip-installed wheel ships its own `mooncake_transfer_engine.libs/libfabric-<hash>.so.1` and `engine.so` loads that instead of the system `/opt/amazon/efa/lib/libfabric.so.1`. On AWS EFA hosts this puts two independent libfabric instances in one process: Mooncake uses the bundled one, while aws-ofi-nccl (loaded by NCCL) uses the system one. Each instance runs its own `ofi_hmem_init` and opens EFA devices independently. When Mooncake initializes first it claims the EFA device context; aws-ofi-nccl's later `fi_getinfo` then returns "provider efa output empty list" and NCCL silently falls back to the TCP provider (169.254.170.x), which hangs cross-node collectives such as `all_gather_object`. libfabric is the one library that MUST be shared with the system aws-ofi-nccl plugin, so it has to come from the system just like libibverbs/libmlx5 already do. Excluding it (and libefa) makes the wheel load the same libfabric the rest of the EFA stack uses, eliminating the dual-instance conflict. --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| source | ||
| Makefile | ||
| README.md | ||
| make.bat | ||
README.md
Mooncake documents
Build the docs
- Make sure in
docsdirectory
cd docs
- Install the dependencies:
pip install -r ../requirements_docs.txt
- Clean the previous build (optional but recommended):
make clean
- Generate the HTML documentation:
make html
Be sure to set locale right before building.
Open the docs with your browser
- Serve the documentation locally:
python -m http.server -d build/html/
This will start a local server at http://localhost:8000. You can now open your browser and view the documentation.
If port 8000 is already in use, you can specify a different port, for example:
python -m http.server 3000 -d build/html/