ساخت از منبع

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

یک بسته Pip TensorFlow از منبع بسازید و آن را روی لینوکس اوبونتو و macOS نصب کنید. در حالی که دستورالعمل ها ممکن است برای سیستم های دیگر کار کنند، اما فقط برای اوبونتو و macOS تست شده و پشتیبانی می شود.

راه اندازی برای لینوکس و macOS

ابزارهای ساخت زیر را برای پیکربندی محیط توسعه خود نصب کنید.

وابستگی های بسته Python و TensorFlow را نصب کنید

اوبونتو

sudo apt install python3-dev python3-pip

سیستم عامل مک

به Xcode 9.2 یا بالاتر نیاز دارد.

با استفاده از مدیر بسته Homebrew نصب کنید:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
export PATH="/usr/local/opt/python/libexec/bin:$PATH"
# if you are on macOS 10.12 (Sierra) use export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
brew install python

وابستگی های بسته Pip TensorFlow را نصب کنید (اگر از یک محیط مجازی استفاده می کنید، آرگومان --user را حذف کنید):

pip install -U --user pip numpy wheel packaging requests opt_einsum
pip install -U --user keras_preprocessing --no-deps

Bazel را نصب کنید

برای ساخت TensorFlow، باید Bazel را نصب کنید. Bazelisk یک راه آسان برای نصب Bazel است و به طور خودکار نسخه صحیح Bazel را برای TensorFlow دانلود می کند. برای سهولت استفاده، Bazelisk را به عنوان bazel قابل اجرا در PATH خود اضافه کنید.

اگر Bazelisk در دسترس نیست، می توانید Bazel را به صورت دستی نصب کنید . مطمئن شوید که نسخه Bazel پشتیبانی شده را نصب کنید: هر نسخه بین _TF_MIN_BAZEL_VERSION و _TF_MAX_BAZEL_VERSION همانطور که در tensorflow/configure.py مشخص شده است.

نصب پشتیبانی از GPU (اختیاری، فقط لینوکس)

هیچ پشتیبانی GPU برای macOS وجود ندارد.

راهنمای پشتیبانی GPU را برای نصب درایورها و نرم افزارهای اضافی مورد نیاز برای اجرای TensorFlow روی GPU بخوانید.

کد منبع TensorFlow را دانلود کنید

از Git برای کلون کردن مخزن TensorFlow استفاده کنید:

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow

مخزن به طور پیش فرض به شاخه توسعه master است. شما همچنین می توانید یک شعبه انتشار را برای ساختن پرداخت کنید:

git checkout branch_name  # r2.2, r2.3, etc.

اختیاری: پیکربندی ساخت

بیلدهای TensorFlow توسط فایل .bazelrc در دایرکتوری ریشه مخزن پیکربندی می شوند. از اسکریپت های ./configure یا ./configure.py می توان برای تنظیم تنظیمات رایج استفاده کرد.

اگر نیاز به تغییر پیکربندی دارید، اسکریپت ./configure را از دایرکتوری ریشه مخزن اجرا کنید. این اسکریپت مکان وابستگی های TensorFlow را از شما می خواهد و گزینه های پیکربندی ساخت اضافی را می خواهد (برای مثال پرچم های کامپایلر). برای جزئیات بیشتر به بخش نمونه جلسه مراجعه کنید.

./configure

همچنین یک نسخه پایتون از این اسکریپت، ./configure.py وجود دارد. در صورت استفاده از یک محیط مجازی، python configure.py مسیرهای داخل محیط را اولویت بندی می کند، در حالی که ./configure مسیرهای خارج از محیط را اولویت بندی می کند. در هر دو حالت می توانید پیش فرض را تغییر دهید.

جلسه نمونه

شکل زیر یک نمونه اجرا از اسکریپت ./configure را نشان می دهد (جلسه شما ممکن است متفاوت باشد):

گزینه های پیکربندی

پشتیبانی از پردازنده گرافیکی

برای پشتیبانی از GPU ، cuda=Y را در طول پیکربندی تنظیم کنید و نسخه‌های CUDA و cuDNN را مشخص کنید. اگر سیستم شما چندین نسخه از CUDA یا cuDNN را نصب کرده است، به جای تکیه بر پیش فرض، صریحاً نسخه را تنظیم کنید. ./configure پیوندهای نمادینی را به کتابخانه های CUDA سیستم شما ایجاد می کند—بنابراین اگر مسیرهای کتابخانه CUDA خود را به روز کنید، این مرحله پیکربندی باید دوباره قبل از ساخت اجرا شود.

بهینه سازی ها

برای پرچم‌های بهینه‌سازی کامپایل، پیش‌فرض ( -march=native ) کد تولید شده را برای نوع CPU دستگاه شما بهینه می‌کند. با این حال، اگر TensorFlow را برای یک نوع CPU متفاوت می‌سازید، یک پرچم بهینه‌سازی خاص‌تر را در نظر بگیرید. برای مثال، راهنمای GCC را بررسی کنید.

تنظیمات از پیش تنظیم شده

برخی از پیکربندی های ساخت از پیش پیکربندی شده در دسترس هستند که می توانند به دستور bazel build اضافه شوند، به عنوان مثال:

  • --config=dbg ساخت با اطلاعات اشکال زدایی. برای جزئیات بیشتر به CONTRIBUTING.md مراجعه کنید.
  • --config=mkl —پشتیبانی از Intel® MKL-DNN .
  • --config=monolithic برای یک ساخت عمدتا ثابت و یکپارچه.

پکیج پیپ را بسازید و نصب کنید

بسته پیپ در دو مرحله ساخته می شود. یک دستور bazel build یک برنامه "package-builder" ایجاد می کند. سپس Package-builder را برای ایجاد بسته اجرا می کنید.

پکیج ساز را بسازید

برای ایجاد بسته‌ساز TensorFlow 2.x با پشتیبانی فقط از CPU از bazel build استفاده کنید:

bazel build [--config=option] //tensorflow/tools/pip_package:build_pip_package

پشتیبانی از پردازنده گرافیکی

برای ساختن پکیج ساز TensorFlow با پشتیبانی از GPU:

bazel build --config=cuda [--config=option] //tensorflow/tools/pip_package:build_pip_package

گزینه های ساخت Bazel

برای گزینه های ساخت به مرجع خط فرمان Bazel مراجعه کنید.

ساخت TensorFlow از منبع می تواند از مقدار زیادی RAM استفاده کند. اگر سیستم شما دارای محدودیت حافظه است، استفاده از رم Bazel را با استفاده از: --local_ram_resources=2048 محدود کنید.

بسته های رسمی TensorFlow با یک زنجیره ابزار GCC ساخته شده اند که با استاندارد بسته manylinux2010 مطابقت دارد.

برای GCC 5 و جدیدتر، سازگاری با ABI قدیمی‌تر را می‌توان با استفاده از: --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" ایجاد کرد. سازگاری ABI تضمین می کند که عملیات سفارشی ساخته شده در برابر بسته رسمی TensorFlow همچنان با بسته ساخته شده GCC 5 کار می کنند.

بسته را بسازید

دستور bazel build bazel یک فایل اجرایی به نام build_pip_package ایجاد می کند — این برنامه ای است که بسته pip را می سازد. فایل اجرایی را مطابق شکل زیر اجرا کنید تا یک بسته whl. در پوشه /tmp/tensorflow_pkg .whl

برای ساخت از شاخه انتشار:

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

برای ساختن از master، از --nightly_flag استفاده کنید تا وابستگی های مناسب را بدست آورید:

./bazel-bin/tensorflow/tools/pip_package/build_pip_package --nightly_flag /tmp/tensorflow_pkg

اگرچه امکان ساخت هر دو پیکربندی CUDA و غیر CUDA در زیر درخت منبع یکسان وجود دارد، توصیه می‌شود هنگام جابه‌جایی بین این دو پیکربندی در درخت منبع یکسان، bazel clean را اجرا کنید.

بسته را نصب کنید

نام فایل فایل whl. تولید شده به نسخه .whl و پلتفرم شما بستگی دارد. برای نصب بسته از pip install استفاده کنید، به عنوان مثال:

pip install /tmp/tensorflow_pkg/tensorflow-version-tags.whl

Docker Linux می سازد

تصاویر توسعه Docker TensorFlow راهی آسان برای راه اندازی محیطی برای ساخت بسته های لینوکس از منبع است. این تصاویر قبلاً حاوی کد منبع و وابستگی های مورد نیاز برای ساخت TensorFlow هستند. برای دستورالعمل‌های نصب و فهرست برچسب‌های تصویر موجود ، به راهنمای TensorFlow Docker بروید.

فقط CPU

مثال زیر از تصویر :devel برای ساخت یک بسته فقط CPU از آخرین کد منبع TensorFlow استفاده می کند. راهنمای Docker را برای برچسب‌های -devel در دسترس بررسی کنید.

آخرین تصویر توسعه را دانلود کنید و یک ظرف Docker را راه اندازی کنید که از آن برای ساخت بسته پیپ استفاده می کنید:

docker pull tensorflow/tensorflow:devel
docker run -it -w /tensorflow_src -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
    tensorflow/tensorflow:devel bash

git pull  # within the container, download the latest source code

دستور docker run docker بالا یک پوسته را در پوشه /tensorflow_src ریشه درخت منبع راه‌اندازی می‌کند. دایرکتوری فعلی میزبان را در پوشه /mnt کانتینر نصب می کند و اطلاعات کاربر میزبان را از طریق یک متغیر محیطی به کانتینر ارسال می کند (برای تنظیم مجوزها استفاده می شود - Docker می تواند این کار را دشوار کند).

از طرف دیگر، برای ساختن یک کپی میزبان از TensorFlow در یک ظرف، درخت منبع میزبان را در پوشه /tensorflow کانتینر سوار کنید:

docker run -it -w /tensorflow -v /path/to/tensorflow:/tensorflow -v $PWD:/mnt \
    -e HOST_PERMS="\\((id -u):\\)(id -g)" tensorflow/tensorflow:devel bash

با تنظیم درخت منبع، بسته TensorFlow را در محیط مجازی کانتینر بسازید:

  1. اختیاری: پیکربندی ساخت - این امر از کاربر می خواهد به سؤالات پیکربندی ساخت پاسخ دهد.
  2. ابزار مورد استفاده برای ایجاد بسته پیپ را بسازید.
  3. ابزار را برای ایجاد بسته پیپ اجرا کنید.
  4. مجوزهای مالکیت فایل را برای خارج از کانتینر تنظیم کنید.
./configure  # if necessary

bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /mnt  # create package

chown $HOST_PERMS /mnt/tensorflow-version-tags.whl

بسته را در کانتینر نصب و تأیید کنید:

pip uninstall tensorflow  # remove current version

pip install /mnt/tensorflow-version-tags.whl
cd /tmp  # don't import from source directory
python -c "import tensorflow as tf; print(tf.__version__)"

در دستگاه میزبان شما، بسته Pip TensorFlow در دایرکتوری فعلی است (با مجوزهای کاربر میزبان): ./tensorflow- version - tags .whl

پشتیبانی از پردازنده گرافیکی

Docker ساده ترین راه برای ایجاد پشتیبانی GPU برای TensorFlow است زیرا دستگاه میزبان فقط به درایور NVIDIA® نیاز دارد (نیازی نیست که NVIDIA® CUDA® Toolkit نصب شود). برای راه اندازی nvidia-docker (فقط لینوکس) به راهنمای پشتیبانی GPU و راهنمای TensorFlow Docker مراجعه کنید.

مثال زیر تصویر TensorFlow :devel-gpu را دانلود می کند و از nvidia-docker برای اجرای کانتینر مجهز به GPU استفاده می کند. این تصویر توسعه برای ساخت یک بسته پیپ با پشتیبانی GPU پیکربندی شده است:

docker pull tensorflow/tensorflow:devel-gpu
docker run --gpus all -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
    tensorflow/tensorflow:devel-gpu bash
git pull  # within the container, download the latest source code

سپس، در محیط مجازی کانتینر، بسته TensorFlow را با پشتیبانی از GPU بسازید:

./configure  # if necessary

bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /mnt  # create package

chown $HOST_PERMS /mnt/tensorflow-version-tags.whl

بسته را در کانتینر نصب و تأیید کنید و GPU را بررسی کنید:

pip uninstall tensorflow  # remove current version

pip install /mnt/tensorflow-version-tags.whl
cd /tmp  # don't import from source directory
python -c "import tensorflow as tf; print(\"Num GPUs Available: \", len(tf.config.list_physical_devices('GPU')))"

تنظیمات ساخت تست شده

لینوکس

CPU

نسخه نسخه پایتون کامپایلر ابزار بسازید
tensorflow-2.10.0 3.7-3.10 GCC 9.3.1 Bazel 5.0.0
tensorflow-2.9.0 3.7-3.10 GCC 9.3.1 Bazel 5.0.0
tensorflow-2.8.0 3.7-3.10 GCC 7.3.1 بازل 4.2.1
tensorflow-2.7.0 3.7-3.9 GCC 7.3.1 بازل 3.7.2
tensorflow-2.6.0 3.6-3.9 GCC 7.3.1 بازل 3.7.2
tensorflow-2.5.0 3.6-3.9 GCC 7.3.1 بازل 3.7.2
tensorflow-2.4.0 3.6-3.8 GCC 7.3.1 Bazel 3.1.0
tensorflow-2.3.0 3.5-3.8 GCC 7.3.1 Bazel 3.1.0
tensorflow-2.2.0 3.5-3.8 GCC 7.3.1 Bazel 2.0.0
tensorflow-2.1.0 2.7، 3.5-3.7 GCC 7.3.1 Bazel 0.27.1
tensorflow-2.0.0 2.7، 3.3-3.7 GCC 7.3.1 Bazel 0.26.1
tensorflow-1.15.0 2.7، 3.3-3.7 GCC 7.3.1 Bazel 0.26.1
tensorflow-1.14.0 2.7، 3.3-3.7 GCC 4.8 Bazel 0.24.1
tensorflow-1.13.1 2.7، 3.3-3.7 GCC 4.8 Bazel 0.19.2
tensorflow-1.12.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.15.0
tensorflow-1.11.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.15.0
tensorflow-1.10.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.15.0
tensorflow-1.9.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.11.0
tensorflow-1.8.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.10.0
tensorflow-1.7.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.10.0
tensorflow-1.6.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.9.0
tensorflow-1.5.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.8.0
tensorflow-1.4.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.5.4
tensorflow-1.3.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.4.5
tensorflow-1.2.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.4.5
tensorflow-1.1.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.4.2
tensorflow-1.0.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.4.2

پردازنده گرافیکی

نسخه نسخه پایتون کامپایلر ابزار بسازید cuDNN CUDA
tensorflow-2.10.0 3.7-3.10 GCC 9.3.1 Bazel 5.1.1 8.1 11.2
tensorflow-2.9.0 3.7-3.10 GCC 9.3.1 Bazel 5.0.0 8.1 11.2
tensorflow-2.8.0 3.7-3.10 GCC 7.3.1 بازل 4.2.1 8.1 11.2
tensorflow-2.7.0 3.7-3.9 GCC 7.3.1 بازل 3.7.2 8.1 11.2
tensorflow-2.6.0 3.6-3.9 GCC 7.3.1 بازل 3.7.2 8.1 11.2
tensorflow-2.5.0 3.6-3.9 GCC 7.3.1 بازل 3.7.2 8.1 11.2
tensorflow-2.4.0 3.6-3.8 GCC 7.3.1 Bazel 3.1.0 8.0 11.0
tensorflow-2.3.0 3.5-3.8 GCC 7.3.1 Bazel 3.1.0 7.6 10.1
tensorflow-2.2.0 3.5-3.8 GCC 7.3.1 Bazel 2.0.0 7.6 10.1
tensorflow-2.1.0 2.7، 3.5-3.7 GCC 7.3.1 Bazel 0.27.1 7.6 10.1
tensorflow-2.0.0 2.7، 3.3-3.7 GCC 7.3.1 Bazel 0.26.1 7.4 10.0
tensorflow_gpu-1.15.0 2.7، 3.3-3.7 GCC 7.3.1 Bazel 0.26.1 7.4 10.0
tensorflow_gpu-1.14.0 2.7، 3.3-3.7 GCC 4.8 Bazel 0.24.1 7.4 10.0
tensorflow_gpu-1.13.1 2.7، 3.3-3.7 GCC 4.8 Bazel 0.19.2 7.4 10.0
tensorflow_gpu-1.12.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.11.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.10.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.9.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.11.0 7 9
tensorflow_gpu-1.8.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.10.0 7 9
tensorflow_gpu-1.7.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.9.0 7 9
tensorflow_gpu-1.6.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.9.0 7 9
tensorflow_gpu-1.5.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.8.0 7 9
tensorflow_gpu-1.4.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.5.4 6 8
tensorflow_gpu-1.3.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.4.5 6 8
tensorflow_gpu-1.2.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.4.5 5.1 8
tensorflow_gpu-1.1.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.4.2 5.1 8
tensorflow_gpu-1.0.0 2.7، 3.3-3.6 GCC 4.8 Bazel 0.4.2 5.1 8

سیستم عامل مک

CPU

نسخه نسخه پایتون کامپایلر ابزار بسازید
tensorflow-2.10.0 3.7-3.10 صدای زنگ از xcode 10.14 Bazel 5.1.1
tensorflow-2.9.0 3.7-3.10 صدای زنگ از xcode 10.14 Bazel 5.0.0
tensorflow-2.8.0 3.7-3.10 صدای زنگ از xcode 10.14 بازل 4.2.1
tensorflow-2.7.0 3.7-3.9 صدای زنگ از xcode 10.11 بازل 3.7.2
tensorflow-2.6.0 3.6-3.9 صدای زنگ از xcode 10.11 بازل 3.7.2
tensorflow-2.5.0 3.6-3.9 صدای زنگ از xcode 10.11 بازل 3.7.2
tensorflow-2.4.0 3.6-3.8 صدای زنگ از xcode 10.3 Bazel 3.1.0
tensorflow-2.3.0 3.5-3.8 صدای زنگ از xcode 10.1 Bazel 3.1.0
tensorflow-2.2.0 3.5-3.8 صدای زنگ از xcode 10.1 Bazel 2.0.0
tensorflow-2.1.0 2.7، 3.5-3.7 صدای زنگ از xcode 10.1 Bazel 0.27.1
tensorflow-2.0.0 2.7، 3.5-3.7 صدای زنگ از xcode 10.1 Bazel 0.27.1
tensorflow-2.0.0 2.7، 3.3-3.7 صدای زنگ از xcode 10.1 Bazel 0.26.1
tensorflow-1.15.0 2.7، 3.3-3.7 صدای زنگ از xcode 10.1 Bazel 0.26.1
tensorflow-1.14.0 2.7، 3.3-3.7 صدای زنگ از xcode Bazel 0.24.1
tensorflow-1.13.1 2.7، 3.3-3.7 صدای زنگ از xcode Bazel 0.19.2
tensorflow-1.12.0 2.7، 3.3-3.6 صدای زنگ از xcode Bazel 0.15.0
tensorflow-1.11.0 2.7، 3.3-3.6 صدای زنگ از xcode Bazel 0.15.0
tensorflow-1.10.0 2.7، 3.3-3.6 صدای زنگ از xcode Bazel 0.15.0
tensorflow-1.9.0 2.7، 3.3-3.6 صدای زنگ از xcode Bazel 0.11.0
tensorflow-1.8.0 2.7، 3.3-3.6 صدای زنگ از xcode بازل 0.10.1
tensorflow-1.7.0 2.7، 3.3-3.6 صدای زنگ از xcode بازل 0.10.1
tensorflow-1.6.0 2.7، 3.3-3.6 صدای زنگ از xcode Bazel 0.8.1
tensorflow-1.5.0 2.7، 3.3-3.6 صدای زنگ از xcode Bazel 0.8.1
tensorflow-1.4.0 2.7، 3.3-3.6 صدای زنگ از xcode Bazel 0.5.4
tensorflow-1.3.0 2.7، 3.3-3.6 صدای زنگ از xcode Bazel 0.4.5
tensorflow-1.2.0 2.7، 3.3-3.6 صدای زنگ از xcode Bazel 0.4.5
tensorflow-1.1.0 2.7، 3.3-3.6 صدای زنگ از xcode Bazel 0.4.2
tensorflow-1.0.0 2.7، 3.3-3.6 صدای زنگ از xcode Bazel 0.4.2

پردازنده گرافیکی

نسخه نسخه پایتون کامپایلر ابزار بسازید cuDNN CUDA
tensorflow_gpu-1.1.0 2.7، 3.3-3.6 صدای زنگ از xcode Bazel 0.4.2 5.1 8
tensorflow_gpu-1.0.0 2.7، 3.3-3.6 صدای زنگ از xcode Bazel 0.4.2 5.1 8