
Neoml เป็นกรอบการเรียนรู้ของเครื่องแบบ end-to-end ที่ช่วยให้คุณสร้างฝึกอบรมและปรับใช้โมเดล ML เฟรมเวิร์กนี้ใช้โดยวิศวกร Abbyy สำหรับการมองเห็นคอมพิวเตอร์และงานการประมวลผลภาษาธรรมชาติรวมถึงการประมวลผลภาพล่วงหน้าการจำแนกการวิเคราะห์เค้าโครงเอกสาร OCR และการสกัดข้อมูลจากเอกสารที่มีโครงสร้างและไม่มีโครงสร้าง
คุณสมบัติที่สำคัญ:
เวอร์ชันไลบรารีс ++ เต็มได้รับการทดสอบบนแพลตฟอร์ม:
| เป้าหมายระบบปฏิบัติการ | ผู้ประกอบการ | สถาปัตยกรรม |
|---|---|---|
| Windows 7+ (CPU และ GPU) | MSVC 2019+ | x86, x86_64 |
| Ubuntu 14+ (CPU) | GCC 5.4+ | x86_64 |
| MacOS 10.11+ (CPU) | Apple Clang 12+ | ARM64, x86_64 |
| iOS 11+ (CPU, GPU) | Apple Clang 12+ | ARM64-V8A, x86_64 |
| Android 5.0+ (CPU), Android 7.0+ (GPU) | เสียงดัง 7+ | armeabi-v7a, arm64-v8a, x86, x86_64 |
เวอร์ชันการอนุมาน Java และ Objective-C Library ได้รับการทดสอบบนแพลตฟอร์ม:
| เป้าหมายระบบปฏิบัติการ | ผู้ประกอบการ | สถาปัตยกรรม |
|---|---|---|
| iOS 11+ (CPU, GPU) | Apple Clang 12+ | ARM64-V8A, x86_64 |
| Android 5.0+ (CPU), Android 7.0+ (GPU) | เสียงดัง 7+ | armeabi-v7a, arm64-v8a, x86, x86_64 |
ห้องสมุดถูกสร้างขึ้นด้วย CMake (เวอร์ชันที่แนะนำ 3.18 และใหม่กว่า)
เพื่อประสิทธิภาพ CPU ที่ดีที่สุดบน Windows, Linux และ MacOS เราใช้ Intel MKL
เมื่อประมวลผลบน GPU คุณสามารถเลือกใช้ cuda (เวอร์ชัน 11.2 upd.1) บน Windows หรือ Linux และ Vulkan (เวอร์ชัน 1.1.130 และใหม่กว่า) บน Windows, Linux หรือ Android
นอกจากนี้เรายังใช้ Google Test สำหรับการทดสอบและบัฟเฟอร์โปรโตคอล Google สำหรับการทำงานกับรูปแบบโมเดล ONNX
เราใช้เครื่องกำเนิดไฟฟ้า JIT XBYAK ที่เชื่อมั่นมากในการเร่งความเร็วในโปรเซสเซอร์ X86_64
ดูที่นี่สำหรับคำแนะนำในการสร้างเวอร์ชันไลบรารี C ++ สำหรับแพลตฟอร์มที่แตกต่างกัน
ดูที่นี่สำหรับคำแนะนำในการสร้าง Java และ Objective-C รุ่นที่จะเรียกใช้เครือข่ายประสาทที่ผ่านการฝึกอบรมเท่านั้น
บทช่วยสอนหลายเรื่องที่มีโค้ดตัวอย่างจะช่วยให้คุณเริ่มทำงานกับไลบรารี:
ห้องสมุดได้รับการพัฒนาโดยคำนึงถึงหลักการเหล่านี้:
ส่วนต่อประสานผู้ใช้จะถูกแยกออกจากการคำนวณระดับต่ำที่ใช้โดยเอ็นจิ้นคณิตศาสตร์
สิ่งเดียวที่คุณต้องทำคือระบุที่จุดเริ่มต้นประเภทของเอ็นจิ้นคณิตศาสตร์ที่จะใช้สำหรับการคำนวณ คุณยังสามารถเลือกที่จะเลือกเครื่องมือคณิตศาสตร์โดยอัตโนมัติตามการกำหนดค่าอุปกรณ์ที่ตรวจพบ
ส่วนที่เหลือของรหัสการเรียนรู้ของเครื่องของคุณจะเหมือนกันโดยไม่คำนึงถึงเครื่องมือคณิตศาสตร์ที่คุณเลือก
แต่ละเครือข่ายทำงานร่วมกับอินสแตนซ์ของเอ็นจิ้นคณิตศาสตร์เดียวและเลเยอร์ทั้งหมดควรถูกสร้างขึ้นด้วยเอ็นจิ้นคณิตศาสตร์เดียวกัน หากคุณเลือกเครื่องมือคณิตศาสตร์ GPU มันจะทำการคำนวณทั้งหมด ซึ่งหมายความว่าคุณไม่สามารถเลือกใช้ CPU สำหรับการคำนวณ "แสง" เช่นการเพิ่มเวกเตอร์และ GPU สำหรับการคำนวณ "หนัก" เช่นเมทริกซ์คูณ เราได้แนะนำข้อ จำกัด นี้เพื่อหลีกเลี่ยงการซิงโครไนซ์ที่ไม่จำเป็นและการแลกเปลี่ยนข้อมูลระหว่างอุปกรณ์
อินเทอร์เฟซเครื่องยนต์คณิตศาสตร์นั้นปลอดภัย อินสแตนซ์เดียวกันอาจใช้ในเครือข่ายที่แตกต่างกันและเธรดที่แตกต่างกัน
โปรดทราบว่าสิ่งนี้อาจทำให้เกิดค่าใช้จ่ายในการซิงโครไนซ์
อย่างไรก็ตามการใช้งานเครือข่ายประสาทไม่ได้ปลอดภัย เครือข่ายอาจทำงานในเธรดเดียวเท่านั้น
ไลบรารี NEOML ยังทำงานร่วมกับรุ่นที่สร้างขึ้นโดยเฟรมเวิร์กอื่น ๆ ตราบใดที่พวกเขารองรับรูปแบบ ONNX ดูคำอธิบายของ Import API อย่างไรก็ตามคุณไม่สามารถส่งออกโมเดลที่ผ่านการฝึกอบรม NEOML ไปยังรูปแบบ ONNX
ห้องสมุดใช้รูปแบบไบนารีของตัวเอง (ดำเนินการโดย CArchive , CArchiveFile ) เพื่อบันทึกและโหลดโมเดลที่ผ่านการฝึกอบรม
การประมวลผลบน GPU มักจะช่วยปรับปรุงประสิทธิภาพการทำงานทางคณิตศาสตร์อย่างมีนัยสำคัญ ไลบรารี NEOML ใช้ GPU ทั้งสำหรับการฝึกอบรมและการใช้งานโมเดล นี่คือการตั้งค่าเสริมและขึ้นอยู่กับความสามารถของฮาร์ดแวร์และซอฟต์แวร์ของระบบของคุณ
ในการทำงานกับ GPU ห้องสมุดต้องการ:
ห้องสมุด NEOML มีต้นกำเนิดในโครงสร้างพื้นฐานภายในของ Abbyy ด้วยเหตุผลหลายประการ Abbyy ใช้กรอบการทำงานข้ามแพลตฟอร์มที่เรียกว่า FineObj ด้วยเหตุนี้เวอร์ชัน Open Library จึงใช้เฟรมเวิร์กดั้งเดิมบางส่วน ดูคำอธิบายคลาสทั่วไป
Neoml มีสองไลบรารี C ++:
ห้องสมุดให้วัตถุ C ++ ที่ใช้อัลกอริทึมระดับสูงต่างๆ ประกอบด้วยหลายส่วน:
เอ็นจิ้นคณิตศาสตร์ที่ใช้สำหรับการคำนวณเป็นโมดูลแยกต่างหากที่ใช้ฟังก์ชั่นทางคณิตศาสตร์ระดับต่ำที่ใช้ในไลบรารีอัลกอริทึม ผู้ใช้ยังสามารถเรียกฟังก์ชั่นเหล่านี้ได้ แต่มักจะไม่ต้องการ
โมดูลนี้มีการใช้งานที่แตกต่างกันสำหรับแพลตฟอร์มที่แตกต่างกัน โดยเฉพาะอย่างยิ่งมีการใช้งานที่ใช้ GPU สำหรับการคำนวณ
เอ็นจิ้นคณิตศาสตร์ยังเป็นชุดของอินเทอร์เฟซ C ++ ที่อธิบายไว้ที่นี่
ดูเอกสารประกอบที่กว้างขวางของโมดูล Python บน readthedocs.io
ในการทำงานกับไลบรารีเวอร์ชันการอนุมานใน Java และ Kotlin เรามีอินเทอร์เฟซ Java
ในการทำงานกับเวอร์ชันการอนุมานของไลบรารีใน Swift และ Objective-C เราได้จัดเตรียมอินเทอร์เฟซ Objective-C
ลิขสิทธิ์© 2016-2020 Abbyy Production LLC ได้รับใบอนุญาตภายใต้ใบอนุญาต Apache เวอร์ชัน 2.0 ดูไฟล์ใบอนุญาต