উৎস থেকে তৈরি করুন

এই ডকুমেন্টে XLA কম্পোনেন্ট তৈরি করার পদ্ধতি বর্ণনা করা হয়েছে।

আপনি যদি XLA রিপোজিটরি ক্লোন না করে থাকেন বা Bazel ইনস্টল না করে থাকেন, তাহলে XLA ডেভেলপার গাইডের শুরুর দিকের অংশগুলো দেখে নিন।

লিনাক্স

কনফিগার করুন

রিপোজিটরির রুট ডিরেক্টরিতে থাকা .bazelrc ফাইলের মাধ্যমে XLA বিল্ডগুলো কনফিগার করা হয়। সাধারণ সেটিংস সমন্বয় করার জন্য ./configure.py স্ক্রিপ্টটি ব্যবহার করা যেতে পারে।

কনফিগারেশন পরিবর্তন করার প্রয়োজন হলে, রিপোজিটরির রুট ডিরেক্টরি থেকে ./configure.py স্ক্রিপ্টটি চালান। এই স্ক্রিপ্টটিতে XLA ডিপেন্ডেন্সিগুলোর অবস্থান এবং অতিরিক্ত বিল্ড কনফিগারেশন অপশনগুলোর (যেমন, কম্পাইলার ফ্ল্যাগ) জন্য ফ্ল্যাগ রয়েছে। বিস্তারিত জানতে স্যাম্পল সেশন সেকশনটি দেখুন।

সিপিইউ সমর্থন

XLA বিল্ড এবং টেস্ট করার জন্য আমরা একটি উপযুক্ত ডকার ইমেজ ব্যবহারের পরামর্শ দিই - যেমন ml-build , যা GitHub-এ XLA-এর CI ওয়ার্কফ্লোতেও ব্যবহৃত হয়। ml-build ইমেজটিতে Clang 18 আগে থেকেই ইনস্টল করা থাকে।

docker run -itd --rm \
--name xla \
-w /xla \
-v $PWD:/xla \
us-docker.pkg.dev/ml-oss-artifacts-published/ml-public-container/ml-build:latest \
bash

একটি ডকার কন্টেইনার ব্যবহার করে, আপনি নিম্নলিখিত কমান্ডগুলি চালিয়ে সিপিইউ সমর্থন সহ XLA বিল্ড করতে পারেন:

docker exec xla ./configure.py --backend=CPU

docker exec xla bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...

আপনি যদি ডকার ব্যবহার না করে সিপিইউ সাপোর্টসহ এক্সএলএ টার্গেট বিল্ড করতে চান, তাহলে আপনাকে ক্ল্যাং ইনস্টল করতে হবে। সিআই-তে বর্তমানে এক্সএলএ ক্ল্যাং ১৮ দিয়ে বিল্ড করা হয়, তবে আগের সংস্করণগুলোও কাজ করার কথা।

টার্গেটগুলো কনফিগার ও বিল্ড করতে, নিম্নলিখিত কমান্ডগুলো চালান:

./configure.py --backend=CPU

bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...

GPU সমর্থন

GPU সাপোর্ট সহ XLA বিল্ড করার জন্য আমরা উপরে উল্লিখিত একই ডকার কন্টেইনারটি ব্যবহার করার পরামর্শ দিই।

সমস্ত জিপিইউ-তে অ্যাক্সেস সহ ডকার কন্টেইনার চালু করতে, নিম্নলিখিত কমান্ডটি চালান:

docker run -itd --rm \
  --gpus all \
  --name xla_gpu \
  -w /xla \
  -v $PWD:/xla \
  us-docker.pkg.dev/ml-oss-artifacts-published/ml-public-container/ml-build:latest \
  bash

GPU সাপোর্ট সহ XLA বিল্ড করতে, নিম্নলিখিত কমান্ডগুলো চালান:

docker exec xla_gpu ./configure.py --backend=CUDA

docker exec xla_gpu bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...
  • ডকার কন্টেইনার চালু করার সময় --gpus all ফ্ল্যাগটি ব্যবহার করবেন না
  • CUDA কম্পিউট ক্যাপাবিলিটি ম্যানুয়ালি নির্দিষ্ট করুন, উদাহরণস্বরূপ:
docker exec xla_gpu ./configure.py --backend=CUDA \
  --cuda_compute_capabilities="9.0"

TensorFlow-এর GPU ডকার ইমেজ সম্পর্কে আরও বিস্তারিত জানতে আপনি এই ডকুমেন্টটি দেখতে পারেন।

আপনি ডকার ছাড়াও জিপিইউ সাপোর্ট সহ এক্সএলএ টার্গেট তৈরি করতে পারেন। নিম্নলিখিত কমান্ডগুলি ব্যবহার করে টার্গেট কনফিগার এবং বিল্ড করুন:

./configure.py --backend=CUDA

bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...

হারমেটিক CUDA সম্পর্কে আরও বিস্তারিত জানতে আপনি এই নথিটি দেখতে পারেন।

JAX CI/রিলিজ কন্টেইনার ব্যবহার করে CUDA/cuDNN সাপোর্ট সহ XLA বিল্ড করুন

XLA হলো JAX-এর অভ্যন্তরীণভাবে ব্যবহৃত একটি কম্পাইলার। JAX, PyPI হুইল-এর মাধ্যমে বিতরণ করা হয়। JAX কন্টিনিউয়াস ইন্টিগ্রেশন ডকুমেন্টেশনে ব্যাখ্যা করা হয়েছে কীভাবে tensorflow/ml-build:latest ডকার কন্টেইনারটি ব্যবহার করে JAX হুইল তৈরি করতে হয়।

আমরা এই নির্দেশাবলীকে JAX কন্টেইনারের ভিতরেও XLA টার্গেট তৈরি করার জন্য প্রসারিত করতে পারি। এটি নিশ্চিত করে যে XLA টার্গেটগুলির বিল্ড কনফিগারেশন JAX/XLA বিল্ড কনফিগারেশনের সাথে সামঞ্জস্যপূর্ণ, যা তখন কাজে আসতে পারে যখন আমরা মূলত JAX-এ তৈরি করা XLA টুল ব্যবহার করে ওয়ার্কলোডের ফলাফল পুনরুৎপাদন করতে চাই।

JAX CI কন্টেইনারে XLA টার্গেট তৈরি করুন

  1. JAX রিপোজিটরিটি ক্লোন করুন এবং 'jax' ডিরেক্টরিতে যান।
git clone https://github.com/jax-ml/jax.git

cd jax
  1. নিম্নলিখিত কমান্ডটি চালিয়ে JAX CI/Release ডকার কন্টেইনারটি চালু করুন:
./ci/utilities/run_docker_container.sh

এটি 'jax' নামের একটি ডকার কন্টেইনার চালু করবে।

  1. নিম্নলিখিত কমান্ড ব্যবহার করে কন্টেইনারের ভিতরে jax-cuda-plugin টার্গেটটি বিল্ড করুন:
docker exec jax ./ci/build_artifacts.sh jax-cuda-plugin

এটি .jax_configure.bazelrc ফাইলটি তৈরি করবে, যেখানে CUDA/cuDNN সাপোর্ট সহ প্রয়োজনীয় বিল্ড কনফিগারেশন থাকবে।

  1. কন্টেইনারের ভিতরে একটি ইন্টারেক্টিভ শেল অ্যাক্সেস করুন:
docker exec -ti jax /bin/bash

আপনি এখন কন্টেইনারের মধ্যে /jax ডিরেক্টরিতে থাকবেন।

  1. নিম্নলিখিত কমান্ড ব্যবহার করে XLA টার্গেটটি বিল্ড করুন, যেমন:
/usr/local/bin/bazel build \
  --config=cuda_libraries_from_stubs \
  --verbose_failures=true \
  @xla//xla/tools/multihost_hlo_runner:hlo_runner_main

ঐচ্ছিকভাবে, আপনি HERMETIC এনভায়রনমেন্টগুলো ওভাররাইট করতে পারেন, যেমন:

--repo_env=HERMETIC_CUDA_COMPUTE_CAPABILITIES="sm_90"
  1. প্রয়োজনে হোস্ট OS থেকে অ্যাক্সেস করার জন্য, প্রাপ্ত আর্টিফ্যাক্টগুলো /jax/dist এ কপি করুন।
cp bazel-bin/external/xla/xla/tools/multihost_hlo_runner/hlo_runner_main \
  ./dist/
  1. ইন্টারেক্টিভ শেল থেকে প্রস্থান করুন:
exit

উইন্ডোজ

উইন্ডোজে সরাসরি XLA বিল্ড করা একটি সিপিইউ-নির্ভর প্রক্রিয়া, কারণ উইন্ডোজে CUDA সরাসরি সমর্থিত নয়; CUDA সমর্থনের প্রয়োজন হলে আপনাকে অবশ্যই WSL2 ব্যবহার করতে হবে। এর জন্য নির্দিষ্ট কিছু পরিবেশগত কনফিগারেশনও প্রয়োজন, যার মধ্যে রয়েছে একটি ব্যাশ শেল, ক্ল্যাং কম্পাইলার এবং ভিজ্যুয়াল স্টুডিও।

পূর্বশর্ত

  1. ভিজ্যুয়াল স্টুডিও: সি++ টুলচেইন সেট আপ করার জন্য (যা প্রয়োজনীয় সিস্টেম হেডার এবং লাইব্রেরি সরবরাহ করে) আপনাকে অবশ্যই ভিজ্যুয়াল স্টুডিও ২০১৯ ভার্সন ১৬.৫ বা তার নতুন সংস্করণ ইনস্টল করতে হবে।
  2. ব্যাশ পরিবেশ: উইন্ডোজে XLA বিল্ড করার জন্য আপনাকে অবশ্যই একটি ব্যাশ শেল (যেমন MSYS2 বা Git Bash) ব্যবহার করতে হবে।
  3. ক্ল্যাং কম্পাইলার: XLA উইন্ডোজ বিল্ডগুলো স্ট্যান্ডার্ড MSVC কম্পাইলারের পরিবর্তে clang-cl ব্যবহার করে। LLVM/Clang ইনস্টল করা আছে কিনা তা নিশ্চিত করুন।
  4. পাইথন: পাইথন ৩ অবশ্যই ইনস্টল করা থাকতে হবে এবং আপনার সিস্টেমের PATH এ অন্তর্ভুক্ত থাকতে হবে।
  5. ডেভেলপার মোড: আপনাকে অবশ্যই উইন্ডোজে ডেভেলপার মোড চালু করতে হবে অথবা আপনার ব্যাশ শেলটি অ্যাডমিনিস্ট্রেটর হিসেবে চালাতে হবে। এটি প্রয়োজন, কারণ বিল্ড প্রক্রিয়ার সময় বেজেল রানফাইল ট্রি-এর জন্য সিমলিঙ্ক তৈরির উপর নির্ভর করে।

উৎস থেকে নির্মাণ

উইন্ডোজে XLA-এর সিপিইউ ব্যাকএন্ড কম্পাইল করতে, আপনার ব্যাশ টার্মিনাল থেকে নিম্নলিখিত কমান্ডটি চালান। আমরা clang-cl টুলচেইন স্বয়ংক্রিয়ভাবে সেট আপ করার জন্য xla_windows_x86_cpu_2022 কনফিগটি ব্যবহার করি।

উল্লেখ্য যে, উইন্ডোজ সিপিইউ বিল্ড থেকে কিছু নির্দিষ্ট টার্গেট এবং ট্যাগ অবশ্যই স্পষ্টভাবে বাদ দিতে হবে, যেমন জিপিইউ টার্গেট এবং উইন্ডোজে এখনও সমর্থিত নয় এমন ফিচারসমূহ:

# Note: Ensure your PATH includes Python and Bazel before running this
bazel build \
  --config=xla_windows_x86_cpu_2022 \
  --keep_going \
  --build_tag_filters=-no_oss,-oss_excluded,-gpu,-no_windows,-windows_excluded \
  -- //xla/... -//xla/hlo/experimental/... -//xla/python_api/... -//xla/python/...