SSE4.2 এবং AVX নির্দেশাবলীর সাথে টেনসরফ্লো কীভাবে সংকলন করবেন?


288

টেনসরফ্লো কাজ করছে কিনা তা পরীক্ষা করতে স্ক্রিপ্ট চালানো থেকে প্রাপ্ত বার্তাটি:

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

আমি লক্ষ্য করেছি যে এটি এসএসই ৪.২ এবং এভিএক্স উল্লেখ করেছে,

  1. এসএসই 4.2 এবং এভিএক্স কি?
  2. এই এসএসই 4.2 এবং এভিএক্স কীভাবে টেনসরফ্লো কাজের জন্য সিপিইউ গণনা উন্নত করে?
  3. দুটি গ্রন্থাগার ব্যবহার করে টেনসরফ্লো কীভাবে সংকলন করা যায়?

18
আমি 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 এ এই পতাকাগুলি দিয়ে তৈরি করতে চাই যা অফিসিয়াল রিলিজের তুলনায় 8 কে ম্যাটমুল সিপিইউ গতিতে আমাকে 3x উন্নতি দেয় (0.35 -> 1.05 টি অপ্স / সেকেন্ড)
ইয়ারোস্লাভ বুলাটোভ

4
এবং 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.এখান থেকে ভুলে যাবেন না tensorflow.org/install/install_s Source
ইভান কুশ

4
Github.com/lakshayg/tensorflow-build এই নির্দেশাবলী সমর্থন করে টিএফ এর জন্য আমার কয়েকটি সংকলিত বাইনারি রয়েছে । আপনি এটি সহায়ক হতে পারে।
লক্ষী গার্গ

1
@ ইভানকুশ যে পতাকাটি যুক্ত করেছেন, আমি এখনও সফলভাবে টেনসরফ্লো আমদানি করতে পারছি না (জরিমানা সংকলন)। আপনি সফলভাবে জিসিসি 5 কম্পাইল পারেন, দয়া করে দেখুন: stackoverflow.com/questions/45877158/...
anon01

1
যদি উবুন্টু ১.0.০৪ ব্যবহার করে থাকেন তবে আমাদের প্রায় সমস্ত বৈকল্পিকের জন্য আমাদের সম্ভবত বিল্ডস রয়েছে
দ্যাঙ্কিং

উত্তর:


160

আমি কেবল এই একই সমস্যার মধ্যে দৌড়েছি, মনে হচ্ছে ইয়ারোস্লাভ বুলাটোভের পরামর্শটি এসএসই 4.2 সমর্থনটি কভার করে না, যোগ করা --copt=-msse4.2যথেষ্ট হবে। শেষ পর্যন্ত, আমি সফলভাবে দিয়ে নির্মিত

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

কোন সতর্কতা বা ত্রুটি না পেয়ে।

যে কোনও সিস্টেমের জন্য সম্ভবত সেরা পছন্দটি হ'ল:

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

( আপডেট: বিল্ড স্ক্রিপ্টগুলি খাওয়া হতে পারে-march=native , সম্ভবত এটিতে একটি রয়েছে= ))

-mfpmath=bothঝাঁকুনি না দিয়ে কেবল জিসিসি নিয়ে কাজ করে। -mfpmath=sseসম্ভবত ঠিক তত ভাল, যদি না ভাল হয়, এবং এটি x86-64 এর জন্য ডিফল্ট। 32-বিট এতে ডিফল্ট তৈরি করে -mfpmath=387, তাই এটি 32-বিটের জন্য সহায়তা করবে changing (তবে আপনি যদি সংখ্যার ক্রাঞ্চিংয়ের জন্য উচ্চ-সম্পাদনা চান তবে আপনার 64৪-বিট বাইনারি তৈরি করা উচিত))

টেনসরফ্লো এর ডিফল্ট কি -O2বা সে সম্পর্কে আমি নিশ্চিত নই -O3gcc -O3অটো-ভেক্টরাইজেশন সহ সম্পূর্ণ অপ্টিমাইজেশন সক্ষম করে, তবে এটি কখনও কখনও কোডকে ধীর করে দেয়।


এই আসলে কি: --coptজন্যbazel build সি এবং সি ++ ফাইল কম্পাইল জন্য জিসিসি সরাসরি একটি বিকল্প পাসের (কিন্তু লিঙ্ক না, আপনি ক্রস ফাইল লিঙ্ক সময় অপ্টিমাইজেশান জন্য একটি ভিন্ন বিকল্প প্রয়োজন তাই)

x86-64 গিগিসিটি কেবল এসএসই 2 বা পুরানো সিমডি নির্দেশাবলী ব্যবহারের ক্ষেত্রে ডিফল্ট, যাতে আপনি কোনও x86-64 সিস্টেমে বাইনারিগুলি চালাতে পারেন । ( Https://gcc.gnu.org/onlinesocs/gcc/x86-Options.html দেখুন )। আপনি যা চান তা তা নয়। আপনি এমন একটি বাইনারি তৈরি করতে চান যা আপনার সিপিইউ চালাতে পারে সমস্ত নির্দেশাবলীর সুযোগ নেয়, কারণ আপনি কেবল যেখানে বাইনারি তৈরি করেছেন সেই সিস্টেমে এটি চালাচ্ছেন।

-march=nativeআপনার সিপিইউ সমর্থন করে এমন সমস্ত বিকল্প সক্ষম করে, তাই এটি -mavx512f -mavx2 -mavx -mfma -msse4.2অনর্থক করে তোলে । (এছাড়াও, -mavx2ইতিমধ্যে সক্ষম করে -mavxএবং -msse4.2তাই, ইয়ারোস্লাভের কমান্ডটি ঠিকঠাক হওয়া উচিত ছিল)। এছাড়াও যদি আপনি এমন কোনও সিপিইউ ব্যবহার করেন যা এই বিকল্পগুলির মধ্যে একটিরও সমর্থন করে না (যেমন এফএমএ), -mfmaঅবৈধ নির্দেশাবলীতে ত্রুটিযুক্ত একটি বাইনারি তৈরি করে ।

টেনসরফ্লো ./configureডিফল্ট সক্ষম করার জন্য-march=native , সুতরাং এটি ব্যবহার করে ম্যানুয়ালি সংকলক বিকল্পগুলি নির্দিষ্ট করার প্রয়োজন এড়ানো উচিত।

-march=nativeসক্ষম করে তোলে-mtune=native , সুতরাং এটি সিভিউর জন্য এমন জিনিসগুলির জন্য অনুকূল হয় যেগুলি আন-সাইনড লোডের জন্য কোন AVX নির্দেশাবলীর অনুক্রমটি সেরা।

এটি সবগুলি জিসিসি, ঝনঝন বা আইসিসির ক্ষেত্রে প্রযোজ্য। (আইসিসির জন্য, আপনি এর -xHOSTপরিবর্তে ব্যবহার করতে পারেন -march=native))


6
এটি সত্যই কাজ করে> +1! সুতরাং -march=nativeএটির কাজটি মনে হয় না। পাশেই, --config=cuda(যদি সিইউডিএ সমর্থন প্রয়োজন না হয়) বাদ দেওয়া এবং -k(যেহেতু সংকলনের সময় কোনও ত্রুটি ঘটেনি) পাশাপাশি কাজ করে।
মার্ক

4
নতুন সংকলিত সংস্করণ আনইনস্টল ও পুনরায় ইনস্টল করার পরেও আমি এখনও এভিএক্স, এভিএক্স 2 এবং এফএমএর জন্য সতর্কতা পেয়েছি।
বেনেডিক্ট এস ভোগলার 15

5
--copt=-mfpmath=bothএটি clangম্যাকোস-এ কাজ করতে আমাকে নামতে হয়েছিল । এটি ফলে বাইনারি প্রভাবিত করে?
gc5

2
কেবলমাত্র স্পষ্টতার জন্য: যখন আমি কনফিগার ফাইলটি তৈরি করি .... আমি কি সহজেই --copt = -মার্চ = নেটিভ ব্যবহার করব? অথবা আমি যেসব পোস্টে অপটিমাইজেশন রাখার বিকল্প পেয়েছি সেখানে মূল পোস্টগুলিতে দেখা সমস্ত অপটিমাইজেশন রেখেছি?
থর্নহলে

1
'বিল্ড' কমান্ডটি কেবল ওয়ার্কস্পেস থেকে সমর্থিত তা বলতে আমি একটি ত্রুটি পেয়েছি? কি করো?
নমুনা

133

আপনি কেন এই সতর্কতাগুলিকে প্রথম স্থানে দেখেন তার ব্যাখ্যা দিয়ে শুরু করা যাক ।


সম্ভবত আপনি উত্স থেকে টিএফ ইনস্টল করেন নি এবং এর পরিবর্তে এর মতো কিছু ব্যবহার করেছেন pip install tensorflow। এর অর্থ হ'ল আপনি প্রাক-বিল্ট (অন্য কারও দ্বারা) বাইনারি ইনস্টল করেছেন যা আপনার স্থাপত্যের জন্য অনুকূলিত হয়নি। এবং এই সতর্কতাগুলি আপনাকে ঠিক এটি বলে: আপনার আর্কিটেকচারে কিছু উপলভ্য, তবে এটি ব্যবহৃত হবে না কারণ বাইনারিটি এটি সংকলিত হয়নি। এখানে ডকুমেন্টেশন থেকে অংশ ।

টেনসরফ্লো সিপিইউতে উপলব্ধ অপ্টিমাইজেশানগুলি সংকলিত হয়েছে কিনা তা প্রারম্ভকালে পরীক্ষা করে। যদি অপ্টিমাইজেশানগুলি অন্তর্ভুক্ত না করা হয় তবে টেনসরফ্লো সতর্কতা প্রেরণ করবে, যেমন AVX, AVX2 এবং এফএমএ নির্দেশাবলী অন্তর্ভুক্ত নয় instructions

ভাল কথাটি হ'ল সম্ভবত আপনি কেবল টিএফ-এর সাথে শিখতে / পরীক্ষা করতে চান যাতে সবকিছু সঠিকভাবে কাজ করে এবং আপনার এটি নিয়ে চিন্তা করা উচিত নয়


এসএসই 4.2 এবং এভিএক্স কি?

এসইএসই ২.২ এবং এভিএক্স সম্পর্কে উইকিপিডিয়ায় একটি ভাল ব্যাখ্যা রয়েছে । এই জ্ঞানটি মেশিন-লার্নিংয়ে ভাল হতে হবে না। আপনি এগুলি সম্পর্কে কম্পিউটারের জন্য প্রাকৃতিকভাবে সমান্তরালভাবে কাজ করতে (যেমন দুটি অ্যারে যুক্ত করা) পরিচালনা করতে কোনও একক নির্দেশনার বিরুদ্ধে একাধিক ডেটা পয়েন্ট ব্যবহার করার জন্য কিছু অতিরিক্ত নির্দেশাবলীর সেট হিসাবে ভাবতে পারেন।

উভয় SSE এবং AVX এর একটি বিমূর্ত ধারণা বাস্তবায়ন হয় SIMD (সিঙ্গেল নির্দেশ, একাধিক তথ্য), যা

ফ্লাইনের টেকনোমিতে সমান্তরাল কম্পিউটারের একটি শ্রেণি। এটি একাধিক ডেটা পয়েন্টে একই ক্রিয়াকলাপ সম্পাদনকারী একাধিক প্রসেসিং উপাদানগুলির সাথে কম্পিউটারগুলি বর্ণনা করে। সুতরাং, এই জাতীয় মেশিনগুলি ডেটা স্তরের সমান্তরালতাকে কাজে লাগায়, তবে একযোগে নয়: একসাথে (সমান্তরাল) গণনা রয়েছে তবে নির্দিষ্ট মুহুর্তে কেবল একটি একক প্রক্রিয়া (নির্দেশ) রয়েছে

আপনার পরবর্তী প্রশ্নের উত্তর দেওয়ার জন্য এটি যথেষ্ট।


এই এসএসই 4.2 এবং এভিএক্স কীভাবে টিএফ কাজের জন্য সিপিইউ গণনা উন্নত করে

তারা বিভিন্ন ভেক্টর (ম্যাট্রিক্স / টেনসর) ক্রিয়াকলাপকে আরও দক্ষ গণনার অনুমতি দেয়। আপনি এই স্লাইডগুলিতে আরও পড়তে পারেন


দুটি গ্রন্থাগার ব্যবহার করে টেনসরফ্লো কীভাবে সংকলন করা যায়?

আপনার কাছে একটি বাইনারি থাকা দরকার যা এই নির্দেশাবলীর সুবিধা নিতে সংকলিত হয়েছিল। সবচেয়ে সহজ উপায় এটি নিজেই সংকলন করা । মাইক এবং ইয়ারোস্লাভ যেমন পরামর্শ দিয়েছেন, আপনি নিম্নলিখিত বাজেল কমান্ডটি ব্যবহার করতে পারেন

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
এই কমান্ড লাইনের অর্থ কী? এবং আমি bazelএই ক্ষেত্রে ইনস্টল করা উচিত ?
YZ

1
এমএসওয়াইএস 2 বা ভিজ্যুয়াল স্টুডিও 2017 সর্বস্বত্ব সংস্করণ দিয়ে কেউ কি কখনও উইন্ডোগুলির নীচে তৈরি করে? এবং পদক্ষেপগুলি ভাগ করতে পারেন?
জেমস চ্যাং

1
এই পাইপ প্যাকেজটি কি স্থানীয় মেশিনে কনডা পরিবেশে ইনস্টল করা যেতে পারে?
dgketchum

3
3+ ঘন্টা পরে (অতিবাহিত সময়: 11984.258s) আমি পেয়েছি FAILED: Build did NOT complete successfully। এটি নিজেই সংকলন করা সহজ নয়।
imbrizi

একই অবস্থা. আমার বিল্ডটিও ব্যর্থ হয়েছে এবং তারপরে লগগুলিতে আমি দেখতে পাচ্ছি যে: cl: কমান্ড লাইন সতর্কতা D9002: অজানা বিকল্প '-mavx' উপেক্ষা করে: কমান্ড লাইন সতর্কতা D9002: অজানা বিকল্প উপেক্ষা করে '-mavx2' cl: কমান্ড লাইন সতর্কতা D9002: উপেক্ষা করছে অজানা বিকল্প '-mfma' cl: কমান্ড লাইন সতর্কতা D9002: অজানা বিকল্প উপেক্ষা '-mfpmath = উভয়' cl: কমান্ড লাইন সতর্কতা D9002: অজানা বিকল্প উপেক্ষা '-msse4.2' cl: কমান্ড লাইন সতর্কতা D9002: অজানা বিকল্প উপেক্ষা '- fno-rigid-aliasing 'cl: কমান্ড লাইন সতর্কতা D9002: অজানা বিকল্প' -ফ্যাক্সেসব্যাকশন 'উপেক্ষা করে যাতে এই বিকল্পগুলি জানা যায় না
শিলান

53

আমাকে প্রথমে আপনার তৃতীয় প্রশ্নের উত্তর দিন:

আপনি যদি কোনও কনডা-এনভির মধ্যে স্ব-সংকলিত সংস্করণ চালাতে চান তবে আপনি এটি করতে পারেন। অতিরিক্ত নির্দেশাবলীর সাথে আমার সিস্টেমে টেনসরফ্লো ইনস্টল করার জন্য চালানো এই সাধারণ নির্দেশাবলী। দ্রষ্টব্য: এই বিল্ডটি একটি এএমডি এ 10-7850 বিল্ডের জন্য ছিল (উপনি 16.04 এলটিএস চালানো কোনও নির্দেশাবলীর সমর্থনের জন্য আপনার সিপিইউ পরীক্ষা করুন ... এটির চেয়ে আলাদা হতে পারে)। আমি আমার কনডা-এনভির মধ্যে পাইথন 3.5 ব্যবহার করি। ক্রেডিট টেনসরফ্রোল উত্স ইনস্টল পৃষ্ঠা এবং উপরে সরবরাহ করা উত্তরগুলিতে যায়।

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.

আপনার দ্বিতীয় প্রশ্ন হিসাবে:

অনুকূলিতকরণ সহ একটি স্ব-সংকলিত সংস্করণ আমার মতে প্রচেষ্টার পক্ষে যথেষ্ট। আমার নির্দিষ্ট সেটআপে, গণনাগুলি যেগুলি 560-600 সেকেন্ড সময় নেয় এখন প্রায় 300 সেকেন্ড সময় নেয়! যদিও সঠিক সংখ্যাগুলি পৃথক হবে, আমার ধারণা আপনি আপনার নির্দিষ্ট সেটআপের ক্ষেত্রে প্রায় 35-50% গতি বৃদ্ধি আশা করতে পারেন।

অবশেষে আপনার প্রথম প্রশ্ন:

ইতিমধ্যে উপরে অনেক উত্তর সরবরাহ করা হয়েছে। সংক্ষেপ করার জন্য: AVX , SSE4.1, SSE4.2 , এমএফএ এক্স 86 সিপিইউগুলিতে বিভিন্ন ধরণের বর্ধিত নির্দেশাবলী সেট। অনেকগুলি ম্যাট্রিক্স বা ভেক্টর অপারেশনগুলি প্রক্রিয়াকরণের জন্য অনুকূলিত নির্দেশাবলী ধারণ করে।

আশা করি আপনাকে কিছুটা সময় সাশ্রয় করার জন্য আমি আমার নিজের ভুল ধারণাটি হাইলাইট করব: এটি এমন নয় যে এসএসই 4.2 এসএসই 4.1 কে সুপারিশ করে এমন একটি নতুন সংস্করণ। এসএসই 4 = এসএসই 4.1 (47 নির্দেশাবলীর একটি সেট) + এসএসই 4.2 (7 নির্দেশাবলীর একটি সেট)।

টেনসরফ্লো সংকলনের প্রসঙ্গে আপনি যদি কম্পিউটার AVX2 এবং AVX, এবং SSE4.1 এবং SSE4.2 সমর্থন করেন, আপনার উচিত সেই সকলের জন্য এইগুলি অপ্টিমাইজ করা পতাকা রাখা উচিত। আমি যেমন করেছিলাম তেমনটি করবেন না এবং কেবল এসএসই 4.2 নিয়ে ভেবে যাবেন যে এটি আরও নতুন এবং এসএসই 4.1 কে ছাড়িয়ে যাবে। এটা পরিষ্কার ভুল! আমাকে পুনরায় কম্পাইল করতে হয়েছিল যার জন্য আমার 40 মিনিটের জন্য ভাল খরচ হয়েছিল।


কোথাও .Wl ফাইলটি কোজ করা থাকে আমি উইন্ডোতেও এটি ইনস্টল করতে চাই?
WiLL_K

এটি এখানে সঞ্চিত রয়েছে: / tmp / tensorflow_pkg (আপনার লিনাক্স ড্রাইভে)
থর্নহলে

আপনি আমাকে বলতে পারেন যে এটিতে কত সময় লাগবে। এটি প্রায় 2 ঘন্টা এবং আমার ল্যাপটপ হিমশীতল। এটির 4bb র‌্যাম এবং একটি আই 5 প্রসেসর সহ চলমান উব্ব্টু
WiLL_K

হুঁ, সংকলন টেনস্রোফফোর করতে অনেক সময় লাগে। আমার ল্যাপটপে 8 জিবি সহ এটি প্রায় 1.5 ঘন্টা সময় নেয়। যাইহোক, আপনার ইনস্টল করার সময়গুলি পৃথক হতে পারে এবং উপলব্ধ মেষ দ্বারা ভারী প্রভাবিত হবে। এই সংকলনগুলি প্রচুর র‍্যাম নেয় বলে জানা যায়। রিসোর্সের প্রয়োজনীয়তা হ্রাস করতে এবং সম্ভবত জমাট বাঁধা রোধ করতে আপনি "বেজেল বিল্ড" এর পরে নীচের পতাকাটি যুক্ত করে সংকলনটি পরিচালনা করতে পারেন: --local_res્રોસો 2048, .5,1.0 এটি প্রায়শই হিমায়িত করতে সহায়তা করে তবে সংকলনের জন্য সম্ভবত দ্বিগুণ হবে। উদাহরণস্বরূপ: আমার একটি দ্রুত সিস্টেমে পতাকা ছাড়াই সংকলনটি 2200 সেকেন্ড সময় নিয়ে 4500 পতাকা নিয়েছে!
থর্নহলে

1
সাধারণভাবে, আমি উইন্ডোজ এমএল করা পিছনে একটি বড় ব্যথা পাওয়া যায় নি। আপনি যদি কোনও লিনাক্স পরিবেশে কাজ করেন তবে ঠিক কাজ করে এমন জিনিসগুলি পাওয়ার জন্য আপনি প্রচুর সময় ব্যয় করেছেন। আমি বিশ্বাস করি যে প্রতিটি ওএসের জন্য টেনসরফ্লো সংকলন করা দরকার। এছাড়াও, আপনি যদি এখানে যান: লিঙ্ক , আপনি দেখতে পাবেন যে টেনসরফ্লো আনুষ্ঠানিকভাবে সমর্থিত নয়। উইন্ডোজের জন্য টেনসরফ্লো কীভাবে সংকলন করতে হবে সে সম্পর্কে এখানে কিছু গাইড রয়েছে: লিঙ্ক । যদিও আমাকে স্বীকার করতে হবে, আমি এটি চেষ্টা করে দেখিনি। আমি কেবল উবুন্টু ব্যবহার করছি।
থর্নহলে

25

এগুলি হল SIMD ভেক্টর প্রক্রিয়াকরণ নির্দেশ সেট

ভেক্টরের নির্দেশাবলী ব্যবহার করা অনেকগুলি কাজের জন্য দ্রুত; মেশিন লার্নিং যেমন একটি কাজ।

টেনসরফ্লো ইনস্টলেশন ডক্সের উদ্ধৃতি :

যথাসম্ভব বিস্তৃত মেশিনের সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য, টেনসরফ্লো কেবলমাত্র x86 মেশিনে এসএসই 4.1 সিমডি নির্দেশাবলীর সাহায্যে ডিফল্ট। বেশিরভাগ আধুনিক পিসি এবং ম্যাকগুলি আরও উন্নত নির্দেশাবলী সমর্থন করে, তাই আপনি যদি কেবল একটি বাইনারি তৈরি করেন যা আপনি কেবল নিজের মেশিনে চালাচ্ছেন তবে --copt=-march=nativeআপনি আপনার বেজাল বিল্ড কমান্ড ব্যবহার করে এগুলি সক্ষম করতে পারবেন ।


কেন টেনসরফ্লো বাইনারি সিপিইউ প্রেরণ ব্যবহার করে না? এটি কি জিসিসি দ্বারা খারাপভাবে সমর্থন করা হয়েছে?
ক্রিস পুশবলেট

4
"টেনসরফ্লো ইনস্টলেশন ডক্স" লিঙ্কটি কাজ করে না। তাই আমি ভাবছি যে এই উত্তরটি এখনও বৈধ কিনা। সাড়া দিন!
থর্নহলে

@ ক্রিসপুশবলেট আপনি জিপিইউর জন্য বিভিন্ন ধরণের গণনা ক্ষমতা সমর্থন করতে টেনসরফ্লো সংকলন করতে পারেন, তবে তারা বাইনারি আকারকে অনেক বাড়িয়ে তোলে। আমার অনুমান যে একই সিপিইউ জন্য।
ডেভিডম

22

এই উত্তরগুলি + কিছু পরীক্ষার এবং ত্রুটিগুলির জন্য ধন্যবাদ, আমি এটি একটি ম্যাকের সাথে ইনস্টল করতে সক্ষম হয়েছি clang। সুতরাং আমার সমাধানটি কারও পক্ষে কার্যকর হলে তা ভাগ করে নিন।

  1. নির্দেশাবলী অনুসরণ করুন ডকুমেন্টেশন সম্পর্কিত - উত্স থেকে টেনসরফ্লো ইনস্টল করা

  2. যখন জিজ্ঞাসা করা হয়

    সংকলনের সময় ব্যবহার করার জন্য দয়া করে অপ্টিমাইজেশন ফ্ল্যাগগুলি নির্দিষ্ট করুন যখন "--config = opt" নির্দিষ্ট করা হয় [ডিফল্ট -মার্চ = নেটিভ]

তারপরে এই স্ট্রিংটি অনুলিপি করুন:

-mavx -mavx2 -mfma -msse4.2

(ডিফল্ট বিকল্পের ফলে ত্রুটি হয়েছিল, তাই অন্য কয়েকটি পতাকাও পেয়েছিল above উপরের পতাকাগুলির সাথে আমার কোনও ত্রুটি নেই B বিটিডাব্লু আমি nঅন্যান্য সমস্ত প্রশ্নের জবাব দিয়েছি )

ইনস্টল করার পরে, আমি ডিফল্ট চাকার উপর ভিত্তি করে অন্য ইনস্টলেশনের বিষয়ে গভীর মডেলদের প্রশিক্ষণ দেওয়ার সময় একটি x 2x থেকে 2.5x স্পিডআপ যাচাই করি - ম্যাকোজে টেন্সরফ্লো ইনস্টল করছি

আশা করি এটা সাহায্য করবে


4
-march=nativeআরও বেশি ভাল হওয়া উচিত যদি আপনার সংকলক এটি সঠিকভাবে সমর্থন করে। এটি -mtune=nativeআপনার সিপিইউর জন্য ভাল নির্দেশিকা পছন্দ করতেও সেট করে। যেমন হ্যাসওয়েল এবং পরবর্তীকালে, এটি অক্ষম করে -mavx256-split-unaligned-storeএবং যখন ডেটা সারিবদ্ধ হওয়ার জন্য জানা যায় না তবে রান-টাইমে উপস্থিত হয় তখন কার্য সম্পাদন এবং আঘাতের জন্য -mavx256-split-unaligned-loadডিফল্টরূপে এটি -mtune=genericচালু থাকে।
পিটার কর্ডেস

1
ধন্যবাদ! আমার ক্ষেত্রে -march=nativeত্রুটি ঘটায় অন্য বিকল্পগুলি না করায়। হতে পারে এটি নির্দিষ্ট সংকলক। অন্যরা যদি একই রোডব্লকটি অনুধাবন করে তবে আমি এটিকে অবিকল ভাগ করে নিছিলাম।
জার্স

1
কি ত্রুটি? যদি না বিল্ড সিস্টেম =এটির সাথে একটি স্ট্রিংয়ের উপরে চাপ না দেয় বা আপনি ব্যবহার করছেন না gccবা clang, এটি কাজ করা উচিত। এবং -mtune=native -mavx2 -mfma আপনার জন্য কাজ করে? নাকি -mtune=skylake? (বা আপনার যা কিছু সিপিইউ রয়েছে)। বিটিডাব্লু, -mavx2বোঝা -mavxএবং -msse4.2। এই সমস্তগুলিকে একটি রেসিপিতে অন্তর্ভুক্ত করা ক্ষতিগ্রস্থ হয় না এবং আমার ধারণা, লোকেরা তাদের সিপিইউ সমর্থন করে না এমনগুলি ছেড়ে দেওয়া সহজ করে দেয়।
পিটার কর্ডেস

1
কিছুক্ষণ আগে আমি এই প্রশ্নের উপরের উত্তরটি সম্পাদনা করেছি, তবে আমি নিজে টেনস্রফ্লো ব্যবহার করি না। যদি -march=nativeএর বিল্ড সিস্টেমের জন্য কোনও সমস্যা থাকে তবে আমি তা জানতে চাই। (এবং / অথবা আপনার এটিকে প্রবাহের প্রতিবেদন করা উচিত যাতে তারা তাদের বিল্ড স্ক্রিপ্টগুলি ঠিক করতে পারে)।
পিটার

1
পরামর্শের জন্য অনেক ধন্যবাদ। এটি যাচাই করার জন্য, আমি কেবলমাত্র। কনফিগার স্ক্রিপ্টটি পুনরায় চালিত করেছি -march=nativeএবং এটি ত্রুটি: / ব্যবহারকারী / জোস / ডকুমেন্টস / কোড / টিম্পটেনসরফ্লো / টেনসরফ্লো / সেন্সরফ্লো / কোর / বিল: 1442: 1: সি ++ সংকলন নিয়ম '// টেনসরফ্লো / কোর: lib_internal_impl' ব্যর্থ হয়েছে (প্রস্থান 1)। টেনসরফ্লো / কোর / প্ল্যাটফর্ম / ডেনোমরমাল সি সি অন্তর্ভুক্ত ফাইলটিতে: ৩:: / লাইব্রেরি / ডেভেলপার / কমন্ডলাইনটুলস / ইউএস / বিিন /..লিব / ক্লাং / .0.০.২ / অন্তর্ভুক্ত / পুমিনট্রিন। "SSE3 নির্দেশ সেট সক্ষম করা" #error "SSE3 নির্দেশ সেট সক্ষম করা" ব্যবহার অ্যাপল LLVM সংস্করণ 7.0.2 (ঝনঝন-700.1.81)
বয়াম

7

আমি সম্প্রতি এটি উত্স থেকে ইনস্টল করেছি এবং উল্লিখিত নির্দেশাবলীর সাথে উত্স থেকে এটি ইনস্টল করার জন্য প্রয়োজনীয় সমস্ত পদক্ষেপ।

অন্যান্য উত্তরগুলি ইতিমধ্যে বর্ণনা করে যে কেন এই বার্তাগুলি প্রদর্শিত হয়। আমার উত্তরটি কীভাবে ইন্সটল করা যায় তার একটি ধাপে ধাপ দেয়, যা প্রকৃত ইনস্টলেশনটিতে লড়াইয়ের মতো লোকদের যেমন আমার মতো করতে সহায়তা করতে পারে।

  1. বাজেল ইনস্টল করুন

তাদের প্রাপ্তিসাধ্য এক থেকে এটি ডাউনলোড করুন রিলিজ , উদাহরণস্বরূপ 0.5.2 । এটা নিষ্কর্ষ, ডিরেক্টরিতে যান এবং এটা কনফিগার করুন: bash ./compile.sh। এক্সিকিউটেবলকে এখানে অনুলিপি করুন /usr/local/bin:sudo cp ./output/bazel /usr/local/bin

  1. টেনসরফ্লো ইনস্টল করুন

ক্লোন টেনসরফ্লো: git clone https://github.com/tensorflow/tensorflow.git এটি কনফিগার করতে ক্লোন ডিরেক্টরিতে যান:./configure

এটি আপনাকে বেশ কয়েকটি প্রশ্ন জিজ্ঞাসা করবে, নমস্কার আমি প্রতিটি প্রশ্নের জবাব দেওয়ার পরামর্শ দিয়েছি, আপনি অবশ্যই নিজের পছন্দমত নিজের পছন্দমত বেছে নিতে পারেন:

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. পাইপ প্যাকেজ। এটি তৈরির জন্য আপনাকে কোন নির্দেশাবলী চান তা বর্ণনা করতে হবে (আপনি জানেন, সেই টেনসরফ্লো আপনাকে অবহেলিত বলে জানিয়েছে)।

পাইপ স্ক্রিপ্ট তৈরি করুন: 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

পাইপ প্যাকেজ তৈরি করুন: bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

আপনি সবে নির্মিত টেনসরফ্লো পাইপ প্যাকেজ ইনস্টল করুন: sudo pip install /tmp/tensorflow_pkg/tensorflow-1.2.1-cp27-cp27mu-linux_x86_64.whl

এখন পরের বার আপনি টেনসরফ্লো শুরু করলে এটি আর অনুপস্থিত নির্দেশাবলী সম্পর্কে অভিযোগ করবে না।


4
ঠিক সঙ্গে বিল্ডিং -c opt --copt=-march=nativeকমপক্ষে হিসাবে ভাল হওয়া উচিত --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.1 --copt=-msse4.2। (উভয়ই সতর্কবার্তাটি নিঃশব্দ করবে, তবে -march=nativeআপনি যে সিস্টেমটি তৈরি করছেন তাতে সিপিইউর জন্য বিশেষত টিউন করে আরও দ্রুত কোড তৈরি করতে পারে)। এছাড়াও নোট করুন যে --copt=-mavx2 --copt=-mfmaপূর্ববর্তী সমস্ত AVX এবং SSE বিকল্পগুলিকে বোঝায়, সুতরাং বিকল্পগুলির এই দীর্ঘ স্ট্রিংটি স্পষ্টভাবে এমন কেউ লিখেছিলেন যা জিসিসি বিকল্পগুলি বুঝতে পারে না।
পিটার কর্ডস

1
@ পিটারকর্ডস, এই ইস্যুটি দেখুন ( গিথুব / স্পেনস্লোফ্লো / স্টেনফ্লো / স্পিস / ues৪৪৯ ), এমনকি বেজেল রক্ষণাবেক্ষণকারীরাও কেন মার্চ = নেটিভ প্রত্যাশা অনুযায়ী কাজ করেন নি বলে দৃ .় ছিলেন না। আপনার যেমন মনে হয় "জিসিসি বিকল্পগুলি বোঝে" তবে আপনি সম্ভবত এটি সমাধান করতে তাদের সহায়তা করতে পারেন, কারণ তারা "সম্প্রদায় সমর্থন" হিসাবে প্রয়োজন হিসাবে বিষয়টি চিহ্নিত করেছে।
এডুয়ার্ডো

ধন্যবাদ, আমি একবার দেখে নেব ... হুম, কিছু লোক বলছে যে --copt=-mavx2কাজ করে নি। যদি --copt=-mfma কাজ করে --copt=-march=nativeতবে কাজ করা উচিত, যদি না পার্স করা =সমস্যা হয়। জিসিসি / ক্ল্যাং / আইসিসি-র জন্য, আপনি অবশ্যই স্পষ্টভাবে বিল্ড স্ক্রিপ্টটি সংকলকটিতে স্থান দিতে চান -march=native। বিল্ড স্ক্রিপ্টগুলির মাধ্যমে সেটি ঘটানো কৌশল হয়ে ওঠে।
পিটার কর্ডেস

7

এটি সহজ পদ্ধতি। মাত্র একটি পদক্ষেপ।

এটি গতিতে উল্লেখযোগ্য প্রভাব ফেলে। আমার ক্ষেত্রে, প্রশিক্ষণের ধাপের জন্য নেওয়া সময়টি প্রায় অর্ধেক হয়ে যায়।

পড়ুন কাস্টম tensorflow এর তৈরী করে



@ শ্রীরাগর আপনার পদ্ধতিটি আমার সেন্সরফ্লো এবং কেরাসকে ডাউনগ্রেড করেছে।
কেপিএমজি

আপনার টেনসরফ্লো, পাইথন সংস্করণ এবং এইচডাব্লু অনুযায়ী সঠিক ফাইলটি ইনস্টল করেছেন তা নিশ্চিত করুন।
শ্রীরাগ এআর

@ শ্রীরঘার TensFlowসংস্করণটি 1.10.0 এবং ব্যবহার করে MacOS Sierra। ফাইলটি সন্ধানে আমাকে সহায়তা করুন।
কেপিএমজি

হুম .. আপনার সংস্করণগুলির সাথে সম্পর্কিত একটি খুঁজে পাচ্ছেন না। কারও কারও কাছে কাস্টম হুইল তৈরি করতে হবে। github.com/yaroslavvb/tensorflow-commune-wheels তাত্ক্ষণিক সমাধান টেনসরফ্লো ব্যবহার করা যেতে পারে 1.9.0
শ্রীরাগ এআর

5

আমি ম্যাকের জন্য একটি ছোট বাশ স্ক্রিপ্ট সংকলন করেছি (সহজেই লিনাক্সে পোর্ট করা যায়) সমস্ত সিপিইউ বৈশিষ্ট্য পুনরুদ্ধার করতে এবং সেগুলির কয়েকটি টিএফ তৈরির জন্য প্রয়োগ করতে। আমি টিএফ মাস্টারে থাকি এবং প্রায়শই (একমাসে দু'বার) ব্যবহার করি।

https://gist.github.com/venik/9ba962c8b301b0e21f99884cbd35082f


5

এসএসই 4.2 এবং এভিএক্সের সাথে টেনসরফ্লো সংকলন করতে আপনি সরাসরি ব্যবহার করতে পারেন

বেজেল বিল্ড --config = mkl --config = "opt" --copt = "- মার্চ = ব্রডওয়েল" --copt = "- O3" // টেনসরফ্লো / সরঞ্জাম / পিপ_প্যাকেজ: বিল্ড_পিপ_প্যাকেজ

সূত্র: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker/Dockerfile.devel-cpu-mkl


1
সম্প্রতি কিছু পরিবর্তন হয়েছে? সর্বশেষ আমি চেক --copt="-march=native"খাচ্ছিলাম =। (এবং বিটিডাব্লু, double ডাবল উক্তিগুলি কিছুই করে না; bazelআপনার কমান্ড লাইনটি দেখার আগে সেগুলি শেল দিয়ে সরিয়ে দেওয়া হবে ))
পিটার কর্ডেস

4

2.0 সামঞ্জস্যপূর্ণ সমাধান:

ব্যবহার Tensorflow 2.0 ইনস্টল করার টার্মিনাল (লিনাক্সের / MacOS এর) অথবা কমান্ড প্রম্পট (উইন্ডোজ) কমান্ড নিচে সম্পাদন Bazel :

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
এর কোন অংশটি নির্দিষ্ট করে -march=native, বা অন্যান্য জিসিসি / ঝনঝন বিকল্পগুলি? আমি এভিএক্স, এফএমএ বা এসএসই 4.2 এর কোনও উল্লেখ দেখতে পাচ্ছি না। (এবং বাজেল বা টেনসরফ্লোর বিল্ড স্ক্রিপ্টটি এখনও এমনভাবে ভেঙে গেছে যে কেবল -mavxকাজের মতো বিকল্পগুলি নয়, তাই না -march=native? যদি এই সমস্যাটির সত্যই এই প্রশ্নের উত্তরটির শীর্ষে
পিটার

tf সংস্করণ ২.১.০ সহ সিপিইউ সহায়তার জন্য, --config = opt বিকল্পটি আমার পক্ষে কার্যকর হয়নি, আমি এটি --config = v2 দিয়ে সমাধান করেছি। এছাড়াও এটি উল্লেখ করা ভাল যে এটি তৈরির জন্য সঠিক বাজেল সংস্করণটি 29.0।
টোলিক

2

উত্স থেকে টেনসরফ্লো তৈরি করার সময়, আপনি configureস্ক্রিপ্টটি চালাবেন । configureস্ক্রিপ্ট যে প্রশ্নগুলির একটি জিজ্ঞাসা করে তা হ'ল:

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

configureস্ক্রিপ্ট পতাকা (গুলি) আপনার Bazel কমান্ড যে TensorFlow পিপ প্যাকেজ তৈরী করে নির্দিষ্ট সংযুক্ত হবে। বিস্তৃতভাবে বলতে গেলে, আপনি এই প্রম্পটে দুটি পদ্ধতির একটিতে প্রতিক্রিয়া জানাতে পারেন:

  • আপনি যদি টেনসরফ্লো চালাবেন সেই একই সিপিইউ টাইপের একই ধরণের টেনসরফ্লো তৈরি করছেন তবে আপনার ডিফল্টটি গ্রহণ করা উচিত (-march=native )। এই বিকল্পটি আপনার মেশিনের সিপিইউ প্রকারের জন্য উত্পন্ন কোডটি অনুকূলিত করবে।
  • যদি আপনি একটি সিপিইউ টাইপতে টেনসরফ্লো তৈরি করছেন তবে টেনসরফ্লোটি আলাদা সিপিইউ টাইপে চালাবেন, তবে জিসিসি ডকুমেন্টেশনে বর্ণিত আরও নির্দিষ্ট অপ্টিমাইজেশন পতাকা সরবরাহ করার বিষয়টি বিবেচনা করুন ।

পূর্ববর্তী বুলেটযুক্ত তালিকায় বর্ণিত টেনসরফ্লো কনফিগার করার পরে, আপনি --config=optযে কোনও বেজেল কমান্ডটি চালাচ্ছেন তার মধ্যে পতাকা যুক্ত করে আপনি কেবলমাত্র টার্গেট সিপিইউর জন্য সম্পূর্ণ অপ্টিমাইজড টেনসরফ্লো তৈরি করতে সক্ষম হবেন ।


-1

এই সতর্কতাগুলি গোপন করতে, আপনি আপনার আসল কোডের আগে এটি করতে পারেন।

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

5
নিঃশব্দে আপনার হার্ডওয়ারের চেয়ে ধীরগতিতে চালানো খারাপ ধারণা বলে মনে হচ্ছে।
পিটার কর্ডস

আমি সাধারণভাবে পিটার কর্ডসের সাথে একমত - তবে কখনও কখনও সতর্কবাণীগুলি আড়াল করতে এবং কাজটির দিকে মনোনিবেশ করা খুব ভাল (শৃঙ্খলাবদ্ধ, মনের মতো করে) nice
ওয়েস্টসাইডার 21

2
@ ওয়েস্টারসাইডার: হ্যাঁ, এটি কিছু ক্ষেত্রে কার্যকর হতে পারে, তবে এটির কোনও ভাল উত্তর নয় যতক্ষণ না এটি এর প্রভাবগুলি নির্দেশ করে: যদি আপনি পুনরায় সংশোধনের পরিবর্তে কেবল সতর্কতাগুলি আড়াল করেন তবে সত্যিকারের পারফরম্যান্স হারাতে হবে। (যদি আপনি ভারী উত্তোলনের জন্য একটি জিপিইউ ব্যবহার করেন তবে যদি এটি সিপিইউ বিকল্পগুলি সম্পর্কে সতর্ক হতে পারে তবে?)
পিটার কর্ডস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.