TVM من المبتدئين إلى الإتقان | تثبيت TVM (الجزء 2)

المحتويات في لمحة:هناك ثلاث طرق لتثبيت TVM: التثبيت من الكود المصدر، والتثبيت باستخدام صورة Docker، والتثبيت باستخدام NNPACK Contrib. تشرح هذه المقالة كيفية التثبيت عبر صورة Docker وNNPACK Contrib.
الكلمات المفتاحية:برنامج تعليمي أساسيات TVM Docker
تم نشر هذه المقالة لأول مرة على الحساب الرسمي لـ WeChat: HyperAI
مرحبًا بكم مرة أخرى في وثائق TVM 101. ستواصل هذه السلسلة التدريس اليومي لـ TVM.
العدد السابق الجزء الأول لقد قدمنا كيفية تثبيت TVM من الكود المصدر. سيستمر هذا العدد مع الاستعدادات قبل تعلم TVM.يشرح كيفية تثبيت TVM عبر صورة Docker وNNPACK Contrib.
تركيب TVM تثبيت صورة Docker
يمكن للمطورين استخدام نصوص أدوات Docker لبناء بيئة تطوير. يساعد هذا أيضًا في تشغيل العروض التوضيحية والبرامج التعليمية الخاصة بـ TVM.
يتطلب Docker
https://docs.docker.com/engine/installation
إذا كنت تستخدم CUDA فستحتاج إلى nvidia-docker.
https://github.com/NVIDIA/nvidia-docker
احصل على توزيع مصدر TVM أو استنسخ مستودع GitHub للحصول على البرامج النصية المساعدة:
git clone --recursive https://github.com/apache/tvm tvm
استخدم الأمر التالي لبدء تشغيل صورة Docker:
/path/to/tvm/docker/bash.sh <image-name>
بعد اكتمال البناء المحلي، يمكن أن يكون اسم الصورة هنا اسم صورة Docker محلية، على سبيل المثال:tvm.ci_cpu .
يتيح لك البرنامج النصي المساعد هذا:
- قم بتثبيت الدليل الحالي على /workspace
- قم بتبديل المستخدم إلى المستخدم الذي يستدعي bash.sh (حتى تتمكن من القراءة/الكتابة إلى نظام المضيف)
- استخدم شبكة المضيف على Linux. نظرًا لعدم دعم محركات أقراص الشبكة المضيفة، استخدم الشبكات الجسرية على macOS وقم بعرض المنفذ 8888 لاستخدام Jupyter Notebook.
ابدأ تشغيل Jupyter Notebook عن طريق الكتابة:
jupyter notebook
إذا رأيت خطأً عند تشغيل Jupyter Notebook على نظام macOS خطأ OSError: [Errno 99] لا يمكن تعيين العنوان المطلوبيمكنك تغيير عنوان IP المرتبط عن طريق:
jupyter notebook --ip=0.0.0.0
لاحظ أنه على نظام التشغيل macOS، نظرًا لأننا نستخدم الشبكات الجسرية، فسيتم الإبلاغ عن Jupyter Notebook في نافذة مشابهة لـ http://{container_hostname}:8888/?token=… تشغيل على عنوان URL الخاص بـ . عند اللصق في المتصفح، تحتاج إلى اسم مضيف الحاوية استبدل بـ المضيف المحلي .
كود مصدر Docker
عرض كود مصدر Docker: قم ببناء صورة Docker الخاصة بك.
https://github.com/apache/tvm/tree/main/docker
قم بتشغيل الأمر التالي لبناء صورة Docker:
/path/to/tvm/docker/build.sh <image-name>
يمكنك أيضًا استخدام صور غير رسمية تم إنشاؤها مسبقًا بواسطة جهات خارجية. ملحوظة: هذه الصور مخصصة للاختبار وليست إصدارات ASF.
https://hub.docker.com/r/tlcpack
تثبيت TVM: تثبيت NNPACK Contrib
NNPACK عبارة عن حزمة تسريع لعمليات حسابية الشبكة العصبية التي يمكن تشغيلها على وحدات المعالجة المركزية ذات معماريات x86-64 أو ARMv7 أو ARM64.باستخدام NNPACK، يمكن للمكتبات عالية المستوى مثل MXNet تسريع التنفيذ على أجهزة الكمبيوتر ذات وحدة المعالجة المركزية متعددة النواة، بما في ذلك أجهزة الكمبيوتر المحمولة والأجهزة المحمولة.
نظرًا لأن TVM يحتوي بالفعل على جدولة مضبوطة بشكل أصلي، يتم استخدام NNPACK بشكل أساسي للمرجع والمقارنة. بالنسبة للاستخدام العام، يعد تنفيذ TVM المضبوط بشكل أصلي أفضل.
يدعم TVM NNPACK للانتشار الأمامي في الطبقات التلافيفية، وطبقات التجميع القصوى، والطبقات المتصلة بالكامل (الاستدلال فقط).في هذه الوثيقة، نقدم نظرة عامة عالية المستوى حول كيفية استخدام NNPACK مع TVM.
حالة
يستخدم التنفيذ الأساسي لـ NNPACK مجموعة متنوعة من طرق التسريع، بما في ذلك fft وwinograd.تعمل هذه الخوارزميات بشكل أفضل مع أحجام دفعات محددة، وأحجام نواة، وإعدادات خطوة معينة أكثر من غيرها، لذلك قد لا تدعم NNPACK جميع الطبقات التلافيفية، أو التجميع الأقصى، أو المتصلة بالكامل اعتمادًا على السياق.
يتم دعم NNPACK فقط على Linux وOS X، وليس على Windows في الوقت الحالي.
بناء/تثبيت NNPACK
إذا كان النموذج المدرب يلبي بعض الشروط لاستخدام NNPACK، فيمكنك إنشاء TVM يدعم NNPACK.
اتبع الخطوات البسيطة التالية: قم ببناء مكتبة NNPACK المشتركة باستخدام الأمر التالي. سيقوم TVM بربط NNPACK بشكل ديناميكي.
ملاحظة: تم اختبار تعليمات تثبيت NNPACK التالية على Ubuntu 16.04.
بناء النينجا
يتطلب NNPACK إصدارًا حديثًا من Ninja. لذلك نحن بحاجة إلى تثبيت النينجا من المصدر.
git clone git://github.com/ninja-build/ninja.git
cd ninja
./configure.py --bootstrap
قم بتعيين متغير البيئة PATH لإخبار bash بمكان العثور على ملف ninja القابل للتنفيذ. على سبيل المثال، لنفترض أننا استنسخنا النينجا على دليلنا الرئيسي ~. ثم يمكننا إضافة السطر التالي في ~/.bashrc .
export PATH="${PATH}:~/ninja"
بناء NNPACK
قم بتنزيل الإصدار الجديد من NNPACK بشكل منفصل Peach والتبعيات الأخرى
https://github.com/Maratyszcza/PeachPy
ملاحظة: على الأقل في نظام التشغيل OS X، سيؤدي تشغيل ninja install أدناه إلى استبدال مكتبة googletest المثبتة في /usr/local/lib. إذا قمت ببناء googletest مرة أخرى لاستبدال نسختك من nnpack، فتأكد من تمرير -DBUILD_SHARED_LIBS=ON إلى cmake.
git clone --recursive https://github.com/Maratyszcza/NNPACK.git
cd NNPACK
# 在 CFLAG 和 CXXFLAG 中添加 PIC 选项以构建 NNPACK 共享库
sed -i "s|gnu99|gnu99 -fPIC|g" CMakeLists.txt
sed -i "s|gnu++11|gnu++11 -fPIC|g" CMakeLists.txt
mkdir build
cd build
# 生成 ninja 构建规则并在配置中添加共享库
cmake -G Ninja -D BUILD_SHARED_LIBS=ON ..
ninja
sudo ninja install
# 在你的 ldconfig 中添加 NNPACK 的 lib 文件夹
echo "/usr/local/lib" > /etc/ld.so.conf.d/nnpack.conf
sudo ldconfig
بناء TVM مع دعم NNPACK
git clone --recursive https://github.com/apache/tvm tvm
* يخرج config.cmake الإعدادات المتوسطة مجموعة (USE_NNPACK ON) .
* سوف مسار NNPACK_PATH تم ضبطه على $(مسار تثبيت حزمة NNPACK الخاصة بك) بعد التكوين، استخدم make لبناء TVM
make
قم بتسجيل الدخول إلى tvm.hyper.ai لعرض المستند الأصلي. ستواصل Hyper AI تحديث البرنامج التعليمي الصيني TVM في المستقبل، لذا ترقبوا ذلك~
-- زيادة--