HyperAI

TVM من المبتدئ إلى الخبير | تثبيت TVM (الجزء 1)

特色图像

نظرة عامة على المحتوى: هناك ثلاث طرق لتثبيت TVM: التثبيت من الكود المصدر، والتثبيت باستخدام صورة Docker، والتثبيت باستخدام NNPACK Contrib. تسلط هذه المقالة الضوء على كيفية تثبيت TVM عبر الكود المصدر.

الكلمات الرئيسية: تثبيت كود المصدر لبدء التشغيل السريع لبرنامج TVM

في المقالات السابقة تم إطلاق موقع TVM الصيني رسميًا! الكتاب المرجعي الأكثر شمولاً حول نشر نموذج التعلم الآلي موجود هنافي هذه المقالة، قدمنا الدور المهم لـ TVM وكيفية استخدام وثائق TVM الصينية لبدء استكشاف مُجمِّعي التعلم الآلي.

بعد ذلك، سنقوم بتشكيل سلسلة من الدروس التعليمية. تشرح هذه المقالة بالتفصيل مسار تعلم TVM من الدخول إلى الإتقان، على أمل أن يصبح كل مطور مهندسًا ممتازًا لمجمع التعلم الآلي!

في هذه المقالة،سنقدم لك الخطوة الرئيسية في "وضع الأساس" - تثبيت TVM.

يمكن تثبيت TVM بثلاث طرق:

  1. التثبيت من المصدر
  2. صور Docker
  3. تثبيت مساهمة NNPACK

باعتبارها دليل التثبيت (الجزء 1)، ستشرح هذه المقالة بالتفصيل أفضل الممارسات للتثبيت من الكود المصدر. وتكوينه وتجميعه بأقصى قدر من المرونة.

تعليمات خطوة بخطوة حول كيفية تثبيت TVM من المصدر

تتكون عملية إنشاء وتثبيت حزم TVM من 0 إلى 1 على أنظمة مختلفة من خطوتين:

  1. إنشاء مكتبة مشتركة من كود C++
  • لينكس: libtvm.so
  • macOS: libtvm.dylib
  • ويندوز: libtvm.dll

2. الإعداد لحزم لغات البرمجة (مثل حزم Python)

لتنزيل كود مصدر TVM، يرجى زيارة:https://tvm.apache.org/download

المطورون: احصل على الكود المصدر من GitHub

عند استنساخ مستودع المصدر من GitHub، استخدم الخيار --recursive لاستنساخ الوحدات الفرعية.

git clone --recursive https://github.com/apache/tvm tvm

يمكن لمستخدمي Windows فتح غلاف Git وإدخال الأمر التالي:

git submodule init
git submodule update

بناء مكتبة مشتركة

هدفنا هو بناء المكتبة المشتركة:

  • على لينكس
    المكتبات المستهدفة هي libtvm.so و libtvm_runtime.so
  • على نظام MacOS
    المكتبات المستهدفة هي libtvm.dylib و libtvm_runtime.dylib
  • على نظام التشغيل Windows
    المكتبات المستهدفة هي libtvm.dll و libtvm_runtime.dll

من الممكن أيضًا إنشاء مكتبة وقت التشغيل فقط:
https://tvm.hyper.ai/docs/how_to/deploy/

تي في إم الحد الأدنى من المتطلبات لبناء المكتبة هي:

  • أحدث مُجمِّع C++ يدعم C++17
    GCC 7.1
    كلانج 5.0
    أبل كلانج 9.3
    فيجوال ستوديو 2019 (الإصدار 16.7)
  • CMake 3.10 أو أعلى
  • من المستحسن إنشاء مكتبة TVM مع LLVM لتمكين كافة الميزات.
  • لاستخدام CUDA، يرجى التأكد من أن إصدار مجموعة أدوات CUDA هو 8.0 على الأقل.
    ملاحظة: بعد الترقية من إصدار CUDA القديم، يرجى حذف الإصدار القديم وإعادة التشغيل.
  • يمكن لنظام macOS تثبيت Homebrew لتسهيل تثبيت وإدارة التبعيات.
  • Python: الإصدارات 3.7.X+ و 3.8.X+ الموصى بها. الإصدار 3.9.X+ غير مدعوم حتى الآن.

لتثبيت هذه التبعيات على أنظمة تشغيل Linux مثل Ubuntu/Debian، قم بتنفيذ الأمر التالي في المحطة الطرفية:

sudo apt-get update
sudo apt-get install -y python3 python3-dev python3-setuptools gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev

استخدم Homebrew لتثبيت التبعيات المطلوبة لنظام macOS مع شرائح Intel أو M1. اتبع خطوات التثبيت المحددة بواسطة Homebrew للتأكد من تثبيت هذه التبعيات وتكوينها بشكل صحيح:

brew install gcc git cmake
brew install llvm
brew install python@3.8

استخدم cmake لبناء المكتبة

يمكن تعديل تكوين TVM عن طريق تحرير config.cmake و/أو تمرير علامات cmake على سطر الأوامر:

  • إذا لم يتم تثبيت cmake، يمكنك زيارة الموقع الرسمي التالي لتنزيل الإصدار الأحدث https://cmake.org/download/
  • قم بإنشاء دليل البناء ونسخ cmake/config.cmake إليه
mkdir build
cp cmake/config.cmake build
  • يحرر build/config.cmake خيارات التجميع المخصصة
  • بالنسبة لبعض إصدارات Xcode لنظام macOS، تحتاج إلى إضافة LDFLAGS -lc++abi، وذلك لتجنب أخطاء الارتباط
  • سوف set(USE_CUDA OFF) تغيير إلى set(USE_CUDA ON) لتفعيل الواجهة الخلفية CUDA. قم بنفس الشيء بالنسبة للبرامج الخلفية والمكتبات الأخرى التي تريد إنشاءها (OpenCL، RCOM، METAL، VULKAN...).
  • لتسهيل عملية التصحيح، تأكد من استخدام set(USE_GRAPH_EXECUTOR ON) و set(USE_PROFILER ON) تمكين منفذ الرسم البياني المضمن وقدرات التصحيح.
  • إذا كنت بحاجة إلى استخدام تصحيح أخطاء الأشعة تحت الحمراء، فيمكنك ضبط set(USE_RELAY_DEBUG ON)، وقم بتعيين متغير البيئة TVM_LOG_DEBUG.
  • يتطلب TVM وجود LLVM لأدوات توليد كود وحدة المعالجة المركزية (Codegen). يوصى ببناء LLVM.
  • يتطلب البناء باستخدام LLVM إصدار LLVM 4.0 أو أعلى. لاحظ أن إصدار LLVM الافتراضي في apt قد يكون أقل من 4.0.
  • نظرًا لأن إنشاء LLVM من المصدر يستغرق وقتًا طويلاً، فمن المستحسن تنزيل إصدار جاهز من صفحة تنزيل LLVM.
    1. فك الضغط إلى موقع محدد وتعديله build/config.cmake لإضافة set(USE_LLVM /path/to/your/llvm/bin/llvm-config)
    2. أو تعيين مباشرة set(USE_LLVM ON)استخدم CMake للبحث عن إصدار LLVM المتاح.
  • يمكنك أيضًا استخدام إصدارات LLVM Ubuntu اليومية
    لاحظ أن apt-package سوف يضيف رقم الإصدار إلى llvm-config. على سبيل المثال، إذا قمت بتثبيت إصدار LLVM 10، فقم بتعيين set(USE_LLVM llvm-config-10)
  • إعدادات PyTorch الموصى بها للمستخدم set(USE_LLVM "/path/to/llvm-config --link-static") و set(HIDE_PRIVATE_SYMBOLS ON) يتم ذلك لتجنب تعارضات الرموز المحتملة بين الإصدارات المختلفة من LLVM التي يستخدمها TVM وPyTorch.
  • في بعض المنصات المدعومة، يمكن أن يساعد غلاف مُجمِّع Ccache في تقليل وقت بناء TVM. لتمكين CCache في بناء TVM:
    1. وضع التنكر في Ccache. يتم تمكينه عادةً أثناء عملية تثبيت Ccache. للسماح لـ TVM باستخدام Ccache في masquerade، ما عليك سوى تحديد مسار مُجمِّع C/C++ المناسب عند تكوين نظام بناء TVM. على سبيل المثال:cmake -DCMAKE_CXX_COMPILER=/usr/lib/ccache/c++ ...
    2. Ccache كبادئة لمترجم C++ الخاص بـ CMake. عند تكوين نظام بناء TVM، اضبط متغير CMake CMAKE_CXX_COMPILER_LAUNCHER على قيمة مناسبة. على سبيل المثال:cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ...
  • بناء TVM والمكتبات ذات الصلة:
cd build
cmake ..
make -j4

يمكنك استخدام النينجا لتسريع عملية البناء

cd build
cmake .. -G Ninja
ninja

يوجد أيضًا ملف Makefile في الدليل الجذر لـ TVM، والذي يمكنه إكمال عدة خطوات تلقائيًا: إنشاء دليل البناء وتغيير الافتراضي config.cmake انسخه إلى دليل البناء، ثم قم بتشغيل cmake، ثم قم بتشغيل make.

يمكن تعيين دليل البناء باستخدام متغيرات البيئة TVM_BUILD_PATH لتحديد. لو TVM_BUILD_PATH بدون إعداد، سوف يفترض Makefile أنه يجب استخدام دليل البناء في TVM. تعتمد على TVM_BUILD_PATH يمكن أن يكون المسار المحدد مسارًا مطلقًا أو مسارًا نسبيًا إلى دليل جذر TVM. لو TVM_BUILD_PATH إذا تم ضبطها على قائمة مسارات محددة بمسافة، فسيتم إنشاء جميع المسارات المدرجة.

إذا كنت تستخدم دليل بناء آخر، فيجب عليك تعيين متغير البيئة TVM_LIBRARY_PATH في وقت التشغيل للإشارة إلى الدليل المجمّع libtvm.so و libtvm_runtime.so موقع. إذا لم يتم التعيين، فسوف يبحث TVM عن المواقع المتعلقة بوحدة TVM Python. و TVM_BUILD_PATH على عكس ذلك، يجب أن يكون هذا المسار مطلقًا.

# 在 "build" 目录下构建
make

# 替代位置,"build_debug"
TVM_BUILD_PATH=build_debug make

# 同时构建 "build_release" 和 "build_debug"
TVM_BUILD_PATH="build_debug build_release" make

# 使用调试构建
TVM_LIBRARY_PATH=~/tvm/build_debug python3

إذا سارت الأمور على ما يرام، فيمكننا التحقق من تثبيت حزم Python.

البناء مع بيئة Conda

يمكن استخدام Conda للحصول على التبعيات الضرورية المطلوبة لتشغيل TVM. إذا لم يتم تثبيت Conda، يرجى الرجوع إلى دليل تثبيت Conda لتثبيت Miniconda أو Anaconda. قم بتشغيل الأمر التالي في بيئة Conda الخاصة بك:

# 用 yaml 指定的依赖创建 Conda 环境
conda env create --file conda/build-environment.yaml
# 激活所创建的环境
conda activate tvm-build

سيقوم الأمر أعلاه بتثبيت جميع تبعيات البناء الضرورية مثل CMake وLLVM. يمكنك بعد ذلك تشغيل عملية البناء القياسية من القسم السابق.

لاستخدام الثنائيات المترجمة خارج بيئة Conda، يمكنك تعيين LLVM إلى وضع الارتباط الثابت. set(USE_LLVM "llvm-config --link-static"). بهذه الطريقة، لن تعتمد المكتبة المُنشأة على مكتبات LLVM الديناميكية في بيئة Conda.

يوضح ما سبق كيفية استخدام Conda لتوفير التبعيات اللازمة لبناء libtvm. إذا كنت تستخدم Conda بالفعل كمدير للحزم وترغب في بناء TVM وتثبيته مباشرةً كحزمة Conda، فيمكنك اتباع الإرشادات أدناه:

conda build --output-folder=conda/pkg  conda/recipe
# 在启用 CUDA 的情况下运行 conda/build_cuda.sh 来构建
conda install tvm -c ./conda/pkg

البناء على ويندوز

يدعم TVM البناء باستخدام CMake عبر MSVC. يجب أن يكون لديك مُجمِّع Visual Studio. الإصدار الأدنى من VS هو Visual Studio Enterprise 2019

ملاحظة: للحصول على تفاصيل الاختبار الكاملة لـ GitHub Actions، تفضل بزيارة Windows 2019 Runner:

https://github.com/actions/virtual-environments/blob/main/images/win/Windows2019-Readme.md

يوصى رسميًا باستخدام بيئة Conda للبناء للحصول على التبعيات اللازمة وتفعيل بيئة tvm-build.

قم بتشغيل سطر الأوامر التالي:

mkdir build
cd build
cmake -A x64 -Thost=x64 ..
cd ..

يؤدي الأمر أعلاه إلى إنشاء ملفات الحل في دليل البناء. ثم قم بتشغيل:

cmake --build build --config Release -- /m

بناء دعم ROCm

حاليًا، يتم دعم ROCm فقط على Linux، لذا تتم كتابة جميع البرامج التعليمية باستخدام Linux كأساس.

  • قم بضبط set(USE_ROCM ON) وقم بضبط ROCM_PATH على المسار الصحيح.
  • يجب عليك تثبيت وقت تشغيل HIP من ROCm أولاً. تأكد من تثبيت ROCm على نظامك.
  • قم بتثبيت أحدث إصدار مستقر من LLVM (v6.0.1)، بالإضافة إلى LLD، وتأكد من توفر ld.lld من سطر الأوامر.

تثبيت حزمة بايثون

حزمة TVM

يقدم هذا القسم مقدمة حول كيفية استخدام البيئات الافتراضية ومديري الحزم مثل virtualenv أو conda لإدارة حزم Python والتبعيات.
تتواجد حزمة Python في tvm/python. هناك طريقتين للتثبيت:

  • الطريقة الأولى

تعتبر هذه الطريقة مناسبة للمطورين الذين قد يقومون بتعديل الكود.

قم بتعيين متغير البيئة PYTHONPATH لإخبار Python بمكان العثور على هذه المكتبة. على سبيل المثال، لنفترض أن لدينا /path/to/tvm تم استنساخ الدليل tvm، يمكننا ~/.bashrc أضف الكود التالي إلى: يسمح لك هذا بسحب الكود وإعادة بناء المشروع دون الحاجة إلى استدعاء الإعداد مرة أخرى، وستنعكس التغييرات على الفور.

export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
  • الطريقة الثانية

قم بتثبيت ارتباطات Python الخاصة بـ TVM عبر setup.py:

# 为当前用户安装 TVM 软件包
# 注意:如果你通过 homebrew 安装了 Python,那么在安装过程中就不需要 --user
#        它将被自动安装到你的用户目录下。
#        在这种情况下,提供 --user 标志可能会在安装时引发错误。
export MACOSX_DEPLOYMENT_TARGET=10.9  # 这是 mac 所需要的,以避免与 libstdc++ 的符号冲突
cd python; python setup.py install --user; cd ..

تبعيات بايثون

لاحظ أنه إذا كنت تريد التثبيت في بيئة محلية مُدارة، مثل virtualenv، إذن لا حاجة --user الشعار.

  • التبعيات الضرورية:
pip3 install --user numpy decorator attrs
  • استخدام RPC Tracker
pip3 install --user tornado
  • استخدام وحدة الضبط التلقائي
pip3 install --user tornado psutil xgboost cloudpickle

ملاحظة: على جهاز Mac مزود بشريحة M1، قم بتثبيت xgboost / scipy قد تواجه بعض المشاكل. يتطلب Scipy وxgboost تثبيت تبعيات إضافية مثل openblas. قم بتشغيل سطر الأوامر التالي لتثبيت scipy وxgboost بالإضافة إلى التبعيات والتكوينات المطلوبة:

brew install openblas gfortran

pip install pybind11 cython pythran

export OPENBLAS=/opt/homebrew/opt/openblas/lib/

pip install scipy --no-use-pep517

pip install xgboost

تثبيت مكتبة المساهمة

تثبيت NNPACK Contrib، العرض
https://tvm.hyper.ai/docs/install/nnpack

تمكين اختبارات C++

يمكن استخدام Google Test لتشغيل اختبارات C++ في TVM. الطريقة الأسهل لتثبيت Google Test هي تثبيته من المصدر:

git clone https://github.com/google/googletest
cd googletest
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make
sudo make install

بعد التثبيت الناجح، يمكنك استخدام ./tests/scripts/task_cpp_unittest.sh لبناء وإطلاق اختبارات C++، أو مباشرة مع make cpptest يبني.

هذا كل شيء في هذا البرنامج التعليمي – الجزء الأول من تثبيت TVM.في الجزء الثاني، سنستمر في شرح طريقتين أخريين لتثبيت TVM: تثبيت صورة Docker وتثبيت NNPACK Contrib.

مرحبا بالجميع لمواصلة الاهتمام tvm.hyper.ai، تعرف على أفضل التطورات في TVM الصينية!

-- زيادة--