{"id":19704251,"url":"https://github.com/dbklim/building_tensorflow","last_synced_at":"2026-04-10T12:31:24.017Z","repository":{"id":115095396,"uuid":"193914554","full_name":"dbklim/building_tensorflow","owner":"dbklim","description":"Building TensorFlow v1.15 from source (for CPU and GPU, Python 3.7).","archived":false,"fork":false,"pushed_at":"2020-03-23T16:03:16.000Z","size":28,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-27T17:21:40.246Z","etag":null,"topics":["build","build-automation","build-pipelines","build-scripts","build-tensorflow","build-tensorflow-docker","build-tools","docker","docker-image","dockerfile","gpu","nvidia-cuda","nvidia-gpu","tensorflow","tensorflow-gpu","tensorflow-gpu-docker"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dbklim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-06-26T13:53:54.000Z","updated_at":"2023-05-23T05:12:18.000Z","dependencies_parsed_at":null,"dependency_job_id":"6bad7b46-eb97-4c58-939a-8a0819f6e255","html_url":"https://github.com/dbklim/building_tensorflow","commit_stats":null,"previous_names":["dbklim/building_tensorflow"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dbklim/building_tensorflow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2Fbuilding_tensorflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2Fbuilding_tensorflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2Fbuilding_tensorflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2Fbuilding_tensorflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dbklim","download_url":"https://codeload.github.com/dbklim/building_tensorflow/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2Fbuilding_tensorflow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31642673,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build","build-automation","build-pipelines","build-scripts","build-tensorflow","build-tensorflow-docker","build-tools","docker","docker-image","dockerfile","gpu","nvidia-cuda","nvidia-gpu","tensorflow","tensorflow-gpu","tensorflow-gpu-docker"],"created_at":"2024-11-11T21:21:34.828Z","updated_at":"2026-04-10T12:31:23.993Z","avatar_url":"https://github.com/dbklim.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Building TensorFlow\n\n**Проект** предназначен **для сборки** оптимизированной версии [**TensorFlow v1.15.2**](https://www.tensorflow.org/) и [**TensorFlow-GPU v1.15.2**](https://www.tensorflow.org/) под CPU и GPU на хост-машине из исходников в docker контейнере.\n\n**Список уже собранных версий** и ссылки для их скачивания **доступны** в [соседнем репозитории](https://github.com/Desklop/optimized_tensorflow_wheels).\n\nРепозиторий содержит **2 Dockerfile**:\n\n- [Dockerfile_cpu_cp37](https://github.com/Desklop/building_tensorflow/blob/master/Dockerfile_cpu_cp37) - сборка TensorFlow v1.15.2 для Python 3.7\n- [Dockerfile_gpu_cp37](https://github.com/Desklop/building_tensorflow/blob/master/Dockerfile_gpu_cp37) - сборка TensorFlow-GPU v1.15.2 для Python 3.7\n\n---\n\n## Docker-образ\n\n**Для сборки TensorFlow используется ОС Ubuntu 19.10** с установленными зависимостями в соответствии с официальной [инструкцией](https://www.tensorflow.org/install/source#setup_for_linux_and_macos). **Для сборки с поддержкой GPU** дополнительно **используется образ с** установленными библиотеками **[CUDA 10](https://developer.nvidia.com/cuda-zone) и [cuDNN 7.6](https://developer.nvidia.com/cudnn): [Docker_image_with_CUDA10_cuDNN7](https://github.com/Desklop/docker_image_with_cuda10_cudnn7)**.\n\n**При сборке docker-образа** выполняется клонирование репозитория [**TensorFlow**](https://github.com/tensorflow/tensorflow), загрузка и установка [**Bazel v0.24.1**](https://github.com/bazelbuild/bazel/releases/tag/0.24.1) с помощью **скрипта** [**`install_bazel.sh`**](https://github.com/Desklop/building_tensorflow/blob/master/install_bazel.sh). Скрипт принимает версию Bazel в качестве аргумента, загружает её из официального [репозитория](https://github.com/bazelbuild/bazel) и выполняет установку (если не передавать аргумент - использовать значение `0.24.1`):\n\n```bash\nsudo ./install_bazel.sh 0.24.1\n```\n\n**Сборка TensorFlow** полностью **автоматизирована** с помощью **скрипта [`build.sh`](https://github.com/Desklop/building_tensorflow/blob/master/build.sh)**, который принимает 2 необязательных аргумента при запуске:\n\n```bash\nsudo ./build.sh [-gpu] [-mkl]\n```\n\nЗначения аргументов (если ничего не передавать - выполнить сборку только с поддержкой CPU, если передать оба аргумента - выполнить сборку с поддержкой GPU и Intel MKL):\n\n- `-gpu`: выполнить сборку с поддержкой GPU\n- `-mkl`: выполнить сборку с [Intel Math Kernel Library](https://software.intel.com/en-us/mkl)\n\n**Скрипт выполняет следующие действия:**\n\n- переключение на ветку `r1.15` в локальном репозитории TensorFlow\n- исправление ошибок, которые могут возникнуть при сборке\n- конфигурация сборки (вызов `./configure` с помощью скриптов [`run_configure_cpu_1.15`](https://github.com/Desklop/building_tensorflow/blob/master/run_configure_cpu_1.15)/[`run_configure_gpu_1.15`](https://github.com/Desklop/building_tensorflow/blob/master/run_configure_gpu_1.15))\n- запуск сборки с параметрами под текущий CPU на хост-машине (вызов `bazel build --config=opt --copt=-march=native --noincompatible_strict_action_env //tensorflow/tools/pip_package:build_pip_package`, в зависимости от аргументов, переданных при запуске скрипта, может быть добавлено `--config=cuda` и/или `--config=mkl`)\n- получение списка поддерживаемых инструкций CPU на хост-машине (данные берутся из файла `/proc/cpuinfo`) и, если передан аргумент `-gpu` при запуске скрипта, получение используемой версии CUDA (с помощью вызова `nvcc -V`)\n- сборка Python пакета со списком поддерживаемых инструкций CPU и версией CUDA (если передан аргумент `-gpu` при запуске скрипта) в названии (вызов `./bazel-bin/tensorflow/tools/pip_package/build_pip_package ./built_packages --project_name tensorflow_[cpu|gpu]_[SUPPORTED_INSTRUCTIONS]_[CUDA_VERSION][_MKL][_XLA]`)\n\n**ВНИМАНИЕ!** Для сборки **TensorFlow-GPU v1.15.2** необходимо сначала **подготовить хост машину!** Подготовка заключается в установке официального драйвера нужной версии для [NVIDIA GPU](https://www.nvidia.com/en-gb/graphics-cards/), установке [`nvidia-container-toolkit`](https://github.com/NVIDIA/nvidia-docker) и сборке базового docker-образа с [CUDA 10](https://developer.nvidia.com/cuda-zone) и [cuDNN 7.6](https://developer.nvidia.com/cudnn). Инструкцию и скрипты для подготовки можно найти в соседнем репозитории: [Docker_image_with_CUDA10_cuDNN7](https://github.com/Desklop/docker_image_with_cuda10_cudnn7).\n\n---\n\n## Исправление ошибок при сборке TensorFlow\n\n**При сборке TensorFlow** (т.е. при выполнении `bazel build ...`) по разным причинам **могут возникнуть** следующие **ошибки**:\n\n1. Ошибка **`\"/usr/bin/env: 'python': No such file or directory\"`**.\n\n**Возникает** вне зависимости от выбранных параметров сборки. **Решение:** добавление вызова python 3.7 по команде python. Исправление применяется при сборке docker-образа.\n\n```bash\nsudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 2\n```\n\n2. **Неподдерживаемая версия GCC** при сборке с поддержкой GPU.\n\n**Возникает** из-за того, что сборка с поддержкой GPU требует GCC и G++ не выше 7 версии, а по умолчанию в Ubuntu 19.10 установлен GCC 9. **Решение:** установка GCC и G++ 7 версии. Исправление применяется при сборке docker-образа.\n\n```bash\nsudo apt-get install -y gcc-7 g++-7\nsudo ln -s /usr/bin/gcc-7 /usr/local/cuda/bin/gcc\nsudo ln -s /usr/bin/g++-7 /usr/local/cuda/bin/g++\n```\n\n3. Ошибка **`\"fatbinary fatal : Unknown option '-bin2c-path'\"`**.\n\n**Возникает** из-за использования CUDA 10.2, которая по умолчанию не поддерживается TensorFlow-GPU v1.15.2.\n\n**Решение:** применение коммита `\"Make nccl bindings compilable with cuda 10.2\"` из ветки `master` ([источник](https://github.com/tensorflow/tensorflow/issues/34429#issuecomment-574296455)). Исправление применяется скриптом `build.sh` после переключения на ветку `r1.15` в локальном репозитории TensorFlow.\n\n```bash\ngit config user.email \"example@mail.com\"\ngit config user.name \"Name\"\ngit cherry-pick 67edc16326d6328e7ef096e1b06f81dae1bfb816\n```\n\n4. Ошибка с [gRPC](https://grpc.io/) **`\"error: ambiguating new declaration of 'long int gettid()'\"`**.\n\n**Возникает** из-за того, что библиотека gRPC была обновлена и изменились имена функций с `gettid()` на `sys_gettid()` в файлах `src/core/lib/gpr/log_linux.cc`, `src/core/lib/gpr/log_posix.cc` и `src/core/lib/iomgr/ev_epollex_linux.cc`, что не предусмотрено в используемой версии bazel ([источник](https://github.com/clearlinux/distribution/issues/1151#issuecomment-580154128)).\n\n**Решение:** применение патча [`Rename-gettid-functions.patch`](https://github.com/Desklop/building_tensorflow/blob/master/Rename-gettid-functions.patch), который изменяет имена функций на правильные (для применения патча используется другой патч [`Add-grpc-fix-for-gettid.patch`](https://github.com/Desklop/building_tensorflow/blob/master/Add-grpc-fix-for-gettid.patch), который указывает bazel, что после загрузки, но перед установкой gRPC необходимо применить патч). Исправление применяется скриптом `build.sh` после переключения на ветку `r1.15` в локальном репозитории TensorFlow и исправления ошибки в пункте 3 выше.\n\n**Внимание:** данное исправление работает только с TensorFlow v1.15.2, 2.0.1 и 2.1.0. В остальных версиях работоспособность не гарантируется.\n\n```bash\ncp Add-grpc-fix-for-gettid.patch tensorflow\ngit apply Add-grpc-fix-for-gettid.patch\ncp Rename-gettid-functions.patch tensorflow/third_party/Rename-gettid-functions.patch\n```\n\n---\n\n## Сборка TensorFlow с поддержкой CPU\n\n**Для сборки docker-образа**, находясь в папке с проектом, **нужно выполнить** (`-f Dockerfile_cpu_cp37` — использовать файл `Dockerfile_cpu_cp37` в качестве Dockerfile для сборки образа,`-t` — запуск в терминале, `.` — директория, из которой вызывается docker build (точка — значит в текущей директории находятся все файлы для образа), `building_tensorflow_cpu:1.15` — метка образа и его версия):\n\n```bash\nsudo docker build -f Dockerfile_cpu_cp37 -t building_tensorflow_cpu:1.15 .\n```\n\nПосле успешной сборки, можно **запустить полученный образ** в контейнере (`--cpuset-cpus=\"0-5\"` — использовать только ядра с 0 по 5, `-m 16GB` — использовать не более 16Гб оперативной памяти, `-t` — запуск в терминале, `-i` — интерактивный режим, `--rm` — удалить контейнер после завершения его работы, `-v \"$PWD:/building_tensorflow/built_packages\"` — папка, из которой запускается образ, будет доступна в контейнере по адресу `/building_tensorflow/built_packages`, `-e HOST_PERMS=\"$(id -u):$(id -g)\"` — перенос текущих переменных окружения в контейнер (необходимо для корректной работы bazel)):\n\n```bash\nsudo docker run --cpuset-cpus=\"0-5\" -m 16GB -ti --rm -v \"$PWD:/building_tensorflow/built_packages\" -e HOST_PERMS=\"$(id -u):$(id -g)\" building_tensorflow_cpu:1.15\n```\n\nЕсли необходима поддержка Intel MKL-DNN, нужно при запуске контейнера в конец добавить `./build.sh -mkl`.\n\n**При запуске контейнера** сразу же **начнётся сборка TensorFlow**. На машине с CPU Intel Xeon X5650 **сборка на всех 12 ядрах** занимает **около 1.5 часов**. При этом требуется **около 15Гб оперативной памяти** (при увеличении числа используемых ядер необходимо больше оперативной памяти, из рассчёта примерно 1-2Гб на 1 ядро).\n\n**После завершения сборки** контейнер остановится и **в папке**, из которой он был запущен, **появится файл `tensorflow_cpu_[SUPPORTED_INSTRUCTIONS][_MKL][_XLA]-1.15.2-cp37-cp37m-linux_x86_64.whl`** (в случае CPU Intel Xeon X5650: `tensorflow_cpu_SSE4.1_SSE4.2_XLA-1.15.2-cp37-cp37m-linux_x86_64.whl`), оптимизированный под CPU на хост машине.\n\nДля установки TensorFlow из полученного пакета можно использовать pip:\n\n```bash\npip3 install tensorflow_cpu_SSE4.1_SSE4.2_XLA-1.15.2-cp37-cp37m-linux_x86_64.whl\n```\n\n**Примечание**: размер собранного docker-образа равен **1.5-1.7 Гб**.\n\n---\n\n## Сборка TensorFlow с поддержкой CPU и GPU\n\n**ВНИМАНИЕ!** **Перед сборкой** и запуском сначала нужно **подготовить хост машину!** Инструкцию и скрипты для подготовки можно найти в [Docker_image_with_CUDA10_cuDNN7](https://github.com/Desklop/docker_image_with_cuda10_cudnn7).\n\nПо умолчанию **в качестве базового образа используется образ с CUDA 10.2 и cuDNN 7.6**. Если необходима поддержка другой версии CUDA, нужно изменить имя базового образа во 2 строке файла [`Dockerfile_gpu_cp37`](https://github.com/Desklop/building_tensorflow/blob/master/Dockerfile_gpu_cp37) и предварительно собрать указанный базовый docker-образ (подробнее см. в [Docker_image_with_CUDA10_cuDNN7](https://github.com/Desklop/docker_image_with_cuda10_cudnn7)).\n\n**Для сборки docker-образа**, находясь в папке с проектом, **нужно выполнить**:\n\n```bash\nsudo docker build -f Dockerfile_gpu_cp37 -t building_tensorflow_gpu:1.15 .\n```\n\nПосле успешной сборки, можно **запустить полученный образ** в контейнере (`--gpus all` — предоставить доступ контейнеру ко всем имеющимся видеокартам, подробнее [тут](https://github.com/Desklop/docker_image_with_cuda10_cudnn7#сборка-пользовательского-docker-образа-с-cuda-10x-и-cudnn-76)):\n\n```bash\nsudo docker run --cpuset-cpus=\"0-5\" -m 16GB --gpus all -ti --rm -v \"$PWD:/building_tensorflow/built_packages\" -e HOST_PERMS=\"$(id -u):$(id -g)\" building_tensorflow_gpu:1.15\n```\n\nЕсли необходима поддержка Intel MKL-DNN, нужно при запуске контейнера в конец добавить `./build.sh -gpu -mkl`.\n\n**При запуске контейнера** сразу же **начнётся сборка TensorFlow-GPU**. На машине с CPU Intel Xeon X5650 и GPU NVIDIA GeForce RTX2080 **сборка на всех 12 ядрах** занимает **около 2 часов**. При этом требуется **около 25Гб оперативной памяти** (при увеличении числа используемых ядер необходимо больше оперативной памяти, из рассчёта примерно 2-4Гб на 1 ядро).\n\n**После завершения** сборки контейнер остановится и **в папке**, из которой он был запущен, **появится файл `tensorflow_gpu_[SUPPORTED_INSTRUCTIONS]_[CUDA_VERSION][_MKL][_XLA]-1.15.2-cp37-cp37m-linux_x86_64.whl`** (в случае CPU Intel Xeon X5650 и GPU NVIDIA GeForce RTX2080: `tensorflow_gpu_SSE4.1_SSE4.2_cuda10.0_XLA-1.15.2-cp37-cp37m-linux_x86_64.whl`), оптимизированный под CPU и GPU на хост машине.\n\nДля установки TensorFlow-GPU из полученного пакета можно использовать pip:\n\n```bash\npip3 install tensorflow_gpu_SSE4.1_SSE4.2_cuda10.0_XLA-1.15.2-cp37-cp37m-linux_x86_64.whl\n```\n\n**Примечание**: размер собранного docker-образа равен **4.5-5.3 Гб**.\n\n---\n\n## Дополнительные сведения\n\n**Для успешной сборки нужен Bazel v0.24.1**, а для сборки с поддержкой GPU - **GCC и G++** не выше **7 версии**, и **CUDA 10.X с cuDNN 7.6**.\n\n**Изменить параметры сборки** можно в скриптах [`run_configure_cpu_1.15`](https://github.com/Desklop/building_tensorflow/blob/master/run_configure_cpu_1.15) и [`run_configure_gpu_1.15`](https://github.com/Desklop/building_tensorflow/blob/master/run_configure_gpu_1.15) соответственно для CPU и GPU. Дополнительные параметры для сборщика bazel можно указать в скрипте [`build.sh`](https://github.com/Desklop/building_tensorflow/blob/master/build.sh#L54) в строке 45 или 54.\n\n**Описание некоторых [аргументов](https://stackoverflow.com/questions/41293077/how-to-compile-tensorflow-with-sse4-2-and-avx-instructions) сборки** (их так же можно добавить как в `run_configure_cpu_1.15` (строка 32) или `run_configure_gpu_1.15` (строка 42), так и в `build.sh` (строка 45 или 54)):\n\n- `-march=native` - использовать параметры текущего CPU (используется по умолчанию)\n- `cuda` - выполнить сборку с поддержкой GPU под конкретную версию CUDA\n- `libverbs` - для удалённого прямого доступа к памяти Remote Direct Memory Access (RDMA) (нужно перед установкой выполнить `sudo apt-get install libibverbs-dev`)\n- `ngraph` - поддержка компилятора Intel nGraph (не работает ожидаемым образом, а сборка nGraph из исходников не дала ускорения работы, только замедление где-то в 1.5 раза, см. комментарии в строках 3-8 в `build.sh`)\n- `gdr` - более крутая версия текущего протокола gRPC для распределённых вычислений на GPU (полезен когда размер тензора больше 100Мб и используется несколько видеокарт)\n- `monolithic` - сборка без возможности создания своих операций (подробнее [тут](https://stackoverflow.com/questions/53705582/what-is-meant-by-static-monolithic-build-when-building-tensorflow-from-source))\n- `mkl` - поддержка библиотеки Intel Math Kernel Library (со сборкой для GPU приводит к уменьшению производительности, в сборке для CPU не приводит к изменению производительности (нужны ещё тесты, подробнее [тут](https://github.com/tensorflow/tensorflow/issues/23238)) и доступно только в Linux) (также можно использовать через `pip3 install intel-tensorflow`, подробнее [тут](https://software.intel.com/en-us/articles/intel-optimization-for-tensorflow-installation-guide))\n\n**Руководство по сборке вручную** находится в [`manual_build_order.md`](https://github.com/Desklop/building_tensorflow/blob/master/manual_build_order.md).\n\n**Другие руководства по сборке:**\n\n- [официальная инструкция](https://www.tensorflow.org/install/source) от разработчиков TensorFlow\n- [Building TensorFlow from source (TF 2.1.0, Ubuntu 19.10)](https://gist.github.com/kmhofmann/e368a2ebba05f807fa1a90b3bf9a1e03)\n- [tensorflow-community-wheels](https://github.com/yaroslavvb/tensorflow-community-wheels) (так же содержит множество собранных пакетов с различными параметрами от сообщества)\n\n---\n\nЕсли у вас возникнут вопросы или вы хотите сотрудничать, можете написать мне на почту: vladsklim@gmail.com или в [LinkedIn](https://www.linkedin.com/in/vladklim/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdbklim%2Fbuilding_tensorflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdbklim%2Fbuilding_tensorflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdbklim%2Fbuilding_tensorflow/lists"}