หน้านี้อธิบายวิธีสร้างไลบรารี 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