@@ -140,15 +140,15 @@ __configure_fbgemm_gpu_cuda_home () {
140
140
__configure_fbgemm_gpu_build_cpu () {
141
141
# Update the package name and build args depending on if CUDA is specified
142
142
echo " [BUILD] Setting CPU-only build args ..."
143
- build_args=(
143
+ build_args+ =(
144
144
--build-variant=cpu
145
145
)
146
146
}
147
147
148
148
__configure_fbgemm_gpu_build_docs () {
149
149
# Update the package name and build args depending on if CUDA is specified
150
150
echo " [BUILD] Setting CPU-only (docs) build args ..."
151
- build_args=(
151
+ build_args+ =(
152
152
--build-variant=docs
153
153
)
154
154
}
@@ -205,7 +205,7 @@ __configure_fbgemm_gpu_build_rocm () {
205
205
# For more info on rocmcc flags:
206
206
# https://rocm.docs.amd.com/en/docs-6.1.1/reference/rocmcc.html
207
207
echo " [BUILD] Setting ROCm build args ..."
208
- build_args=(
208
+ build_args+ =(
209
209
--build-variant=rocm
210
210
# HIP_ROOT_DIR now required for HIP to be correctly detected by CMake
211
211
-DHIP_ROOT_DIR=/opt/rocm
@@ -283,7 +283,7 @@ __configure_fbgemm_gpu_build_cuda () {
283
283
print_exec conda env config vars set ${env_prefix} NVCC_VERBOSE=1
284
284
285
285
echo " [BUILD] Setting CUDA build args ..."
286
- build_args=(
286
+ build_args+ =(
287
287
--build-variant=cuda
288
288
--nvml_lib_path=" ${nvml_lib_path} "
289
289
--nccl_lib_path=" ${nccl_lib_path} "
@@ -298,16 +298,6 @@ __configure_fbgemm_gpu_build_cuda () {
298
298
__configure_fbgemm_gpu_build_nvcc
299
299
}
300
300
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
-
311
301
# shellcheck disable=SC2120
312
302
__configure_fbgemm_gpu_build () {
313
303
echo " ################################################################################"
@@ -320,22 +310,30 @@ __configure_fbgemm_gpu_build () {
320
310
# shellcheck disable=SC2155
321
311
local env_prefix=$( env_name_or_prefix " ${env_name} " )
322
312
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
324
326
echo " [BUILD] Configuring build as CPU variant ..."
325
327
__configure_fbgemm_gpu_build_cpu
326
328
327
- elif [ " $fbgemm_variant " == " docs" ]; then
329
+ elif [ " $fbgemm_build_variant " == " docs" ]; then
328
330
echo " [BUILD] Configuring build as CPU (docs) variant ..."
329
331
__configure_fbgemm_gpu_build_docs
330
332
331
- elif [ " $fbgemm_variant " == " rocm" ]; then
333
+ elif [ " $fbgemm_build_variant " == " rocm" ]; then
332
334
echo " [BUILD] Configuring build as ROCm variant ..."
333
335
__configure_fbgemm_gpu_build_rocm " ${fbgemm_variant_targets} "
334
336
335
- elif [ " $fbgemm_variant " == " genai" ]; then
336
- echo " [BUILD] Configuring build as GenAI variant ..."
337
- __configure_fbgemm_gpu_build_genai " ${fbgemm_variant_targets} "
338
-
339
337
else
340
338
echo " [BUILD] Configuring build as CUDA variant (this is the default behavior) ..."
341
339
__configure_fbgemm_gpu_build_cuda " ${fbgemm_variant_targets} "
@@ -349,11 +347,6 @@ __configure_fbgemm_gpu_build () {
349
347
__configure_fbgemm_gpu_build_clang
350
348
fi
351
349
352
- # Set verbosity
353
- build_args+=(
354
- --verbose
355
- )
356
-
357
350
# Set debugging options
358
351
if [ " $fbgemm_release_channel " != " release" ] || [ " $BUILD_DEBUG " -eq 1 ]; then
359
352
echo " [BUILD] Enabling debug features in the build ..."
@@ -374,6 +367,33 @@ __configure_fbgemm_gpu_build () {
374
367
echo " [BUILD] FBGEMM_GPU build arguments have been set: ${build_args[@]} "
375
368
}
376
369
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
+
377
397
__build_fbgemm_gpu_set_python_tag () {
378
398
# shellcheck disable=SC2207,SC2086
379
399
local python_version=($( conda run --no-capture-output ${env_prefix} python --version) )
@@ -445,16 +465,26 @@ __build_fbgemm_gpu_common_pre_steps () {
445
465
(test_binpath " ${env_name} " c++) || return 1
446
466
(test_binpath " ${env_name} " g++) || return 1
447
467
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
453
483
echo " ################################################################################"
454
- echo " [BUILD] Unknown FBGEMM_GPU variant : $fbgemm_variant "
484
+ echo " [BUILD] Unknown FBGEMM build VARIANT : ${fbgemm_build_variant} "
455
485
echo " [BUILD] Defaulting to CUDA"
456
486
echo " ################################################################################"
457
- export fbgemm_variant =" cuda"
487
+ export fbgemm_build_variant =" cuda"
458
488
fi
459
489
460
490
# Extract and set the Python tag
@@ -547,31 +577,25 @@ __verify_library_symbols () {
547
577
548
578
# Prepare a sample set of symbols whose existence in the built library should be checked
549
579
# 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
552
581
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
562
584
)
563
- elif [ " ${fbgemm_variant} " == " rocm" ]; then
585
+
586
+ else
564
587
local lib_symbols_to_check=(
565
588
fbgemm_gpu::asynchronous_inclusive_cumsum_cpu
566
589
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
574
590
)
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
575
599
fi
576
600
577
601
echo " [CHECK] Verifying sample subset of symbols in the built libraries ..."
@@ -580,19 +604,7 @@ __verify_library_symbols () {
580
604
done
581
605
}
582
606
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 () {
596
608
# Find the .SO file
597
609
# shellcheck disable=SC2035,SC2061,SC2062,SC2155,SC2178
598
610
local fbgemm_gpu_so_files=$( find . -name * .so | grep .* cmake-build/.* )
@@ -606,7 +618,7 @@ run_fbgemm_gpu_postbuild_checks () {
606
618
__verify_library_symbols || return 1
607
619
}
608
620
609
- run_fbgemm_gpu_audit_wheel () {
621
+ __run_audit_wheel () {
610
622
fbgemm_wheel=" $1 "
611
623
if [ " $fbgemm_wheel " == " " ]; then
612
624
echo " Usage: ${FUNCNAME[0]} FBGEMM_WHEEL_PATH"
@@ -632,23 +644,27 @@ run_fbgemm_gpu_audit_wheel () {
632
644
build_fbgemm_gpu_package () {
633
645
env_name=" $1 "
634
646
fbgemm_release_channel=" $2 "
635
- fbgemm_variant =" $3 "
647
+ fbgemm_build_target_variant =" $3 "
636
648
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]"
639
651
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)"
646
658
return 1
647
659
fi
648
660
649
661
# shellcheck disable=SC2155
650
662
local env_prefix=$( env_name_or_prefix " ${env_name} " )
651
663
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
+
652
668
# Set up and configure the build
653
669
__build_fbgemm_gpu_common_pre_steps || return 1
654
670
__configure_fbgemm_gpu_build || return 1
@@ -676,17 +692,17 @@ build_fbgemm_gpu_package () {
676
692
677
693
# Build the wheel. Invoke using `python -m build`
678
694
# 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 } ) ..."
680
696
# shellcheck disable=SC2086
681
697
print_exec conda run --no-capture-output ${env_prefix} \
682
698
python -m build --wheel --no-isolation \
683
699
" ${build_args[@]} " || return 1
684
700
685
701
# Run checks on the built libraries
686
- (run_fbgemm_gpu_postbuild_checks " ${fbgemm_variant} " ) || return 1
702
+ __run_fbgemm_gpu_postbuild_checks || return 1
687
703
688
704
for wheelfile in dist/* .whl; do
689
- run_fbgemm_gpu_audit_wheel " ${wheelfile} "
705
+ __run_audit_wheel " ${wheelfile} "
690
706
done
691
707
692
708
echo " [BUILD] Enumerating the built wheels ..."
@@ -702,23 +718,27 @@ build_fbgemm_gpu_package () {
702
718
703
719
build_fbgemm_gpu_install () {
704
720
env_name=" $1 "
705
- fbgemm_variant =" $2 "
721
+ fbgemm_build_target_variant =" $2 "
706
722
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]"
709
725
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)"
716
732
return 1
717
733
fi
718
734
719
735
# shellcheck disable=SC2155
720
736
local env_prefix=$( env_name_or_prefix " ${env_name} " )
721
737
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
+
722
742
# Set up and configure the build
723
743
__build_fbgemm_gpu_common_pre_steps || return 1
724
744
__configure_fbgemm_gpu_build || return 1
@@ -732,14 +752,14 @@ build_fbgemm_gpu_install () {
732
752
733
753
# Parallelism may need to be limited to prevent the build from being
734
754
# 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 } ) ..."
736
756
# shellcheck disable=SC2086
737
757
print_exec conda run --no-capture-output ${env_prefix} \
738
758
python setup.py " ${run_multicore} " install \
739
759
" ${build_args[@]} " || return 1
740
760
741
761
# Run checks on the built libraries
742
- (run_fbgemm_gpu_postbuild_checks " ${fbgemm_variant} " ) || return 1
762
+ __run_fbgemm_gpu_postbuild_checks || return 1
743
763
744
764
echo " [INSTALL] Checking imports ..."
745
765
# Exit this directory to prevent import clashing, since there is an
0 commit comments