สร้าง LiteRT สำหรับกระดาน ARM

หน้านี้อธิบายวิธีสร้างไลบรารี LiteRT สำหรับคอมพิวเตอร์ที่ใช้ ARM

LiteRT รองรับระบบบิลด์ 2 ระบบ และฟีเจอร์ที่รองรับจากระบบบิลด์แต่ละระบบ จะไม่เหมือนกัน ดูตารางต่อไปนี้เพื่อเลือกระบบบิลด์ที่เหมาะสม

ฟีเจอร์ Bazel CMake
ชุดเครื่องมือที่กำหนดไว้ล่วงหน้า armhf, aarch64 armel, armhf, aarch64
ทูลเชนที่กำหนดเอง ใช้งานยากขึ้น ใช้งานง่าย
เลือกการดำเนินการ TF รองรับ ไม่รองรับ [not_supported]
ตัวแทน GPU พร้อมให้บริการบน Android เท่านั้น แพลตฟอร์มที่รองรับ OpenCL
XNNPack รองรับ รองรับ
Python Wheel รองรับ รองรับ
C API รองรับ รองรับ
C++ API รองรับโปรเจ็กต์ Bazel รองรับโปรเจ็กต์ CMake

การคอมไพล์แบบข้ามระบบสำหรับ ARM ด้วย CMake

หากมีโปรเจ็กต์ CMake หรือต้องการใช้ Toolchain ที่กำหนดเอง คุณควรใช้ CMake สำหรับการคอมไพล์ข้าม โดยมีหน้าการคอมไพล์ข้าม LiteRT ด้วย CMake แยกต่างหากสำหรับเรื่องนี้

การคอมไพล์แบบข้ามระบบสำหรับ ARM ด้วย Bazel

หากคุณมีโปรเจ็กต์ Bazel หรือต้องการใช้ TF Ops คุณควรใช้ระบบบิลด์ Bazel คุณจะใช้ชุดเครื่องมือ ARM GCC 8.3 ที่ผสานรวมกับ Bazel เพื่อสร้างไลบรารีที่ใช้ร่วมกันของ ARM32/64

สถาปัตยกรรมเป้าหมาย การกำหนดค่า Bazel อุปกรณ์ที่ใช้ร่วมกันได้
armhf (ARM32) --config=elinux_armhf RPI3, RPI4 ที่มี 32 บิต ระบบปฏิบัติการ Raspberry Pi
AArch64 (ARM64) --config=elinux_aarch64 Coral, RPI4 ที่มี Ubuntu 64 บิต

เราได้ทดสอบวิธีการต่อไปนี้ในคอมพิวเตอร์ Ubuntu 16.04.3 64 บิต (AMD64) และอิมเมจ Docker สำหรับการพัฒนา TensorFlow tensorflow/tensorflow:devel

หากต้องการคอมไพล์ข้าม LiteRT ด้วย Bazel ให้ทำตามขั้นตอนต่อไปนี้

ขั้นตอนที่ 1 ติดตั้ง Bazel

Bazel เป็นระบบบิลด์หลักสำหรับ TensorFlow ติดตั้งระบบบิลด์ Bazel เวอร์ชันล่าสุด

ขั้นตอนที่ 2 โคลนที่เก็บ TensorFlow

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

ขั้นตอนที่ 3 สร้างไบนารี ARM

ไลบรารี C
bazel build --config=elinux_aarch64 -c opt //tensorflow/lite/c:libtensorflowlite_c.so

คุณจะดูไลบรารีที่ใช้ร่วมกันได้ในส่วนต่อไปนี้ bazel-bin/tensorflow/lite/c/libtensorflowlite_c.so

ดูรายละเอียดได้ในหน้า LiteRT C API

ไลบรารี C++
bazel build --config=elinux_aarch64 -c opt //tensorflow/lite:libtensorflowlite.so

คุณจะดูไลบรารีที่ใช้ร่วมกันได้ในส่วนต่อไปนี้ bazel-bin/tensorflow/lite/libtensorflowlite.so

ปัจจุบันยังไม่มีวิธีที่ตรงไปตรงมาในการแยกไฟล์ส่วนหัวทั้งหมดที่จำเป็น ดังนั้นคุณต้องรวมไฟล์ส่วนหัวทั้งหมดใน tensorflow/lite/ จากที่เก็บ TensorFlow นอกจากนี้ คุณจะต้องมีไฟล์ส่วนหัวจาก FlatBuffers และ Abseil

ฯลฯ

นอกจากนี้ คุณยังสร้างเป้าหมาย Bazel อื่นๆ ด้วย Toolchain ได้ด้วย เป้าหมายที่มีประโยชน์บางส่วนมีดังนี้

  • //tensorflow/lite/tools/benchmark:benchmark_model
  • //tensorflow/lite/examples/label_image:label_image