db3bfd118f
Network user buffer support for collectives
* Leverage user buffer registration to achieve zero-copy
inter-node communications for Ring, NVLS and Collnet
Add RAS subsystem
* Create a RAS thread keeping track of all NCCL communicators.
* Add a ncclras tool contacting the RAS thread and getting a
report.
Add fp8 support
* Add support for e5m2 and e4m3 8-bit floating point operations.
* Use Tree/PAT algorithms when possible for better numerical
stability.
Add NIC fusion
* Add a NET API to ask the network plugin to fuse a set of
interfaces together.
* Fuse multiple NICs under the same PCI switch as a single,
larger NIC.
Socket connection failure retry
* Retry in case of socket connection failure (unreachable host)
* Avoid "Software caused connection abort" errors on retries
QP connection failure retry
* Retry in case of IB QP connection failure during ibv_modify_qp.
NET API improvements
* Allow plugins to force a flush in case data and completion
ordering is not guaranteed.
* Indicate when completion is not needed (e.g. for the LL128
protocol), allowing plugins to skip generating a completion.
* Allow for full offload of allgather operations when using one
GPU per node.
NCCL_ALGO/NCCL_PROTO strict enforcement
* Extend NCCL_ALGO/NCCL_PROTO syntax to be able to specify
ALGO/PROTO filters for each collective operation.
* Strictly enforce the ALGO/PROTO filters, no longer fall back
on the ring algorithm when the filtering leaves no option and
error out instead.
Enable CUMEM host allocations
* Use cumem functions for host memory allocation by default.
Improved profiler plugin API
* Avoid dependencies with NCCL includes.
* Add information on whether the buffer is registered or not
Adjust PAT tuning
* Improve transition between PAT and ring at scale.
Fix hangs when running with different CPU architectures
* Detect when we use a mix of GPU architectures
* Ensure Algo/Proto decisions are made based on that unified
state.
Fix FD leak in UDS
* Fix a leak when mapping buffers intra-node with cumem IPCs.
Fix crash when mixing buffer registration and graph buffer registration.
* Separate local and graph registration to avoid crashes when we free
buffers.
Fix user buffer registration with dmabuf
* Make ncclSend/ncclRecv communication with buffer registration functional
on network plugins relying on dmabuf for buffer registration.
Fix crash in IB code caused by uninitialized fields.
Fix non-blocking ncclSend/ncclRecv
* Fix case where ncclSend/ncclRecv would return ncclSuccess in non-blocking
mode even though the operation was not enqueued onto the stream.
* Issue #1495
Various compiler tweaks and fixes
* PR #758
Fix typo in ncclTopoPrintGraph
* Issue #1468
[ROCm/rccl commit: 6aae379278]
155 líneas
4.9 KiB
Makefile
155 líneas
4.9 KiB
Makefile
#
|
|
# Copyright (c) 2015-2022, NVIDIA CORPORATION. All rights reserved.
|
|
#
|
|
# See LICENSE.txt for license information
|
|
#
|
|
include ../makefiles/common.mk
|
|
include ../makefiles/version.mk
|
|
|
|
##### src files
|
|
INCEXPORTS := nccl.h
|
|
LIBSRCFILES := \
|
|
bootstrap.cc channel.cc collectives.cc debug.cc enqueue.cc group.cc \
|
|
init.cc init_nvtx.cc net.cc proxy.cc transport.cc \
|
|
$(wildcard graph/*.cc) \
|
|
$(wildcard misc/*.cc) \
|
|
$(wildcard transport/*.cc) \
|
|
$(wildcard register/*.cc) \
|
|
$(filter-out ras/client.cc,$(wildcard ras/*.cc))
|
|
BINSRCFILES := ras/client.cc
|
|
|
|
##### lib files
|
|
LIBNAME := libnccl.so
|
|
STATICLIBNAME := libnccl_static.a
|
|
##### binaries
|
|
BINNAME := ncclras
|
|
##### pkgconfig files
|
|
PKGCONFIGFILE := nccl.pc
|
|
##### dirs
|
|
BUILDDIR ?= $(abspath ../build)
|
|
INCDIR := $(BUILDDIR)/include
|
|
LIBDIR := $(BUILDDIR)/lib
|
|
OBJDIR := $(BUILDDIR)/obj
|
|
PKGDIR := $(BUILDDIR)/lib/pkgconfig
|
|
BINDIR := $(BUILDDIR)/bin
|
|
##### target files
|
|
CUDARTLIB ?= cudart_static
|
|
|
|
# Use compatibility shim only with static cudart; see https://github.com/NVIDIA/nccl/issues/658
|
|
ifeq ($(CUDARTLIB), cudart_static)
|
|
LIBSRCFILES += enhcompat.cc
|
|
endif
|
|
|
|
INCTARGETS := $(INCEXPORTS:%=$(INCDIR)/%)
|
|
LIBSONAME := $(LIBNAME:%=%.$(NCCL_MAJOR))
|
|
LIBTARGET := $(LIBNAME:%=%.$(NCCL_MAJOR).$(NCCL_MINOR).$(NCCL_PATCH))
|
|
STATICLIBTARGET := $(STATICLIBNAME)
|
|
PKGTARGET := $(PKGCONFIGFILE)
|
|
LIBOBJ := $(LIBSRCFILES:%.cc=$(OBJDIR)/%.o)
|
|
BINOBJ := $(BINSRCFILES:%.cc=$(OBJDIR)/%.o)
|
|
DEPFILES := $(LIBOBJ:%.o=%.d) $(BINOBJ:%.o=%.d)
|
|
LDFLAGS += -L${CUDA_LIB} -l$(CUDARTLIB) -lpthread -lrt -ldl
|
|
|
|
DEVMANIFEST := $(BUILDDIR)/obj/device/manifest
|
|
|
|
##### rules
|
|
build : lib staticlib binary
|
|
|
|
lib : $(INCTARGETS) $(LIBDIR)/$(LIBTARGET) $(PKGDIR)/$(PKGTARGET)
|
|
|
|
staticlib : $(LIBDIR)/$(STATICLIBTARGET)
|
|
|
|
binary : $(BINDIR)/$(BINNAME)
|
|
|
|
$(DEVMANIFEST): ALWAYS_REBUILD $(INCTARGETS)
|
|
$(MAKE) -C ./device
|
|
|
|
# Empty target to force rebuild
|
|
ALWAYS_REBUILD:
|
|
|
|
-include $(DEPFILES)
|
|
$(LIBDIR)/$(LIBTARGET) $(LIBDIR)/$(STATICLIBTARGET) : $(LIBOBJ)
|
|
|
|
$(INCDIR)/nccl.h : nccl.h.in ../makefiles/version.mk
|
|
# NCCL_VERSION(X,Y,Z) ((X) * 10000 + (Y) * 100 + (Z))
|
|
@$(eval NCCL_VERSION := $(shell printf "%d%02d%02d" $(NCCL_MAJOR) $(NCCL_MINOR) $(NCCL_PATCH)))
|
|
mkdir -p $(INCDIR)
|
|
@printf "Generating %-35s > %s\n" $< $@
|
|
sed -e "s/\$${nccl:Major}/$(NCCL_MAJOR)/g" \
|
|
-e "s/\$${nccl:Minor}/$(NCCL_MINOR)/g" \
|
|
-e "s/\$${nccl:Patch}/$(NCCL_PATCH)/g" \
|
|
-e "s/\$${nccl:Suffix}/$(NCCL_SUFFIX)/g" \
|
|
-e "s/\$${nccl:Version}/$(NCCL_VERSION)/g" \
|
|
$< > $@
|
|
|
|
$(LIBDIR)/$(LIBTARGET): $(LIBOBJ) $(DEVMANIFEST)
|
|
@printf "Linking %-35s > %s\n" $(LIBTARGET) $@
|
|
mkdir -p $(LIBDIR)
|
|
$(CXX) $(CXXFLAGS) -shared -Wl,--no-as-needed -Wl,-soname,$(LIBSONAME) -o $@ $(LIBOBJ) $$(cat $(DEVMANIFEST)) $(LDFLAGS)
|
|
ln -sf $(LIBSONAME) $(LIBDIR)/$(LIBNAME)
|
|
ln -sf $(LIBTARGET) $(LIBDIR)/$(LIBSONAME)
|
|
|
|
$(LIBDIR)/$(STATICLIBTARGET): $(LIBOBJ) $(DEVMANIFEST)
|
|
@printf "Archiving %-35s > %s\n" $(STATICLIBTARGET) $@
|
|
mkdir -p $(LIBDIR)
|
|
ar cr $@ $(LIBOBJ) $$(cat $(DEVMANIFEST))
|
|
|
|
$(BINDIR)/$(BINNAME): $(BINOBJ)
|
|
@printf "Linking %-35s > %s\n" $(BINNAME) $@
|
|
mkdir -p $(BINDIR)
|
|
$(CXX) $(CXXFLAGS) $^ -o $@
|
|
|
|
$(PKGDIR)/nccl.pc : nccl.pc.in
|
|
mkdir -p $(PKGDIR)
|
|
@printf "Generating %-35s > %s\n" $< $@
|
|
sed -e 's|$${nccl:Prefix}|\$(PREFIX)|g' \
|
|
-e "s/\$${nccl:Major}/$(NCCL_MAJOR)/g" \
|
|
-e "s/\$${nccl:Minor}/$(NCCL_MINOR)/g" \
|
|
-e "s/\$${nccl:Patch}/$(NCCL_PATCH)/g" \
|
|
$< > $@
|
|
|
|
$(INCDIR)/%.h : %.h
|
|
@printf "Grabbing %-35s > %s\n" $< $@
|
|
mkdir -p $(INCDIR)
|
|
install -m 644 $< $@
|
|
|
|
$(INCDIR)/nccl_%.h : include/nccl_%.h
|
|
@printf "Grabbing %-35s > %s\n" $< $@
|
|
mkdir -p $(INCDIR)
|
|
install -m 644 $< $@
|
|
|
|
$(PKGDIR)/%.pc : %.pc
|
|
@printf "Grabbing %-35s > %s\n" $< $@
|
|
mkdir -p $(PKGDIR)
|
|
install -m 644 $< $@
|
|
|
|
$(OBJDIR)/%.o : %.cc $(INCTARGETS)
|
|
@printf "Compiling %-35s > %s\n" $< $@
|
|
mkdir -p `dirname $@`
|
|
$(CXX) -I. -I$(INCDIR) $(CXXFLAGS) -Iinclude -c $< -o $@
|
|
@$(CXX) -I. -I$(INCDIR) $(CXXFLAGS) -Iinclude -M $< > $(@:%.o=%.d.tmp)
|
|
@sed "0,/^.*:/s//$(subst /,\/,$@):/" $(@:%.o=%.d.tmp) > $(@:%.o=%.d)
|
|
@sed -e 's/.*://' -e 's/\\$$//' < $(@:%.o=%.d.tmp) | fmt -1 | \
|
|
sed -e 's/^ *//' -e 's/$$/:/' >> $(@:%.o=%.d)
|
|
@rm -f $(@:%.o=%.d.tmp)
|
|
|
|
clean :
|
|
$(MAKE) -C device clean
|
|
rm -rf ${BINDIR} ${INCDIR} ${LIBDIR} ${PKGDIR} ${OBJDIR}
|
|
|
|
install : build
|
|
mkdir -p $(PREFIX)/lib
|
|
mkdir -p $(PREFIX)/lib/pkgconfig
|
|
mkdir -p $(PREFIX)/include
|
|
mkdir -p $(PREFIX)/bin
|
|
cp -P -v $(BUILDDIR)/lib/lib* $(PREFIX)/lib/
|
|
cp -P -v $(BUILDDIR)/lib/pkgconfig/* $(PREFIX)/lib/pkgconfig/
|
|
cp -v $(BUILDDIR)/include/* $(PREFIX)/include/
|
|
cp -v $(BUILDDIR)/bin/ncclras $(PREFIX)/bin/
|
|
|
|
FILESTOFORMAT := $(shell find . -name ".\#*" -prune -o \( -name "*.cc" -o -name "*.h" \) -print | grep -v -E 'ibvwrap.h|nvmlwrap.h|gdrwrap.h|nccl.h')
|
|
# Note that formatting.mk defines a new target so in order to not overwrite the default target,
|
|
# it shouldn't be included at the top. Also, it uses the above definition of FILESTOFORMAT as well
|
|
# as the BUILDDIR variable.
|
|
include ../makefiles/formatting.mk
|