summaryrefslogtreecommitdiffstats
path: root/build/scripts
Commit message (Collapse)AuthorAgeFilesLines
...
* Fix bug after rXXXXXXkickbutt2024-02-031-14/+19
|
* Bump CUDA -> 11.4 and cuDNN -> 8.0.5kickbutt2024-02-021-22/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ~~большой~~ PR по переключению дефолтной версии CUDA с cuDNN в Аркадии Обновляем CUDA: 10.1 -> 11.4 Обновляем cuDNN: 7.6.5 -> 8.0.5 Помимо простого обновления версий, данный PR содержит следующее: * От перехода на CUDA 11.4 честно сломался только [один проект](https://a.yandex-team.ru/arcadia/cv/imgclassifiers/danet/backend/gpu_cuda?rev=rXXXXXX), поэтому просто там правим * Где-то поменялись тесты на объём потребляемой памяти, поэтому их просто переканонизируем * По поводу удаления таргетов из clang_prev_targets: - `ld.lld` из поставки clang14 не справляется с линковкой - не может найти символы в попруненных либах, хотя они там есть - но можно просто переключиться на автосборку, потому что те проблемы [совместимости cuDNN и clang](https://st.yandex-team.ru/#655b977f30316b33e3a5ec87), для которых gpu-шные таргеты добавляли в clang_prev_targets, в автосборке уже не существуют * По поводу удаления таргетов из cuda11_targets - теперь cuda11_targets отличается от автосборки версией TensorRT (5 в автосборке vs 7 в cuda11) и режимом сборки (relwithdebinfo в автосборке vs release в cuda11), но есть два момента - те, таргеты, которые я удаляю, не зависят от TensorRT, поэтому их не имеет смысла их тестить и в автосборке, и в cuda11 (про таргет `ads/quality/sis/tests/cuda11_arch80` мне сейчас ничего не известно; если что - выпилим его отдельным таргетом) - на самом деле дублирование даже вредно - в `dict/mt/daemon/tests/gpu` есть тест на потребление памяти gpu, который имеет разные результаты в зависимости от release vs relwithdebinfo, поэтому для этого таргета мы в принципе не можем собираться одновременно и в автосборке, и в cuda11 По поводу дефолтной автосборки в принципе пришлось сделать четыре приседания: * пишем кастомный скрипт для линкера: - идея скрипта: переставляем большую секцию с gpu-шным кодом (`.nv_fatbin`) после `.bss` (самая дальняя секция, куда можно ожидать ссылки из кода бинаря), чтобы было меньше шансов нарваться на проблемы с relocation overflow в (`.bss`) - замечание: в самом скрипте используем в нём только `INSERT AFTER`, чтобы [ld.ldd и дальше применял свои дефолтные правила для остальной программы](https://releases.llvm.org/16.0.0/tools/lld/docs/ELF/linker_script.html#sections-command) - сделал замеры перфа генезисного инференса через `ml/zeliboba/libs/ynmt_lm/translate/bin` на том сценарии, который оказался под рукой - не заметил каких-то изменений * добавляем nvcc-флаг `-Xfatbin=-compress-all`, чтобы наш fatbin сжимался и занимал меньше пространства в бинаре (далее он будет разжиматься на старте программы, так что оверхеда быть не должно) - сделал замеры перфа генезисного инференса через `ml/zeliboba/libs/ynmt_lm/translate/bin` на том сценарии, который оказался под рукой - не заметил каких-то изменений * добавляем флаг линкера `--no-relax`, так как опция "relaxation of relocatable symbols" (когда мы load в регистр + jump по адресу в регистре заменяем на относительный jump) уменьшает допустимый диапазон оффсетов, которые мы можем кодировать, что также приводит к relocation overflow - больше информации можно найти в https://maskray.me/blog/2023-05-14-relocation-overflow-and-code-models - сделал замеры перфа генезисного инференса через `ml/zeliboba/libs/ynmt_lm/translate/bin` на том сценарии, который оказался под рукой - не заметил каких-то изменений * ещё чуть более гранулярно выпиливаем лобзиком архитектуры из либ в поставках CUDA / cuDNN - в категории "ассемблерный код" (`compute_XX`) оставляем только для последней версии поддерживаемой архитектуры (то есть `compute_86`), так как на новых GPU-шках мы будем JIT-компилироваться из него, а на старых GPU-шках мы возьмём готовый машинный код для них Эти идеи были в основном взяты из следующих источников: - https://maskray.me/blog/2021-07-04-sections-and-overwrite-sections#insert-before-and-insert-after и https://discourse.llvm.org/t/lld-relocation-overflows-and-nv-fatbin/58889 (про перемещение `.nv_fatbin`) - https://docs.nvidia.com/cuda/cuda-binary-utilities/index.html#nvprune (про `nvprune`) - https://maskray.me/blog/2023-05-14-relocation-overflow-and-code-models#relocation-overflow (`-Wl,--no-relax`) - https://discourse.llvm.org/t/lld-relocation-overflows-and-nv-fatbin/58889/6 + https://github.com/pytorch/pytorch/pull/43074/files#diff-1e7de1ae2d059d21e1dd75d5812d5a34b0222cef273b7c3a2af62eb747f9d20aR360 (про `-Xfatbin=-compress-all`) Дополнительные комментарии: - можно дополнительно не выпиливать ненужные архитектуры, но этот флаг дополнительно уменьшает размеры бинарей (например, таргет `ml/zeliboba/libs/ynmt_lm/translate/bin`уменьшается на 120 MiB, что составляет примерно 5% от размера бинаря) - кастомный скрипт для линкера позволяет не развлекаться с ещё более гранулярным выпиливанием архитектур (например, для таргетов `TENSORFLOW_WITH_CUDA`) Оставшийся технический долг, который будет делать в других PRах * донести функциональность из `link_exe.py` в `link_dyn_lib.py` * перейти на TensorRT 7 * выпилить cuda11_targets * выпилить флаг `TENSORFLOW_WITH_CUDA` в пользу `CUDA_REQUIRED` и удалить tensorflow_with_cuda_targets (??) * поднять версию стандарта c++ для гпушного кода с 14 до 17
* Fix bugs in CUDA libs pruningkickbutt2024-01-291-2/+7
| | | | | | Чиним две проблемы, обнаруженные опытным путём: * во-первых, cudart не содержит никакого девайсного кода, поэтому её не имеет смысла прунить * во-вторых, нам для линковки могут передать несуществующие директории, поэтому делаем код проверок чуть более многословным
* Fix separator in CUDA_ARCHITECTURESkickbutt2024-01-231-2/+3
|
* Use `CUDA_ARCHITECTURES` flag to prune architectureskickbutt2024-01-221-0/+56
| | | | | | | | | | | | | | | | | * Добавляю переменную `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`, но я открыт к предложениям
* Library import 8 (#1074)AlexSm2024-01-182-9/+11
| | | | | * Library import 8 * Add contrib/libs/cxxsupp/libcxx/include/__verbose_abort
* Library import 7 (#937)AlexSm2024-01-114-4/+214
|
* Library import 5, delete go dependencies (#832)AlexSm2024-01-041-1/+1
| | | | | * Library import 5, delete go dependencies * Fix yt client
* Import libs 1 (#590)AlexSm2023-12-212-28/+0
| | | | | | | * Import libs 1 * Add new file without extension * Add file missed in export config
* (no commit message)pg2023-12-151-0/+3
|
* External build system generator release 65robot-ya-builder2023-12-052-29/+37
| | | | Update tools: yexport, os-yexport
* Revert commit rXXXXXX, External build system generator release 64snermolaev2023-12-012-37/+29
|
* External build system generator release 64robot-ya-builder2023-12-012-29/+37
| | | | Update tools: yexport, os-yexport
* Fix quoting -passes option value (thanks for @spreis for hint)ignat2023-11-301-1/+8
|
* (no commit message)pg2023-11-301-6/+5
|
* `build/scripts` ya style --pyiaz16072023-11-3093-514/+866
|
* Migrate CSA runner script to py3nechda2023-11-291-1/+1
|
* Support CSAnechda2023-11-241-0/+98
| | | | | | | | | | | | | | | # О чем этот PR? Добавляем возможность автоматического запуска Clang Static Analyzer (CSA) при сборке бинарников # Уже же есть clang tidy зачем нам еще и clang static analyzer? Да, clang tidy включает в себя возможности static analyzer, но данный PR расширает возможности CSA, а конкретно: 1. Фильтрация анализируемых файлов -- CSA по дефолту такое делать не умеет, а стандартные чекеры находят всякий мусор в либах контриба 2. Возможность подгружать свои собственные плагины -- они же чекеры # А нам точно нужен CSA? Да, нужен, так как он находит провисшие ссылки https://a.yandex-team.ru/review/4679116/details -- проезды по памяти ловить ооочень сложно ## Чтобы следить за процессом В CI падает большое количество тестов, поэтому параллельно идет CI в котором изменений никаких нет, для отслеживания динамики падающих тестов https://a.yandex-team.ru/review/4868604/details
* check proper binary on windowssvidyuk2023-11-211-1/+1
|
* move some scripts to build/internal/scripssnermolaev2023-11-165-468/+0
|
* up java to 8 for MapKitkmartynkov2023-11-112-0/+9
|
* Intermediate changesrobot-piglet2023-11-061-1/+1
|
* Canonization backend 1st partiaz16072023-11-031-8/+8
| | | | | | | | Здесь мы добавляем в машинерию канонизации возможность подстановки в url, чтобы в будущем можно было загружать и использовать канонические данные из нескольких мест. В этом ревью добавлена вся необходимая поддержка вокруг машинерии тестирования В следующей итерации нужно покрыть тестами скачивание из s3
* [build/scripts/copy_clang_profile_rt.py] Add temp option to build_script to ↵zhukoff-pavel2023-11-021-3/+7
| | | | support both clang14 and clang16
* Dismantle FROM_EXTERNAL, process .external file in pluginspreis2023-10-251-60/+0
|
* support dash in Python version of PROTO_LIBRARYspreis2023-10-131-14/+28
|
* binary stable preprocessed.tar.gz and .jsrcsnermolaev2023-10-102-13/+36
|
* use argparse instead of optparsesnermolaev2023-10-051-9/+8
|
* cleanup extract_asrc.pysnermolaev2023-10-051-1/+1
|
* go build: substitute a.yandex-team.ru/ for GO_ARCADIA_PROJECT_PREFIXsnermolaev2023-09-233-7/+8
|
* feat(FROM_NPM): load packages by tarball urlzaverden2023-09-201-9/+9
| | | | Раньше FROM_NPM строил урл для скачивания по имени пакета. Изменил это на использование поля tarball, потому что это требуется для интеграции с `@yatool/prebuilder`
* (no commit message)pg2023-09-131-2/+11
|
* (no commit message)pg2023-09-121-1/+6
|
* (no commit message)pg2023-09-091-0/+36
|
* (no commit message)pg2023-09-081-0/+3
|
* (no commit message)pg2023-08-311-1/+1
|
* Fix path comparison on Windowssomov2023-08-311-1/+1
|
* (no commit message)pg2023-08-301-2/+4
|
* Make libclang.rt_profile depends on sources againhiddenpath2023-08-222-0/+39
|
* Revert commit rXXXXXX, Make libclang.rt_profile depends on sourcesprettyboy2023-08-182-43/+0
|
* Make libclang.rt_profile depends on sourceshiddenpath2023-08-182-0/+43
|
* support explicit pic/piepg2023-08-171-1/+5
|
* merge partial clang16 supportpg2023-08-161-0/+3
|
* fixes for clang16pg2023-08-121-1/+4
| | | | https://discourse.llvm.org/t/llvm-15-default-pie-issue/67125
* Always initialize yatest lib for goiaz16072023-08-111-0/+1
| | | | | | @snermolaev предложил в тикете вынести инициализацию окружения в отдельный модуль и для каждого модуля импортировать его, чтобы не делать лишней работы. Но кажется, что при таком подходе, потом нужно будет либо повторно считывать и парсить контекстный файл, либо сохранять его контент внутри нового модуля и тоже заново парсить. Учитывая, что для инициализации переменных окружения нам все равно придется считать и распарсить контекстный файл, предлагаю оставить инициализацию как есть и вместе с переменными окружния, практически за бесплатно инициализировать весь контекст.
* GO_EMBED_BINDIR macrosnermolaev2023-08-101-2/+4
|
* (no commit message)hiddenpath2023-08-021-3/+0
|
* Remove excessive PEERDIRthegeorg2023-07-271-4/+1
| | | The problem was introduced in rXXXXXX.
* Do not use libprofile.a from sourcesthegeorg2023-07-212-46/+0
| | | | | | ``` TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType' Failed ```
* Set idea.max.content.load.filesize globallya-beliakov2023-07-201-1/+1
|