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

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

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

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

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

หากคุณมีโปรเจ็กต์ CMake หรือหากต้องการใช้ Toolchain ที่กำหนดเอง ให้ใช้ CMake ในการคอมไพล์แบบข้ามระบบให้ดีขึ้น มีตัวเลือกแยก การคอมไพล์แบบข้ามแพลตฟอร์มด้วย 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 OS
AArch64 (ARM64) --config=elinux_aarch64 Coral, RPI4 พร้อม Ubuntu 64 ดอกสว่าน

คำแนะนำต่อไปนี้ได้รับการทดสอบใน Ubuntu 16.04.3 PC แบบ 64 บิต (AMD64) และอิมเมจ Docker ของ TensorFlow tensorflow/tensorflow:devel.

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

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

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

ขั้นตอนที่ 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 และ การปีนป่าย

ข้อมูลอื่นๆ

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

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