Tensorflow'u SSE4.2 ve AVX talimatları ile nasıl derleyebilirim?


289

Bu, Tensorflow'un çalışıp çalışmadığını kontrol etmek için bir komut dosyası çalıştırıldığında alınan mesajdır:

I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

SSE4.2 ve AVX'den bahsettiğini fark ettim,

  1. SSE4.2 ve AVX nedir?
  2. Bu SSE4.2 ve AVX, Tensorflow görevleri için CPU hesaplamalarını nasıl geliştirir?
  3. İki kütüphaneyi kullanarak Tensorflow nasıl derlenir?

18
Bu bayraklarla inşa etmeyi seviyorum bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package Xeon E5 v3'te, resmi sürümle karşılaştırıldığında 8k matmul CPU hızında 3 kat iyileşme sağlıyor (0.35 -> 1.05 T ops / sn)
Yaroslav Bulatov

4
ve NOTE on gcc 5 or later: the binary pip packages available on the TensorFlow website are built with gcc 4, which uses the older ABI. To make your build compatible with the older ABI, you need to add --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" to your bazel build command. ABI compatibility allows custom ops built against the TensorFlow pip package to continue to work against your built package.buradan unutma tensorflow.org/install/install_sources
Ivan Kush

4
TF için bu talimatları destekleyen bazı derlenmiş ikili dosyalarım var github.com/lakshayg/tensorflow-build . Bunu faydalı bulabilirsiniz.
Lakshay Garg

1
@IvanKush bu bayrağı ekledikten sonra hala tensorflow'u başarıyla içe aktaramıyorum (iyi derler). Gcc 5 ile başarıyla
derlediyseniz

1
Ubuntu 16.04 kullanıyorsanız, github.com/mind/wheels
danqing

Yanıtlar:


160

Ben de aynı problemle karşılaştım, Yaroslav Bulatov'un önerisi SSE4.2 desteğini kapsamıyor gibi görünüyor, eklemek --copt=-msse4.2yeterli olacaktır. Sonunda başarıyla inşa ettim

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.2 --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

herhangi bir uyarı veya hata almadan.

Muhtemelen herhangi bir sistem için en iyi seçim:

bazel build -c opt --copt=-march=native --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

( Güncelleme: derleme komut dosyaları-march=native muhtemelen bir içerdiği için yemek yiyor olabilir= .)

-mfpmath=bothclang ile değil, sadece gcc ile çalışır. -mfpmath=ssemuhtemelen daha iyi değilse de iyidir ve x86-64 için varsayılan değerdir. 32-bit varsayılan olarak oluşturur -mfpmath=387, böylece 32-bit için yardımcı olacak şekilde değişir. (Ancak sayı sıkışması için yüksek performans istiyorsanız, 64 bit ikili dosyalar oluşturmalısınız.)

TensorFlow'un varsayılan -O2veya neyin varsayılan olduğundan emin değilim -O3. gcc -O3otomatik vektörleştirme de dahil olmak üzere tam optimizasyonu sağlar, ancak bu bazen kodu yavaşlatabilir.


Bu işe yarar? --coptİçinbazel build C ve C ++ dosyaları derlemek için gcc doğrudan bir seçenek geçer (ama bağlantılandırmadığını arası dosya bağlantısı zamanlı optimizasyonu için farklı bir seçenek ihtiyaç böylece)

x86-64 gcc varsayılan olarak yalnızca SSE2 veya daha eski SIMD talimatlarını kullanır, böylece herhangi bir x86-64 sisteminde ikili dosyaları çalıştırabilirsiniz . (Bkz. Https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html ). İstediğin bu değil. CPU'nuzun çalıştırabileceği tüm talimatlardan yararlanan bir ikili dosya oluşturmak istiyorsunuz, çünkü bu ikili dosyayı sadece onu oluşturduğunuz sistemde çalıştırıyorsunuz.

-march=nativeCPU'nuzun desteklediği tüm seçenekleri etkinleştirir, böylece -mavx512f -mavx2 -mavx -mfma -msse4.2gereksiz hale getirir . (Ayrıca, -mavx2zaten etkinleştirir -mavxve -msse4.2bu nedenle Yaroslav'ın emri iyi olmalı). Ayrıca, bu seçeneklerden birini (FMA gibi) desteklemeyen bir CPU kullanıyorsanız, kullanmak -mfmayasadışı talimatlarla hata yapan bir ikili dosya oluşturur.

TensorFlow'un ./configurevarsayılan ayarı etkin durumda olduğundan-march=native , bunu kullanarak derleyici seçeneklerini manuel olarak belirtmeniz gerekmez .

-march=nativesağlayan -mtune=native, böylece sizin CPU için optimize AVX talimatlar dizisi hizalanmamış yükler için en uygun olduğunu gibi şeyler için.

Tüm bunlar gcc, clang veya ICC için geçerlidir. (ICC için, -xHOSTyerine kullanabilirsiniz -march=native.)


6
Gerçekten> +1 çalışıyor! Yani öyle görünüyor -march=nativeki işi yok. Ayrıca, --config=cuda(CUDA desteği gerekli değilse) ve -k(derleme sırasında hata oluşmadığından ) bırakılması da işe yarar .
Marc

4
Yeni derlenmiş sürümü kaldırıp yeniden yükledikten sonra AVX, AVX2 ve FMA için uyarıları almaya devam ediyorum.
Benedikt S. Vogler

5
Ben bırakmak zorunda --copt=-mfpmath=bothonunla çalışması için clangMacOS üzerinde. Ortaya çıkan ikili dosyayı etkiler mi?
gc5

2
Sadece açıklama için: yapılandırma dosyasını oluştururken .... sadece --copt = -march = native mi kullanırım? Veya orijinal yayınlarda görülen tüm bu optimizasyonları, optimizasyonları koyma seçeneğim olduğu yerde mi koyarım?
17'de Thornhale

1
'Build' komutunun yalnızca çalışma alanından desteklendiğini söyleyen bir hata mesajı alıyorum? Ne yapalım?
mütevazı

133

Bu uyarıları neden ilk başta gördüğünüzü açıklayarak başlayalım .


Muhtemelen TF'yi kaynaktan yüklemediniz ve bunun yerine bir şey kullandınız pip install tensorflow. Bu, mimariniz için optimize edilmemiş önceden oluşturulmuş (başka biri tarafından) ikili dosyalar yüklediğiniz anlamına gelir. Ve bu uyarılar size tam olarak şunu söyler: mimarinizde bir şey var, ancak binary ile derlenmediği için kullanılmayacak. İşte belgelerin bir kısmı .

TensorFlow, başlangıçta CPU'da bulunan optimizasyonlarla derlenmiş olup olmadığını kontrol eder. Optimizasyonlar dahil edilmezse, TensorFlow AVX, AVX2 ve FMA talimatları dahil olmayan uyarılar yayar.

İyi bir şey, büyük olasılıkla TF ile öğrenmek / denemek istediğinizdir, böylece her şey düzgün çalışır ve endişelenmemelisiniz


SSE4.2 ve AVX nedir?

Vikipedi'nin SSE4.2 ve AVX hakkında iyi bir açıklaması var . Bu bilginin makine öğreniminde iyi olması gerekli değildir. Bunları, bir bilgisayarın doğal olarak paralel hale getirilebilen işlemleri gerçekleştirmek için tek bir talimata karşı birden fazla veri noktası kullanması için bazı ek talimatlar kümesi olarak düşünebilirsiniz (örneğin iki dizi eklemek).

Hem SSE hem de AVX, SIMD (Tek komut, çoklu veri) soyut bir fikrinin uygulanmasıdır.

Flynn'in taksonomisinde bir paralel bilgisayar sınıfı. Aynı işlemi birden çok veri noktasında aynı anda gerçekleştiren birden çok işlem öğesine sahip bilgisayarları açıklar. Bu nedenle, bu tür makineler veri seviyesi paralelliğinden yararlanır, ancak eşzamanlılıktan değil: eşzamanlı (paralel) hesaplamalar vardır, ancak belirli bir anda sadece tek bir işlem (talimat) vardır

Bu, bir sonraki sorunuza cevap vermek için yeterlidir.


Bu SSE4.2 ve AVX, TF görevleri için CPU hesaplamalarını nasıl geliştirir?

Çeşitli vektör (matris / tensör) işlemlerinin daha verimli bir şekilde hesaplanmasını sağlarlar. Bu slaytlarda daha fazlasını okuyabilirsiniz


İki kütüphaneyi kullanarak Tensorflow nasıl derlenir?

Bu talimatlardan yararlanmak için derlenmiş bir ikili dosyaya ihtiyacınız vardır. En kolay yol, onu kendiniz derlemektir . Mike ve Yaroslav'ın önerdiği gibi, aşağıdaki bazel komutunu kullanabilirsiniz

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.2 --config=cuda -k //tensorflow/tools/pip_package:build_pip_package


4
Bu komut satırı ne anlama geliyor? Ve bazelbu durumda kurmalı mıyım ?
YZ

1
Hiç kimse MSYS2 veya Visual Studio 2017 ommunity Edition ile 64 bit pencere altında inşa var mı? ve adımları paylaşabilir mi?
James Chang

1
Bu pip paketi yerel makinede bir conda ortamına kurulabilir mi?
dgketchum

3
3 saatten sonra (Geçen süre: 11984.258s) Anladım FAILED: Build did NOT complete successfully. Kendiniz derlemek o kadar kolay değil.
imbrizi

burada aynı. Yapım da başarısız oldu ve sonra günlüklerde şunu görebilirsiniz: cl: Komut satırı uyarısı D9002: bilinmeyen seçeneği '-mavx' yoksayma cl: Komut satırı uyarısı D9002: bilinmeyen seçeneği yok sayma '-mavx2' cl: Komut satırı uyarısı D9002: yok sayılıyor bilinmeyen seçenek '-mfma' cl: Komut satırı uyarısı D9002: bilinmeyen seçeneği yok sayıyor '-mfpmath = her ikisi de' cl: Komut satırı uyarısı D9002: bilinmeyen seçeneği yok sayıyor '-msse4.2' cl: Komut satırı uyarısı D9002: bilinmeyen seçeneği yok sayılıyor '- fno-strict-aliasing 'cl: Komut satırı uyarısı D9002: bilinmeyen' -fexceptions 'seçeneğini göz ardı ederek bu seçenekler bilinmiyor
Shilan

53

Önce 3. sorunuzu cevaplayayım:

Bir conda-env içinde kendiliğinden derlenmiş bir sürüm çalıştırmak istiyorsanız, bunu yapabilirsiniz. Bunlar, tensorflow'un sistemime ek talimatlarla yüklenmesini sağlamak için çalıştırdığım genel talimatlardır. Not: Bu derleme, Ubuntu 16.04 LTS çalıştıran bir AMD A10-7850 derlemesi içindir (CPU'nuzun hangi talimatların desteklendiğini kontrol edin ... farklılık gösterebilir). Conda-env içinde Python 3.5 kullanıyorum. Kredi, tensorflow kaynak yükleme sayfasına ve yukarıda verilen cevaplara gider.

git clone https://github.com/tensorflow/tensorflow 
# Install Bazel
# https://bazel.build/versions/master/docs/install.html
sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel
# Create your virtual env with conda.
source activate YOUR_ENV
pip install six numpy wheel, packaging, appdir
# Follow the configure instructions at:
# https://www.tensorflow.org/install/install_sources
# Build your build like below. Note: Check what instructions your CPU 
# support. Also. If resources are limited consider adding the following 
# tag --local_resources 2048,.5,1.0 . This will limit how much ram many
# local resources are used but will increase time to compile.
bazel build -c opt --copt=-mavx --copt=-msse4.1 --copt=-msse4.2  -k //tensorflow/tools/pip_package:build_pip_package
# Create the wheel like so:
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
# Inside your conda env:
pip install /tmp/tensorflow_pkg/NAME_OF_WHEEL.whl
# Then install the rest of your stack
pip install keras jupyter etc. etc.

2. soruya gelince:

Optimizasyonlarla birlikte derlenmiş bir sürüm, bence çabaya değer. Özel kurulumumda, eskiden 560-600 saniye süren hesaplamalar artık sadece 300 saniye sürüyor! Kesin rakamlar değişse de, kurulumunuzda genel olarak yaklaşık% 35-50'lik bir hız artışı bekleyebilirsiniz.

Son olarak ilk sorunuz:

Yukarıda cevapların birçoğu zaten verilmiştir. Özetlemek gerekirse: AVX , SSE4.1, SSE4.2 , MFA, X86 işlemcilerin farklı türde genişletilmiş komut kümeleridir. Birçoğu, matris veya vektör işlemlerini işlemek için optimize edilmiş talimatlar içerir.

Umarım size biraz zaman kazandırmak için kendi yanlış anlayışımı vurgulayacağım: SSE4.2, SSE4.1'in yerini alan talimatların daha yeni bir sürümü değildir. SSE4 = SSE4.1 (47 talimat kümesi) + SSE4.2 (7 talimat kümesi).

Tensorflow derlemesi bağlamında, bilgisayarınız AVX2 ve AVX ve SSE4.1 ve SSE4.2'yi destekliyorsa, bu optimizasyon bayraklarını herkes için koymalısınız. Yaptığım gibi yapmayın ve SSE4.2'nin daha yeni olduğunu ve SSE4.1'in yerini alması gerektiğini düşünün. Bu kesinlikle YANLIŞ! Bana iyi bir 40 dakika mal olan bu yüzden yeniden derlemek zorunda kaldı.


.whl dosyası nerede depolanır coz Ben de pencerelere yüklemek istiyorum?
WiLL_K

Burada saklanır: / tmp / tensorflow_pkg (linux sürücünüzde)
Thornhale

Bunun ne kadar zaman alacağını söyleyebilir misin? Onun yaklaşık 2 saat ve benim laptop dondu. 4 gb ram ve i5 işlemcisi ile çalışan ububtu
WiLL_K

Hmm, tensorflow'u derlemek uzun zaman alıyor. 8 gb'lık dizüstü bilgisayarımda yaklaşık 1,5 saat sürdü. Bununla birlikte, kurulum süreleriniz değişebilir ve mevcut koçtan büyük ölçüde etkilenir. Bu derlemelerin çok fazla RAM aldığı bilinmektedir. Kaynak gereksinimlerini azaltmak ve belki de donmaları önlemek için, derlemeyi "bazel build" den sonra aşağıdaki bayrağı ekleyerek çalıştırabilirsiniz: --local_resources 2048, .5,1.0 Bu genellikle donmalara yardımcı olur, ancak muhtemelen derleme süresini iki katına çıkarır. Örneğin: Daha hızlı sistemlerimden birinde, bayraksız derleme 4500 bayrağına sahip 2200 saniye sürdü!
Thornhale

1
Genel olarak, pencerelerde ML yapmanın arkada büyük bir acı olduğunu buldum. Bir linux ortamında çalışıyorsanız işe yarayan şeyleri almaya çalışırken çok zaman harcıyorsunuz. Her işletim sistemi için tensorflow'un derlenmesi gerektiğine inanıyorum. Ayrıca, buraya giderseniz: link , tensorflow'un resmi olarak desteklenmediğini göreceksiniz. Windows için tensorflow'un nasıl derleneceğine dair bazı kılavuz var: link . İtiraf etmeme rağmen, bunu denemedim. Ben sadece ubuntu kullanıyorum.
Thornhale

25

Bunlar SIMD vektör işleme talimat kümeleridir .

Vektör talimatlarını kullanmak birçok görev için daha hızlıdır; makine öğrenimi böyle bir iştir.

Tensorflow kurulum belgelerinden alıntı :

Mümkün olduğunca çok sayıda makine ile uyumlu olması için, TensorFlow varsayılan olarak yalnızca x86 makinelerde SSE4.1 SIMD talimatlarını kullanır. Modern bilgisayarların ve Mac'lerin çoğu daha gelişmiş talimatları destekler, bu nedenle yalnızca kendi makinenizde çalıştıracağınız bir ikili dosya oluşturuyorsanız, bunları --copt=-march=nativebazel derleme komutunuzda kullanarak etkinleştirebilirsiniz .


Tensorflow ikili dosyası neden CPU dağıtımını kullanmıyor? Bu GCC tarafından zayıf bir şekilde destekleniyor mu?
Chris Pushbullet

4
"Tensorflow kuruluş belgeleri" bağlantısı çalışmıyor. Bu cevabın hala geçerli olup olmadığını merak ediyorum. Lütfen cevap ver!
Mart'ta Thornhale

@ChrisPushbullet, GPU için birkaç farklı hesaplama yeteneğini desteklemek için Tensorflow'u derleyebilirsiniz, ancak ikili boyutu çok artırırlar. Tahminimce CPU için de aynı şey geçerli.
Davidmh

22

Tüm bu yanıtlar + bazı deneme ve hatalar sayesinde, bunu bir Mac'e yüklemeyi başardım clang. Bu yüzden, birisinin faydalı olması durumunda çözümümü paylaşmak.

  1. Kaynaklardan Belgeler - TensorFlow'u Yükleme konusundaki talimatları izleyin

  2. İstendiğinde

    Lütfen derleme sırasında "--config = opt" seçeneği belirtildiğinde derleme sırasında kullanılacak optimizasyon işaretlerini belirtin [Varsayılan, -march = yerli]

ardından bu dizeyi kopyalayıp yapıştırın:

-mavx -mavx2 -mfma -msse4.2

(Varsayılan seçenek hatalara neden oldu, diğer bayraklardan bazıları da oldu. Yukarıdaki bayraklarla ilgili hiçbir hatam yok. BTW nDiğer tüm soruları yanıtladım)

Taktıktan sonra , varsayılan modelleri temel alan başka bir kuruluma göre derin modelleri eğitirken ~ 2x ila 2.5x hız olduğunu doğrularım - MacOS'ta TensorFlow'u Yükleme

Umarım yardımcı olur


4
-march=nativederleyiciniz doğru destekliyorsa daha da iyi olmalıdır. Ayrıca, CPU'nuz -mtune=nativeiçin iyi talimat seçimleri yapmak için de ayarlanır . Haswell üzerinde örn ve sonra, bu devre dışı bırakır -mavx256-split-unaligned-storeve -mavx256-split-unaligned-loadvarsayılan olarak açıktır -mtune=genericve veri hizalanmış olduğu bilinen fakat çalışma zamanında olarak çıkıyor değildir yaralı performansı.
Peter Cordes

1
Teşekkürler! Benim durumumda -march=nativediğer seçenekler yapmadı ama bir hataya neden oldu. Belki de belirli bir derleyici. Başkalarının aynı birlikte gösterimi deneyimlemesi durumunda bunu tam olarak paylaşıyordum.
JARS

1
Ne hatası? Yapı sistemi ile bir ipe şoklar olmadıkça =o ya Kullanmadığınız gccya clang, bu çalışması gerekir. Ve -mtune=native -mavx2 -mfma senin için çalışıyor mu? Yoksa -mtune=skylake? (Veya hangi CPU'ya sahip olursanız olun). BTW, -mavx2ima eder -mavxve -msse4.2. Hepsini bir tarife dahil etmek acı vermez ve sanırım insanların CPU'larının desteklemediklerini dışarıda bırakmalarını kolaylaştırır.
Peter Cordes

1
Bu sorunun üstündeki cevabı bir süre önce düzenledim, ama kendimi tensorflow kullanmıyorum. -march=nativeYapım sistemi ile ilgili bir sorun varsa bilmek isterim. (Ve / veya derleme komut dosyalarını düzeltebilmeleri için akış yukarı rapor etmelisiniz).
Peter Cordes

1
Öneri için çok teşekkürler. Bunu kontrol etmek için, sadece .configure komut dosyasını yeniden çalıştırdım -march=nativeve bu hata: / Users / jose / Documents / code / tmptensorflow / tensorflow / tensorflow / core / BUILD: 1442: 1: C ++ derlemesi '// tensorflow / core: lib_internal_impl' kuralı başarısız oldu (Çıkış 1). Tensorflow / core / platform / denormal.cc dosyasında bulunan dosyada: 37: /Library/Developer/CommandLineTools/usr/bin/../lib/clang/7.0.2/include/pmmintrin.h:28:2: hata: Apple LLVM sürüm 7.0.2 (clang-700.1.81) kullanarak "SSE3 komut kümesi etkin değil" #error "SSE3 komut kümesi etkin değil"
JARS

7

Son zamanlarda kaynaktan kurdum ve mevcut talimatlar ile kaynağından kurmak için gereken tüm adımlar aşağıda.

Diğer cevaplar zaten bu mesajların neden gösterildiğini açıklıyor. Cevabım nasıl kurulacağına dair adım adım bir adım veriyor, bu da insanların benim yaptığım gibi gerçek kurulumda mücadele etmesine yardımcı olabilir.

  1. Bazel yükleyin

Mevcut sürümlerinden birinden indirin , örneğin 0.5.2 . Bunu Özü, dizine gidip yapılandırın: bash ./compile.sh. Yürütülebilir dosyayı şuraya kopyalayın /usr/local/bin:sudo cp ./output/bazel /usr/local/bin

  1. Tensorflow'u yükle

Tensorflow'u klonla: git clone https://github.com/tensorflow/tensorflow.git Yapılandırmak için klonlanan dizine gidin:./configure

Size birkaç soru soracaktır, feryat soruların her birine cevap önerdim, tabii ki, tercih ettiğiniz gibi üzerine kendi cevaplarınızı seçebilirsiniz:

Using python library path: /usr/local/lib/python2.7/dist-packages
Do you wish to build TensorFlow with MKL support? [y/N] y
MKL support will be enabled for TensorFlow
Do you wish to download MKL LIB from the web? [Y/n] Y
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: 
Do you wish to use jemalloc as the malloc implementation? [Y/n] n
jemalloc disabled
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N
No Google Cloud Platform support will be enabled for TensorFlow
Do you wish to build TensorFlow with Hadoop File System support? [y/N] N
No Hadoop File System support will be enabled for TensorFlow
Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N] N
No XLA JIT support will be enabled for TensorFlow
Do you wish to build TensorFlow with VERBS support? [y/N] N
No VERBS support will be enabled for TensorFlow
Do you wish to build TensorFlow with OpenCL support? [y/N] N
No OpenCL support will be enabled for TensorFlow
Do you wish to build TensorFlow with CUDA support? [y/N] N
No CUDA support will be enabled for TensorFlow
  1. Pip paketi. Bunu oluşturmak için hangi talimatları istediğinizi açıklamanız gerekir (bilirsiniz, Tensorflow eksik olduğunuzu bildirir).

Pip komut dosyası oluşturun: bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.1 --copt=-msse4.2 -k //tensorflow/tools/pip_package:build_pip_package

Pip paketi oluştur: bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

Yeni oluşturduğunuz Tensorflow pip paketini kurun: sudo pip install /tmp/tensorflow_pkg/tensorflow-1.2.1-cp27-cp27mu-linux_x86_64.whl

Şimdi bir dahaki sefere Tensorflow'u başlattığınızda artık eksik talimatlardan şikayet etmeyeceksiniz.


4
Sadece ile inşa etmek -c opt --copt=-march=nativeen az iyi olmalıdır --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.1 --copt=-msse4.2. (Her ikisi de uyarıyı susturur, ancak -march=nativeüzerinde çalıştığınız sistemdeki CPU için özel olarak ayarlayarak daha da hızlı kod oluşturabilir). Ayrıca --copt=-mavx2 --copt=-mfma, önceki tüm AVX ve SSE seçeneklerini ima ettiğine dikkat edin , bu nedenle bu uzun seçenekler dizisi gcc seçeneklerini anlamayan biri tarafından açıkça yazılmıştır.
Peter Cordes

1
@PeterCordes, bu konuya bir göz atın ( github.com/tensorflow/tensorflow/issues/7449 ), bazel koruyucular bile march = native'in neden beklendiği gibi çalışmadığını iddialı değildi. "Gcc seçeneklerini anlayın" gibi göründüğünüz gibi, sorunu "topluluk desteğine" ihtiyaç olarak işaretledikleri için muhtemelen düzeltmelerine yardımcı olabilirsiniz.
Eduardo

Teşekkürler, bir göz atacağım ... Hmm, bazı insanlar --copt=-mavx2bunun işe yaramadığını söylüyor . Eğer --copt=-mfma işler, --copt=-march=nativeçalışması gerektiğini ait ayrıştırma sürece =bir sorundur. Gcc / clang / icc için derleme komut dosyasının -march=nativederleyiciye geçmesini kesinlikle istersiniz . Bunu yapı komut dosyaları aracılığıyla gerçekleştirmek hile olur.
Peter Cordes

7

Bu en basit yöntemdir. Sadece bir adım.

Hız üzerinde önemli bir etkisi vardır. Benim durumumda, bir eğitim adımı için harcanan zaman neredeyse yarı yarıya azaldı.

Özel tensorflow yapılarına bakın


2
AVX2 dahil Windows derlemeleri github.com/fo40225/tensorflow-windows-wheel
Chris

@SreeraghAR Metodunuz tensorflow ve kerasımı düşürdü.
KPMG

Lütfen TensorFlow, Python sürümlerine ve HW'ye göre doğru dosyayı yüklediğinizden emin olun.
Sreeragh AR

@SreeraghAR TensFlowsürümü 1.10.0 ve kullanıyor MacOS Sierra. Dosyayı bulmama yardım et.
KPMG

Hmm .. Sürümlerinize uygun olanı bulamıyorum. Bazıları özel bir tekerlek yapmak zorundadır. github.com/yaroslavvb/tensorflow-community-wheels Acil çözüm Tensorflow 1.9.0
Sreeragh AR


5

TensorFlow'u SSE4.2 ve AVX ile derlemek için doğrudan kullanabilirsiniz

bazel build --config = mkl --config = "opt" --copt = "- mart = broadwell" --copt = "- O3" // tensorflow / tools / pip_package: build_pip_package

Kaynak: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker/Dockerfile.devel-cpu-mkl


1
Son zamanlarda bir şeyler değişti mi? Son kontrol ettim --copt="-march=native"yiyordu =. (Ve BTW, bu çift tırnak hiçbir şey yapmaz; bazelkomut satırınızı görmeden önce kabuk tarafından kaldırılırlar .)
Peter Cordes

4

2.0 UYUMLU ÇÖZÜM:

Bazel kullanarak Tensorflow 2.0'ı yüklemek için Terminal'de (Linux / MacOS) veya Komut İstemi'nde (Windows) aşağıdaki komutları yürütün :

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

#The repo defaults to the master development branch. You can also checkout a release branch to build:
git checkout r2.0

#Configure the Build => Use the Below line for Windows Machine
python ./configure.py 

#Configure the Build => Use the Below line for Linux/MacOS Machine
./configure
#This script prompts you for the location of TensorFlow dependencies and asks for additional build configuration options. 

#Build Tensorflow package

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

#GPU support
bazel build --config=opt --config=cuda --define=no_tensorflow_py_deps=true //tensorflow/tools/pip_package:build_pip_package

2
Bunun hangi kısmı -march=nativeveya diğer GCC / clang seçeneklerini belirtir ? Burada AVX, FMA veya SSE4.2'den bahsetmiyorum. (Ve hala şekilde kırılmış Bazel veya Tensorflow en inşa script böyle sadece seçenekler -mavxişin değil, -march=nativesorun gerçekten bu soru üzerine üst yanıtında ne olduğunu yıllardan ederse?)
Peter Cordes

tf sürüm 2.1.0 ile CPU desteği için --config = opt seçeneği benim için çalışmadı, --config = v2 ile çözdüm. Ayrıca, inşa etmek için doğru bazel versiyonun 29.0 olduğunu belirtmek gerekir.
Tolik

2

Kaynaktan TensorFlow oluştururken configurekomut dosyasını çalıştırırsınız . configureBetiğin sorduğu sorulardan biri şöyledir:

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]

configureKomut bayrağı (ler) TensorFlow pip paketini oluşturur Bazel komutuna belirtmek ekleyecektir. Genel olarak, bu isteme iki yoldan biriyle yanıt verebilirsiniz:

  • TensorFlow'u, TensorFlow'u çalıştıracağınız CPU türüyle aynı türde oluşturuyorsanız, varsayılanı ( -march=native) kabul etmelisiniz . Bu seçenek, oluşturulan kodu makinenizin CPU tipi için optimize eder.
  • TensorFlow'u tek bir CPU türünde oluşturuyorsanız, ancak TensorFlow'u farklı bir CPU türünde çalıştıracaksanız , gcc belgelerinde açıklandığı gibi daha spesifik bir optimizasyon bayrağı sağlamayı düşünün .

TensorFlow'u önceki madde işaretli listede açıklandığı gibi yapılandırdıktan sonra, yalnızca --config=optçalıştırdığınız herhangi bir bazel komutuna bayrak ekleyerek hedef CPU için tamamen optimize edilmiş TensorFlow'u oluşturabilmelisiniz .


-1

Bu uyarıları gizlemek için bunu gerçek kodunuzdan önce yapabilirsiniz.

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf

5
Sessizce donanımınızda olduğundan daha yavaş çalışmak kötü bir fikir gibi görünüyor.
Peter Cordes

Genel olarak @Peter Cordes ile hemfikirim - ancak bazen uyarıları gizlemek ve göreve odaklanmak güzel (disiplinli, dikkatli bir şekilde).
westsider

2
@westsider: evet, bazı durumlarda yararlı olabilir, ancak sonuçları belirtmedikçe bu iyi bir cevap değildir: uyarıları derlemek yerine uyarıları gizlerseniz gerçek performans kaybedilir. (Belki de ağır kaldırma için GPU kullanıyorsanız, CPU seçenekleri hakkında hala uyarıda bulunabilir mi?)
Peter Cordes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.