Buat dari sumber

Buat paket pip TensorFlow dari sumber dan instal di Ubuntu Linux dan macOS. Meskipun petunjuknya mungkin berfungsi untuk sistem lain, petunjuk ini hanya diuji dan didukung untuk Ubuntu dan macOS.

Pengaturan untuk Linux dan macOS

Instal alat build berikut untuk mengonfigurasi lingkungan pengembangan Anda.

Instal dependensi paket Python dan TensorFlow

Ubuntu

sudo apt install python3-dev python3-pip

macOS

Membutuhkan Xcode 9.2 atau lebih baru.

Instal menggunakan manajer paket Homebrew :

brew install python

Instal dependensi paket pip TensorFlow (jika menggunakan lingkungan virtual, hilangkan argumen --user ):

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

Instal Bazel

Untuk membangun TensorFlow, Anda perlu menginstal Bazel. Bazelisk adalah cara mudah untuk menginstal Bazel dan secara otomatis mendownload versi Bazel yang benar untuk TensorFlow. Untuk kemudahan penggunaan, tambahkan Bazelisk sebagai bazel yang dapat dieksekusi di PATH Anda.

Jika Bazelisk tidak tersedia, Anda dapat menginstal Bazel secara manual. Pastikan untuk menginstal versi Bazel yang benar dari file .bazelversion TensorFlow.

Dentang adalah kompiler C/C++/Objective-C yang dikompilasi dalam C++ berdasarkan LLVM. Ini adalah compiler default untuk membangun TensorFlow yang dimulai dengan TensorFlow 2.13. Versi yang didukung saat ini adalah LLVM/Clang 16.

Paket malam LLVM Debian/Ubuntu menyediakan skrip instalasi otomatis dan paket untuk instalasi manual di Linux. Pastikan Anda menjalankan perintah berikut jika Anda menambahkan repositori llvm apt secara manual ke sumber paket Anda:

sudo apt-get update && sudo apt-get install -y llvm-16 clang-16

Alternatifnya, Anda dapat mengunduh dan membongkar Clang + LLVM 16 yang sudah dibuat sebelumnya.

Di bawah ini adalah contoh langkah yang dapat Anda ambil untuk menyiapkan binari Clang + LLVM 16 yang diunduh:

  1. Ubah ke direktori tujuan yang diinginkan:

    ```cd <desired directory>```
    
    1. Muat dan ekstrak file arsip...(sesuai dengan arsitektur Anda):

      
      wget https://github.com/llvm/llvm-project/releases/download/llvmorg-16.0.0/clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz
      
      tar -xvf clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz
      
      

    2. Periksa versi binari Clang + LLVM 16 yang diperoleh:

      
      ./clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang-16 --version 
      

    3. Direktori /clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang-16 adalah jalur sebenarnya ke dentang baru Anda. Anda dapat menjalankan skrip ./configure atau mengatur variabel lingkungan CC dan BAZEL_COMPILER secara manual ke jalur ini.

    Instal dukungan GPU (opsional, khusus Linux)

    Tidak ada dukungan GPU untuk macOS.

    Baca panduan dukungan GPU untuk menginstal driver dan software tambahan yang diperlukan untuk menjalankan TensorFlow pada GPU.

    Unduh kode sumber TensorFlow

    Gunakan Git untuk mengkloning repositori TensorFlow :

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

    Repo defaultnya adalah cabang pengembangan master . Anda juga dapat memeriksa cabang rilis yang akan dibangun:

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

    Konfigurasikan build

    Build TensorFlow dikonfigurasikan oleh file .bazelrc di direktori root repositori. Skrip ./configure atau ./configure.py dapat digunakan untuk menyesuaikan pengaturan umum.

    Silakan jalankan skrip ./configure dari direktori root repositori. Skrip ini akan menanyakan lokasi dependensi TensorFlow dan meminta opsi konfigurasi build tambahan (misalnya, flag compiler). Lihat bagian Contoh sesi untuk detailnya.

    ./configure
    

    Ada juga versi python dari skrip ini, ./configure.py . Jika menggunakan lingkungan virtual, python configure.py memprioritaskan jalur di dalam lingkungan, sedangkan ./configure memprioritaskan jalur di luar lingkungan. Dalam kedua kasus tersebut, Anda dapat mengubah defaultnya.

    Sesi sampel

    Berikut ini menunjukkan contoh eksekusi skrip ./configure (sesi Anda mungkin berbeda):

    Opsi konfigurasi

    dukungan GPU

    Untuk dukungan GPU , atur cuda=Y selama konfigurasi dan tentukan versi CUDA dan cuDNN. Jika sistem Anda memiliki beberapa versi CUDA atau cuDNN yang terinstal, atur versi tersebut secara eksplisit alih-alih mengandalkan versi default. ./configure membuat tautan simbolis ke pustaka CUDA sistem Anda—jadi jika Anda memperbarui jalur pustaka CUDA, langkah konfigurasi ini harus dijalankan lagi sebelum dibuat.

    Pengoptimalan

    Untuk tanda pengoptimalan kompilasi, default ( -march=native ) mengoptimalkan kode yang dihasilkan untuk jenis CPU mesin Anda. Namun, jika membuat TensorFlow untuk jenis CPU yang berbeda, pertimbangkan tanda pengoptimalan yang lebih spesifik. Periksa manual GCC untuk contohnya.

    Konfigurasi yang telah dikonfigurasi sebelumnya

    Ada beberapa konfigurasi build prakonfigurasi yang tersedia dan dapat ditambahkan ke perintah bazel build , misalnya:

    • --config=dbg —Bangun dengan info debug. Lihat KONTRIBUSI.md untuk detailnya.
    • --config=mkl —Dukungan untuk Intel® MKL-DNN .
    • --config=monolithic —Konfigurasi untuk sebagian besar bangunan statis dan monolitik.

    Bangun dan instal paket pip

    Paket pip dibuat dalam dua langkah. Perintah bazel build membuat program "pembuat paket". Anda kemudian menjalankan pembuat paket untuk membuat paket.

    Bangun pembuat paket

    Gunakan bazel build untuk membuat pembuat paket TensorFlow 2.x:

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

    Opsi pembuatan Bazel

    Lihat referensi baris perintah Bazel untuk opsi build .

    Membangun TensorFlow dari sumber dapat menggunakan banyak RAM. Jika sistem Anda memiliki keterbatasan memori, batasi penggunaan RAM Bazel dengan: --local_ram_resources=2048 .

    Paket TensorFlow resmi dibuat dengan toolchain Clang yang mematuhi standar paket manylinux2014.

    Bangun paketnya

    Perintah bazel build membuat executable bernama build_pip_package —ini adalah program yang membuat paket pip . Jalankan executable seperti yang ditunjukkan di bawah ini untuk membuat paket .whl di direktori /tmp/tensorflow_pkg .

    Untuk membangun dari cabang rilis:

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

    Untuk membangun dari master, gunakan --nightly_flag untuk mendapatkan dependensi yang tepat:

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

    Meskipun dimungkinkan untuk membuat konfigurasi CUDA dan non-CUDA dalam pohon sumber yang sama, disarankan untuk menjalankan bazel clean saat beralih di antara kedua konfigurasi ini dalam pohon sumber yang sama.

    Instal paketnya

    Nama file .whl yang dihasilkan bergantung pada versi TensorFlow dan platform Anda. Gunakan pip install untuk menginstal paket, misalnya:

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

    Docker Linux dibangun

    Gambar pengembangan Docker TensorFlow adalah cara mudah untuk menyiapkan lingkungan untuk membangun paket Linux dari sumber. Gambar-gambar ini sudah berisi kode sumber dan dependensi yang diperlukan untuk membangun TensorFlow. Buka panduan TensorFlow Docker untuk petunjuk instalasi dan daftar tag gambar yang tersedia .

    Hanya untuk CPU

    Contoh berikut menggunakan gambar :devel untuk membuat paket khusus CPU dari kode sumber TensorFlow terbaru. Periksa panduan Docker untuk mengetahui tag TensorFlow -devel yang tersedia.

    Unduh image pengembangan terbaru dan mulai container Docker yang akan Anda gunakan untuk membuat paket 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
    

    Perintah docker run di atas memulai shell di direktori /tensorflow_src —akar pohon sumber. Ini memasang direktori host saat ini di direktori /mnt kontainer, dan meneruskan informasi pengguna host ke kontainer melalui variabel lingkungan (digunakan untuk mengatur izin—Docker dapat membuat ini rumit).

    Alternatifnya, untuk membuat salinan host TensorFlow dalam sebuah container, pasang pohon sumber host di direktori /tensorflow container:

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

    Setelah pohon sumber disiapkan, buat paket TensorFlow dalam lingkungan virtual container:

    1. Opsional: Konfigurasikan build—ini akan meminta pengguna menjawab pertanyaan konfigurasi build.
    2. Bangun alat yang digunakan untuk membuat paket pip .
    3. Jalankan alat untuk membuat paket pip .
    4. Sesuaikan izin kepemilikan file di luar wadah.
    ./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
    

    Instal dan verifikasi paket di dalam wadah:

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

    Di mesin host Anda, paket pip TensorFlow ada di direktori saat ini (dengan izin pengguna host): ./tensorflow- version - tags .whl

    dukungan GPU

    Docker adalah cara termudah untuk membangun dukungan GPU untuk TensorFlow karena mesin host hanya memerlukan driver NVIDIA® ( NVIDIA® CUDA® Toolkit tidak harus diinstal). Lihat panduan dukungan GPU dan panduan TensorFlow Docker untuk menyiapkan nvidia-docker (khusus Linux).

    Contoh berikut mendownload image TensorFlow :devel-gpu dan menggunakan nvidia-docker untuk menjalankan container yang mendukung GPU. Gambar pengembangan ini dikonfigurasi untuk membangun paket pip dengan dukungan 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
    

    Kemudian, dalam lingkungan virtual container, buat paket TensorFlow dengan dukungan 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
    

    Instal dan verifikasi paket di dalam container dan periksa 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')))"
    

    Konfigurasi build yang diuji

    Linux

    CPU

    Versi: kapan versi piton Penyusun Membangun alat
    tensorflow-2.15.0 3.9-3.11 Dentang 16.0.0 Bazel 6.1.0
    tensorflow-2.14.0 3.9-3.11 Dentang 16.0.0 Bazel 6.1.0
    tensorflow-2.13.0 3.8-3.11 Dentang 16.0.0 Bazel 5.3.0
    tensorflow-2.12.0 3.8-3.11 GCC 9.3.1 Bazel 5.3.0
    tensorflow-2.11.0 3.7-3.10 GCC 9.3.1 Bazel 5.3.0
    tensorflow-2.10.0 3.7-3.10 GCC 9.3.1 Bazel 5.1.1
    tensorflow-2.9.0 3.7-3.10 GCC 9.3.1 Bazel 5.0.0
    aliran tensor-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
    aliran tensor-1.15.0 2.7, 3.3-3.7 GCC 7.3.1 Bazel 0.26.1
    aliran tensor-1.14.0 2.7, 3.3-3.7 GCC 4.8 Bazel 0.24.1
    aliran tensor-1.13.1 2.7, 3.3-3.7 GCC 4.8 Bazel 0.19.2
    aliran tensor-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
    aliran tensor-1.10.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.15.0
    aliran tensor-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

    Versi: kapan versi piton Penyusun Membangun alat cuDNN CUDA
    tensorflow-2.15.0 3.9-3.11 Dentang 16.0.0 Bazel 6.1.0 8.8 12.2
    tensorflow-2.14.0 3.9-3.11 Dentang 16.0.0 Bazel 6.1.0 8.7 11.8
    tensorflow-2.13.0 3.8-3.11 Dentang 16.0.0 Bazel 5.3.0 8.6 11.8
    tensorflow-2.12.0 3.8-3.11 GCC 9.3.1 Bazel 5.3.0 8.6 11.8
    tensorflow-2.11.0 3.7-3.10 GCC 9.3.1 Bazel 5.3.0 8.1 11.2
    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
    aliran tensor-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 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

    macOS

    CPU

    Versi: kapan versi piton Penyusun Membangun alat
    tensorflow-2.15.0 3.9-3.11 Dentang dari xcode 10.15 Bazel 6.1.0
    tensorflow-2.14.0 3.9-3.11 Dentang dari xcode 10.15 Bazel 6.1.0
    tensorflow-2.13.0 3.8-3.11 Dentang dari xcode 10.15 Bazel 5.3.0
    tensorflow-2.12.0 3.8-3.11 Dentang dari xcode 10.15 Bazel 5.3.0
    tensorflow-2.11.0 3.7-3.10 Dentang dari xcode 10.14 Bazel 5.3.0
    tensorflow-2.10.0 3.7-3.10 Dentang dari xcode 10.14 Bazel 5.1.1
    tensorflow-2.9.0 3.7-3.10 Dentang dari xcode 10.14 Bazel 5.0.0
    aliran tensor-2.8.0 3.7-3.10 Dentang dari xcode 10.14 Bazel 4.2.1
    tensorflow-2.7.0 3.7-3.9 Dentang dari xcode 10.11 Bazel 3.7.2
    tensorflow-2.6.0 3.6-3.9 Dentang dari xcode 10.11 Bazel 3.7.2
    tensorflow-2.5.0 3.6-3.9 Dentang dari xcode 10.11 Bazel 3.7.2
    tensorflow-2.4.0 3.6-3.8 Dentang dari xcode 10.3 Bazel 3.1.0
    tensorflow-2.3.0 3.5-3.8 Dentang dari xcode 10.1 Bazel 3.1.0
    tensorflow-2.2.0 3.5-3.8 Dentang dari xcode 10.1 Bazel 2.0.0
    tensorflow-2.1.0 2.7, 3.5-3.7 Dentang dari xcode 10.1 Bazel 0.27.1
    tensorflow-2.0.0 2.7, 3.5-3.7 Dentang dari xcode 10.1 Bazel 0.27.1
    tensorflow-2.0.0 2.7, 3.3-3.7 Dentang dari xcode 10.1 Bazel 0.26.1
    aliran tensor-1.15.0 2.7, 3.3-3.7 Dentang dari xcode 10.1 Bazel 0.26.1
    tensorflow-1.14.0 2.7, 3.3-3.7 Dentang dari xcode Bazel 0.24.1
    aliran tensor-1.13.1 2.7, 3.3-3.7 Dentang dari xcode Bazel 0.19.2
    tensorflow-1.12.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.15.0
    tensorflow-1.11.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.15.0
    aliran tensor-1.10.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.15.0
    aliran tensor-1.9.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.11.0
    tensorflow-1.8.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.10.1
    tensorflow-1.7.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.10.1
    tensorflow-1.6.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.8.1
    tensorflow-1.5.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.8.1
    tensorflow-1.4.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.5.4
    tensorflow-1.3.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.4.5
    tensorflow-1.2.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.4.5
    tensorflow-1.1.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.4.2
    tensorflow-1.0.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.4.2

    GPU

    Versi: kapan versi piton Penyusun Membangun alat cuDNN CUDA
    tensorflow_gpu-1.1.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.4.2 5.1 8
    tensorflow_gpu-1.0.0 2.7, 3.3-3.6 Dentang dari xcode Bazel 0.4.2 5.1 8