aboutsummaryrefslogtreecommitdiffstats
path: root/build/ymake.core.conf
diff options
context:
space:
mode:
authorkickbutt <kickbutt@yandex-team.com>2024-01-22 19:27:20 +0300
committerkickbutt <kickbutt@yandex-team.com>2024-01-22 19:53:26 +0300
commita05aa2a362df7ff092854d6c7294a4b30a52dc2f (patch)
tree883b325ca31ccfe1b199b399fe4de083e26f803d /build/ymake.core.conf
parenta857c0bc5f5c807439ca9943afd39113350014ad (diff)
downloadydb-a05aa2a362df7ff092854d6c7294a4b30a52dc2f.tar.gz
Use `CUDA_ARCHITECTURES` flag to prune architectures
* Добавляю переменную `CUDA_ARCHITECTURES`, в которых указываю, для каких архитектур оставлять device-код в гпушных либах CUDA / cuDNN * Выставляю для неё разумные дефолты для тех архитектур, которые потенциально страдают от избыточного размера кода (сейчас это 11.4, потом можно будет расширить для других архитектур) * Пробрасываю эту переменную и путь до бинарника `nvprune` в скрипт линковки * Ищу и пруню гпушные либы Как проверить, что работает: * например, успешно собирается `ya make --build=release -DTENSORFLOW_WITH_CUDA -DCUDA_VERSION=11.4 -DCUDNN_VERSION=8.0.5 -DCUDA_ARCHITECTURES=sm_70 yweb/webdaemons/ocrdaemon` (с дефолтным `-DCUDA_ARCHITECTURES` падает по relocation overflow) * елси хочется посмотреть на изменение размеров, то можно собрать `ya make ml/zeliboba/libs/ynmt_lm/score/bin/ --build=relwithdebinfo -DCUDA_VERSION=11.4 -DCUDNN_VERSION=8.0.5` один раз с дефолтным значением, другой раз с `-DCUDA_ARCHITECTURES=sm_70,sm_80,compute_80` - размер бинаря уменьшится Особенности: * ~~Сейчас дефолт для каждой новой версии куды содержит в себе тупо все поддерживаемые архитектуры. Имеет смысл его порезать до чего-то более разумного~~ - порезал * Обход аргументов в обратном порядке сделан для того, чтобы эмулировать поведение линкера (для линкера важен порядок пробрасывания между либами для линковки и директориями, в которых их нужно искать) * ~~Сейчас артефакты прунинга кладутся рядом с оригинальными либами; возможно, стоит их складывать в отдельное место в build-директории, но я пока не разобрался как это делать; буду рад, если кто-то подскажет~~ уже неактуально - кладу в build_root * nvprune имеет свойство мусорить варнингом в stderr, когда прунит `libcudart_static.a` (это норма - там нет кода, который можно было бы попрунить); как вариант можно закостылить и не прунить `libcudart_static.a`, но я открыт к предложениям
Diffstat (limited to 'build/ymake.core.conf')
-rw-r--r--build/ymake.core.conf6
1 files changed, 6 insertions, 0 deletions
diff --git a/build/ymake.core.conf b/build/ymake.core.conf
index fd7c7877d7..d00c3c7a86 100644
--- a/build/ymake.core.conf
+++ b/build/ymake.core.conf
@@ -1042,6 +1042,12 @@ module _LINK_UNIT: _BASE_UNIT {
LINK_SCRIPT_EXE_FLAGS += --dynamic-cuda
}
+ when ($CUDA_ARCHITECTURES && $USE_DYNAMIC_CUDA != "yes") {
+ LINK_SCRIPT_EXE_FLAGS+=--cuda-architectures $CUDA_ARCHITECTURES
+ LINK_SCRIPT_EXE_FLAGS+=--nvprune-exe $CUDA_ROOT/bin/nvprune
+ LINK_SCRIPT_EXE_FLAGS+=--build-root $(BUILD_ROOT)
+ }
+
when ($OPENSOURCE == "yes" && $AUTOCHECK == "yes") {
# FIXME: Replace AUTOCHECK == yes with _not a host platform_ check after YMAKE-218
MODULE_LICENSES_RESTRICTION_TYPES = ALLOW_ONLY