Xây dựng từ nguồn

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Xây dựng gói pip TensorFlow từ nguồn và cài đặt nó trên Ubuntu Linux và macOS. Mặc dù các hướng dẫn có thể hoạt động với các hệ thống khác nhưng nó chỉ được thử nghiệm và hỗ trợ cho Ubuntu và macOS.

Thiết lập cho Linux và macOS

Cài đặt các công cụ xây dựng sau để định cấu hình môi trường phát triển của bạn.

Cài đặt Python và các phụ thuộc gói TensorFlow

Ubuntu

sudo apt install python3-dev python3-pip

hệ điều hành Mac

Yêu cầu Xcode 9.2 trở lên.

Cài đặt bằng trình quản lý gói 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

Cài đặt các phụ thuộc gói pip của TensorFlow (nếu sử dụng môi trường ảo, hãy bỏ qua đối số --user ):

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

Cài đặt Bazel

Để xây dựng TensorFlow, bạn sẽ cần cài đặt Bazel. Bazelisk là một cách dễ dàng để cài đặt Bazel và tự động tải xuống đúng phiên bản Bazel cho TensorFlow. Để dễ sử dụng, hãy thêm Bazelisk làm tệp thực thi bazel trong PATH của bạn.

Nếu Bazelisk không có sẵn, bạn có thể cài đặt thủ công Bazel . Đảm bảo cài đặt đúng phiên bản Bazel từ tệp .bazelversion của TensorFlow.

Cài đặt hỗ trợ GPU (tùy chọn, chỉ dành cho Linux)

Không hỗ trợ GPU cho macOS.

Đọc hướng dẫn hỗ trợ GPU để cài đặt trình điều khiển và phần mềm bổ sung cần thiết để chạy TensorFlow trên GPU.

Tải xuống mã nguồn TensorFlow

Sử dụng Git để sao chép kho lưu trữ TensorFlow :

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

Repo mặc định là nhánh phát triển master . Bạn cũng có thể kiểm tra một nhánh phát hành để xây dựng:

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

Tùy chọn: Định cấu hình bản dựng

Các bản dựng TensorFlow được định cấu hình bởi tệp .bazelrc trong thư mục gốc của kho lưu trữ. Có thể sử dụng tập lệnh ./configure hoặc ./configure.py để điều chỉnh các cài đặt chung.

Nếu bạn cần thay đổi cấu hình, hãy chạy tập lệnh ./configure từ thư mục gốc của kho lưu trữ. Tập lệnh này sẽ nhắc bạn về vị trí của các phần phụ thuộc TensorFlow và yêu cầu các tùy chọn cấu hình bản dựng bổ sung (ví dụ: cờ trình biên dịch). Tham khảo phần Phiên mẫu để biết chi tiết.

./configure

Ngoài ra còn có một phiên bản python của tập lệnh này, ./configure.py . Nếu sử dụng môi trường ảo, python configure.py sẽ ưu tiên các đường dẫn trong môi trường, trong khi ./configure ưu tiên các đường dẫn bên ngoài môi trường. Trong cả hai trường hợp, bạn có thể thay đổi giá trị mặc định.

phiên mẫu

Phần sau đây hiển thị một lần chạy tập lệnh ./configure mẫu (phiên của bạn có thể khác):

Tùy chọn cấu hình

hỗ trợ GPU

Để hỗ trợ GPU , hãy đặt cuda=Y trong khi định cấu hình và chỉ định phiên bản của CUDA và cuDNN. Nếu hệ thống của bạn đã cài đặt nhiều phiên bản CUDA hoặc cuDNN, hãy đặt phiên bản rõ ràng thay vì dựa vào mặc định. ./configure tạo các liên kết tượng trưng đến các thư viện CUDA của hệ thống—vì vậy nếu bạn cập nhật các đường dẫn thư viện CUDA của mình, bước cấu hình này phải được chạy lại trước khi xây dựng.

tối ưu hóa

Đối với các cờ tối ưu hóa biên dịch, mặc định ( -march=native ) tối ưu hóa mã được tạo cho loại CPU của máy bạn. Tuy nhiên, nếu xây dựng TensorFlow cho một loại CPU khác, hãy xem xét một cờ tối ưu hóa cụ thể hơn. Kiểm tra hướng dẫn sử dụng GCC để biết ví dụ.

cấu hình được cấu hình sẵn

Có một số cấu hình bản dựng được cấu hình sẵn có thể được thêm vào lệnh bazel build , ví dụ:

  • --config=dbg dựng với thông tin gỡ lỗi. Xem CONTRIBUTING.md để biết chi tiết.
  • --config=mkl —Hỗ trợ cho Intel® MKL-DNN .
  • --config=monolithic —Cấu hình cho bản dựng nguyên khối, chủ yếu là tĩnh.

Xây dựng và cài đặt gói pip

Gói pip được xây dựng theo hai bước. Một lệnh bazel build tạo ra một chương trình "trình tạo gói". Sau đó, bạn chạy trình tạo gói để tạo gói.

Xây dựng trình tạo gói

Sử dụng bazel build để tạo trình tạo gói TensorFlow 2.x chỉ hỗ trợ CPU :

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

hỗ trợ GPU

Để xây dựng trình xây dựng gói TensorFlow có hỗ trợ GPU:

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

Tùy chọn xây dựng Bazel

Tham khảo tài liệu tham khảo dòng lệnh Bazel để biết các tùy chọn xây dựng .

Xây dựng TensorFlow từ nguồn có thể sử dụng nhiều RAM. Nếu hệ thống của bạn bị hạn chế về bộ nhớ, hãy giới hạn mức sử dụng RAM của Bazel bằng: --local_ram_resources=2048 .

Các gói TensorFlow chính thức được xây dựng bằng chuỗi công cụ GCC tuân thủ tiêu chuẩn gói manylinux2010.

Đối với GCC 5 trở lên, có thể xây dựng khả năng tương thích với ABI cũ hơn bằng cách sử dụng: --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" . Khả năng tương thích ABI đảm bảo rằng các hoạt động tùy chỉnh được xây dựng dựa trên gói TensorFlow chính thức tiếp tục hoạt động với gói được xây dựng GCC 5.

Xây dựng gói

Lệnh bazel build tạo một tệp thực thi có tên build_pip_package —đây là chương trình xây dựng gói pip . Chạy tệp thực thi như minh họa bên dưới để tạo gói .whl trong /tmp/tensorflow_pkg .

Để xây dựng từ một nhánh phát hành:

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

Để xây dựng từ bản gốc, hãy sử dụng --nightly_flag để nhận các phần phụ thuộc phù hợp:

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

Mặc dù có thể xây dựng cả cấu hình CUDA và không phải CUDA trong cùng một cây nguồn, nhưng bạn nên chạy bazel clean khi chuyển đổi giữa hai cấu hình này trong cùng một cây nguồn.

Cài đặt gói

Tên tệp của tệp .whl được tạo tùy thuộc vào phiên bản TensorFlow và nền tảng của bạn. Sử dụng pip install để cài đặt gói, ví dụ:

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

Bản dựng Docker Linux

Hình ảnh phát triển Docker của TensorFlow là một cách dễ dàng để thiết lập môi trường để xây dựng các gói Linux từ nguồn. Những hình ảnh này đã chứa mã nguồn và các thành phần phụ thuộc cần thiết để xây dựng TensorFlow. Truy cập hướng dẫn TensorFlow Docker để biết hướng dẫn cài đặt và danh sách các thẻ hình ảnh có sẵn .

chỉ dành cho CPU

Ví dụ sau sử dụng hình ảnh :devel để xây dựng gói chỉ dành cho CPU từ mã nguồn TensorFlow mới nhất. Kiểm tra hướng dẫn Docker để biết các thẻ -devel có sẵn của TensorFlow.

Tải xuống hình ảnh phát triển mới nhất và bắt đầu bộ chứa Docker mà bạn sẽ sử dụng để xây dựng gói pip :

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

Lệnh docker docker run ở trên khởi động shell trong thư mục /tensorflow_src —gốc của cây nguồn. Nó gắn thư mục hiện tại của máy chủ lưu trữ vào thư mục /mnt của bộ chứa và chuyển thông tin của người dùng máy chủ đến bộ chứa thông qua một biến môi trường (được sử dụng để đặt quyền—Docker có thể làm điều này trở nên phức tạp).

Ngoài ra, để xây dựng một bản sao lưu trữ của TensorFlow trong một bộ chứa, hãy gắn cây nguồn máy chủ tại thư mục /tensorflow của bộ chứa:

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

Với cây nguồn được thiết lập, hãy xây dựng gói TensorFlow trong môi trường ảo của vùng chứa:

  1. Tùy chọn: Định cấu hình bản dựng—điều này sẽ nhắc người dùng trả lời các câu hỏi về cấu hình bản dựng.
  2. Xây dựng công cụ được sử dụng để tạo gói pip .
  3. Chạy công cụ để tạo gói pip .
  4. Điều chỉnh quyền sở hữu của tệp cho bên ngoài vùng chứa.
./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

Cài đặt và xác minh gói trong vùng chứa:

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__)"

Trên máy chủ của bạn, gói pip TensorFlow nằm trong thư mục hiện tại (có quyền của người dùng máy chủ): ./tensorflow- version - tags .whl

hỗ trợ GPU

Docker là cách dễ nhất để xây dựng hỗ trợ GPU cho TensorFlow vì máy chủ chỉ yêu cầu trình điều khiển NVIDIA® (không cần phải cài đặt Bộ công cụ NVIDIA® CUDA® ). Tham khảo hướng dẫn hỗ trợ GPU và hướng dẫn TensorFlow Docker để thiết lập nvidia-docker (chỉ dành cho Linux).

Ví dụ sau tải xuống hình ảnh TensorFlow :devel-gpu và sử dụng nvidia-docker để chạy vùng chứa hỗ trợ GPU. Hình ảnh phát triển này được định cấu hình để xây dựng gói pip có hỗ trợ 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

Sau đó, trong môi trường ảo của vùng chứa, hãy xây dựng gói TensorFlow có hỗ trợ 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

Cài đặt và xác minh gói trong vùng chứa và kiểm tra 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')))"

Cấu hình xây dựng đã thử nghiệm

Linux

CPU

Phiên bản Phiên bản Python Trình biên dịch Công cụ xây dựng
tenorflow-2.11.0 3.7-3.10 GCC 9.3.1 Bazel 5.3.0
tenorflow-2.10.0 3.7-3.10 GCC 9.3.1 Bazel 5.0.0
tenorflow-2.9.0 3.7-3.10 GCC 9.3.1 Bazel 5.0.0
tenorflow-2.8.0 3.7-3.10 GCC 7.3.1 Bazel 4.2.1
tenorflow-2.7.0 3,7-3,9 GCC 7.3.1 Bazel 3.7.2
tenorflow-2.6.0 3,6-3,9 GCC 7.3.1 Bazel 3.7.2
tenorflow-2.5.0 3,6-3,9 GCC 7.3.1 Bazel 3.7.2
tenorflow-2.4.0 3,6-3,8 GCC 7.3.1 Bazel 3.1.0
tenorflow-2.3.0 3,5-3,8 GCC 7.3.1 Bazel 3.1.0
tenorflow-2.2.0 3,5-3,8 GCC 7.3.1 Bazel 2.0.0
tenorflow-2.1.0 2.7, 3.5-3.7 GCC 7.3.1 Bazel 0.27.1
tenorflow-2.0.0 2.7, 3.3-3.7 GCC 7.3.1 Bazel 0.26.1
tenorflow-1.15.0 2.7, 3.3-3.7 GCC 7.3.1 Bazel 0.26.1
tenorflow-1.14.0 2.7, 3.3-3.7 GCC 4.8 Bazel 0.24.1
tenorflow-1.13.1 2.7, 3.3-3.7 GCC 4.8 Bazel 0.19.2
tenorflow-1.12.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.15.0
tenorflow-1.11.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.15.0
tenorflow-1.10.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.15.0
tenorflow-1.9.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.11.0
tenorflow-1.8.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.10.0
tenorflow-1.7.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.10.0
tenorflow-1.6.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.9.0
tenorflow-1.5.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.8.0
tenorflow-1.4.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.5.4
tenorflow-1.3.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.4.5
tenorflow-1.2.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.4.5
tenorflow-1.1.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.4.2
tenorflow-1.0.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.4.2

GPU

Phiên bản Phiên bản Python Trình biên dịch Công cụ xây dựng cuDNN CUDA
tenorflow-2.11.0 3.7-3.10 GCC 9.3.1 Bazel 5.3.0 8.1 11.2
tenorflow-2.10.0 3.7-3.10 GCC 9.3.1 Bazel 5.1.1 8.1 11.2
tenorflow-2.9.0 3.7-3.10 GCC 9.3.1 Bazel 5.0.0 8.1 11.2
tenorflow-2.8.0 3.7-3.10 GCC 7.3.1 Bazel 4.2.1 8.1 11.2
tenorflow-2.7.0 3,7-3,9 GCC 7.3.1 Bazel 3.7.2 8.1 11.2
tenorflow-2.6.0 3,6-3,9 GCC 7.3.1 Bazel 3.7.2 8.1 11.2
tenorflow-2.5.0 3,6-3,9 GCC 7.3.1 Bazel 3.7.2 8.1 11.2
tenorflow-2.4.0 3,6-3,8 GCC 7.3.1 Bazel 3.1.0 8,0 11,0
tenorflow-2.3.0 3,5-3,8 GCC 7.3.1 Bazel 3.1.0 7.6 10.1
tenorflow-2.2.0 3,5-3,8 GCC 7.3.1 Bazel 2.0.0 7.6 10.1
tenorflow-2.1.0 2.7, 3.5-3.7 GCC 7.3.1 Bazel 0.27.1 7.6 10.1
tenorflow-2.0.0 2.7, 3.3-3.7 GCC 7.3.1 Bazel 0.26.1 7.4 10,0
tenorflow_gpu-1.15.0 2.7, 3.3-3.7 GCC 7.3.1 Bazel 0.26.1 7.4 10,0
tenorflow_gpu-1.14.0 2.7, 3.3-3.7 GCC 4.8 Bazel 0.24.1 7.4 10,0
tenorflow_gpu-1.13.1 2.7, 3.3-3.7 GCC 4.8 Bazel 0.19.2 7.4 10,0
tenorflow_gpu-1.12.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tenorflow_gpu-1.11.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tenorflow_gpu-1.10.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tenorflow_gpu-1.9.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.11.0 7 9
tenorflow_gpu-1.8.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.10.0 7 9
tenorflow_gpu-1.7.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.9.0 7 9
tenorflow_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
tenorflow_gpu-1.4.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.5.4 6 số 8
tenorflow_gpu-1.3.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.4.5 6 số 8
tensorflow_gpu-1.2.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.4.5 5.1 số 8
tenorflow_gpu-1.1.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.4.2 5.1 số 8
tenorflow_gpu-1.0.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.4.2 5.1 số 8

hệ điều hành Mac

CPU

Phiên bản Phiên bản Python Trình biên dịch Công cụ xây dựng
tenorflow-2.11.0 3.7-3.10 Clang từ xcode 10.14 Bazel 5.3.0
tenorflow-2.10.0 3.7-3.10 Clang từ xcode 10.14 Bazel 5.1.1
tenorflow-2.9.0 3.7-3.10 Clang từ xcode 10.14 Bazel 5.0.0
tenorflow-2.8.0 3.7-3.10 Clang từ xcode 10.14 Bazel 4.2.1
tenorflow-2.7.0 3,7-3,9 Clang từ xcode 10.11 Bazel 3.7.2
tenorflow-2.6.0 3,6-3,9 Clang từ xcode 10.11 Bazel 3.7.2
tenorflow-2.5.0 3,6-3,9 Clang từ xcode 10.11 Bazel 3.7.2
tenorflow-2.4.0 3,6-3,8 Clang từ xcode 10.3 Bazel 3.1.0
tenorflow-2.3.0 3,5-3,8 Clang từ xcode 10.1 Bazel 3.1.0
tenorflow-2.2.0 3,5-3,8 Clang từ xcode 10.1 Bazel 2.0.0
tenorflow-2.1.0 2.7, 3.5-3.7 Clang từ xcode 10.1 Bazel 0.27.1
tenorflow-2.0.0 2.7, 3.5-3.7 Clang từ xcode 10.1 Bazel 0.27.1
tenorflow-2.0.0 2.7, 3.3-3.7 Clang từ xcode 10.1 Bazel 0.26.1
tenorflow-1.15.0 2.7, 3.3-3.7 Clang từ xcode 10.1 Bazel 0.26.1
tenorflow-1.14.0 2.7, 3.3-3.7 Clang từ xcode Bazel 0.24.1
tenorflow-1.13.1 2.7, 3.3-3.7 Clang từ xcode Bazel 0.19.2
tenorflow-1.12.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.15.0
tenorflow-1.11.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.15.0
tenorflow-1.10.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.15.0
tenorflow-1.9.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.11.0
tenorflow-1.8.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.10.1
tenorflow-1.7.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.10.1
tenorflow-1.6.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.8.1
tenorflow-1.5.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.8.1
tenorflow-1.4.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.5.4
tenorflow-1.3.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.4.5
tenorflow-1.2.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.4.5
tenorflow-1.1.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.4.2
tenorflow-1.0.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.4.2

GPU

Phiên bản Phiên bản Python Trình biên dịch Công cụ xây dựng cuDNN CUDA
tenorflow_gpu-1.1.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.4.2 5.1 số 8
tenorflow_gpu-1.0.0 2.7, 3.3-3.6 Clang từ xcode Bazel 0.4.2 5.1 số 8