Skip to content

Commit a0dd388

Browse files
q10facebook-github-bot
authored andcommitted
Update bash build and install scripts to account for targets and variants (#4032)
Summary: X-link: facebookresearch/FBGEMM#1119 Pull Request resolved: #4032 Reviewed By: jwfromm Differential Revision: D73753617 Pulled By: q10 fbshipit-source-id: 681c9083e1fe20265ae69b347c03cbac868bde25
1 parent 3cef662 commit a0dd388

File tree

7 files changed

+132
-125
lines changed

7 files changed

+132
-125
lines changed

.github/scripts/fbgemm_gpu_build.bash

Lines changed: 109 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -140,15 +140,15 @@ __configure_fbgemm_gpu_cuda_home () {
140140
__configure_fbgemm_gpu_build_cpu () {
141141
# Update the package name and build args depending on if CUDA is specified
142142
echo "[BUILD] Setting CPU-only build args ..."
143-
build_args=(
143+
build_args+=(
144144
--build-variant=cpu
145145
)
146146
}
147147

148148
__configure_fbgemm_gpu_build_docs () {
149149
# Update the package name and build args depending on if CUDA is specified
150150
echo "[BUILD] Setting CPU-only (docs) build args ..."
151-
build_args=(
151+
build_args+=(
152152
--build-variant=docs
153153
)
154154
}
@@ -205,7 +205,7 @@ __configure_fbgemm_gpu_build_rocm () {
205205
# For more info on rocmcc flags:
206206
# https://rocm.docs.amd.com/en/docs-6.1.1/reference/rocmcc.html
207207
echo "[BUILD] Setting ROCm build args ..."
208-
build_args=(
208+
build_args+=(
209209
--build-variant=rocm
210210
# HIP_ROOT_DIR now required for HIP to be correctly detected by CMake
211211
-DHIP_ROOT_DIR=/opt/rocm
@@ -283,7 +283,7 @@ __configure_fbgemm_gpu_build_cuda () {
283283
print_exec conda env config vars set ${env_prefix} NVCC_VERBOSE=1
284284

285285
echo "[BUILD] Setting CUDA build args ..."
286-
build_args=(
286+
build_args+=(
287287
--build-variant=cuda
288288
--nvml_lib_path="${nvml_lib_path}"
289289
--nccl_lib_path="${nccl_lib_path}"
@@ -298,16 +298,6 @@ __configure_fbgemm_gpu_build_cuda () {
298298
__configure_fbgemm_gpu_build_nvcc
299299
}
300300

301-
__configure_fbgemm_gpu_build_genai () {
302-
local fbgemm_variant_targets="$1"
303-
304-
__configure_fbgemm_gpu_build_cuda "$fbgemm_variant_targets" || return 1
305-
306-
build_args+=(
307-
--build-target=genai
308-
)
309-
}
310-
311301
# shellcheck disable=SC2120
312302
__configure_fbgemm_gpu_build () {
313303
echo "################################################################################"
@@ -320,22 +310,30 @@ __configure_fbgemm_gpu_build () {
320310
# shellcheck disable=SC2155
321311
local env_prefix=$(env_name_or_prefix "${env_name}")
322312

323-
if [ "$fbgemm_variant" == "cpu" ]; then
313+
# Set build args list to be populated, and set verbosity
314+
build_args=(
315+
--verbose
316+
)
317+
318+
# Set the build target
319+
echo "[BUILD] Setting the build target: ${fbgemm_build_target} ..."
320+
build_args+=(
321+
--build-target="${fbgemm_build_target}"
322+
)
323+
324+
# Append build args based on the build variant
325+
if [ "$fbgemm_build_variant" == "cpu" ]; then
324326
echo "[BUILD] Configuring build as CPU variant ..."
325327
__configure_fbgemm_gpu_build_cpu
326328

327-
elif [ "$fbgemm_variant" == "docs" ]; then
329+
elif [ "$fbgemm_build_variant" == "docs" ]; then
328330
echo "[BUILD] Configuring build as CPU (docs) variant ..."
329331
__configure_fbgemm_gpu_build_docs
330332

331-
elif [ "$fbgemm_variant" == "rocm" ]; then
333+
elif [ "$fbgemm_build_variant" == "rocm" ]; then
332334
echo "[BUILD] Configuring build as ROCm variant ..."
333335
__configure_fbgemm_gpu_build_rocm "${fbgemm_variant_targets}"
334336

335-
elif [ "$fbgemm_variant" == "genai" ]; then
336-
echo "[BUILD] Configuring build as GenAI variant ..."
337-
__configure_fbgemm_gpu_build_genai "${fbgemm_variant_targets}"
338-
339337
else
340338
echo "[BUILD] Configuring build as CUDA variant (this is the default behavior) ..."
341339
__configure_fbgemm_gpu_build_cuda "${fbgemm_variant_targets}"
@@ -349,11 +347,6 @@ __configure_fbgemm_gpu_build () {
349347
__configure_fbgemm_gpu_build_clang
350348
fi
351349

352-
# Set verbosity
353-
build_args+=(
354-
--verbose
355-
)
356-
357350
# Set debugging options
358351
if [ "$fbgemm_release_channel" != "release" ] || [ "$BUILD_DEBUG" -eq 1 ]; then
359352
echo "[BUILD] Enabling debug features in the build ..."
@@ -374,6 +367,33 @@ __configure_fbgemm_gpu_build () {
374367
echo "[BUILD] FBGEMM_GPU build arguments have been set: ${build_args[@]}"
375368
}
376369

370+
__export_target_variant_info () {
371+
local fbgemm_build_target_variant="$1"
372+
373+
# Extract the package channel and version from the tuple-string
374+
if [ "$fbgemm_build_target_variant" == "docs" ] ||
375+
[ "$fbgemm_build_target_variant" == "cpu" ] ||
376+
[ "$fbgemm_build_target_variant" == "cuda" ] ||
377+
[ "$fbgemm_build_target_variant" == "rocm" ]; then
378+
export fbgemm_build_target="default"
379+
export fbgemm_build_variant="${fbgemm_build_target_variant}"
380+
381+
else
382+
# shellcheck disable=SC2207
383+
local fbgemm_build_target_variant_arr=($(echo "${fbgemm_build_target_variant}" | tr '/' '\n'))
384+
385+
# Assume that if the input is a single string, and is not one of the
386+
# designated build variants, then the it is referring to the build target
387+
if [ ${#fbgemm_build_target_variant_arr[@]} -lt 2 ]; then
388+
export fbgemm_build_target="${fbgemm_build_target_variant_arr[0]}"
389+
export fbgemm_build_variant="cuda"
390+
else
391+
export fbgemm_build_target="${fbgemm_build_target_variant_arr[0]}"
392+
export fbgemm_build_variant="${fbgemm_build_target_variant_arr[1]}"
393+
fi
394+
fi
395+
}
396+
377397
__build_fbgemm_gpu_set_python_tag () {
378398
# shellcheck disable=SC2207,SC2086
379399
local python_version=($(conda run --no-capture-output ${env_prefix} python --version))
@@ -445,16 +465,26 @@ __build_fbgemm_gpu_common_pre_steps () {
445465
(test_binpath "${env_name}" c++) || return 1
446466
(test_binpath "${env_name}" g++) || return 1
447467

448-
# Set the default the FBGEMM_GPU variant to be CUDA
449-
if [ "$fbgemm_variant" != "cpu" ] &&
450-
[ "$fbgemm_variant" != "docs" ] &&
451-
[ "$fbgemm_variant" != "rocm" ] &&
452-
[ "$fbgemm_variant" != "genai" ]; then
468+
# Set the default the FBGEMM build variant to be default (i.e. FBGEMM_GPU)
469+
if [ "$fbgemm_build_target" != "genai" ] &&
470+
[ "$fbgemm_build_target" != "default" ]; then
471+
echo "################################################################################"
472+
echo "[BUILD] Unknown FBGEMM build TARGET: ${fbgemm_build_target}"
473+
echo "[BUILD] Defaulting to 'default'"
474+
echo "################################################################################"
475+
export fbgemm_build_target="default"
476+
fi
477+
478+
# Set the default the FBGEMM build variant to be CUDA
479+
if [ "$fbgemm_build_variant" != "docs" ] &&
480+
[ "$fbgemm_build_variant" != "cpu" ] &&
481+
[ "$fbgemm_build_variant" != "cuda" ] &&
482+
[ "$fbgemm_build_variant" != "rocm" ]; then
453483
echo "################################################################################"
454-
echo "[BUILD] Unknown FBGEMM_GPU variant: $fbgemm_variant"
484+
echo "[BUILD] Unknown FBGEMM build VARIANT: ${fbgemm_build_variant}"
455485
echo "[BUILD] Defaulting to CUDA"
456486
echo "################################################################################"
457-
export fbgemm_variant="cuda"
487+
export fbgemm_build_variant="cuda"
458488
fi
459489

460490
# Extract and set the Python tag
@@ -547,31 +577,25 @@ __verify_library_symbols () {
547577

548578
# Prepare a sample set of symbols whose existence in the built library should be checked
549579
# This is by no means an exhaustive set, and should be updated accordingly
550-
if [ "${fbgemm_variant}" == "cpu" ] ||
551-
[ "${fbgemm_variant}" == "docs" ]; then
580+
if [ "${fbgemm_build_target}" == "genai" ]; then
552581
local lib_symbols_to_check=(
553-
fbgemm_gpu::asynchronous_inclusive_cumsum_cpu
554-
fbgemm_gpu::jagged_2d_to_dense
555-
)
556-
elif [ "${fbgemm_variant}" == "cuda" ]; then
557-
local lib_symbols_to_check=(
558-
fbgemm_gpu::asynchronous_inclusive_cumsum_cpu
559-
fbgemm_gpu::jagged_2d_to_dense
560-
fbgemm_gpu::asynchronous_inclusive_cumsum_gpu
561-
fbgemm_gpu::merge_pooled_embeddings
582+
fbgemm_gpu::car_init
583+
fbgemm_gpu::per_tensor_quantize_i8
562584
)
563-
elif [ "${fbgemm_variant}" == "rocm" ]; then
585+
586+
else
564587
local lib_symbols_to_check=(
565588
fbgemm_gpu::asynchronous_inclusive_cumsum_cpu
566589
fbgemm_gpu::jagged_2d_to_dense
567-
fbgemm_gpu::asynchronous_inclusive_cumsum_gpu
568-
fbgemm_gpu::merge_pooled_embeddings
569-
)
570-
elif [ "${fbgemm_variant}" == "genai" ]; then
571-
local lib_symbols_to_check=(
572-
fbgemm_gpu::car_init
573-
fbgemm_gpu::per_tensor_quantize_i8
574590
)
591+
592+
if [ "${fbgemm_build_variant}" == "cuda" ] &&
593+
[ "${fbgemm_build_variant}" == "rocm" ]; then
594+
lib_symbols_to_check+=(
595+
fbgemm_gpu::asynchronous_inclusive_cumsum_gpu
596+
fbgemm_gpu::merge_pooled_embeddings
597+
)
598+
fi
575599
fi
576600

577601
echo "[CHECK] Verifying sample subset of symbols in the built libraries ..."
@@ -580,19 +604,7 @@ __verify_library_symbols () {
580604
done
581605
}
582606

583-
run_fbgemm_gpu_postbuild_checks () {
584-
fbgemm_variant="$1"
585-
if [ "$fbgemm_variant" == "" ]; then
586-
echo "Usage: ${FUNCNAME[0]} FBGEMM_VARIANT"
587-
echo "Example(s):"
588-
echo " ${FUNCNAME[0]} cpu"
589-
echo " ${FUNCNAME[0]} docs"
590-
echo " ${FUNCNAME[0]} cuda"
591-
echo " ${FUNCNAME[0]} rocm"
592-
echo " ${FUNCNAME[0]} genai"
593-
return 1
594-
fi
595-
607+
__run_fbgemm_gpu_postbuild_checks () {
596608
# Find the .SO file
597609
# shellcheck disable=SC2035,SC2061,SC2062,SC2155,SC2178
598610
local fbgemm_gpu_so_files=$(find . -name *.so | grep .*cmake-build/.*)
@@ -606,7 +618,7 @@ run_fbgemm_gpu_postbuild_checks () {
606618
__verify_library_symbols || return 1
607619
}
608620

609-
run_fbgemm_gpu_audit_wheel () {
621+
__run_audit_wheel () {
610622
fbgemm_wheel="$1"
611623
if [ "$fbgemm_wheel" == "" ]; then
612624
echo "Usage: ${FUNCNAME[0]} FBGEMM_WHEEL_PATH"
@@ -632,23 +644,27 @@ run_fbgemm_gpu_audit_wheel () {
632644
build_fbgemm_gpu_package () {
633645
env_name="$1"
634646
fbgemm_release_channel="$2"
635-
fbgemm_variant="$3"
647+
fbgemm_build_target_variant="$3"
636648
fbgemm_variant_targets="$4"
637-
if [ "$fbgemm_variant" == "" ]; then
638-
echo "Usage: ${FUNCNAME[0]} ENV_NAME RELEASE_CHANNEL VARIANT [VARIANT_TARGETS]"
649+
if [ "$fbgemm_build_target_variant" == "" ]; then
650+
echo "Usage: ${FUNCNAME[0]} ENV_NAME RELEASE_CHANNEL TARGET/VARIANT [VARIANT_TARGETS]"
639651
echo "Example(s):"
640-
echo " ${FUNCNAME[0]} build_env release cpu # CPU-only variant"
641-
echo " ${FUNCNAME[0]} build_env release docs # CPU-only (docs) variant"
642-
echo " ${FUNCNAME[0]} build_env nightly cuda # CUDA variant for default target(s)"
643-
echo " ${FUNCNAME[0]} build_env test cuda '7.0;8.0' # CUDA variant for custom target(s)"
644-
echo " ${FUNCNAME[0]} build_env test rocm # ROCm variant for default target(s)"
645-
echo " ${FUNCNAME[0]} build_env test rocm 'gfx906;gfx908;gfx90a' # ROCm variant for custom target(s)"
652+
echo " ${FUNCNAME[0]} build_env release cpu # Default build target, CPU-only build variant"
653+
echo " ${FUNCNAME[0]} build_env release docs # Default build target, CPU-only (docs) build variant"
654+
echo " ${FUNCNAME[0]} build_env nightly genai/cuda # GenAI build target, CUDA build variant, default variant target(s)"
655+
echo " ${FUNCNAME[0]} build_env test cuda '7.0;8.0' # Default build target, CUDA build variant, custom variant target(s)"
656+
echo " ${FUNCNAME[0]} build_env test rocm # Default build target, ROCm build variant, default variant target(s)"
657+
echo " ${FUNCNAME[0]} build_env test genai/rocm 'gfx906;gfx908;gfx90a' # GenAI build target, ROCm build variant, default variant target(s)"
646658
return 1
647659
fi
648660

649661
# shellcheck disable=SC2155
650662
local env_prefix=$(env_name_or_prefix "${env_name}")
651663

664+
# Extract the build target and variant from the tuple-string, and export
665+
# variables to environment
666+
__export_target_variant_info "${fbgemm_build_target_variant}"
667+
652668
# Set up and configure the build
653669
__build_fbgemm_gpu_common_pre_steps || return 1
654670
__configure_fbgemm_gpu_build || return 1
@@ -676,17 +692,17 @@ build_fbgemm_gpu_package () {
676692

677693
# Build the wheel. Invoke using `python -m build`
678694
# https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html
679-
echo "[BUILD] Building FBGEMM-GPU wheel (VARIANT=${fbgemm_variant}) ..."
695+
echo "[BUILD] Building FBGEMM wheel (TARGET=${fbgemm_build_target}, VARIANT=${fbgemm_build_variant}) ..."
680696
# shellcheck disable=SC2086
681697
print_exec conda run --no-capture-output ${env_prefix} \
682698
python -m build --wheel --no-isolation \
683699
"${build_args[@]}" || return 1
684700

685701
# Run checks on the built libraries
686-
(run_fbgemm_gpu_postbuild_checks "${fbgemm_variant}") || return 1
702+
__run_fbgemm_gpu_postbuild_checks || return 1
687703

688704
for wheelfile in dist/*.whl; do
689-
run_fbgemm_gpu_audit_wheel "${wheelfile}"
705+
__run_audit_wheel "${wheelfile}"
690706
done
691707

692708
echo "[BUILD] Enumerating the built wheels ..."
@@ -702,23 +718,27 @@ build_fbgemm_gpu_package () {
702718

703719
build_fbgemm_gpu_install () {
704720
env_name="$1"
705-
fbgemm_variant="$2"
721+
fbgemm_build_target_variant="$2"
706722
fbgemm_variant_targets="$3"
707-
if [ "$fbgemm_variant" == "" ]; then
708-
echo "Usage: ${FUNCNAME[0]} ENV_NAME VARIANT [TARGETS]"
723+
if [ "$fbgemm_build_target_variant" == "" ]; then
724+
echo "Usage: ${FUNCNAME[0]} ENV_NAME TARGET/VARIANT [TARGETS]"
709725
echo "Example(s):"
710-
echo " ${FUNCNAME[0]} build_env cpu # CPU-only variant"
711-
echo " ${FUNCNAME[0]} build_env docs # CPU-only (docs) variant"
712-
echo " ${FUNCNAME[0]} build_env cuda # CUDA variant for default target(s)"
713-
echo " ${FUNCNAME[0]} build_env cuda '7.0;8.0' # CUDA variant for custom target(s)"
714-
echo " ${FUNCNAME[0]} build_env rocm # ROCm variant for default target(s)"
715-
echo " ${FUNCNAME[0]} build_env rocm 'gfx906;gfx908;gfx90a' # ROCm variant for custom target(s)"
726+
echo " ${FUNCNAME[0]} build_env release cpu # Default build target, CPU-only build variant"
727+
echo " ${FUNCNAME[0]} build_env release docs # Default build target, CPU-only (docs) build variant"
728+
echo " ${FUNCNAME[0]} build_env nightly genai/cuda # GenAI build target, CUDA build variant, default variant target(s)"
729+
echo " ${FUNCNAME[0]} build_env test cuda '7.0;8.0' # Default build target, CUDA build variant, custom variant target(s)"
730+
echo " ${FUNCNAME[0]} build_env test rocm # Default build target, ROCm build variant, default variant target(s)"
731+
echo " ${FUNCNAME[0]} build_env test genai/rocm 'gfx906;gfx908;gfx90a' # GenAI build target, ROCm build variant, default variant target(s)"
716732
return 1
717733
fi
718734

719735
# shellcheck disable=SC2155
720736
local env_prefix=$(env_name_or_prefix "${env_name}")
721737

738+
# Extract the build target and variant from the tuple-string, and export
739+
# variables to environment
740+
__export_target_variant_info "${fbgemm_build_target_variant}"
741+
722742
# Set up and configure the build
723743
__build_fbgemm_gpu_common_pre_steps || return 1
724744
__configure_fbgemm_gpu_build || return 1
@@ -732,14 +752,14 @@ build_fbgemm_gpu_install () {
732752

733753
# Parallelism may need to be limited to prevent the build from being
734754
# canceled for going over ulimits
735-
echo "[BUILD] Building + installing FBGEMM-GPU (VARIANT=${fbgemm_variant}) ..."
755+
echo "[BUILD] Building + installing FBGEMM wheel (TARGET=${fbgemm_build_target}, VARIANT=${fbgemm_build_variant}) ..."
736756
# shellcheck disable=SC2086
737757
print_exec conda run --no-capture-output ${env_prefix} \
738758
python setup.py "${run_multicore}" install \
739759
"${build_args[@]}" || return 1
740760

741761
# Run checks on the built libraries
742-
(run_fbgemm_gpu_postbuild_checks "${fbgemm_variant}") || return 1
762+
__run_fbgemm_gpu_postbuild_checks || return 1
743763

744764
echo "[INSTALL] Checking imports ..."
745765
# Exit this directory to prevent import clashing, since there is an

.github/scripts/fbgemm_gpu_test.bash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ test_fbgemm_gpu_build_and_install () {
392392
# Assume we are starting from the repository root directory
393393
cd "${repo}/fbgemm_gpu" || return 1
394394
prepare_fbgemm_gpu_build "${env_name}" || return 1
395-
build_fbgemm_gpu_package "${env_name}" release "${pytorch_variant_type}" || return 1
395+
build_fbgemm_gpu_package "${env_name}" release "default/${pytorch_variant_type}" || return 1
396396

397397
cd "${repo}" || return 1
398398
install_fbgemm_gpu_wheel "${env_name}" fbgemm_gpu/dist/*.whl || return 1

.github/scripts/nova_postscript.bash

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -45,25 +45,6 @@ start_time=${end_time}
4545
echo "[NOVA] Time taken to install wheel: ${runtime} seconds"
4646

4747
# Test with PyTest
48-
echo "[NOVA] Current working directory: $(pwd)"
49-
if [[ $CU_VERSION = cu* ]]; then
50-
if [[ ${BUILD_TARGET} == "genai" ]]; then
51-
echo "[NOVA] Testing the GenAI variant of FBGEMM_GPU ..."
52-
export fbgemm_variant="genai"
53-
else
54-
echo "[NOVA] Testing the CUDA variant of FBGEMM_GPU ..."
55-
export fbgemm_variant="cuda"
56-
fi
57-
58-
elif [[ $CU_VERSION = rocm* ]]; then
59-
echo "[NOVA] Testing the ROCm variant of FBGEMM_GPU ..."
60-
export fbgemm_variant="rocm"
61-
62-
else
63-
echo "[NOVA] Testing the CPU variant of FBGEMM_GPU ..."
64-
export fbgemm_variant="cpu"
65-
fi
66-
6748
$CONDA_RUN python3 -c "import torch; print('cuda.is_available() ', torch.cuda.is_available()); print ('device_count() ',torch.cuda.device_count());"
6849
cd "${FBGEMM_REPO}" || { echo "[NOVA] Failed to cd to ${FBGEMM_REPO} from $(pwd)"; };
6950
test_all_fbgemm_gpu_modules "${BUILD_ENV_NAME}"

0 commit comments

Comments
 (0)