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ù hướng dẫn có thể hoạt động đối 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 gói phụ thuộc TensorFlow pip (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
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 phiên bản Bazel chính xác cho TensorFlow. Để dễ sử dụng, hãy thêm Bazelisk làm bazel
thực thi trong PATH
của bạn.
Nếu không có Bazelisk, bạn có thể cài đặt Bazel theo cách thủ công. Đảm bảo cài đặt phiên bản Bazel được hỗ trợ: bất kỳ phiên bản nào từ _TF_MIN_BAZEL_VERSION
đến _TF_MAX_BAZEL_VERSION
như được chỉ định trong tensorflow/configure.py
.
Cài đặt hỗ trợ GPU (tùy chọn, chỉ dành cho Linux)
Không có 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.
Định cấu hình bản dựng
Định cấu hình bản dựng hệ thống của bạn bằng cách chạy ./configure
ở gốc của cây nguồn TensorFlow của bạn. Tập lệnh này nhắc bạn về vị trí của các 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).
./configure
Nếu sử dụng môi trường ảo, python configure.py
ưu tiên các đường dẫn bê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 cho thấy một lần chạy mẫu của tập lệnh ./configure
(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 cấu hình và chỉ định phiên bản 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 một cách 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 trong hệ thống của bạn — vì vậy nếu bạn cập nhật đườ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ờ 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 tính của 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. Xem hướng dẫn sử dụng GCC để biết các ví dụ.
Các cấu hình được định cấu hình sẵn
Có một số cấu hình bản dựng được định 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
mono —Cấu hình cho một bản dựng nguyên khối, chủ yếu là tĩnh. -
--config=v1
—Xây dựng TensorFlow 1.x thay vì 2.x.
Xây dựng gói pip
TensorFlow 2.x
Cài đặt Bazel và sử dụng bazel build
để tạo gói TensorFlow 2.x với hỗ trợ chỉ dành cho CPU :
bazel build [--config=option] //tensorflow/tools/pip_package:build_pip_package
Hỗ trợ GPU
Để xây dựng trình tạo gói TensorFlow với hỗ trợ GPU:
bazel build --config=cuda [--config=option] //tensorflow/tools/pip_package:build_pip_package
TensorFlow 1.x
Để tạo gói TensorFlow 1.x cũ hơn, hãy sử dụng tùy chọn --config=v1
:
bazel build --config=v1 [--config=option] //tensorflow/tools/pip_package:build_pip_package
Tùy chọn xây dựng Bazel
Tham khảo tham chiếu 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ị giới hạn 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 7.3 tuân thủ tiêu chuẩn gói nhiềulinux2010.
Đố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 GCC 5 được xây dựng.
Xây dựng gói
bazel build
tạo một tệp thực thi có tên là build_pip_package
— đây là chương trình xây dựng gói pip
. Chạy tệp thực thi như được hiển thị 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ừ cái chính, hãy sử dụng --nightly_flag
để có được 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 phụ 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
Các 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 phụ thuộc cần thiết để xây dựng TensorFlow. Đi tới 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 :devel
image để tạo 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ẻ TensorFlow -devel
có sẵn.
Tải xuống hình ảnh phát triển mới nhất và bắt đầu một vùng chứa Docker mà bạn sẽ sử dụng để tạo 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 run
docker ở trên bắt đầu một trình bao trong thư mục /tensorflow_src
— thư mục gốc của cây nguồn. Nó gắn kết thư mục hiện tại của máy chủ lưu trữ trong thư mục /mnt
của vùng chứa và chuyển thông tin của người dùng máy chủ đến vùng chứa thông qua một biến môi trường (được sử dụng để đặt quyền — Docker có thể thực hiện điều này phức tạp).
Ngoài ra, để tạo một bản sao lưu trữ của TensorFlow trong một vùng chứa, hãy gắn cây nguồn máy chủ tại thư mục /tensorflow
của vùng 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:
- Định cấu hình bản dựng — điều này nhắc người dùng trả lời các câu hỏi về cấu hình bản dựng.
- Xây dựng công cụ được sử dụng để tạo gói pip .
- Chạy công cụ để tạo gói pip .
- Điều chỉnh quyền sở hữu của tệp cho bên ngoài vùng chứa.
./configure # answer prompts or use defaults
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 bên 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 (với 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 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 một gói pip với 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 với hỗ trợ GPU:
./configure # answer prompts or use defaults
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 bên 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 bản dựng đã thử nghiệm
Linux
CPU
Phiên bản | Phiên bản Python | Trình biên dịch | Xây dựng công cụ |
---|---|---|---|
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 | Bazel 4.2.1 |
tensorflow-2.7.0 | 3,7-3,9 | GCC 7.3.1 | Bazel 3.7.2 |
tensorflow-2.6.0 | 3,6-3,9 | GCC 7.3.1 | Bazel 3.7.2 |
tensorflow-2.5.0 | 3,6-3,9 | GCC 7.3.1 | Bazel 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 |
GPU
Phiên bản | Phiên bản Python | Trình biên dịch | Xây dựng công cụ | cuDNN | CUDA |
---|---|---|---|---|---|
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 | Bazel 4.2.1 | 8.1 | 11,2 |
tensorflow-2.7.0 | 3,7-3,9 | GCC 7.3.1 | Bazel 3.7.2 | 8.1 | 11,2 |
tensorflow-2.6.0 | 3,6-3,9 | GCC 7.3.1 | Bazel 3.7.2 | 8.1 | 11,2 |
tensorflow-2.5.0 | 3,6-3,9 | GCC 7.3.1 | Bazel 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 | số 8 |
tensorflow_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 |
tensorflow_gpu-1.1.0 | 2,7, 3,3-3,6 | GCC 4,8 | Bazel 0.4.2 | 5.1 | số 8 |
tensorflow_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 | Xây dựng công cụ |
---|---|---|---|
tensorflow-2.9.0 | 3,7-3,10 | Clang từ xcode 10.14 | Bazel 5.0.0 |
tensorflow-2.8.0 | 3,7-3,10 | Clang từ xcode 10.14 | Bazel 4.2.1 |
tensorflow-2.7.0 | 3,7-3,9 | Clang từ xcode 10.11 | Bazel 3.7.2 |
tensorflow-2.6.0 | 3,6-3,9 | Clang từ xcode 10.11 | Bazel 3.7.2 |
tensorflow-2.5.0 | 3,6-3,9 | Clang từ xcode 10.11 | Bazel 3.7.2 |
tensorflow-2.4.0 | 3,6-3,8 | Clang từ xcode 10.3 | Bazel 3.1.0 |
tensorflow-2.3.0 | 3,5-3,8 | Clang từ xcode 10.1 | Bazel 3.1.0 |
tensorflow-2.2.0 | 3,5-3,8 | Clang từ xcode 10.1 | Bazel 2.0.0 |
tensorflow-2.1.0 | 2,7, 3,5-3,7 | Clang từ xcode 10.1 | Bazel 0,27,1 |
tensorflow-2.0.0 | 2,7, 3,5-3,7 | Clang từ xcode 10.1 | Bazel 0,27,1 |
tensorflow-2.0.0 | 2,7, 3,3-3,7 | Clang từ xcode 10.1 | Bazel 0,26,1 |
tensorflow-1.15.0 | 2,7, 3,3-3,7 | Clang từ xcode 10.1 | Bazel 0,26,1 |
tensorflow-1.14.0 | 2,7, 3,3-3,7 | Clang từ xcode | Bazel 0,24,1 |
tensorflow-1.13.1 | 2,7, 3,3-3,7 | Clang từ xcode | Bazel 0,19,2 |
tensorflow-1.12.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0,15.0 |
tensorflow-1.11.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0,15.0 |
tensorflow-1.10.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0,15.0 |
tensorflow-1.9.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0.11.0 |
tensorflow-1.8.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0.10.1 |
tensorflow-1.7.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0.10.1 |
tensorflow-1.6.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0.8.1 |
tensorflow-1.5.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0.8.1 |
tensorflow-1.4.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0.5.4 |
tensorflow-1.3.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0,4,5 |
tensorflow-1.2.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0,4,5 |
tensorflow-1.1.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0.4.2 |
tensorflow-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 | Xây dựng công cụ | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow_gpu-1.1.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0.4.2 | 5.1 | số 8 |
tensorflow_gpu-1.0.0 | 2,7, 3,3-3,6 | Clang từ xcode | Bazel 0.4.2 | 5.1 | số 8 |